找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4135|回复: 0
打印 上一主题 下一主题
收起左侧

自制心率测量仪

[复制链接]
跳转到指定楼层
楼主
ID:71235 发表于 2014-12-27 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
花了整整18个小时,终于完成了这个心率测量仪,看图:


    因为从策划到制作完成经历了1年半多的时间,期间方案多次更改,所以很需要记录一下整个过程。

    一、起源:
    灵感还是来自爱折腾,看了后当时就想复制一个。

    二、准备工作:
    爱折腾的这个制作包括模拟检测、放大,单片机计数、显示两部分,模拟检测通过红外发射接收对管检测指尖血流变化,经过两级放大、低通、高通滤波后,形成一个跟心率同步的脉冲,然后由单片机检测计数后,送显示器显示。我的方案保留了模拟检测部分,单片机选用了80C2051,脉冲检测方式改为测量脉冲的周期,然后由周期推算出1分钟的心率值,因而这个数值是动态的,省却了启动按钮等操作。而原作是才用计数15秒内的脉冲数,再计算出1分钟速率,单片机也是用PIC。考虑到测量脉冲周期需要标准的方波,所以我在模拟和单片机之间加上了一个555电路做的斯密特触发器,对模拟脉冲进行整形。
    方案定下后是先做个试验,确认模拟部分是否可行的。试验在面板板上做的;这是2011年7月做的:

     电路中才用MCP602这一点很重要,因为普通的单电源运放电压输出幅度只能达到2/3VCC,刚刚达到高电平门限,有可能造成后级单片机检测失误,试验也证明了这一点。模拟电路通过后又用另外一块面包板搭建了一个80C205电路,用三个微型的数码管作为显示器,因为心率脉冲周期常常大于1秒钟,而单片机无法提供如此长度时间测量,所以采用5毫秒的定时器定时检测脉冲,检测到脉冲中断后开始计数,直到下一次中断计数结束,然后计算一个脉冲周期的计数值,再乘以5毫秒,就是一个完整的心率周期了,而5毫秒的定时间隔对于心率这样很长的脉冲,精度影响是很小的。单片机部分也取得了成功,这样完整的系统就算定下来了。接下来是设计PCB,由于近年形成的习惯,做东西前都要选一下外壳,一定要根据外壳定电路,而且是壳越小越好,结果造成PCB设计很困难,因为自己只能做单面的,走线很不容易,这是2011年9月未设计完成的PCB:

    三、 成为Arduino的扩展板
    认识Arduino是在2012年的4月,Arduino这个平台和适合做原型开发,于是决定将搁置下来的心率测量仪在arduion上实现一下,6月份做成了这个扩展板:





      实现了方案的模拟部分,单片机部分由arduino来实现,程序原理也是照搬原来的方案,显示器没有使用数码管,而是用了上次做便携温湿度气压计用过的4位液晶显示器,可以说这是对心率测量仪等一次最接近实用的试验。

     四、最终实现!
     也许最近是闲得慌吧,想要完成这个制作的念头一下子冒了出来。不过方案又有了新的更新,这次突然想用attiny13来实现单片机部分了,因为最近5~6个制作都是用attiny13来实现的,手头也有好几片,冷静思考了一天后又觉得不太可行,因为attiny13一般都是用内置的RC振荡器,据说误差有10%,也即一分钟60次心跳会有6次的误差,这显然有点大了,替代方案有两个,一个是改用attiny24,可以外接晶振,程序空间也有2K,余地大点,二是attiny13接入有源晶振,但是有源晶振不便宜,而且占用占地儿。在确定最终方案前,先用手头的一个attiny13开发板+上面的arduino心跳扩展板做了一个测试,程序还是沿用原来的原理,简单的程序很快就搞定了,build结果是962字节,刚好没溢出,又花了一个晚上将5毫秒定时搞精确,先是用对照实际心率调整定时器top值,后来是采用空余引脚输出100HZ方波,用频率计测量这个频率,同时调整RC振荡器的9.6m校准值,最终将定时搞准确。测试过程中发现温度对频率的影响只有1.5%,这样的精度对心率完全够用了,100次也就误差1次而已,根据测试,555整形电路其实也是可以取消的。这样整个方案就最终确定了,模拟不变,主控采用attiny13,不再采用整形电路!
      昨天早上开始设计PCB,从制作水晶发光底座开始(以后再撰文描述),就已经开始大量实用贴片元件了,为此还买了个拆焊台。这次PCB设计自然也是用贴片元件,由于模拟部分电路比较规律,单片机部分又比较灵活(输入输出引脚可以随PCB设计需要更改),所以设计完成时,没有一根跳线,电路中的1uf电容由于没有找到替代的无极性电容,所以还是使用了直插的,红外发射接受管也只能用直插的,而且要安装在top层,除了一个SIP接口用了插针,LCD接线和电源接线采用直接焊接的方式,这次的机壳还是用上次便携温湿度气压计的外壳(mini数字磁带盒),所以PCB为这个机壳而优化,attiny13从SSU改成了SU,就是为了让一部分线从芯片下走过。接着是腐蚀电路,在把电路板放入腐蚀剂不到一分钟,突然发现热转印转反了!赶紧捞出来重做。到傍晚时分,PCB制作完成。开始焊接元件,MCP602也是早上刚到的,其他的电阻电容也全都有,因此花了点时间还是完美完成了。


      调试:晚上开始调试。遇到的第一个问题就是模拟电路貌似不起作用,手划过红外管的时候,输出指示灯会闪一下,手指头按在红外管则什么都没有,郁闷了好久,找来那块扩展板,将那块板的红外输出信号接入新板,发现新板的电路是好的,看了问题出在那个红外发射接收模块上,在换还是不换上犹豫了好久,最终决定换,换上扩展板上的那一个,换好后,手指头按在红外管上,指示灯果然能一闪一闪跟着心跳节律闪动了。然后又花了2小时,把主控板、显示器、锂电池、锂电池充电板、开关、充电插座硬塞进了一个名片大小的盒子里了。已经12点了,总装完成了,该实际测试了,但是测试结果令人失望,显示器显示的数值比真实值少了20多,问题在哪儿呢?首先考虑是因为没有整形电路,造成波形不规律,影响了测量的准确性,用示波器测量输出脉冲波形,发现幅度很小很小,只有1v多点,怎么回事呢,难道运放是坏的,或者买错了片子?再次郁闷。。。拿起探头看看,上面的开关打在了10X上!猛然想起,ATTINY13每个片子的时钟都要单独校准的,自从烧完片子后就没想过这个问题,还是沿用老的校准值,于是开动IDE和编程器,开始调整参数,也许心太急,也许万用表表笔碰了不该碰的地方,也许校准值调的太低,反正是那块attiny13再也不能编程了,那一刻真想放弃了,可是看到自己花了1年多时间,都已经非常非常接近完成了,难道就因为换一块芯片稍微有点麻烦就放弃了?换了后再次校准、比较,显示值终于正确了,此时已经快2点了。

     结语:能够完成一件尽管一点都不伟大,却时常萦绕在心头的事情,感觉真好~~~


评分

参与人数 1黑币 +1 收起 理由
handsomelchcpp + 1 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表