2012届毕业设计(论文)
5 系统软件设计
基于单片机心率计的软件设计主要由主程序流程图、中断程序流程图及显示子程序组成。我们知道C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易精细计算程序运行的时间,而心率计的程序既有较复杂的计算(时间t内的平均值),又要求精细计算程序运行时间(动脉搏动时间),所以控制程序可采用C语言和汇编语言混合编程。
5.1 测量计算原理
设K个连续的动脉搏动所用时间为t(秒),在时间 t 内心率的平均值为n(次/分),则:
n = 60K/t (1)
为了能够控制用单片机计算机测定t值,我们利用脉动信号控制(在K个连续的脉搏周期内)单片机的定时/计数器T0定时(定时1ms中断一次),工作寄存器对中断次数进行计数,然后读取计数值。设该计数值为N,于是有:
t = 0.001N (2) 把(2)带入(1)得到:
n = 60k/0.001N =60000K/N (3) 式(3)就是利用单片计算机测定心率值的数学模型(误差小于0.4%)。在该单片机系统中,K = 1~~9(用户可通过按键自行设置)。可测心率范围20次/分~~200次/分(N的范围:300~~30000).
5.2 主程序流程图
程序流程图如图5-1所示。程序初始化是每个单片机程序所必备的,它的主要任务是确定程序人口和中断人口地址。接下来是显示为全零,主要目的是为了区分是否有信号送人,当没有信号送人时,显示为全零,则说明心率计没有工作,反之,则正常工作。定时lOOms是设计中比较重要的一部分,它主要是为采样6s打下基础。设计中运用定时器T1的定时功能
22
2012届毕业设计(论文)
来实现100s的定时,等待中断占用了程序执行的大部分时间,它主要是一个死循环语句,只有当中断条件满足时,才执行中断服务子程序,对计数的结果进行累加,累加之后,判断采样的次数,如果采样未满60次,说明不到6 s,返回继续采样、等待中断,直到采样60次为止,之后把6s内采样得到的次数由二进制数转化为十进制数,送到数码管进行动态显示。
程序初始化 第一次显示全零 关中断 开始 定时100ms 定时器赋值 N 等待中断 Y 小于50次/分钟 中断
大于199次/分钟 累加计数结果
采样60次
二翻十
显示心率 保持数值程序 开中断 返回 图 5-1 程序流程图 图5-2 中断程序流程图
5.3 中断程序流程图
心率的有效测量范围为50次一199次/分钟,为了消除外界信号的干扰,在定时器中断程序中加入了对频率大小的判断,滤除掉小于50次/分
23
2012届毕业设计(论文)
钟和大于199次/分钟的脉冲信号,中断程序如图5-2所示.
5.4 定时器T0和T1的中断服务程序
定时器T0的中断流程图如图5-3所示,定时器T1的中断服务流程图如
图5-4所示。
保护现场
置T0定时初值
N R1R4+1送R1R4
Y 恢复现场
中断返回
·
图5-3 定时器T0的中断 服务程序流程图
保护现场 置T1定时初值 外部中断0关闭 中断次数(100次)-1=0? 外部中断0打开 恢复现场 中断返回
图5-4 定时器T1的中断
服务程序流程图
24
2012届毕业设计(论文)
6 系统硬件调试
在制作实物之前,首先需要根据自己制作实物的思想步骤和实物所要达到的功能绘制出元器件的原理图,然后把原理图放到 ISIS 7 protues中进行仿真。因为元器件的大小不同,达到预期功能的效果也不一样,在这种情况下,就需要对硬件电路进行变换和调试。实物焊接出来之后,考虑各种干扰和影响因素,还要对硬件进行整机调试。系统的调试过程是检验、修正设计方案的实践过程,也是应用理论知识来解决实践中各类问题的关键环节,是电路设计者必须掌握的基本技能。
6.1 系统各部分电路模块测试与仿真
6.1.1 一级放大电路
心率计的主要原理是随着心脏的搏动,人体组织半透明度随之改变。当血液送到人体组织时,组织的半透明度减小;当血液流回心脏,组织的半透明度增大。这种现象在人体组织较薄的手指尖、耳垂等部位最为明显。当用光电红外传感器接收到该变化后,但由于该变化很微弱,这就需要放大器对其进行放大,这就是一级放大电路。放大电路如图6-1所示。
图 6-1 一级放大电路
25
2012届毕业设计(论文)
图 6-2 R5为125K时的仿真图
图 6-3 R5为1M时的仿真图
如图6-1所示,C2为电解电容,开始使用的电容为0.1u,此时发现通过的交变电流很少,当改成10u之后,几乎所有的交变电流都可以传输到放大器U1A放大,电解电容C3的原理和C2一样。R5为接在放大器两端的电阻,它的值直接影响着放大器的放大倍数。经计算当R5的值为125K时,放大器的状态最好,不失真。仿真如图6-2所示,此时放大器的放大倍数为25倍,信号的放大不足。所以把R5的值改为1M,此时的仿真图
26