根据AN5444应用笔记介绍,IIS3DWB是一款高性能MEMS三轴振动传感器,具有超宽带宽低噪声等特点,SPI标准接口输出。具体的介绍可参考AN5444应用笔记。本次先对该传感器有个初步的数据读取测试,关于滤波等后面学习时再添加。
& C+ v6 U9 y5 p& O7 g 原理图关于该部分的说明,如图1所示:
6 v( M8 d2 k, j# p
; N% G. @& F( h$ ?7 U2 M图1
/ \( b% c2 W- f+ }; D" G
8 W" d+ Z. t# I. l 先使用CubeMx建立工程,时钟等正常配置即可,因为要使用SPI通讯,所以引脚配置如图2:
# `3 K& n4 l& K) ]. g& X! ]) A8 ^' _2 M+ v9 l! x( j# A3 l
/ Y: d+ i0 ]5 s; i* ~. _; [2 C
8 X) r) e1 q1 {- M图2; c Z# n% f4 \4 Z% ~
SPI外设参数的基本配置如图3:
! }7 [. f z5 L8 x6 |
% W+ K u5 f, L: K( E
9 `7 T& O6 X( G图34 _- \: ?+ L3 s" P# i
然后生成项目。在官方提供的文件中有IIS3DWB的驱动,4个文件,如图4所示:+ H6 m8 w0 E4 l$ m" L4 S- b
; k; Y2 |/ @4 c* _
3 l# i2 I0 x/ j" u8 v: M图4
7 u3 F9 k# e+ Y2 h% H2 S/ |! K 例程是参考官方github中提供的参考例程,修改了一下,增加了温度读取。初始化如下:! T( j+ c+ j$ n' k$ ?& C. A
- dev_ctx.write_reg = platform_write;
) d" q/ E/ c- r - dev_ctx.read_reg = platform_read;
# y& f+ z+ ~8 a6 X8 C8 K8 T/ G. Z: r - dev_ctx.handle = &hspi3;/ d4 i+ l/ i% J
- 3 W( p8 J' X0 Z
- HAL_Delay (10);9 a, M5 @* u6 F6 J; m" D. d3 [
- iis3dwb_device_id_get(&dev_ctx, &whoamI);
4 u' j& v( Y& ^# W | - // 复位设备
/ G# ]) u3 I4 n5 u - iis3dwb_reset_set(&dev_ctx, PROPERTY_ENABLE);
! t7 z+ o Q8 e3 Q; O- O - // 配置加速度计
$ D* z& p! r. i; r& } - iis3dwb_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
6 t* ~5 }9 D& ~+ V. L - iis3dwb_xl_data_rate_set(&dev_ctx, IIS3DWB_XL_ODR_26k7Hz);
6 D7 b( I8 t& Y: D/ s( W - iis3dwb_xl_full_scale_set(&dev_ctx, IIS3DWB_2g);
复制代码
7 y' t9 @# P) Q/ k- O; B/ v" f. _: n h0 M: n
对于加速度值和温度的读取程序如下:
! b) F7 b8 s2 B- // 读取加速度数据* C: d& ?/ l4 k |% C
- 0 x) B/ u, O$ t
- iis3dwb_xl_flag_data_ready_get(&dev_ctx, &drdy);//读取状态值- N3 a" h. O9 V, h! O, a( T, A/ E
- if (drdy) {
' w) m1 {! d- \5 ?0 L8 h' [! [, F - ) k# a% ~$ l0 r
- iis3dwb_acceleration_raw_get(&dev_ctx, data_raw);7 Z) [/ q$ U/ O* _* C
-
' F/ N {& ?- ?5 I - acceleration_mg[0] = iis3dwb_from_fs2g_to_mg(data_raw[0]);
8 X/ X `4 V1 B" h - acceleration_mg[1] = iis3dwb_from_fs2g_to_mg(data_raw[1]);" S0 c, p0 L" x2 t1 H2 @: {/ O
- acceleration_mg[2] = iis3dwb_from_fs2g_to_mg(data_raw[2]);
% D' u! g D6 z$ N/ | - }
) \2 v* j5 ]* v* X: }- }& q# ~ - iis3dwb_read_reg (&dev_ctx ,IIS3DWB_OUT_TEMP_L ,temp_data ,2);
% i+ R) x# u/ `+ u, t - temp_raw = (int16_t )((temp_data [1]<<8) | temp_data[0]);
4 x8 T2 i1 K4 ~% ? - temp_cel = temp_raw /256+25;
( ^/ u7 T; Y2 W+ P% @6 k, J- e ~ - 5 D' z+ M9 m# W( e
- HAL_Delay(1000); // 每秒读取一次数据
复制代码
$ X- D' \& e! L9 i2 P _+ P Y, ]: {( T7 s* h7 K/ s
测试结果如图5所示:
; R4 W( L8 N4 z& J% I9 m3 P. b
+ a0 ~2 o' f% }) N# q% o+ c
( |8 n5 v7 S) V! U `7 Z0 }图5+ t$ g! S, I; e R2 s& s
Device ID和温度值是正确的,滤波,FIFO等功能的增加一边理解一边添加测试。
0 \8 }8 x6 c& E. {: |5 w6 W* H$ n$ n, u: M. ]. l/ u/ I: s; Y
) Q' [( f5 S& j9 ?, z, c |
感谢分享
这个板子肯定可以吧,性能满强的
确实,大佬
感谢分享,学习