根据AN5444应用笔记介绍,IIS3DWB是一款高性能MEMS三轴振动传感器,具有超宽带宽低噪声等特点,SPI标准接口输出。具体的介绍可参考AN5444应用笔记。本次先对该传感器有个初步的数据读取测试,关于滤波等后面学习时再添加。1 _4 o }* e0 \% f6 V6 V% j5 Z
原理图关于该部分的说明,如图1所示:
4 s8 u2 C. u2 U
0 C6 V7 ]1 B) {/ Z2 a
图1
. i7 _) p% I, T: W8 i4 k1 W% i
- _" w& Q1 Z D$ j) r% T 先使用CubeMx建立工程,时钟等正常配置即可,因为要使用SPI通讯,所以引脚配置如图2:8 l1 h' H3 e/ @; E
& t9 }4 Y W- ~1 Y3 d; E
6 Q+ k2 }+ d4 }, N' d
: @7 Y- O9 j4 T! I图2% I" W8 D" d1 R4 j! m3 {: z
SPI外设参数的基本配置如图3:
' X; R f8 d5 d1 L& W: z
" c1 {; C, Z2 o: }
' S- s, Z/ v# w) Y% ^- |8 }8 E图3- f7 m6 E& {) p) I
然后生成项目。在官方提供的文件中有IIS3DWB的驱动,4个文件,如图4所示:9 ?5 O. i) K. v: D! i
0 G1 r- O2 ^6 N0 e4 P! u
4 Z1 L/ g$ ?" l8 n& u( g6 G/ ~4 e$ x* l图41 F$ }1 i6 o4 H
例程是参考官方github中提供的参考例程,修改了一下,增加了温度读取。初始化如下:% s; p+ Y5 x8 T1 K
- dev_ctx.write_reg = platform_write;0 j5 i4 q* Y. n! g; i8 i& E3 a
- dev_ctx.read_reg = platform_read;
' Y) v3 B" _1 V1 Y# g - dev_ctx.handle = &hspi3;
& m" y- U6 I% u) U8 h* H - 4 V$ B& r3 A" {7 x; s
- HAL_Delay (10);
( T* ~6 ~! E C* b% N1 l* W, p - iis3dwb_device_id_get(&dev_ctx, &whoamI);1 w! b3 T" A! v! h: a- _
- // 复位设备
5 a1 s3 }$ q& z - iis3dwb_reset_set(&dev_ctx, PROPERTY_ENABLE);
8 G- `5 ~0 d7 w4 P2 h6 f+ d: O+ u - // 配置加速度计$ D2 ^ T( K- b& m4 y
- iis3dwb_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);8 [5 u9 ]$ l- W/ L3 Z. E
- iis3dwb_xl_data_rate_set(&dev_ctx, IIS3DWB_XL_ODR_26k7Hz);
, W7 `4 p8 A1 [: m - iis3dwb_xl_full_scale_set(&dev_ctx, IIS3DWB_2g);
复制代码
5 _0 |- [( {5 R5 {2 U2 x$ @$ d8 v1 E8 \+ r. c
对于加速度值和温度的读取程序如下:
% c' L/ z! y W' B7 i1 d- // 读取加速度数据$ o* m6 t$ G7 u1 k
- # P: O# p% q& |) p$ h
- iis3dwb_xl_flag_data_ready_get(&dev_ctx, &drdy);//读取状态值
# @) l5 n' w9 h0 j' D - if (drdy) {& O' f1 G+ G1 i- h4 T
- & S& t: o* {" a/ T" |
- iis3dwb_acceleration_raw_get(&dev_ctx, data_raw);
4 ]2 B) j# }; o. D( H& P8 S -
+ W& w+ s- F: S9 c, `6 x - acceleration_mg[0] = iis3dwb_from_fs2g_to_mg(data_raw[0]);
& q. }# q& v1 g0 z& J6 n% O, D - acceleration_mg[1] = iis3dwb_from_fs2g_to_mg(data_raw[1]);) }$ n) R, j7 U8 ]# v. H" J
- acceleration_mg[2] = iis3dwb_from_fs2g_to_mg(data_raw[2]);
" J7 T' ~' w5 R+ H8 h - }; x. X; n4 p5 T- m. k6 ~
- iis3dwb_read_reg (&dev_ctx ,IIS3DWB_OUT_TEMP_L ,temp_data ,2);1 I! d9 _8 ]' Y5 H& u
- temp_raw = (int16_t )((temp_data [1]<<8) | temp_data[0]);
1 Z6 y7 I, n; e1 {) {3 W - temp_cel = temp_raw /256+25;
0 |+ L6 f, Q; p - 6 L" j& b- L# n0 x
- HAL_Delay(1000); // 每秒读取一次数据
复制代码 ; x. c5 L* g5 \
/ V0 N+ Q: Q/ Q/ V' ?; J, l
测试结果如图5所示:
. C; u. I2 v, ~& f0 ?
! N* g5 o4 ]; b, M
3 n* e$ e3 A- o0 c2 o& ]2 y2 o图5( w0 z6 R7 q2 I5 f
Device ID和温度值是正确的,滤波,FIFO等功能的增加一边理解一边添加测试。
; L) `9 [6 Q; {: ?+ v& P$ p, i5 M7 ]4 Z9 D/ |4 d
' Y! t5 T' h2 S* s# w9 C( Y |
感谢分享
这个板子肯定可以吧,性能满强的
确实,大佬
感谢分享,学习
你好博主,麻烦问一下您配置这个振动传感器的时候是怎么配置的呢,我看官方的应用笔记上面说明片选在拉低的时候才能用spi,但我配置之后仍然无法读到数据(可以的话能麻烦您分享一下源码我学习一下吗,谢谢您😄 )