这两天测试了一下板载的IIS2DH加速度传感器,这是一款低功耗的3轴加速度计,低功耗时能达到2uA,在工业领域广泛应用。从原理图上看,也是连接了SPI3接口,如图1所示:
% k. e! n8 N7 o( z/ ^9 n* B& R+ S2 D( w. e! V* f6 A5 v6 G
& I* n) |& M7 u
! t' s. F) |* Z3 d7 G/ Y图1
2 b1 \& e% J2 S( T, e* @) l 除了INT2和CS引脚需要重新配置,其他的配置和上一篇是相同的,在CubeMx中很方便重新建立工程文件。想着测试应该是很顺利的,但是能读Device ID,不能读取数据,一度不知道什么原因。隔了一天发现,是CS引脚在程序中搞错了,很多问题往往都是粗心大意导致的。来看软件,初始定义还是参考官方的例程,库也是使用官方的,这样测试比较节省时间。- U+ r. S0 d/ J
初始化如下:$ f8 q. u, k6 N. o
- dev_ctx .write_reg = platform_write ;. L6 F7 f: n& j( d; J
- dev_ctx .read_reg = platform_read ;1 p4 M( |7 u+ ]' y a
- dev_ctx .handle = &hspi3 ;
3 E% d( j4 [( Q - HAL_Delay(10);, K, l. H! U' c1 Z: z; A& R& {% Z+ A
-
. k$ Q% Q% C5 Z5 D - // IIS2DH_ReadID(&Obj ,&whoamI);8 {9 Y) O1 Z: H% X/ m, y4 C
- iis2dh_device_id_get(&dev_ctx, &whoamI);
1 @! z" `' ?" d" o6 x/ ^$ X - //
# V$ N5 s- k C6 m$ S. g - // IIS2DH_Init(&Obj);/ X4 Q: C4 H$ O# v; X" D1 n- [7 H1 ]
+ i2 T$ H3 }# l: N/ C- iis2dh_block_data_update_set(&dev_ctx , PROPERTY_ENABLE);0 T! s: _2 Y% s: i0 P M( e, m
- /* Set Output Data Rate to 1Hz */3 B1 A, Y( _& G: \
- iis2dh_data_rate_set(&dev_ctx , IIS2DH_ODR_1Hz);
; F* d2 W" w s8 ~" q* t - /* Set full scale to 2g */
0 I: n* w6 y+ S p0 s* W) F - iis2dh_full_scale_set(&dev_ctx , IIS2DH_2g);
8 h5 m* N9 G" O4 Z9 l6 \ - // /* Enable temperature sensor */' H8 w( u6 j, h- I- y+ t9 D
- iis2dh_temperature_meas_set(&dev_ctx, IIS2DH_TEMP_ENABLE);
2 a/ l. Q, f/ @9 ] - // /* Set device in continuous mode with 12 bit resol. */
0 j/ }. a; j+ ]( K - iis2dh_operating_mode_set(&dev_ctx , IIS2DH_HR_12bit);
复制代码
9 U6 I- Z' n+ H$ t$ E# A
: A$ u+ U: _ Q% _3 R6 f% P读取加速度数据如下:& G1 T) A. ~% C3 R9 Q* q9 L
- iis2dh_xl_data_ready_get(&dev_ctx , &ddbyte );
9 K) o4 t& T% P( _" @0 l: J/ \+ q - if(ddbyte )
) X* h( c4 h* [7 M! e; m5 x: E - {
2 g! Q8 s* h; I, N0 U3 \: y0 Q3 v - /* Read accelerometer data */
: H4 q) l) i9 r - memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
3 Q4 K2 C4 F |$ I' S# g6 q -
4 |* e) b/ R) ]1 u6 U* m: ` - iis2dh_acceleration_raw_get(&dev_ctx , data_raw_acceleration);
( r, a+ P$ G5 b, r8 Z7 d1 B! C -
7 B* E: r$ q3 L2 q& p - acceleration_mg[0] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[0]);$ m7 E) h9 s8 O: ]3 `
-
6 K4 r' K& }- \: H - acceleration_mg[1] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[1]);
9 I/ R& s% K. h/ ^" }% l8 r - 4 K+ F$ m8 m7 J+ v- c% B
- acceleration_mg[2] = iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[2]);2 B Z+ v; L9 j* I6 K. {' }8 P; p
- }
复制代码 / v5 ?! W# _/ G! _1 s
5 R: ]* [1 o e读取温度数据如下:
* E. p3 D( F% e. ?/ z4 z. J4 v r, K+ X L
iis2dh_temp_data_ready_get(&dev_ctx , &ddbyte );
+ X" r/ Q: a& ]# e8 s6 P& Z5 b$ a1 S7 u1 g5 J
if (ddbyte)
; l: y4 e) q1 R1 i7 Q; j {2 Z* f& U. e+ ? ]
/* Read temperature data */) V* e7 l2 W3 W; }" {$ j% l% |1 V) F
memset(&data_raw_temperature, 0x00, sizeof(int16_t));" y$ }" Z- T! u4 J
iis2dh_temperature_raw_get(&dev_ctx, &data_raw_temperature);0 b: X; B; {7 a u, ?/ H
temperature_degC =iis2dh_from_lsb_hr_to_celsius(data_raw_temperature);
9 W [' T G: J, S1 I% R6 @, M }2 V3 r$ z2 Z. Y+ ?0 f
U/ }6 e6 H7 _6 V1 N1 c9 A
测量结果如图2所示:. ~6 I7 f2 G4 Z
3 d1 V& g2 P' S/ s0 V0 F
! G1 J8 [; N- Q2 Q: @& x图2
' M: ?9 s4 j8 O/ q有一些功能还没测试,要深入学习才有所得。$ Y s+ q @# L( b s
|
這個時候測功耗意義不大吧
共同学习