|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 心率监测 ) t- `5 u; \; F$ u8 k8 W
; T) C/ q) z' y- b }" J7 l( T" B. m. Y3 M
0 [7 X; ?0 s V9 k 1心率测量原理简介
3 G; p- v) w' ?3 q
1 E' m- c A! `8 E; }, p 我们手环的心率测量, 采用的是 PPG 光电容积脉搏波描记法原理(PhotoPlethysmoGraphy)。简单来说,就是利用血液中透光率的脉动变化,折算成电信号,对应的就是心率。7 R) F1 w" J% o. ]7 g2 g
当一定波长的光束照射到皮肤表面时,光束将通过反射方式传送到光电接收器,在此过程中由于受到皮肤肌肉和血液的吸收衰减作用,检测器检测到的广强度将减弱。其中皮肤、肌肉组织等对光的吸收在整个血液循环中是保持恒定不变的,而皮肤内的血液,容积在心脏作用下呈搏动性变化。当心脏收缩时外周血容量最多光吸收量也最大,检测到的反射光强度最小。而在心脏舒张时,检测到的光强度最大,使光接收器接收到的光强度随之呈脉动性变化。最后,我们通过DA14580 的 ADC 采集光接收器的电信号,计算出心率。5 Q/ M$ p, w7 d, F: f
2硬件设计
5 X) G8 g: }: v2 p3 d; d) y
- h; m4 T* x! N 我们的心率传感器由两部分组成,如下图所示。4 l( `+ L9 @; [" M" y. X' {& O
f: n: n! u4 z" N" A; A: i) H3 i
第一个张图 HY1303 其实是一个 LED 和一个光传感器,将采集到的光强转换成电压,从第 6 引脚输出。然后通过第二张图 HY232 放大电压。
! I- n+ j& t5 D* S4 w- q. z
9 G1 p D2 H. X" u& b3 {$ M" d
% b, G' r3 w4 V" W- V g- H
图 1: v4 {7 ?* X# y8 y% p
5 V) X: z8 B! t3 t1 h
# c& W- O+ |7 e+ ~2 r+ I- f5 a 图 2
: j _' N; d( o! z9 j% |; U# e3 S: W) s
3软件设计" h) C) X9 r' O
; |2 A# T5 y& K f
3 o3 w4 w8 A( R: p 第一步,就是系统的初始化。
( ^. b; l* [8 \4 ]5 ~* h! O* i1 i& G& |2 z' |; F5 p
& I' V! x3 } X# @( L 代码1/ b3 q! R3 j/ W3 c9 \
' o Z& k4 W3 }3 R6 Y, I3 ~
由于本次要使用串口打印,我们就设置串口管脚,使能串口,对串口进行初% M9 l" A _8 B# R$ E- a
2 Z5 G+ m1 P8 w
始化。
/ m7 l5 P, J( K; }. | GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PIN, OUTPUT, PID_UART2_TX, false);
. d }& n. i8 z/ ]8 f GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false);
" D$ M. J7 u4 L1 N1 S3 k SetBits16(CLK_PER_REG, UART2_ENABLE, 1);
" X( f" J! R$ r // Initialize UART component
, B% S& `$ H1 P1 L uart2_init(UART2_BAUDRATE, UART2_DATALENGTH);# ?4 d+ |2 v) ?: d ~
我们的心率需要的采样周期是 4ms 到 10ms,这里用 的是 10ms,就需要通过 void my_timer_init(void)开启一个定时器。" ]9 F7 [7 F& c7 C# z
) r) q" ?7 Q4 R2 d, c3 ^# w4 O
. z M( }. o: ? 代码2- V& f* L. p* K" C. E
5 {0 P4 K: i' n( W8 i
( g. B% d" F. T# x6 ~ 每 过 10ms , 定 时 器 0 就 会 产 生 一 次 中 断 , 进 入 回 调 函 数9 B g( [+ @% T) g H# V* m
0 c# S8 q9 i/ C7 z timer0_general_user_callback_function,在回调函数中,我们就使用 ADC 采集数据。
: l) m. c- Q3 j. s# n- O 最后通过函数 ADC_CAPTRUE(adc_heart ,&hr_capture)就可以得到心率值。adc_hreat 是 ADC 数字电压,hr_capture 就是心率值了。
& X. T/ \9 j* ~+ b+ m! M4 L% y* o: F7 |# p
. v/ t, g7 d9 ~" Q: v" a& t
代码3& t U2 ?- k- x9 @% c4 q; v6 T9 k- X
% g* ~6 T. G# W# i- K+ e3 b* B; R; T
4 ]% K$ A5 j" O2 u 代码4
0 t2 d4 x& h6 p- X$ r, D
( O* |# x' \ H) H) G; w" A 4实验现象
; U" @6 v0 C) f4 E0 \& @
/ c3 _/ _* T- I8 q5 S5 o 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。8 V5 j5 Q3 v- ^6 ?
+ y+ M7 G3 R0 ]9 N9 m+ U- v6 V
9 m7 e0 j0 T+ d% t& R+ t (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
7 P# O: O9 s" P3 E- q$ q
( c) a5 u- E Z (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
2 V( d- r8 e+ V (3)点击打开串口。7 d" }0 |4 H3 z3 K: u- }3 q# N
4 R. E' H1 D V2 ]
6 P( C- K7 N( @: l4 m# ` 图 35 s/ r7 T: a, A- v' |/ F
配置完串口之后,打开我们提供的代码。* D- k& q C7 [4 B! Q
6 n' b8 W, t5 A. D2 l! q! c; } (1)点击仿真按键。) [$ K3 }1 ]! D! s
! B; L: ?) l1 F) `
8 H" b3 A8 R; Q% a 图 4
* N5 s* O u6 q (2)点击运行代码。* @' H9 _$ ^! \( E. {+ M+ {, z
9 ?! t [7 n# E# z ^
3 s/ x& |4 r# C3 f+ p# |, f
图5
* E5 H- ?* N5 d
$ q# J" ^( Y$ \4 ?# N3 g3 r: H5 S- K0 d1 R7 t. E& f' r
完成之后,就能看到串口调试助手接收框信息如下。
$ [7 K; K$ s% E( [ p, n) ?3 O# X& l$ A( d+ {1 M; H! M
+ p' r4 j* e+ b8 u; I 图 68 O8 l$ W. `+ p; x3 ^0 H+ W
5 g+ M5 b) A. f4 [* J2 O
$ m" N9 l. e) z% o" p8 K
4 {5 S1 d& _7 l% m, v# i" @ L如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系
" s+ B/ o8 n' o
* r* F* c, j: Q3 r# B
0 u( Q0 _/ A& L8 e3 D文件下载请点击:
7_(100%开源)蓝牙心率防水运动手环_心率监测.pdf
(677.56 KB, 下载次数: 0)
_: G* m2 U, h% `' ]; g' H) Y7 o- b P" f' M
, O( N2 p+ v( K |
|