|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 三轴计步伐 / d+ A+ w7 Y. [! y
+ Z! q* e& G: W7 d5 f* F) D, P8 ]2 \( q
# A- ? L: J3 J
. T* X0 b# P3 s; ~- a3 } 三轴记步
+ C U) N# S2 K 1相关简介
% M+ s! N' w0 k* W
$ y# X p+ T# c 本次,我们将使用 DA14580 的硬件 I2C 读取三轴传感器的步数。7 e4 }/ p6 A3 n& |4 |; H9 `& ?; Q. l
4 T' Q: k* x$ J5 a
I2C 总线是一个为系统中电路通信提供支持的可编程控制总线,它是一个软件定义的两线通信协议。
9 P# u) f& A: P9 \# y 两线 I2C 串行接口包括一个串行数据线(SDA)和一个串行时钟线(SCL);
$ r6 v' i, ], F* x- A. S2 `; ^- X 支持两种通行速率,标准模式(0~100Kb/s)和快速模式(小于等于 400Kb/s);
( `) `+ b7 Q; l 时钟同步;, e5 _+ ~4 |+ Q7 Z3 U2 `
32 字节的发送接收 FIFO;
+ `* B* V* V6 d4 C 主机发送与接收操作;
' w. U) O& O( O$ v8 y0 i6 q/ c% W 7 或 10 位地址,7 或 10 位混合格式发送; & s$ I1 i! A. r% }5 N
块发送模式;6 G' n" o' |$ J
默认从地址为 0x055;+ L$ C' z* V9 C
中断或者轮询操作模式;
' z) o; A0 V1 K. G. z$ g 可编程的数据线保持时间;8 G/ D! _1 p8 K; E* h* U d# d& L
9 j* [% Q7 ?! ] 本次使用的三轴传感器是 LIS2DS12。LIS2DS12 是一种超低功率高性能三轴线性加速度计,具有用户可选择的尺寸 2G/4G/8G/16G,能够测量输出数据速率从1Hz 到 6400Hz 的加速度。并且具有集成的 256 级先入先出(FIFO)缓冲器,让用户在存储数据时,限制主机处理器的干预。LIS2DS12 支持 SPI 和 I2C 两种接口, 我们这里采用的 I2C 接口。
+ `, v2 I' x5 f! a" W G1 r/ G$ s2 @& }, v
3 y2 H; [# z, ?) g, P
2硬件设计! d3 g( R; X, I( O1 O
3 x1 _# ?8 S' r$ k1 ^2 Q
LIS2DS12 一共有 12 引脚。1 脚 SCL 是时钟信号。2 脚 CS 是 SPI/I2C 使能引脚。第 3 引脚是 SPI 的数据输出,由于这里用的 I2C,这个引脚空余。引脚 SDA 是 I2C 用来传送数据的。还有两个中断脚 INT1、INT2,打开之后,当 LIS2DS12 检测到步数,能产生中断电平。, [( a0 _; i( Q6 ~) U$ q. M
5 h/ V5 z6 @: q
4 m& X: X6 O% a) f, p W3 Q) \1 @ 图 1
2 e# D$ X2 z( b. z% a# Z1 h" x. |; k
+ Q$ W+ f0 V3 x" n0 N) f& c/ J# S/ L( e. F$ e: q2 ?
3软件设计% Y9 Z. v# w% X3 q( ?
/ ~5 d, i; x/ W8 b
首先,完成系统初始化,调用 system_init(),可以参考前面的电量检测。接 下 来 就 是 I2C 的 使 用 了 。 第 一 步 我 们 配 置 I2C 的 相 关 引 脚 。
) L! |/ M6 n# ^7 T7 s$ z% m7 j) l/ p: v( N! X
GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SCL_PIN, INPUT, PID_I2C_SCL, false);
* f$ x; f! }1 \! | GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SDA_PIN, INPUT, PID_I2C_SDA, false);
% p m! {# m2 `# V# t7 E2 H
+ O" a0 V- R8 K. C$ \ 第二步,就是通过下面函数初始化 I2C。
% n: A9 \# w; c" |: s, k( q3 j+ h1 }& o
) S! a1 b5 v4 w% S$ O, y3 C
代码1
: }4 T6 D$ D3 {3 j3 t! h+ S/ {" b
" x# a0 ^# f5 ?+ e6 p# R 完成 I2C 的初始化之后, 我们就可以通过 i2c_eeprom_read_byte(uint32_taddress, uint8_t *byte) 对 LIS2DS12 进 行 读 操 作 , 通 过% @7 ?9 `% S0 ^; L8 B
+ U2 Y/ m: A) l0 L; f$ R' n: ] i2c_eeprom_write_byte(uint32_t address, uint8_t byte)对 LIS2DS12 进行写操作。
( J8 |6 B! ^$ \( i4 m$ Q% S 通过 I2C 的读写函数,对 LIS2DS12 寄存器进行读写,就能使用 LIS2DS12。详细资料可以查询 LIS2DS12 的 datasheet。
# E ~* s' J9 c% ] 首先,我们是调用函数 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(),记步测试。$ |0 y! R. X1 I$ O, e. x
$ j9 H/ N5 e! c# B
& T3 @: f# R* Q2 t' g
代码2
$ e, v( Z, _' ?- D3 Y3 ?* `! |, ]1 i$ k9 V* d! n/ n# T
. v5 v c: @" s, _# h' ` 4 实验现象
4 l# P2 M, U5 [# F7 F8 k) ]/ v0 x8 d! \ l
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。! S/ ^1 P& }- E: r# O
! ^% a+ \3 Y3 i" G& q( [2 A2 |( R
(1)选择串口号,我们图中是 COM1,这个根据实际情况选择。' N# |; X0 w3 k3 x
6 Z$ c4 t* H; |# y+ \
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
/ ?* `/ @+ w4 r( x3 P i4 h/ M4 z6 p2 I+ ]
0 E" r! h0 ^0 p1 v' n (3)点击打开串口。
: v5 Q5 ^' l& j; Q8 J
6 }7 R4 {1 _: ^6 t: @
! [- _; h; O3 R& ~: i
图 2
) i0 |. h8 o( P1 j. A' O+ h 配置完串口之后,打开我们提供的代码。
3 K9 w$ v3 L; k8 G: a% B% w) D! K0 S l1 |1 x0 v; l
(1)点击仿真按键。
4 H, t4 q4 W* K$ w# p4 b' B" k: l. a2 h B( t1 m. {
$ I; z: b# f% k. V& {. p$ u i
图 3
* k: V/ u. Q- g- g3 Z (2)点击运行代码。
3 v" B' z: t3 M
+ I( z& ~9 ~( ?; a$ G i+ L
* d* }% j+ R8 L: X 图 4( q6 \$ C! Q, g; D) O2 ]3 n1 X$ z
2 Q0 j5 q$ Q+ F( p' o W
完成上述操作,就会看到串口调试助手区域 4 中会显示出步数,我们摇晃单片机,会发现串口调试助手打印出新的步数,并且步数在增加。* q% V' ]" c: I! M1 u# L
t1 k' L0 J2 N# p1 d- \
6 X" R* D9 ^5 r. _ 图 5$ _! e- q5 V8 Z( O2 h9 Y
: h5 m+ S9 `8 T$ C% v
3 ?: p, @$ t: V1 F! T, G
: {9 Y% [6 u' v" V- p文件下载请点击:
6_(100%开源)蓝牙心率防水运动手环_三轴计步伐.pdf
(612.82 KB, 下载次数: 0)
; D7 w* h! f' ~
+ N6 x2 R1 b3 L9 G, K/ d; L }1 u! p
) d, a7 H# {# d9 Y& b% c9 f; U0 y1 C& G& u9 Y) B
|
|