这两天测试了一下板载的IIS2DH加速度传感器,这是一款低功耗的3轴加速度计,低功耗时能达到2uA,在工业领域广泛应用。从原理图上看,也是连接了SPI3接口,如图1所示:
& g0 D- G# k+ Z& f7 @1 W2 }4 q: [5 z, k5 Z% @
& F' k( g. M+ {+ A3 s; m+ Y: f+ Q" p4 w; e3 Q( `: e. H
图1
- R8 p. C: |8 J9 u, d, J 除了INT2和CS引脚需要重新配置,其他的配置和上一篇是相同的,在CubeMx中很方便重新建立工程文件。想着测试应该是很顺利的,但是能读Device ID,不能读取数据,一度不知道什么原因。隔了一天发现,是CS引脚在程序中搞错了,很多问题往往都是粗心大意导致的。来看软件,初始定义还是参考官方的例程,库也是使用官方的,这样测试比较节省时间。
* A5 b/ X! b5 x6 R& p/ b初始化如下:
! [! B# z% y, x: _; q. _, p6 Q- dev_ctx .write_reg = platform_write ;
9 x! w* q! \% T3 p3 \5 K - dev_ctx .read_reg = platform_read ;
( c8 Q% J G! A W ?; N - dev_ctx .handle = &hspi3 ;
; J& @" L1 M" b9 l6 c1 J - HAL_Delay(10);8 F0 N- g+ C) t1 O4 y; V- C
- ! ^/ G; X9 v) @8 `
- // IIS2DH_ReadID(&Obj ,&whoamI);
- {1 |( J4 t0 I7 F - iis2dh_device_id_get(&dev_ctx, &whoamI);
& g8 L3 Z4 g/ f' L2 g* [: o: a - //
. l) {( e" E- @# b5 W - // IIS2DH_Init(&Obj);0 P3 \1 C* J- v
- % M4 I5 t& f, \& ~# p8 x4 J
- iis2dh_block_data_update_set(&dev_ctx , PROPERTY_ENABLE);
9 D- |/ n3 j* Z - /* Set Output Data Rate to 1Hz */ U2 X: R) N( {5 \# i
- iis2dh_data_rate_set(&dev_ctx , IIS2DH_ODR_1Hz);
& @# S* @: L g( E5 q$ } - /* Set full scale to 2g */4 f7 ~# F$ z& u- q% t8 v
- iis2dh_full_scale_set(&dev_ctx , IIS2DH_2g);* i# F/ P5 h$ t6 g2 y1 p
- // /* Enable temperature sensor */: j: n( y$ D+ o* m5 M( q, I
- iis2dh_temperature_meas_set(&dev_ctx, IIS2DH_TEMP_ENABLE);6 x9 y# m1 l H8 E
- // /* Set device in continuous mode with 12 bit resol. */
' F+ w' Y4 \9 t - iis2dh_operating_mode_set(&dev_ctx , IIS2DH_HR_12bit);
复制代码 ( O# ~ }6 m9 n* E
7 d1 \0 b) \" O9 ~& Y4 m读取加速度数据如下:
# [( z8 t" k3 C5 C* X- iis2dh_xl_data_ready_get(&dev_ctx , &ddbyte );
0 Q D8 J5 f: A+ Q" t9 X- I - if(ddbyte )
+ u& S. \& a" B* R* F/ D4 O9 ` - {
' a0 u3 B8 F( X$ [3 J8 l - /* Read accelerometer data */
# G$ M$ p9 L/ M% W' r - memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
8 ]0 M2 }: I$ I9 F. |5 U - D' g+ m0 ]' [$ Q7 Q
- iis2dh_acceleration_raw_get(&dev_ctx , data_raw_acceleration);
. u: s4 G! w, G -
- }2 E X5 k9 a: o, f+ i4 Z% ] - acceleration_mg[0] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[0]);. T h8 w$ {0 e L) Z# t
- 5 V/ |# v. _, k& m! p
- acceleration_mg[1] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[1]);7 f* |8 ?- V. U1 K* z6 i, l
- # w# X, g# O% e) b' p* u A# C
- acceleration_mg[2] = iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[2]);5 w8 k0 g" A: ?/ f
- }
复制代码
1 p4 c/ r% k& v4 q' P, y
6 i* P2 o- R4 W* @( G3 o( U$ M! {读取温度数据如下:
- W3 Y! z# ]/ }' X$ O/ Q
+ B- M1 T0 N1 Ziis2dh_temp_data_ready_get(&dev_ctx , &ddbyte );
) U$ R# E" H8 P' p( [
f8 j& R0 ^/ F6 F5 N if (ddbyte)
w$ ~, j; I) n% z" q {
3 S& j' s5 E+ j/ \5 ` /* Read temperature data */
) n ]4 i! \* N s q memset(&data_raw_temperature, 0x00, sizeof(int16_t));
( u0 a& z+ D, l4 j5 I6 ^) T/ o iis2dh_temperature_raw_get(&dev_ctx, &data_raw_temperature);
# w: F" ^" O8 @0 C* P( e$ i7 ? temperature_degC =iis2dh_from_lsb_hr_to_celsius(data_raw_temperature);2 ?/ {* S! ]$ I8 U+ l9 M& Y4 s
} i t) ~' N4 ?6 {
. D& {* {- Q+ |* U- D% a$ c3 G- h
测量结果如图2所示:
7 o e! D# z O0 P2 t- Y
( o7 ~( {) @2 H8 y; x
: q9 i" Q6 S- }+ p7 y3 h图2
3 r" i8 G6 H" v4 o有一些功能还没测试,要深入学习才有所得。
- `- N0 g/ q3 n8 N/ L |
這個時候測功耗意義不大吧
共同学习