|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 心率监测 & D6 b. }% k, y) F1 d
/ {+ \# E" o9 w9 H; j* w0 D Q% U
# ~4 h! t' J2 G, r g/ v
1心率测量原理简介
8 d6 j& B6 F2 b- F7 _1 V" V" ~0 x) D" a5 m
我们手环的心率测量, 采用的是 PPG 光电容积脉搏波描记法原理(PhotoPlethysmoGraphy)。简单来说,就是利用血液中透光率的脉动变化,折算成电信号,对应的就是心率。' w& R* `* v! ~. O+ N7 K& G
当一定波长的光束照射到皮肤表面时,光束将通过反射方式传送到光电接收器,在此过程中由于受到皮肤肌肉和血液的吸收衰减作用,检测器检测到的广强度将减弱。其中皮肤、肌肉组织等对光的吸收在整个血液循环中是保持恒定不变的,而皮肤内的血液,容积在心脏作用下呈搏动性变化。当心脏收缩时外周血容量最多光吸收量也最大,检测到的反射光强度最小。而在心脏舒张时,检测到的光强度最大,使光接收器接收到的光强度随之呈脉动性变化。最后,我们通过DA14580 的 ADC 采集光接收器的电信号,计算出心率。. _& K* d6 Z- d
2硬件设计 m$ E6 f- b+ }; A8 D$ Y7 z9 M: r
3 f7 _; F6 F5 ?9 z* b 我们的心率传感器由两部分组成,如下图所示。+ W1 P, |, x( m+ M. y8 e
- U' j' G2 d/ M6 s
第一个张图 HY1303 其实是一个 LED 和一个光传感器,将采集到的光强转换成电压,从第 6 引脚输出。然后通过第二张图 HY232 放大电压。
1 m2 W8 h e+ p. ]2 g, P' x8 T6 |
I- S3 g; R) n" f( w! l+ V( c% f7 c
图 15 B7 {/ [* H# L. T
" Z% ^* U( X1 f
1 {1 r8 @, G& L
图 23 J" L6 v9 G2 ` ?, Q
' h2 l Z" {: Z! I: d 3软件设计
& a- w# f! g' E- _( V1 \; t( n* ~. P& Z# J. [0 f; C$ |
& G O: m- Z7 [ a* d n2 e
第一步,就是系统的初始化。
6 ^1 [5 S4 j* h, T
$ H7 n3 \# \, ]# R# \
; U4 _& x F+ o* n( z
代码1" H) K) Q& o. `3 y; g$ y& R
8 k. @" l T9 {0 N' U' g
由于本次要使用串口打印,我们就设置串口管脚,使能串口,对串口进行初
: }, r1 S$ m" [1 T+ a) n8 X
x0 H, G& F/ z# a) n3 |4 h 始化。7 [4 K1 l" @5 y/ L+ Z
GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PIN, OUTPUT, PID_UART2_TX, false);( j7 D$ ^! T* [2 F% A6 ~3 \4 S
GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false); \! v* |4 q+ ~9 [% d5 j
SetBits16(CLK_PER_REG, UART2_ENABLE, 1);
( N+ j H3 G4 h% g // Initialize UART component * }% ]/ {. A. f
uart2_init(UART2_BAUDRATE, UART2_DATALENGTH);& s0 }3 s4 [' t$ S. [ T& |9 N) h
我们的心率需要的采样周期是 4ms 到 10ms,这里用 的是 10ms,就需要通过 void my_timer_init(void)开启一个定时器。# l5 O3 u5 H) S* w
& t( I y2 R1 [* ~
: p: a0 F/ k- H; J6 x/ H- `. E! ]6 A
代码2- E* T3 l+ t9 U7 z5 y: d
1 s) S; X' s7 b
( C. m w) P1 [/ N' r 每 过 10ms , 定 时 器 0 就 会 产 生 一 次 中 断 , 进 入 回 调 函 数
+ m2 O& F/ E% m7 `9 E* d* }5 ^. W* l/ s
timer0_general_user_callback_function,在回调函数中,我们就使用 ADC 采集数据。! a4 F, D# n* K) \
最后通过函数 ADC_CAPTRUE(adc_heart ,&hr_capture)就可以得到心率值。adc_hreat 是 ADC 数字电压,hr_capture 就是心率值了。1 {5 z* C; o/ | N% {8 e( c+ M
& v& d* I" E5 N& c3 L6 a
8 Z; o; `" T, u0 g 代码3! y U8 h" U4 c: q# b0 W6 j
) M7 B! t+ r- X/ H
/ j! N: ] s0 H% H# c$ V
代码4" ?+ W: t. X" J6 g! L5 F
8 C& S& d, i. m, [/ O7 V$ Q; r 4实验现象4 a9 B! J- k3 ?/ Y% |
. W) p, F% D6 F& ?3 D' \3 b 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。# f/ X. o( u: a3 o% ^& _+ i
6 L8 C1 u+ h9 P# Y
( h8 x8 `6 F/ }5 r (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
) k3 b( l' B/ w- J5 _. B& X. P3 C% q9 a7 a+ _$ v
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
8 f" P1 n a5 [1 v9 f (3)点击打开串口。
- Q4 g) K$ ?6 z3 F/ g2 @6 ^7 O3 u1 k
& T Z' C, r1 h( K
1 ]+ Z; s. }. o
图 3( Z( L1 m1 [8 j0 O+ G: }* S
配置完串口之后,打开我们提供的代码。" j; ~* D& }7 I4 r/ [5 z
' p4 [( a# b" e* z) _ (1)点击仿真按键。
7 X1 H$ E0 g0 s1 n+ k& F/ W s# n( q; I8 |$ }8 |- `& C5 l# [1 l n
# R9 j4 b' ~+ C3 G) Y 图 4
, o4 S+ R# [- u5 W (2)点击运行代码。! a* T) A, `* l5 z& {: S" H3 Y
! r1 Q# B2 ^8 R+ }
3 @1 o8 a/ X" c+ a1 V7 R; ~- b2 S
图57 N. U& V- l% {: n- I
* u$ r) y. m; k3 F# s+ j+ @, _
( \' m% J9 ~0 k* u% i1 b; ]3 s 完成之后,就能看到串口调试助手接收框信息如下。
; y: P" T8 @3 H" Z. d+ I
n: A8 t6 v2 j G' U) R
" ]" n! {" @1 k5 G/ w0 ^9 t
图 6
7 n% U8 B/ N+ u9 A( K/ x* Q: j" g3 H: r5 o0 a) H7 k* C
: L8 `6 @) P1 g) x3 e
4 H J! |6 C- ~1 Q( O1 Z: a如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系
! B4 n, d+ E; p. r
5 T* i) M; k3 u6 e* J
- t8 u. v) n6 y$ r文件下载请点击:
7_(100%开源)蓝牙心率防水运动手环_心率监测.pdf
(677.56 KB, 下载次数: 0)
2 x3 W9 r2 G, [3 v# P6 j! E8 `% t+ y, }% E8 `
# J: n3 F; `& l! T |
|