这两天测试了一下板载的IIS2DH加速度传感器,这是一款低功耗的3轴加速度计,低功耗时能达到2uA,在工业领域广泛应用。从原理图上看,也是连接了SPI3接口,如图1所示:3 Z5 w6 S" b. U
3 L. l$ T. B' Y2 p$ A; Q
' \! q; u1 ]! @6 N+ r4 o- ^
- C3 ?( I7 V; Z$ }5 V3 f
图14 {$ R" `; I: Y/ A4 ?" w
除了INT2和CS引脚需要重新配置,其他的配置和上一篇是相同的,在CubeMx中很方便重新建立工程文件。想着测试应该是很顺利的,但是能读Device ID,不能读取数据,一度不知道什么原因。隔了一天发现,是CS引脚在程序中搞错了,很多问题往往都是粗心大意导致的。来看软件,初始定义还是参考官方的例程,库也是使用官方的,这样测试比较节省时间。3 J* z6 i( l0 K# W! N; v1 o
初始化如下:! ~7 u% @* v) f3 j
- dev_ctx .write_reg = platform_write ;/ n# A' P: r1 c1 S7 K+ Y2 _3 A
- dev_ctx .read_reg = platform_read ;
+ l! C& n4 w% ~" y% j% T - dev_ctx .handle = &hspi3 ;
8 [9 X& U' a- S' y5 n- Y - HAL_Delay(10);
( z/ ^7 ^6 O6 i: ^, K- @ |% i - 8 ]# Z% i' p! z. u
- // IIS2DH_ReadID(&Obj ,&whoamI);
- Q# p' Q! F1 e9 N" f2 O - iis2dh_device_id_get(&dev_ctx, &whoamI);
$ T- d. k) u- K2 h- `3 M - //
& q# }; c: c4 b& T8 C7 P7 E - // IIS2DH_Init(&Obj);2 C0 i# c& N$ f, ^/ ^
$ ^) s1 a: s I7 o* L7 H9 G- iis2dh_block_data_update_set(&dev_ctx , PROPERTY_ENABLE);
: _$ @* J5 Z! A f! n/ j, t# | - /* Set Output Data Rate to 1Hz */
+ y) D+ l2 ~9 ]8 l0 L6 m% \ - iis2dh_data_rate_set(&dev_ctx , IIS2DH_ODR_1Hz);% F: {. W$ r6 o* ~" x8 I
- /* Set full scale to 2g */
. j" |) C, A2 ?- \) a7 _( ~5 } - iis2dh_full_scale_set(&dev_ctx , IIS2DH_2g);' H% E+ U: b0 v; w2 v
- // /* Enable temperature sensor */: ~' ]. N- i8 S. I$ a
- iis2dh_temperature_meas_set(&dev_ctx, IIS2DH_TEMP_ENABLE);
6 {, Q: Q( c9 F/ Q5 J9 }9 j) y% D - // /* Set device in continuous mode with 12 bit resol. */6 J* \* P, [" u4 K4 S
- iis2dh_operating_mode_set(&dev_ctx , IIS2DH_HR_12bit);
复制代码
3 `, D* A3 L. \+ B0 r" [3 d; D0 s6 a- P6 _; K
读取加速度数据如下:
+ l5 S# V: [4 k7 W4 {- iis2dh_xl_data_ready_get(&dev_ctx , &ddbyte );! F c3 j& _/ o0 O7 u
- if(ddbyte )
7 j$ Q; G! P! {: Z: g2 \% j - {
$ g% H7 v7 A) y3 g/ s) L8 k7 M - /* Read accelerometer data */1 r( }+ |3 d- O4 {: M9 m, l1 B
- memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
& G0 L7 l0 {: e. |& } -
6 B, [1 X( e7 H6 o8 A1 R - iis2dh_acceleration_raw_get(&dev_ctx , data_raw_acceleration);
& d0 S: F$ b% K! L" ^1 M' @/ A -
' T2 J; I0 E& }1 p9 E9 b8 x - acceleration_mg[0] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[0]);
9 m5 \' B7 F. M - & k- E# n2 A( L; p
- acceleration_mg[1] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[1]);
r# y! L, v1 D. A/ G2 n- T - - H) m1 A) e9 f- r6 F4 V
- acceleration_mg[2] = iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[2]);
7 [# Q3 P8 L& }9 f3 W, M* ~6 D7 O/ C - }
复制代码
/ [ E8 w+ B& Z& s, U4 b4 y5 { Z! ^0 G# U) ?2 c( K# x
读取温度数据如下:
F9 c i" d L6 }2 o {
* A4 E$ F/ p8 i! x7 M$ Liis2dh_temp_data_ready_get(&dev_ctx , &ddbyte );
" S1 h$ c% d) e' r' p$ V. I5 t1 o/ t1 U8 O/ n* A+ y+ {
if (ddbyte) 6 K w: j7 i$ p& t I0 W5 x
{( q: L. p, s9 f# T4 ^* [
/* Read temperature data */9 p' I u/ d4 D* F4 S! G) l2 c
memset(&data_raw_temperature, 0x00, sizeof(int16_t));
# @' d1 s# e# p/ v$ g: o) C* Y) @ iis2dh_temperature_raw_get(&dev_ctx, &data_raw_temperature);
0 q x# b% i+ O, _; k$ y7 t temperature_degC =iis2dh_from_lsb_hr_to_celsius(data_raw_temperature);
. l: |) U% r! u2 l9 z }
. N/ w. C2 `" ~5 Q9 O/ u! F" Z$ I4 r6 [6 }- |" I. x5 M/ u; I5 `
测量结果如图2所示:
/ E4 m! W7 Z3 J, F4 |
: y3 }) E/ m) i
$ d7 c$ g# l' b8 M6 t$ z1 g
图22 O/ d4 J2 D* X9 N# P
有一些功能还没测试,要深入学习才有所得。4 J' y/ o% T/ f% ^
|
這個時候測功耗意義不大吧
共同学习