根据AN5444应用笔记介绍,IIS3DWB是一款高性能MEMS三轴振动传感器,具有超宽带宽低噪声等特点,SPI标准接口输出。具体的介绍可参考AN5444应用笔记。本次先对该传感器有个初步的数据读取测试,关于滤波等后面学习时再添加。8 j. E: E# y1 F# T
原理图关于该部分的说明,如图1所示:
% _; D6 ]) p% ?4 d+ A" E4 p5 k
; M }) s9 z3 g0 X. s# ^; k图15 h( X! J, g% V1 w5 k3 \
1 K( n" p2 _& E+ V* P0 E
先使用CubeMx建立工程,时钟等正常配置即可,因为要使用SPI通讯,所以引脚配置如图2:4 r5 ?4 T$ z+ m" |. U @: v9 K$ F
) k4 m/ @1 G& a" N$ J2 y9 g
9 ^* S* @) v" z: e& T$ b$ D1 I
4 _" l* `7 `, h( e4 H- `
图27 t8 r& Q" t. Y9 x, |1 v
SPI外设参数的基本配置如图3:
. {4 ]8 @& C" F7 ^. h( ]7 g4 J
r7 ~, X& [: }6 O; d; P8 Y. H* [' @9 m2 u
图3. e* O4 a; P- o+ J1 ]" \
然后生成项目。在官方提供的文件中有IIS3DWB的驱动,4个文件,如图4所示:) ^( U5 `( y7 w
) G; O. b- V/ }" r4 K
, o6 `" K( V& X3 k4 D; p6 y图4
1 h" o: s. x6 _1 H 例程是参考官方github中提供的参考例程,修改了一下,增加了温度读取。初始化如下:$ X" Z' \( {$ Z9 g( S0 N6 P
- dev_ctx.write_reg = platform_write;: ]! ?9 g. K3 P
- dev_ctx.read_reg = platform_read;. ^% _( N, b% p2 O$ a
- dev_ctx.handle = &hspi3;/ E8 X7 [" ~* k; a8 T4 R
; M% f6 a: Q+ D2 ~. | \- HAL_Delay (10);
9 B; I; z1 C+ V/ W# B, ~8 L- C - iis3dwb_device_id_get(&dev_ctx, &whoamI);
X3 b1 Z9 p; g# W% p! A/ R - // 复位设备
$ {! g, o9 D; w( h - iis3dwb_reset_set(&dev_ctx, PROPERTY_ENABLE);
* _# g+ C. h% @4 u - // 配置加速度计
" o- { E, d: w9 h+ ^9 G8 J - iis3dwb_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);1 d2 B4 [2 {+ V+ F* C1 n1 M
- iis3dwb_xl_data_rate_set(&dev_ctx, IIS3DWB_XL_ODR_26k7Hz);
& b9 p2 j0 T# f! C2 i# q& N" `8 y - iis3dwb_xl_full_scale_set(&dev_ctx, IIS3DWB_2g);
复制代码 7 s7 E6 } V8 w! ~" @
, ]! s6 @) D# [, w; g, x 对于加速度值和温度的读取程序如下:
- e0 F7 e1 N, A# Z- // 读取加速度数据2 t" G3 J" u5 p0 u
- ' j( b8 p) k6 G8 m* S" R5 d
- iis3dwb_xl_flag_data_ready_get(&dev_ctx, &drdy);//读取状态值5 k1 _7 ?" m' n2 X7 m9 C- a
- if (drdy) {
$ G, x+ Y' {3 L& @% s -
) _) {! |9 {& F" ]# y - iis3dwb_acceleration_raw_get(&dev_ctx, data_raw);8 z9 y, Z. D1 M" h
-
, c# @; B+ @" Q- W: h - acceleration_mg[0] = iis3dwb_from_fs2g_to_mg(data_raw[0]);
- ~6 q3 ?* K$ @* ^ - acceleration_mg[1] = iis3dwb_from_fs2g_to_mg(data_raw[1]);
" A3 d& O2 P I6 z m3 }* S - acceleration_mg[2] = iis3dwb_from_fs2g_to_mg(data_raw[2]);
q. f2 M3 _9 \ - }1 o8 U0 u! z! R4 P
- iis3dwb_read_reg (&dev_ctx ,IIS3DWB_OUT_TEMP_L ,temp_data ,2);- k* O# e8 r/ T7 t/ l, _, g
- temp_raw = (int16_t )((temp_data [1]<<8) | temp_data[0]);
8 M: i. V! n; |0 r8 F6 ^3 I - temp_cel = temp_raw /256+25;4 ^: h# |; ?2 r3 v( F2 ~
# `4 n; p. x' C- HAL_Delay(1000); // 每秒读取一次数据
复制代码
; s: f0 v5 p% b" }& Y( q9 Z
复制代码
- k( } I+ d% M$ p5 ~$ _& Q/ q$ [
3 ?6 E- s5 ^, v' F; H% X7 b 测试结果如图5所示:
" d6 i% V# I% _0 W' n. I! C
$ Z1 B+ E X; b& [% \
* X8 m( Z0 \+ ]. k1 {
图5
- G9 I" E* a# F8 r I TDevice ID和温度值是正确的,滤波,FIFO等功能的增加一边理解一边添加测试。. j. k% F% t# _ ~
1 `, N# d, Q1 y7 `* R
: L* b5 c3 {( | |
感谢分享
这个板子肯定可以吧,性能满强的
确实,大佬
感谢分享,学习