这两天测试了一下板载的IIS2DH加速度传感器,这是一款低功耗的3轴加速度计,低功耗时能达到2uA,在工业领域广泛应用。从原理图上看,也是连接了SPI3接口,如图1所示:& x/ ?0 l1 c* k" g! i% d
( ]' _8 Z- n% q3 U2 n) P3 g% _
# f# f' g5 _- A9 Y5 b$ R; M
5 s. C7 f5 r Y2 M9 Q图11 P, S) @7 l: b' M2 g {) }2 c
除了INT2和CS引脚需要重新配置,其他的配置和上一篇是相同的,在CubeMx中很方便重新建立工程文件。想着测试应该是很顺利的,但是能读Device ID,不能读取数据,一度不知道什么原因。隔了一天发现,是CS引脚在程序中搞错了,很多问题往往都是粗心大意导致的。来看软件,初始定义还是参考官方的例程,库也是使用官方的,这样测试比较节省时间。& f+ G. Z1 I! F7 o' x3 J
初始化如下:+ }% J0 t$ L( M H* R
- dev_ctx .write_reg = platform_write ;
9 n$ U; b; M( w& r! Q - dev_ctx .read_reg = platform_read ;) u# {6 n3 `! }7 f8 f0 |0 Q% ^
- dev_ctx .handle = &hspi3 ;
+ E4 c* c% a6 R! m; X - HAL_Delay(10);
$ |) Q) X- I+ u& H, |9 ^ - 3 u. h# Y" N2 x0 \7 s8 L
- // IIS2DH_ReadID(&Obj ,&whoamI);
! J6 Q! k# T1 `& I' o M2 \ - iis2dh_device_id_get(&dev_ctx, &whoamI);
: Z' V1 K9 p0 D9 T - // 9 A: U+ J1 V$ I* R, x, M
- // IIS2DH_Init(&Obj);6 S" v3 Y# s* a. y! k! v. j
- 0 h4 ]; r f9 _/ v+ A
- iis2dh_block_data_update_set(&dev_ctx , PROPERTY_ENABLE);
! ~0 Z6 Y+ V: I% C - /* Set Output Data Rate to 1Hz */
' K7 D2 h0 D# h( U - iis2dh_data_rate_set(&dev_ctx , IIS2DH_ODR_1Hz);
8 u: O: N7 K9 w+ J* P' x8 P$ t - /* Set full scale to 2g */( b& ?% {/ ~, O! W m! r: R* n
- iis2dh_full_scale_set(&dev_ctx , IIS2DH_2g);
4 M" C) E& ^" }' l - // /* Enable temperature sensor */
4 C; k" i% s3 u4 p/ h% y+ O7 U. I - iis2dh_temperature_meas_set(&dev_ctx, IIS2DH_TEMP_ENABLE);! R4 Z$ i8 x( W+ K! C/ \! F
- // /* Set device in continuous mode with 12 bit resol. */
/ J, m4 O# z3 c/ P - iis2dh_operating_mode_set(&dev_ctx , IIS2DH_HR_12bit);
复制代码 2 V1 u! i* R9 H3 u. e$ O
5 b. _$ H; K2 Z! ^* ~: K m( ~8 J
读取加速度数据如下:
6 F6 t/ q& j a% z. T- p; C- iis2dh_xl_data_ready_get(&dev_ctx , &ddbyte ); r1 h2 ~9 H/ h% U v" D1 d
- if(ddbyte )
1 C! v) G) [8 B5 K- n/ q% B - {, z* J0 V. m& S! L& t4 E
- /* Read accelerometer data */
/ L: @3 ^+ J$ Q; T& e: P; q - memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));" w: |* F5 E# ?: v& J* P
-
1 C; p1 [% I' I% n! Y$ O. o$ P - iis2dh_acceleration_raw_get(&dev_ctx , data_raw_acceleration);
* k$ X3 Z! ^8 }& @ -
7 w* R2 ?# U; s( k" I9 c - acceleration_mg[0] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[0]);$ k, c: m: d- W( F" O/ z% R: K
-
3 B1 l: B! I0 ? M- p - acceleration_mg[1] =iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[1]);
% {$ x6 S) M+ e - ' Q5 A% K% A/ X7 s/ B7 L: I/ H
- acceleration_mg[2] = iis2dh_from_fs2_hr_to_mg(data_raw_acceleration[2]);
9 V) I; k. Y1 S3 @ - }
复制代码
6 X8 p! h0 C! _ L+ p7 T9 J- M7 A3 c( {' g: V3 n, |+ |+ `
读取温度数据如下:# E8 ^7 W7 s9 I% J. x
7 V. ^5 z# M" v; ?iis2dh_temp_data_ready_get(&dev_ctx , &ddbyte );! [5 {$ l7 ^. l, r" d$ D
6 ~9 C* \4 ?7 \9 q9 C! B* k$ o if (ddbyte) 3 G5 }. K) x( O( q8 G0 B
{
) x7 N. w* X/ B3 _5 L5 F! l /* Read temperature data */
4 B, C5 x1 ]: h" y" X memset(&data_raw_temperature, 0x00, sizeof(int16_t));7 |5 c7 T5 h% _+ [
iis2dh_temperature_raw_get(&dev_ctx, &data_raw_temperature);, c9 @# y$ `: U2 H$ H. [. D
temperature_degC =iis2dh_from_lsb_hr_to_celsius(data_raw_temperature);: v" [8 s2 c5 X0 P/ k; Z
}
' r- k8 t( z7 r: E5 I% v. H
0 p/ M1 l- _; g" s$ F测量结果如图2所示:
" k' c6 Y+ q" A; i2 Y
% o. o* ]" q8 B
9 s& c! G3 m* w. B! d' l
图2
# ]& |0 z8 B, r3 R8 _有一些功能还没测试,要深入学习才有所得。( M9 v' X* X' V6 ]* G
|
這個時候測功耗意義不大吧
共同学习