|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 三轴计步伐
! T0 R- {* V1 U& L; w. J0 H
; Q. [/ C6 n4 N% X6 p
8 c3 A& Q8 t/ L* [, H" V, }( g& ~( `; A8 Z z* @
j1 O+ y# t0 b. a. c/ i5 ?" R 三轴记步
8 J" h+ W! G3 F8 N& X 1相关简介 `2 _; q2 D+ `$ ]* O
# z" d- y K$ I' w. ~7 \+ H
本次,我们将使用 DA14580 的硬件 I2C 读取三轴传感器的步数。
$ r& s: c" Y- u$ |
/ H; n0 C+ W3 Z$ d I2C 总线是一个为系统中电路通信提供支持的可编程控制总线,它是一个软件定义的两线通信协议。, a9 e9 { H4 e0 B b# r. |4 j8 p+ J O
两线 I2C 串行接口包括一个串行数据线(SDA)和一个串行时钟线(SCL); ) P9 X9 ?3 W# S. }- { x- k9 ^
支持两种通行速率,标准模式(0~100Kb/s)和快速模式(小于等于 400Kb/s);$ t. k7 K$ k8 }. z
时钟同步;
0 p+ H0 S4 ^' F [5 X: h 32 字节的发送接收 FIFO;+ O- N, M: }3 @/ N& x2 m
主机发送与接收操作;5 r D" @3 [5 q( Z4 w
7 或 10 位地址,7 或 10 位混合格式发送;
) L# }8 P6 p; w 块发送模式;) m9 _+ T9 f; H5 n5 r: W
默认从地址为 0x055;9 v, K. |# X- i: u0 a
中断或者轮询操作模式;% O5 K' z. ^2 U, A6 q
可编程的数据线保持时间;
0 T4 ~8 `3 i, x9 s8 e/ _5 j/ ]0 Y/ R
本次使用的三轴传感器是 LIS2DS12。LIS2DS12 是一种超低功率高性能三轴线性加速度计,具有用户可选择的尺寸 2G/4G/8G/16G,能够测量输出数据速率从1Hz 到 6400Hz 的加速度。并且具有集成的 256 级先入先出(FIFO)缓冲器,让用户在存储数据时,限制主机处理器的干预。LIS2DS12 支持 SPI 和 I2C 两种接口, 我们这里采用的 I2C 接口。3 T* Y7 f1 c# } }7 Z: h
/ a. G3 M9 A$ B1 ]9 W
% m$ B" D; s4 i* r, [7 j 2硬件设计4 Z5 [9 O1 ~+ ~: W L( `/ i; J( H
; R% H6 C! A* W4 F! h) G0 ^ LIS2DS12 一共有 12 引脚。1 脚 SCL 是时钟信号。2 脚 CS 是 SPI/I2C 使能引脚。第 3 引脚是 SPI 的数据输出,由于这里用的 I2C,这个引脚空余。引脚 SDA 是 I2C 用来传送数据的。还有两个中断脚 INT1、INT2,打开之后,当 LIS2DS12 检测到步数,能产生中断电平。7 X, ^7 i1 N a6 w: A8 r* _% _1 O. ?) V
) W. L5 D# p2 u" Z1 ^
: T5 L! j! f% c' ]4 i
图 1
0 n' o0 E* `" Z% b" o& Q/ \6 [* | @, J
7 G/ W+ C% y& w, W5 S8 A 3软件设计
$ V" c; w1 ?+ a* d5 \; i
8 Z* S' R& \) ^ K x. g, x$ e 首先,完成系统初始化,调用 system_init(),可以参考前面的电量检测。接 下 来 就 是 I2C 的 使 用 了 。 第 一 步 我 们 配 置 I2C 的 相 关 引 脚 。
: V; o( f( I+ `% `8 B7 \' _/ s" B5 j2 J/ h, |% w5 ^
GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SCL_PIN, INPUT, PID_I2C_SCL, false);" u( l: B9 H- v& S; Q
GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SDA_PIN, INPUT, PID_I2C_SDA, false);
$ T& g& R" K; `% o' ]7 \9 t
6 I7 \' C8 O8 e- y! y/ [% V 第二步,就是通过下面函数初始化 I2C。$ W2 J4 s/ |; S6 I
5 s5 N u0 A: x. ]) h7 |
N5 `% k0 h3 M" B: v' e6 ?/ \+ E
代码1' a( O3 M2 s8 M) F
5 c1 S8 \8 Q7 w( h7 r8 | 完成 I2C 的初始化之后, 我们就可以通过 i2c_eeprom_read_byte(uint32_taddress, uint8_t *byte) 对 LIS2DS12 进 行 读 操 作 , 通 过, g S1 o3 y9 i; C6 O' K
& ^1 e6 h% r/ Y0 E+ a( q
i2c_eeprom_write_byte(uint32_t address, uint8_t byte)对 LIS2DS12 进行写操作。% p! ~9 t6 x. A# p
通过 I2C 的读写函数,对 LIS2DS12 寄存器进行读写,就能使用 LIS2DS12。详细资料可以查询 LIS2DS12 的 datasheet。
& A% R2 H! {( h6 e! s9 g/ O3 @ 首先,我们是调用函数 status_t LIS2DS12_ACC_R_WHO_AM_I_BIT(u8_t *value) 读 取 设 备 ID , 判 定 是 否 为 正 确 的 设 备 。 然 后 , 我 们 调 用LIS2DS12_ACC_W_SOFT_RESET(LIS2DS12_ACC_SOFT_RESET_t newValue),软件初始化 LIS2DS12 设备。如果读取设备错误或者软件初始化不成功,DA14580 会进入一个空的死循环。最后,我们会进入 Loop_Test_Pedometer(),记步测试。
P7 a) W. a; J# g ]
9 t3 D4 F" J. R/ B' _/ h
7 y- G1 V4 Z7 L' x x& W: k 代码2
& R) s" C6 J" Z4 V" v. W- U Q; q
; }' X! i P$ S$ H9 Y% r1 H& T: D' I+ N
4 实验现象
3 D3 ?; n- W3 ?+ V$ u p9 K
" }$ j# B0 Q7 x8 S3 t6 H 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。. U- t. d7 r0 o K
3 c6 l/ z/ q1 c4 _ (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
1 G2 ]4 a- L0 ]( E8 l
5 g' ~* e3 i3 w, q) n (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
# `; i* a% x3 v
0 E. `8 u. t1 F6 f+ K' ]9 K9 T+ C6 |: u u1 G' |
(3)点击打开串口。
6 ^9 }$ s& h3 B I* F2 C+ v; ]8 C/ v" }
4 l4 V5 P% H% u2 c( K- A, d8 H
图 2; Q, r* g i! W# P7 a: u w9 J1 ~- z
配置完串口之后,打开我们提供的代码。
8 k3 e6 ]2 A+ w7 k
# z$ ^8 w+ @3 T- D* s4 _: D0 i (1)点击仿真按键。
+ T' Q; H8 H+ E* K
/ w3 ^9 S1 x7 e9 q
3 z c8 [* i8 w% }6 O) V! S
图 3
5 b, i. R: l; _ (2)点击运行代码。+ ]! p. I+ X# t/ O
# z3 ?2 f$ ?8 V" L
9 T( p5 b$ K: l+ H+ H1 A' \ 图 4
2 i1 @4 m# d; p8 e" T8 c
) @; z+ L5 E( A" F 完成上述操作,就会看到串口调试助手区域 4 中会显示出步数,我们摇晃单片机,会发现串口调试助手打印出新的步数,并且步数在增加。: H6 `+ R: U6 Q% `/ S1 A
' B2 W* w8 z% o
* V& \( w3 E, A6 @ 图 58 l) N1 n8 h# \' O* K
) n# B) X. _2 m0 P( u5 O/ ]) b
, E+ S- q2 Z {) F# n- S$ M- c
0 ~6 R( \; _0 [, e+ y' ~文件下载请点击:
6_(100%开源)蓝牙心率防水运动手环_三轴计步伐.pdf
(612.82 KB, 下载次数: 0)
, S- V) V, e+ r5 m" D
6 e' R6 Z: a5 i+ B2 R4 l% z
4 u5 g& S0 V9 k& n- L4 I" o( r8 [
/ H; G3 M, c: _
|
|