根据AN5444应用笔记介绍,IIS3DWB是一款高性能MEMS三轴振动传感器,具有超宽带宽低噪声等特点,SPI标准接口输出。具体的介绍可参考AN5444应用笔记。本次先对该传感器有个初步的数据读取测试,关于滤波等后面学习时再添加。
; [& O2 {! [( \. d5 H 原理图关于该部分的说明,如图1所示:
6 j' y& Q9 m. x, d8 {
9 ^" r+ L, k9 s, y图1+ f( _( ]6 G4 c$ _! `8 O# j* o
8 J3 ~6 f: l' M
先使用CubeMx建立工程,时钟等正常配置即可,因为要使用SPI通讯,所以引脚配置如图2:9 o6 k* l1 N) d! J& W" R+ x
2 O# l4 X9 R' T) |7 n9 r3 w
) I! s: Q" l& p3 Q# \
' e$ A( Q3 b- E
图2
* L7 L# a% N* r SPI外设参数的基本配置如图3:
4 @) F6 |7 Y O. x, h
6 X9 Y+ t- c4 o, p( l" ?! p
7 z+ e- T. t: M3 N! m
图3
% ~! H: S: n% G" D7 o8 u9 J 然后生成项目。在官方提供的文件中有IIS3DWB的驱动,4个文件,如图4所示:
0 I3 C; f( g% d* ~0 b2 r
# x3 D9 N3 }8 E2 ]( |/ e' |! \
; B/ p5 V# V- l图4. a" Y, L& A" g: A: ]
例程是参考官方github中提供的参考例程,修改了一下,增加了温度读取。初始化如下:
9 x2 B% ^1 t5 r. r$ x; G- dev_ctx.write_reg = platform_write;, D3 a" d# f& r; S
- dev_ctx.read_reg = platform_read;' w* j1 p" H4 n; L
- dev_ctx.handle = &hspi3;5 E* d# q2 j2 P! ]! z
- - k/ ^8 \, [7 l5 b0 O, U/ f
- HAL_Delay (10);+ `2 H: @$ G! { @9 i7 d0 `
- iis3dwb_device_id_get(&dev_ctx, &whoamI);% G6 u& P+ s: w6 q
- // 复位设备/ [9 d8 o! W5 |3 c6 C% l8 I( P
- iis3dwb_reset_set(&dev_ctx, PROPERTY_ENABLE);
8 g a1 _# U$ T& o) Z/ P3 d - // 配置加速度计1 K7 Z |7 A2 b* X! p
- iis3dwb_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);/ v, a" R& n. D8 d! c( N
- iis3dwb_xl_data_rate_set(&dev_ctx, IIS3DWB_XL_ODR_26k7Hz);
h* o- r3 ~& Q& d e- G' K - iis3dwb_xl_full_scale_set(&dev_ctx, IIS3DWB_2g);
复制代码 : ~. D3 \; `- T9 x
4 N8 Z/ M J6 C3 r" U# c* x! J. ] 对于加速度值和温度的读取程序如下:
$ c2 c/ I* }% m B- // 读取加速度数据
3 R- e& ]$ _8 J! d! D" R" { - , Q- t$ e" k7 q, |, J, M% g' L# U+ ^
- iis3dwb_xl_flag_data_ready_get(&dev_ctx, &drdy);//读取状态值
# q; e; A, g9 b Z! B - if (drdy) {
2 W. W& Y( w7 Z3 G) R, P8 g, t! v - 0 y( j$ V2 j( C+ z
- iis3dwb_acceleration_raw_get(&dev_ctx, data_raw);
6 a; k- v% v4 n9 o -
- N# I; R; b* i \. N - acceleration_mg[0] = iis3dwb_from_fs2g_to_mg(data_raw[0]);
+ ]4 o, F" w% H- S+ n - acceleration_mg[1] = iis3dwb_from_fs2g_to_mg(data_raw[1]);
2 G% A8 s9 I4 E+ M V - acceleration_mg[2] = iis3dwb_from_fs2g_to_mg(data_raw[2]);
2 k0 k# A6 |' O0 M/ t - }
' X7 \4 N' f9 a6 Q6 V& ]9 K2 e - iis3dwb_read_reg (&dev_ctx ,IIS3DWB_OUT_TEMP_L ,temp_data ,2);0 f2 o9 o8 R. a
- temp_raw = (int16_t )((temp_data [1]<<8) | temp_data[0]);$ ^+ I7 U: i$ v% Y4 H2 q5 L3 @' Y* C
- temp_cel = temp_raw /256+25;1 m0 v: s5 ], x, x
: E+ x2 Y0 y8 X- HAL_Delay(1000); // 每秒读取一次数据
复制代码
0 C8 \* I3 \: G8 j
8 u7 ]2 a) n* [, C% Z: u5 K 测试结果如图5所示:
- V+ H- z8 S6 S2 d/ w6 ^0 O
1 T! p" j0 u% Z e t' }% o
0 v- N. c' |9 U8 Q7 ~8 D9 {图5
; l+ t$ i( j: Y" B# z, FDevice ID和温度值是正确的,滤波,FIFO等功能的增加一边理解一边添加测试。
/ n7 E2 ]' }8 X# j4 n- Q6 a
% s0 E) Q( @# j8 j3 b3 y
9 V$ s# m1 J: g+ }9 y4 `/ n |
感谢分享
这个板子肯定可以吧,性能满强的
确实,大佬
感谢分享,学习