根据AN5444应用笔记介绍,IIS3DWB是一款高性能MEMS三轴振动传感器,具有超宽带宽低噪声等特点,SPI标准接口输出。具体的介绍可参考AN5444应用笔记。本次先对该传感器有个初步的数据读取测试,关于滤波等后面学习时再添加。
5 Z1 P2 C# b o5 E" Q 原理图关于该部分的说明,如图1所示:
/ u! u: P9 G- }0 j2 l6 I
/ ^* N, p) S6 b; p; _
图1
$ p# `( d( S: Z5 C
. k% y v' G, w& H 先使用CubeMx建立工程,时钟等正常配置即可,因为要使用SPI通讯,所以引脚配置如图2:3 p3 K7 V) k# _8 X4 x" x# @
1 H* M( _/ J7 h, @
N& \$ R- p5 J: F+ T1 P( i$ ~( T# p; M* B
图2" ?& A* [( j( [" t. m _" x
SPI外设参数的基本配置如图3:/ x- j% w5 l/ D& S& S3 t
w0 ~+ m |+ S, S9 e: f" u- H" i' z, v |
图3& W f5 c+ s* N. A' S g, u/ T4 B
然后生成项目。在官方提供的文件中有IIS3DWB的驱动,4个文件,如图4所示:
/ H) F) V8 I) q. h4 ?) M
8 L1 v I- u; O0 g6 a0 l3 v3 ^
8 f: x6 c- b P7 D4 Z
图4( v$ V9 p8 F. g6 T" D2 N K. p
例程是参考官方github中提供的参考例程,修改了一下,增加了温度读取。初始化如下:
5 k8 s% d, D# A5 }$ L( C- dev_ctx.write_reg = platform_write;7 N- U% | b) E f2 [: a
- dev_ctx.read_reg = platform_read;6 t3 ]6 M: X" [) I
- dev_ctx.handle = &hspi3;4 y9 e3 E I* s* ?% J
- : q! a3 ] b G, H" Y7 m. R2 e
- HAL_Delay (10);. t7 j8 t3 w5 z* n: p" P
- iis3dwb_device_id_get(&dev_ctx, &whoamI);: G6 |8 i$ p6 T3 G3 S- d- t4 U
- // 复位设备* w0 s' C4 F- w9 X: s
- iis3dwb_reset_set(&dev_ctx, PROPERTY_ENABLE);* d0 _$ T2 T% R' i/ S. h
- // 配置加速度计
7 H! X1 a2 `6 C; f - iis3dwb_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);3 r/ c$ t, u7 ?1 e7 y+ }; V
- iis3dwb_xl_data_rate_set(&dev_ctx, IIS3DWB_XL_ODR_26k7Hz);
9 W4 N- a$ j" m6 w' C - iis3dwb_xl_full_scale_set(&dev_ctx, IIS3DWB_2g);
复制代码 3 @% @. A0 {& E8 W
0 W6 i! Z& {9 ?+ G$ p B
对于加速度值和温度的读取程序如下:
1 O4 _0 X' w5 p# e# x( K- // 读取加速度数据
, ]: q. h' |( D; } - , I* Y; u/ O/ R3 D. F& }0 }
- iis3dwb_xl_flag_data_ready_get(&dev_ctx, &drdy);//读取状态值
3 g7 j: j3 c* |: A" z9 w - if (drdy) {
: J C7 D( m; i- x% T3 H -
- g+ z1 f& \; U4 Q0 G! Z - iis3dwb_acceleration_raw_get(&dev_ctx, data_raw);* @$ R% y% k, q5 e! F
-
, t p5 Y4 E3 T( X$ j - acceleration_mg[0] = iis3dwb_from_fs2g_to_mg(data_raw[0]);0 i+ `& k9 b* r0 i
- acceleration_mg[1] = iis3dwb_from_fs2g_to_mg(data_raw[1]);% v: w$ x5 Q$ N8 y* t. s7 P
- acceleration_mg[2] = iis3dwb_from_fs2g_to_mg(data_raw[2]);. O; s1 Z$ P8 _5 {& L
- }0 O: ^4 [; D, z9 J
- iis3dwb_read_reg (&dev_ctx ,IIS3DWB_OUT_TEMP_L ,temp_data ,2);
3 b: z# A1 W% p& g7 ` - temp_raw = (int16_t )((temp_data [1]<<8) | temp_data[0]);0 ]5 ^. y. A1 C. y0 e2 w" f! K. `
- temp_cel = temp_raw /256+25;
5 @* X$ y7 q8 u! Q2 I( }+ c* k& _ - , D- t x8 [ B. U
- HAL_Delay(1000); // 每秒读取一次数据
复制代码- / X1 I, F K/ P2 U) V* M2 d' ^
复制代码
: s, r) Y+ K) l, J0 U' w) h
1 o6 c' \3 `" j, v p 测试结果如图5所示:& f; x# A7 y% H& y4 `
7 L. L: f% k0 ?4 t$ p
- V1 ~' n) s" I7 V* v9 [4 K; f: b图5
6 v; J S. D4 h% J" E/ ~# {Device ID和温度值是正确的,滤波,FIFO等功能的增加一边理解一边添加测试。4 a- k% u3 e. ~( [' b0 q
' O4 P/ E4 l5 q% V0 [0 u3 w, O6 ~( P6 X3 u4 {+ e# N" F8 j1 o
|