|
基于RL78G14的心率仪创意进度帖-进度-9、心率信号调试并串口实时显示,附视频源码
[复制链接]
临近双11,一直在忙,无暇分身....(玩笑...早已不是棍子了,不过更忙了)
之前信号一直有问题,刚开始是出不来信号,后来是采样数据混乱,各种的错误,期间陆陆续续调试了几次,发现了软硬件上的一些BUG;上周末总算马马虎虎调出了满意的波形,但是还是有一组周期性的干扰信号串入,初步怀疑是室内日光灯管干扰或是数据溢出问题,后续继续努力,这里先把之前碰到并解决的一些问题和大家分享一下。
1、信号的调试。
用到的传感器是淘宝上买来的高频血氧对管,发射是红光和红外光,接收管是把相应的光强转换为和频率对应的脉冲,通过检测脉冲的宽度来检测相应的血氧值,而这个值的周期变化反映了血液的跳动,也就是脉搏或者心率。
我是通过 Interval Timer时钟产生发射管的交替脉冲,见这篇帖子https://bbs.eeworld.com.cn/thread-416327-1-1.html;通过Timer02定时器的TI02的IO口来做频率计数,由于计数时间是一定的,所以频率就和周期是对应的。
实际调试中发现信号变化不大,搜索了很多帖子结合做红外接收头的经验判断是接收头对外界光线灵敏,外界干扰所致。由于是用板子间的见习作为暗室,这种情况很难避免,于是做了个这种的处理,用热缩管把发射和接受管包起来,只留中间很小的角度,保证光线能集中的发射和接受到,减少外界干扰。这样信号有了显著改善。
2、程序调试
调了几次发现采集的数据很混乱,无规律可循,仔细检查程序和对应的文档发现,T02作为外部计数时是递减计数,中断是在递减到0时触发,所以我每次计算计数值时需要判断终端是否出发,计算差值。代码如下- /* Interval Timer ISR serviced user flag complete */
- if(IT_flag == MD_SET)
- {
- /* Clear the IT_flag */
- IT_flag = MD_CLEAR;
- evts=TCR02.tcr02;
- if(bRefresh)
- {
- evts=0xFFFFU-evts+oldevts;
- }
- else
- {
- evts=oldevts-evts;
- }
- oldevts=TCR02.tcr02;
复制代码 希望对大家有所帮助。
好了,又要去忙了。下面是是视频和代码。
代码:
src_9.rar
(85.9 KB, 下载次数: 23)
视频:
|
赞赏
-
1
查看全部赞赏
-
|