|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 三轴计步伐
5 O- H0 C8 l E% {- t0 [' q# C5 i' [9 O
( j$ \6 s: ?1 T: k4 x$ ` {
8 p. t [! S5 h' v V! n- P0 S# [$ e2 f: ^( x
三轴记步
& P, V+ d% k& B" { 1相关简介
3 a5 b Y g5 P8 p- P% O, J% T3 N8 g4 A
本次,我们将使用 DA14580 的硬件 I2C 读取三轴传感器的步数。
9 {& }- ~1 N9 k4 `7 O7 n2 X" x T7 [- G& b+ n3 ]9 f
I2C 总线是一个为系统中电路通信提供支持的可编程控制总线,它是一个软件定义的两线通信协议。
' }8 f2 f4 I0 w1 H 两线 I2C 串行接口包括一个串行数据线(SDA)和一个串行时钟线(SCL);
( t* ^/ D" ^+ g* a4 ~ 支持两种通行速率,标准模式(0~100Kb/s)和快速模式(小于等于 400Kb/s);* W5 D j* Z3 t7 }
时钟同步;* ^1 V7 p: x* B3 `- X, K7 x
32 字节的发送接收 FIFO;
- V0 M. T6 [, S. T% S2 q+ [ 主机发送与接收操作;* y/ o( q+ w! l# I) d- B! w( J
7 或 10 位地址,7 或 10 位混合格式发送; , j& E# N8 c9 E8 O1 z4 ]
块发送模式;
$ }5 Q. O% j, K. E- [/ F/ h* X' n 默认从地址为 0x055;, p1 l, f' k) ~6 c0 v8 z: `8 q# T1 x
中断或者轮询操作模式;
6 P4 A: I: W2 S0 ^& N 可编程的数据线保持时间;
5 A+ O1 v ^4 {- @6 R0 d' V& O+ u' X/ a9 d. }
本次使用的三轴传感器是 LIS2DS12。LIS2DS12 是一种超低功率高性能三轴线性加速度计,具有用户可选择的尺寸 2G/4G/8G/16G,能够测量输出数据速率从1Hz 到 6400Hz 的加速度。并且具有集成的 256 级先入先出(FIFO)缓冲器,让用户在存储数据时,限制主机处理器的干预。LIS2DS12 支持 SPI 和 I2C 两种接口, 我们这里采用的 I2C 接口。% `$ i( `# G! N& X+ S, T; y
+ X7 J, l, x: N: o$ P2 l
, ?# ~, C& }# T y+ L 2硬件设计8 Q4 Z% ~, O$ D: d/ g+ {& t
) a7 W$ x, y; u$ C8 W LIS2DS12 一共有 12 引脚。1 脚 SCL 是时钟信号。2 脚 CS 是 SPI/I2C 使能引脚。第 3 引脚是 SPI 的数据输出,由于这里用的 I2C,这个引脚空余。引脚 SDA 是 I2C 用来传送数据的。还有两个中断脚 INT1、INT2,打开之后,当 LIS2DS12 检测到步数,能产生中断电平。
6 G) L1 A4 f) l* `
2 ~9 B& {9 s, F+ `
- a4 X3 p; k+ d: V' F' K" k4 v+ ~
图 1' o; Q3 }6 Y: y' g& x/ ?: }
& E% o: R" Z& w* g0 o) t
7 |5 [/ G7 I! c; x2 d: r 3软件设计
$ K: M- {0 @9 T9 U
8 [3 h) g. k$ h7 b- c9 m 首先,完成系统初始化,调用 system_init(),可以参考前面的电量检测。接 下 来 就 是 I2C 的 使 用 了 。 第 一 步 我 们 配 置 I2C 的 相 关 引 脚 。
J h6 i k% r: \+ ]/ S0 D, Y+ @+ h" Y# i0 R7 s: h
GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SCL_PIN, INPUT, PID_I2C_SCL, false);
+ e: H# N" X2 R% q0 e0 F; b GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SDA_PIN, INPUT, PID_I2C_SDA, false);
: M; d/ P8 v5 E+ x0 y! m! W& s2 G' c" |4 E9 p" {+ l
第二步,就是通过下面函数初始化 I2C。
# S% l, {" b! J; s2 o' o0 V/ N" d
( F: G' E; X/ ]% M# [! y2 T! k8 G. f- ?
$ Y1 c; v8 s4 G* }
代码19 ?9 _' E5 u8 C
' r/ u5 G' V) P
完成 I2C 的初始化之后, 我们就可以通过 i2c_eeprom_read_byte(uint32_taddress, uint8_t *byte) 对 LIS2DS12 进 行 读 操 作 , 通 过9 _# @4 c+ d2 M! a- _7 r7 E
; _4 h2 ^' ?0 c2 o& U) { i2c_eeprom_write_byte(uint32_t address, uint8_t byte)对 LIS2DS12 进行写操作。8 p- Z& {5 n+ S* |9 }: U7 T
通过 I2C 的读写函数,对 LIS2DS12 寄存器进行读写,就能使用 LIS2DS12。详细资料可以查询 LIS2DS12 的 datasheet。, z5 y2 S( }0 h
首先,我们是调用函数 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(),记步测试。
8 }2 ^+ }# z2 d8 x- P
3 v* L2 K( n; A# }5 v
t3 ?8 L+ h6 c0 [
代码2
' H; q) d C/ E+ l( ~) I2 x# w% S& i; O
1 ^" p0 F% p4 N
4 实验现象: T. Q! J q' [* M8 L# H
+ k# D7 L* Z# u+ T5 J; ?1 D: R8 V
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。/ E9 @! p4 k4 ^2 K! [, ~* Q
' g' Y. [: i) H (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
. o5 O K6 g; Y2 x0 {# |
e: v: e/ `3 H, X* _. S) b1 U (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。/ j9 L( K* |$ |2 d, U
* T: h+ H0 J& Q2 z
8 Y S1 a/ K n
(3)点击打开串口。
% p# W7 P4 ?: d
% R$ t2 e1 M' D( K+ t9 ^! x
Z) A+ ~/ y3 n' {0 V+ L2 o! L* f 图 2
a; X l4 ^, L2 `5 f6 N# Q 配置完串口之后,打开我们提供的代码。9 D; s& ]; x" Q2 x6 `/ U
7 ?0 J+ ?9 N% i) F( s (1)点击仿真按键。. U0 @/ f' H4 e
. X* q7 [1 n" X, ]5 o
B5 Z$ n2 |$ G. T 图 3
9 s9 E9 z+ Q3 ~# D( J) K1 d0 l+ F (2)点击运行代码。0 a# u1 b# N- _
2 U4 G$ ?& g" Z3 W5 X& F3 D# D# k x
3 @5 S* n: k. l% y4 b3 O
图 4
8 [* |3 K0 j' l. O4 ]- H3 u/ J" L
: ?2 d9 p5 |1 b 完成上述操作,就会看到串口调试助手区域 4 中会显示出步数,我们摇晃单片机,会发现串口调试助手打印出新的步数,并且步数在增加。
' t( {0 }( B$ ^+ V% f1 b2 S
7 e( \! k0 o2 Y. U( z$ W$ h
% |8 k6 I8 o9 x% X, W9 e1 x 图 5, P/ J' J' q$ L0 s# D P/ @
6 V& f7 B+ \+ H; q( @- j! m8 G- k. O! Y1 p- ~, Z7 j+ L
2 f. _6 r6 r) M8 s0 f文件下载请点击:
6_(100%开源)蓝牙心率防水运动手环_三轴计步伐.pdf
(612.82 KB, 下载次数: 0)
" O+ V3 e6 ?' a. D9 J, j' V6 i+ {
( X% S' K" w$ b. @
, z v6 Q1 J( V/ K8 T' B8 h Q4 k
7 W: F. q! N$ M- {. s& g |
|