除了心率模块以及EEPROM,软件部分做到现在已基本趋近尾声。因此,本文主要探讨这两部分的驱动实现。
首先,为了保证心率信号的准确采集,我利用逻辑分析仪看了心率信号的大概波形,当然了,肯定没有示波器看的真实,但也足够帮我找到信号的频率。
硬件连接图如下:
逻辑分析仪抓到的波形图如下:
由上图可以看出心率信号输出频率大约为1-1.4Hz,换算为一分钟的波形则为60-84。对于成年人来说,正常心率范围在50-110/min,在剧烈运动时这个数值还会更高些。
这个心率波形产生的原理是这样的,心率信号经过自带光学滤波及一级放大的SON1303处理以后,再经过SON3130构成的二级放大及反相滞回比较器整形输出方波信号。
到此,心率传感器硬件部分介绍完毕,开始着手于软件实现了。软件部分比较简单,在这里,我使用的是定时器0的通道0和通道2。通道0用于心率信号的计数,通道2用于计时。同时开启通道0和通道2;每当通道0捕捉到一个波形后,关闭通道2的计时器。然后利用这个值来计算心率值。当然,这样做肯定会存在很多的干扰,在程序里我利用了阈值法和平均值滤波进行处理。程序会首先进行定时器值的中值滤波,只有在大于500才会进行下一步运算(这里的500指的是一次波形花费的ms值)。计算完成本次心率值后,就开始将当然心率值写入EEPROM中。这样就完成了一次测量。
由于需要进行数据的存储及读取操作,因此我们接下来调试IIC接口的AT24C64。这部分内容可以参考瑞萨官方的代码----> r7f0c809_external_event_counter_and_data_access_software.zip。利用模拟IIC的方式使得R7F0C809与AT24C64进行通信。
抓取了一个读取波形瞅瞅:
[media=x,500,375][/media]
在完成了这部分的工作后,接下来就是按键的检测操作了,为了偷个懒,直接循环检测的:在检测到按键有按下后,程序会读取EEPROM中存在的历史心率数据,然后显示到OLED上。
本文涉及到的代码和其他资源可见附件。
本文来自论坛,点击查看完整帖子内容。