|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 三轴计步伐
! m) O0 `6 F1 P' A" K$ {; c$ }" D2 N: b
~2 I* Z1 F. d0 G- ~) d2 I2 }9 W; v) @
& d5 K/ c+ H/ y1 ~4 m4 r 三轴记步* p6 l" w+ X! d" s A
1相关简介7 ]$ q9 B$ c, }) O$ Q* m1 s
& l- c6 ]+ P+ m6 D% J
本次,我们将使用 DA14580 的硬件 I2C 读取三轴传感器的步数。9 D/ ~8 G) Z& W% q) p% N
3 [5 R0 ]: P9 c- O, t I2C 总线是一个为系统中电路通信提供支持的可编程控制总线,它是一个软件定义的两线通信协议。; \3 V/ z- `8 H. `0 A! e* g
两线 I2C 串行接口包括一个串行数据线(SDA)和一个串行时钟线(SCL); $ |$ H8 u. {$ T2 Z
支持两种通行速率,标准模式(0~100Kb/s)和快速模式(小于等于 400Kb/s);1 ?8 r0 W$ l6 a+ I: J5 d
时钟同步;
& a) f7 o' k o; _/ d0 F& D 32 字节的发送接收 FIFO;
6 R# y( d( R" T$ a 主机发送与接收操作;$ r3 h8 E3 R5 {8 [; C0 C" b
7 或 10 位地址,7 或 10 位混合格式发送; & l2 s2 b/ Y5 Q; [3 r( n* b2 H2 ~2 ~
块发送模式;
3 c8 ^$ K; N5 B. f- L! H, { 默认从地址为 0x055;
/ ]" K1 A$ \; i& u5 V 中断或者轮询操作模式;
0 u! P; @4 U+ a3 Y b 可编程的数据线保持时间;
5 D8 d4 |( o8 I; ]
/ Z% o( L- k" l, Z" X( I/ M3 W 本次使用的三轴传感器是 LIS2DS12。LIS2DS12 是一种超低功率高性能三轴线性加速度计,具有用户可选择的尺寸 2G/4G/8G/16G,能够测量输出数据速率从1Hz 到 6400Hz 的加速度。并且具有集成的 256 级先入先出(FIFO)缓冲器,让用户在存储数据时,限制主机处理器的干预。LIS2DS12 支持 SPI 和 I2C 两种接口, 我们这里采用的 I2C 接口。) L+ a4 m2 `7 c" k& ?, |" X
0 I3 |* w6 |- H. N% o: j. f$ i; Y
- O+ p# v7 G- k$ Q5 s; y! p1 p7 [ 2硬件设计+ q8 ^% {' a: @+ {
8 Q; a4 Y3 H4 C6 _ LIS2DS12 一共有 12 引脚。1 脚 SCL 是时钟信号。2 脚 CS 是 SPI/I2C 使能引脚。第 3 引脚是 SPI 的数据输出,由于这里用的 I2C,这个引脚空余。引脚 SDA 是 I2C 用来传送数据的。还有两个中断脚 INT1、INT2,打开之后,当 LIS2DS12 检测到步数,能产生中断电平。
0 y0 ?- N- ]' R% Z+ y- s7 i: B4 y- p( @. V1 |7 C- c! F8 ~ K
. x4 S: H% e; {; p& e' Y
图 1- d/ F1 H7 `$ n& D# s" F7 ]) R$ Q. j
5 h+ K. P0 ]' q. r" i+ r5 }
4 W. g# X" y' P ^+ H* J# |
3软件设计
1 v b3 z" f9 f3 L7 F' @( [+ _8 A- m& x
首先,完成系统初始化,调用 system_init(),可以参考前面的电量检测。接 下 来 就 是 I2C 的 使 用 了 。 第 一 步 我 们 配 置 I2C 的 相 关 引 脚 。3 b8 U# m: Z# m1 }+ s2 t0 E
7 k* C/ [" F) E$ z" M7 V" _1 i# q GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SCL_PIN, INPUT, PID_I2C_SCL, false);% h" H4 U" z! P8 R% Z
GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SDA_PIN, INPUT, PID_I2C_SDA, false);
! m/ G2 H* ^+ a; s+ s& H ~2 o2 j& L7 m
第二步,就是通过下面函数初始化 I2C。+ M6 o& z" A7 O5 H" Y6 o% U
$ }8 H `/ q$ j
( r5 Y1 Y4 m" T: i, e 代码1
$ I4 e- Y7 V% l+ A- l& v) z! W. r, ^ C" h" f7 U# j5 _# S6 ~/ z7 ?
完成 I2C 的初始化之后, 我们就可以通过 i2c_eeprom_read_byte(uint32_taddress, uint8_t *byte) 对 LIS2DS12 进 行 读 操 作 , 通 过- J$ d" J8 a1 i W# y/ r
O; ?7 h5 f7 m i2c_eeprom_write_byte(uint32_t address, uint8_t byte)对 LIS2DS12 进行写操作。
$ X M8 ^: e8 A4 `7 C5 k, L 通过 I2C 的读写函数,对 LIS2DS12 寄存器进行读写,就能使用 LIS2DS12。详细资料可以查询 LIS2DS12 的 datasheet。
; s: a+ _- Q1 _: e) o 首先,我们是调用函数 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(),记步测试。
9 c, \9 O7 D( d4 z' R
W& N& S. Z$ h7 v; t2 l
9 b3 Y) H+ P- F8 c! Q2 }- S 代码2
+ Y r/ o6 ~6 P3 n! N+ M* {
" ^' ?! p$ f1 u8 c
% y/ x @; h. y7 U 4 实验现象8 n* O$ a% i: Q! L7 L
) z7 c( B- ^- U2 b4 M 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
& w) Q4 k6 [7 \6 E. R5 F, Z
4 n# w6 z( Z# {; j (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。0 a9 Z7 U/ @7 ?0 }$ x2 n I# N
8 }. C; e, s" O3 w) p5 z4 c
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
6 ]4 v0 o, P' M- _0 h1 M- U# E% z w" m3 I* T! N! ^6 |& X( Q
$ d) e( u8 A- N* L
(3)点击打开串口。5 K& A2 O. Y$ Z9 K
9 N. K9 y1 ^$ E! G: f5 N
1 ]/ S+ s( r9 T2 J! g+ x' z
图 2
9 Y( f* z( I+ n# v 配置完串口之后,打开我们提供的代码。
3 V+ ?7 e( \2 O7 G$ N+ F3 n n3 R1 K/ p
(1)点击仿真按键。5 J/ m' e% I* S) l& K" I2 @
2 Z5 H" k/ @7 }6 \
0 [7 K' j9 r+ T+ _% t* P7 E
图 3
" o$ \4 W5 K& `8 J' \ (2)点击运行代码。1 X" |# F2 _: M
' K) j7 K4 N0 M3 i; |- C+ @
% F1 Z4 l' m# L& M, }2 ^4 v0 A" \0 q 图 4
# P8 G5 N I; g; S
9 _" G: N: y. s C, u 完成上述操作,就会看到串口调试助手区域 4 中会显示出步数,我们摇晃单片机,会发现串口调试助手打印出新的步数,并且步数在增加。
3 V' D) q4 @% }" |. e2 |
* ]7 C8 S! B$ O5 I* V9 j: i
/ L7 D P- l0 {- \ Z6 h4 M, q
图 5
; W: q6 q8 `/ G" P" n! K* |( n# i& W/ @: Z& i- |. i
w8 c* y ^: B& k: ~$ T9 n0 J
" X$ q9 L) R2 v) r+ _3 q$ n文件下载请点击:
6_(100%开源)蓝牙心率防水运动手环_三轴计步伐.pdf
(612.82 KB, 下载次数: 0)
3 ]- W# C8 P4 X$ K. p- E2 @" q. |5 G! B
" t( ]' \4 j3 J' S. Z- K, C7 E( l6 i2 X- q
|
|