这两天测试了一下板载的IIS2DH加速度传感器,这是一款低功耗的3轴加速度计,低功耗时能达到2uA,在工业领域广泛应用。从原理图上看,也是连接了SPI3接口,如图1所示:) d2 m: o1 g$ g" ]' l) n9 i0 }- E
$ `" \ r, ]8 K0 `/ G; L
6 Y" e8 }/ i+ t- v6 w! m" ~8 b( W w+ [+ T! |
图1% f' G w) d* P3 W8 _' r
除了INT2和CS引脚需要重新配置,其他的配置和上一篇是相同的,在CubeMx中很方便重新建立工程文件。想着测试应该是很顺利的,但是能读Device ID,不能读取数据,一度不知道什么原因。隔了一天发现,是CS引脚在程序中搞错了,很多问题往往都是粗心大意导致的。来看软件,初始定义还是参考官方的例程,库也是使用官方的,这样测试比较节省时间。5 v3 z$ j. `: j) _7 T
初始化如下:1 P5 u0 e9 j* W/ N' F
- dev_ctx .write_reg = platform_write ;& m& p3 P2 L; R' \6 j/ P
- dev_ctx .read_reg = platform_read ;
; y- Q6 }+ a* q/ Z/ y8 Q - dev_ctx .handle = &hspi3 ;
( a. \% z2 k' x {( K - HAL_Delay(10);
A1 f' ^( v9 Z, Q( ] - / x G* ~$ G; x1 ]$ Z
- // IIS2DH_ReadID(&Obj ,&whoamI);
1 s D3 F$ J5 N; T' s - iis2dh_device_id_get(&dev_ctx, &whoamI);3 @* Z/ S# [( ]: `. H
- //
! q7 k I% s6 H1 ?8 {- Z - // IIS2DH_Init(&Obj);
( e0 s- T# Y& [& ^1 t3 u$ N) B
4 I: _4 e2 K: C& Z# \8 E, m! s7 ^- iis2dh_block_data_update_set(&dev_ctx , PROPERTY_ENABLE);
- ^* I. w. v2 O, T( s - /* Set Output Data Rate to 1Hz */
- p& R: m' m8 O$ }8 C* t' I, E- M - iis2dh_data_rate_set(&dev_ctx , IIS2DH_ODR_1Hz);
& [* H2 T+ m/ W - /* Set full scale to 2g */
+ _2 i7 B- [/ ^ - iis2dh_full_scale_set(&dev_ctx , IIS2DH_2g);2 J6 Q# M& b" d, U
- // /* Enable temperature sensor */% h2 o" P3 i% d: ]' K8 x
- iis2dh_temperature_meas_set(&dev_ctx, IIS2DH_TEMP_ENABLE);6 c/ y$ x8 x& l8 T* v1 E" t
- // /* Set device in continuous mode with 12 bit resol. *// A) k2 l2 d t6 h
- iis2dh_operating_mode_set(&dev_ctx , IIS2DH_HR_12bit);
复制代码 M& w. o, P1 M: l, T: @; p, ?
1 P) o: U4 H, [3 _! ~; ~ O读取加速度数据如下:
' _3 C8 g* y9 _$ R- iis2dh_xl_data_ready_get(&dev_ctx , &ddbyte );
" H* j. O0 g$ l4 i+ _4 G) D: ? - if(ddbyte )
! }- v: F$ Z$ J' b; d% a - {* T1 k7 E g+ O; X6 `
- /* Read accelerometer data */
2 z* W& g5 B# M* [8 X - memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));( Q0 B& _0 e K
-
0 Z1 G& |7 R' ` - iis2dh_acceleration_raw_get(&dev_ctx , data_raw_acceleration);' a5 c- Q8 n; C) P. R+ @! _
- " M* C/ m6 q1 P3 y4 u
- acceleration_mg[0] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[0]);
7 C+ G% W% U' \% M, H3 f# b; f - 5 m8 K3 z3 t" e5 d& d6 Z8 X+ y
- acceleration_mg[1] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[1]);. e9 G, L% g% S+ u4 Z9 G
-
5 ]7 t" u M0 ^9 ?4 z5 g3 d& G - acceleration_mg[2] = iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[2]);
8 ~( C4 R* s) d! `/ \' M - }
复制代码
& V3 e. `5 E$ N6 l6 g3 u
# N* w. b: F/ O8 G读取温度数据如下:
1 H) F/ i$ f( W$ @) L9 m" d. }, T6 |5 A6 a0 E7 c
iis2dh_temp_data_ready_get(&dev_ctx , &ddbyte );
: V* u, p6 g. U( @1 s: x
; S( v: w0 A' U2 [ if (ddbyte) & r" M# E3 t& _+ u& o) |
{
1 e7 f- b+ o; K! n& } /* Read temperature data */9 d! D" Y4 C, m& M
memset(&data_raw_temperature, 0x00, sizeof(int16_t));
0 ~* V! l2 M0 g2 d1 ?% R3 m+ ] iis2dh_temperature_raw_get(&dev_ctx, &data_raw_temperature);
; ?7 |" J3 [" c. @7 Q temperature_degC =iis2dh_from_lsb_hr_to_celsius(data_raw_temperature);- s8 g. f1 k9 o7 J6 M: S2 d, k, E
}
( ?! t |& v8 ^+ y f9 @+ F& g, W8 ~, `" l: Y' @9 |9 Z
测量结果如图2所示:" G5 S: B; Y# K0 B% D, t
2 E3 n, Q3 s. f$ Y1 ?/ H# M
$ F. U6 m/ J; D# Q% G' F图2
6 P$ j, b8 t2 u2 ?- p* I, f有一些功能还没测试,要深入学习才有所得。
0 D# ^ g1 T( v1 e! V/ H2 Z |
這個時候測功耗意義不大吧
共同学习