|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 心率监测 " n2 p0 C# c$ u O
& f9 b% [4 f" _# j
1 {$ K- p) A3 g. a
' j+ |. ]$ `+ E8 H {) D" n 1心率测量原理简介$ S0 I$ H1 h6 k! `' ] o+ g" P
' q+ U' T+ }5 e5 o/ W
我们手环的心率测量, 采用的是 PPG 光电容积脉搏波描记法原理(PhotoPlethysmoGraphy)。简单来说,就是利用血液中透光率的脉动变化,折算成电信号,对应的就是心率。
+ _* f" t a0 Y1 `- U# {7 }1 T, i) ~( {9 Y 当一定波长的光束照射到皮肤表面时,光束将通过反射方式传送到光电接收器,在此过程中由于受到皮肤肌肉和血液的吸收衰减作用,检测器检测到的广强度将减弱。其中皮肤、肌肉组织等对光的吸收在整个血液循环中是保持恒定不变的,而皮肤内的血液,容积在心脏作用下呈搏动性变化。当心脏收缩时外周血容量最多光吸收量也最大,检测到的反射光强度最小。而在心脏舒张时,检测到的光强度最大,使光接收器接收到的光强度随之呈脉动性变化。最后,我们通过DA14580 的 ADC 采集光接收器的电信号,计算出心率。/ v" x2 r0 R$ ]7 A# B# [3 W7 p
2硬件设计; N8 t- @! V0 \- P7 Q% X
+ ^8 G5 O- x" h. F/ K9 n# z* { 我们的心率传感器由两部分组成,如下图所示。# Q1 @0 S) p# v$ W
7 q% T' x. C3 A5 c& ^+ ^: }! M9 |4 h
第一个张图 HY1303 其实是一个 LED 和一个光传感器,将采集到的光强转换成电压,从第 6 引脚输出。然后通过第二张图 HY232 放大电压。
. a+ J7 q/ l, G' L2 x5 i L
/ V5 c& C! J0 y9 Y1 o! Z9 r3 Z
L6 D5 o/ M( t8 b! S7 M 图 1$ C) u) U5 q$ i- l; K5 j
8 ?/ U1 S) w% ` Y
/ M4 k& R4 Z0 p/ ]0 z9 I1 t! c 图 2( ^/ U5 R+ S& y7 h
) O$ d+ |5 u9 K. D
3软件设计# j3 f3 f; z0 M, h% }/ V( H: s
* G- x& ~# ?" P H H- A1 @% E* a; B2 C i
第一步,就是系统的初始化。5 k& {. B' D8 l8 j' V9 [) B! Q
% X* e- e8 ?) V- `1 r& d3 l
7 [% L( [5 J& I- ^1 @7 ~ 代码1
# j: I- i ~! p/ T4 h. e" u2 S6 j; |' `
由于本次要使用串口打印,我们就设置串口管脚,使能串口,对串口进行初
6 O7 _% j7 W$ S O
" Z6 P1 ^0 h3 h/ Y9 c9 U' T5 t. o 始化。8 k" {6 _& V, u8 a
GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PIN, OUTPUT, PID_UART2_TX, false);" E* q& W: I8 M2 k
GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false);
8 L. V. f! z- Q" j SetBits16(CLK_PER_REG, UART2_ENABLE, 1);1 e: A% I- {. }5 u4 N" m4 |( ]
// Initialize UART component * C8 J5 X n0 s
uart2_init(UART2_BAUDRATE, UART2_DATALENGTH);
2 _+ }) G( `7 @ 我们的心率需要的采样周期是 4ms 到 10ms,这里用 的是 10ms,就需要通过 void my_timer_init(void)开启一个定时器。7 y, x g Y7 U
0 o9 a0 _; V: \, E
, g/ u. \8 T' d" B) K2 S
代码2
: Z h( N% w h1 I c1 A+ |9 J G2 \9 Y& g3 J; r7 Q. u- L6 d
0 D2 Q) Q" `7 |4 K
每 过 10ms , 定 时 器 0 就 会 产 生 一 次 中 断 , 进 入 回 调 函 数! C5 W1 o/ }3 z
+ F( a5 f: i, y* e
timer0_general_user_callback_function,在回调函数中,我们就使用 ADC 采集数据。' `- K* c9 |9 O0 ~1 O
最后通过函数 ADC_CAPTRUE(adc_heart ,&hr_capture)就可以得到心率值。adc_hreat 是 ADC 数字电压,hr_capture 就是心率值了。
7 F- V& d0 t' a" |) ~
& ]9 [+ r u6 A6 H% [
& Q! w# c5 b3 i* k- F* Y4 {% P 代码3/ \5 I$ i$ `/ Y' i
; u0 a, T- T9 B' x) i: N8 L+ V
5 c7 j: g& ~ Z7 Y& D7 t: z 代码4. V# ?2 G k4 F" y0 o0 X
$ ]8 P5 Z0 H7 T: b" B- m 4实验现象: P; J, t; b4 u0 v" Y5 V
% ?! a) T* n$ X# V: ?5 l+ z 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
2 N4 L4 o( N. |$ e/ m8 @ u$ K U, {
0 M( ~& g$ @, U% `1 w4 x7 z (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
, P J2 a; D2 }& L, @1 w$ g6 U. Y1 Q9 e
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
6 f$ `9 M+ } q' T7 A (3)点击打开串口。
4 T( m9 o$ r& j- T( Y" M
* l/ f2 q q7 e- h, ^; B
1 r; q/ g- G, M) \ 图 3
; t" {) J R1 F8 Y! _) S 配置完串口之后,打开我们提供的代码。# g5 N$ e: d4 \3 p
: B5 q! O" u0 o' T8 b4 g
(1)点击仿真按键。
/ W5 P+ f1 f6 I- s. T8 v
2 Q3 C7 c. J S5 [* p8 w
: V) U* _/ s7 d, M5 L9 i! u7 @ 图 4
5 |; H5 Z5 m/ @ s" w (2)点击运行代码。& `( ^& f- v$ y# N: y
% Z+ |$ y0 ]9 d, ?
. K0 ?0 N* {/ c5 L) x. _ 图5. H% l& S7 L" \3 X2 O
* N/ r/ q5 f/ e: h5 v: g4 e) v" j" ]' ?) c
完成之后,就能看到串口调试助手接收框信息如下。; [5 [) V$ i( H0 V, n$ h
4 P) {; D; E0 a5 E- M" `5 \" }* }5 ~
+ l" I+ {6 q9 |6 d6 N% f 图 6
! _$ p6 Z4 K. `1 h' @2 U
. n( m& ]) o$ m8 j4 g# f. V6 L& t% ~. v8 N/ e7 O
* Y3 X F$ f4 ?1 {+ O+ `# Y# G9 I
0 x$ ^" g, A; A3 S5 F: P文件下载请点击:
7_(100%开源)蓝牙心率防水运动手环_心率监测.pdf
(677.56 KB, 下载次数: 0)
) ?8 Q. j/ i& ~. o! I
. J' J U! V( \4 G% u) r- Z0 q( D( x1 O; z, f: x8 i# u7 X# ?) J
|
|