我们研制一种以单片机为中央处理单元的小型便携式多功能心电信号发生器,功能齐全,操作简单,便于携带,可满足各种心电图分析和仪器开发的需要。
1、设计要求
系统的设计目标是在研制24小时动态心电图记录和分析系统的基础上,综合考虑仪器的通用性和实用性而提出的,要求能够输出平均心率4Obeat/m~180beat/m、幅度土5mV连续可调的心电信号,除可以连续输出给定规律变化的不同心率的窦性心博信号外,应能连续输出室性、室上性早博信号(包括单个、成对、二联律、三联律以及室速、室上速等),连续输出不同形态及不同位移的ST段(包括ST水平下降,ST上斜,ST下斜)心博信号;作为标准校验信号,应能产生周期为1秒,脉宽为100ms,幅度为1mV的方波,其幅度的精度和稳定度好于1%。上述信号均以三导联(模拟CM-V5、CM-V1、CM-V3)同步输出,并具有良好的人机交互能力。另外,应能选择稳压电源和电池两种供电方式,用户按液晶屏上的提示信息通过微动式薄膜键盘控制信号的产生和调整。
2、硬件实现
系统采用ATMEL公司51系列的产品AT89C55为中央微控制器,为了保证系统的稳定和ECG信号的特殊要求,采用了MAX527作为四通道真12位DAC,对AT89C55提供的数据进行变换,产生伏特量级的模拟量供示波器进行观察,再经衰减后得到所要求的心电信号。由于要存储大量心电图模板,选择了AT89C55以使用该芯片含有的20KB的E2PROM。为保证电路的简化和低功耗,系统未采用单片机的扩展模式,AT89C55的用户I/O端口PO~P3均可作为用户的I/O口使用。由于有较多外设,P0口可同时作为LCD模块和MAX527数模转换器的数据输入;P1口则部分作数模转换器输出通道的控制,部分接受键盘的外部中断(键盘3×3,行列共6根数据线);P2口保留一部分,另一部分与的口中的P3.3~P3.5共同提供LCD模块的状态控制字;四口的其余部分用于控制MAX527的时序。系统使用了MAX527的全部四个通道,根据需要分别输出CM-V5、CM-V1、CM-V3三路时间上同步的心电信号和一路模拟地信号,当前时钟周期内的输出通道由管脚Al和AO的电平决定MAX527数字量存人的内部通道寄存器。按每心拍250点的采样率计算,虽然在每个采样点上以三导联的顺序输出,但在整个心拍的角度看三路信号完全同步。当MAX527的内部通道时确前一个完整的12位数模转换过程需要管脚阳上的两次低电平脉冲(脉冲宽度大于200ns),在**次脉冲期CSMSB低电平有效,输入数字量的高四位;*后使管脚LDAG低电平有效,相应的通道即有相应的模拟量输出。
系统采用的回D模块内藏回T6963C点阵式液晶图形显示控制器,能够与80系列的8位微处理器直接接口,具有128个字符的内部字符发生器CGRAM,并可管理64K的显示缓冲区,允许MCU随时访问显示缓冲区。该点阵式控制器可以用图形方式、字符方式及图形和字符合成方式进行显示,以先参数再指令代码的方式执行带参数的控制器指令。在本系统中,采取MCS51汇编语言的形式实现指令和数据的送人。
3、软件结构
由于MCU要控制键盘、液晶显示和数模转换器等较多外设,又要实现的较多的功能,这给软件的开发带来了种种的困难。
3.1、心电数据模块的处理
不同的心电图序列的数据模块与运行程序同时要写入MCU的E2PROM,这就要考虑ROM空间容量的问题。以每秒250次采样、每个采样数据2字节计算,三导联的每分钟心电数据即要占有9OKB,这样即使采用20KB E2PROM的MCU,也不可能容纳我们所需各种形态的心电数据序列,为此设计了特征心拍代号的映射方法来解决。虽然在每个采样点上以三导联的顺序输出,但在整个心拍的角度看三路信号完全同步。当MAX527的内部通道寄存器确定后,一个完整的12位数模转换过程需要管脚WR上的两次低电平脉冲(脉冲宽度大于200ns),**次脉冲期间使管脚CLSLB低电平有效,输入数字量的低八位;在**次脉冲期间,使管脚CSMSB低电平有效,输入数字量的高四位;*后使管脚LDAG低电平有效,相应的通道即有相应的模拟量输出。系统采用的回D模块内藏T6963C点阵式液晶图形显示控制器,能够与80系列的8位微处理器直接接口,具有128个字符的内部字符发生器CGRAM,并可管理64K的显示缓冲区,允许MCU随时访问显示缓冲区。该点阵式控制器可以用图形方式、字符方式及图形和字符合成方式进行显示,以先参数再指令代码的方式执行带参数的控制器指令。在本系统中,采取MCS51汇编语言的形式实现指令和数据的送人。
3.2、阵列式键盘反转法判断键位
反转法是一种稳定而有效的判断按下键位置的方法。本系统采用了阵列式3×3键盘与MCU的P1口连接,其中列线为P1.2,P1.3,P1.4,行线为P1.5,P1.6,P1.7,而三根行线通过二极管接到微控制器的刑10(P3.2)管脚,作为外中断输入。首先将行线置高电平,列线置低电平。当有键按下时发出中断申请,同时行线的数据输入到内存,其中0位即对应按下键的列位置。然后再将行线置低电平,列线置高电平,则行线数据中的0位对应按下键的行位置。这样行列位置确定键位后,由键盘中断服务程序赋予相应的键值,从而转入相应的中断服务程序。
系统的键盘中断使用微控制器的外中断刑10,中断向量为0003H。键盘中断服务程序中的参数keyBuf用于控制主程序的流程,如信号发生的开始、暂停和退出等;而Amplitude、HeartRate、Module分别控制心电信号的幅度、心率和当前序列,是心电信号的主要参数,与非键盘控制的当前序列指针参量共同确定一个心拍的输出结果。
3.3、采用时钟中断延时调节输出信号心率
由于每两次数模转换过程中要做大量的计算工作,因而占去了较长的运行时间。例如。对于心率为40~180的情况下,每次数字量输出之间的间隔为1.3ms~6ms通过软件模拟,在12MHz的外部晶振下,上述计算工作的运行时间约为0.8m,显然通过在主程序中加入循环延时难以对心率**控制。因此,在本系统中,使用了时钟中断源1的方式1来控制输出信号的心率。
程序运行时首先通过定时器1自定义用户周期(当前心拍长度/采样率),然后在当前的用户周期中输出三导联心电信号和模拟地信号,当输出工作完成后,用户程序进入等待状态,直到下一个用户周期开始。在整个用户周期中,定时器一直进行计数,即TH1、TL1相连成十六位计数器并在每个机器周期后对初始值X加1,当X=0FFFFH+1溢出时产生时钟中断。不难看出,两次中断问时间Y满足Y=(10000H-X)×时钟周期,并且Y×250=当前心率,这样可由(216-X)×MCU时钟周期=当前心率/250确定初始值X。每当新用户周期开始,都应在计数器存入当前心率所得到得X,这样就能保证**地控制产生心电信号的心率。
4、实际应用
设计完成的多功能心电信号发生器,在我们研制的新型24小时动态心电图记录和分析系统上进行了应用性试验。结果表明该系统可连续24小时输出心电信号,不同心搏特征明确,幅度、心率、形态易于调整,并准确通过了分析程序的检测。整个系统高度集成,随身携带,用户液晶界面显示清晰,薄膜面板上微动键盘操作简单,并具有电源和电池供电选择,可满足各种心电图分析仪器研制、生产及维护中的应用要求。