一、绪论
心血管疾病是目前对人类危害最大的一种疾病,而心电图是检查、诊断和预防该类疾病的主要手段和依据。由于传统的基于PC机平台的心电监护仪,价格昂贵,体积庞大,不便于移动且主要集中在大医院,而无法实时监护患者的病情,给医生和病人带来了很大的不便。近年来,随着嵌入式和网络通讯技术的飞速发展,我们研制出一种基于ARM7处理器的新型嵌入式心电监护仪,它采用Samsung公司的一款ARM7TDMI核的RISC的32位高速处理器S3C44B0X,具有成本低、体积小、可靠性高、操作简单等优点,适用于个人、中小医院和社区医疗单位,为家庭保健(HHC)和远程医疗(Telemedicine)等新兴的医疗途径提供良好的帮助与支持。
二、系统的工作原理
图一 新型嵌入式心电监护仪的系统结构框图
心电信号通过专用电极从人的左右臂采集到后,送入信号调理电路,先经过前置放大器初步放大,经高通滤波滤除直流信号及低频基线干扰后,由后级放大器放大,再经滤波器进一步滤除50HZ的工频干扰,经低通滤波器后得到符合要求的心电信号,由模拟信号输入端送入ADC,进行高精度的A/D转换。为了更好的抑制干扰信号和防止导联松动及脱落,我们在电路中还引入了右腿驱动电路和导联脱落检测电路。系统控制核心采用Samsung公司的S3C44BOX,液晶显示屏(LCD)建立良好的人机交互界面,采集到的信号可以通过LCD实时显示和回放,数据通过因特网基于TCP/ IP(传输控制协议、网际协议) 顺序可靠地传输数据到心电监护中心,为医护人员及时准确的诊断提供参考。嵌入式实时操作系统采用现在流行的uClinx,管理协调各模块工作,为系统可靠的运行提供保证。
三、系统硬件模块设计
3.1、信号调理电路
信号调理电路主要包括:放大器、带通滤波器、陷波器等。
图二 心电前置放大电路
人体心电信号属于强噪声背景下的低频微弱信号,一般只有0.05-5mV,频谱范围为:0.05-100HZ,心电信号正常输出时其幅值约为1mV,而A/D转换器的输入电平要求到达1V左
右,即心电放大倍数约为1000倍,由于肌电干扰可能造成前置放大器静态工作点的偏移,甚至截至饱和,所以前置放大器的增益不能太大。我们选用AD620仪表放大器作为系统前置放大器,它具有低噪声、低漂移、高共模抑制比、高输入阻抗等特点。它的增益通过1脚和8脚的电阻Rg来调节,可达1-100倍,计算公式为:G=49.4 /Rg+1。我设计初级放大倍数在七级左右,选用精度为0.01%,阻值为8.25 的精密线绕电阻,后级选用TL064将信号放大到A/D转换器的输入电平要求。
图三 心电后级放大及滤波电路
为抑制直流漂移和放大器通带外的低频噪声,设计一个RC高通滤波器;因心电信号的频率在100HZ以下,为消除高频信号和50HZ的工频干扰,还设计了低通滤波和带阻滤波器。
为防止导联松动和脱落,设计导联检测电路,电极脱落时,比较器的输出电平由正常的高电平变为低电平,产生报警信号,提醒患者检查导联。右腿驱动电路,人体共模电压检测出后,经倒相放大反馈到人的右腿上,而没有直接与放大器的地相联,这样人体的位移电流不流到地,而是流到运放的输出端,对AD620减小了共模电压的拾取。
3.2、嵌入式处理器及外围电路
S3C44B0X是Samsung公司为手持设备和一般类型的应用提供了高性价比和高性能的微处理器解决方案。CPU内核采用ARM公司设计的16/32位ARMTDMI RISC处理器(66HZ),内核工作电压为2.5V,带有8KB的高速缓存,外部存储控制器8个bank,共256MB,8通道10位ADC和支持彩色/黑白显示LCD控制器,具有普通、慢速、空闲和停止功耗控制模式,精简出色的全静态设计适合于低成本和功耗敏感的设计。
3.2.1、A/D转换
对心电信号的采用精度的考虑主要是出自于对ST段异常分析处理的要求,ST段电平变化为0.05mV已经得到公认,因此采样精度至少为0.025mV。根据美国心脏学会AHA标准和Nyquist采样定律,当信号采样频率等于或大于信号最高频率的2倍时,就可以从抽样后的信号中不失真的还原出原信号。ECG频率范围为0.05-100HZ,我们取采样频率为200HZ,即采样周期为5ms.S3C44B0X内部有一个逐次逼近型8路模拟信号输入的10位ADC,输入满刻度电压为2.5V,能分辨出来的输入电压变化的最小值为2.5V/210=2.5mV,心电采集放大倍数约为1000倍,输入端的最小分辨率约为2.5mV/1000=0.0025mV,故完全满足系统采用要求。
3.2.2、系统程序存储器Flash ROM和SDRM扩展
S3C44B0X自身不具有ROM,因此必须外接ROM器件来存储掉电后仍需要保存的程序代码和数据。我们采用了SST公司推出的容量为1MB×16的CMOS多用途Flash ROM,它具有可靠性好、功耗低、读取速度快等优点。系统复位后,首先从0X00000000地址处开始执行,系统启动代码应该以此地址开始存放,所以Flash映射在处理器的Bank0区域内。
采用Linksmart公司的一种容量为8MB的SDRM L43L16064作为系统程序的运行空间、数据区和堆栈区,供系统快速读写。它的存储方式为4Bank×1MB×16,采用多Bank和管道结构,具有自动刷新、低功耗和掉电模式。其存储空间映射在S3C44B0X的Bank6上,地址范围为:0XC000000H-0XCFFFFFFH。
3.2.3、液晶显示LCD和键盘模块
为了使用户能够对采集到的心电信号有一个直观的印象和进行常识性的观察,我们采用了EPSON公司的EG1147型FSTN单色液晶显示模,对时间、波形、心电参数和系统菜单进行显示,同时配合按键进行仪器控制和设定。它的显示器点阵为240×320,采用EL背光源,自带驱动器,通过对S3C44B0X内置LCD控制器编程,将定位在存储器的显示缓冲器内的图像数据传送给外部LCD的驱动器中,PC口和PD口作为LCD驱动接口,设置PC口工作在第三功能状态,PD口工作在第二功能状态。
3.2.4、以太网模块设计
S3C44B0X没有集成网络接口控制器NIC(Network Interface Controller),因此我们为系统扩展了一个REALTECK公司的RTL8019AS控制器,它与NE2000兼容,软件移植好,接口电路简单。RTL8019AS工作原理:驱动程序把要发送的数据按照指定格式写入芯片并启动发送命令即可。反之,芯片从物理通道上收到信号会直接根据以太网协议把他们转化成相应格式的数据,并发出中断,请求CPU读取数据。
四、系统软件设计
软件设计主要包括嵌入式操作系统uClinux在S3C44B0X上的移植,心电数据的采集和存储,基于S3C44B0X的嵌入式GUI的实现,网络设备驱动程序开发等。
4.1、嵌入式uClinux操作系统在S3C44B0X上的移植
uClinux是专门针对无MMU(Memory Management Unit 内存管理单元)的处理器而设计的一种免费开放源代码的操作系统。支持多任务,采取模块化设计。系统移植可分为bootloader和内核的移植两大部分。
Bootloader从本质上讲它不属于系统内核,在CPU上电启动后即开始运行,创立初始化环境和引导内核。这部分代码用汇编语言编写,主要完成硬件初始化,对系统的存储映射(memory map)进行初始化设置等操作,同时改变PC值,使得CPU开始从SDRM执行操作系统的内核。
内核移植时首先RedHat Linux环境下下载源代码文件包建立交叉编译环境,接着进入uClinux-dist文件夹进行内核配置,系统配置主要由三部分组成:Makefile、配置文件(config.in)和配置工具(在/script目录下)。运行make menuconfig命令,会现顶层菜单,选择硬件系统、内核版本和C库的选择,我们在这里vendors选Samsung的S3C44B0X,内核版本为Linux-2.4-x,C库选uClibc。接着要修改源代码,对应于各个硬件的子目录中,例如在uClinux-dist/linux-2.4-x/drivers/修改或增加驱动程序;保存设置退出后运行再执行make dep和make lib_only命令,生成C库;运行make user_only生成应用程序;接着运行make romfs和make image,生成rom文件系统,拷贝内核文件到uClinux-dist/images中;最后运行make,生成可供嵌入式系统运行的内核文件,这时可以在uClinux-dist/images中出现三个文件:含“rom”是压缩内核,含“ram”是直接运行的内核,romfs.img是uClinux的文件系统。“ram”和“rom”文件可以通过超级终端从PC串口下载到嵌入式系统的内存中直接运行,这时超级终端上也将显示uClinux的启动信息。
4.2、基于S3C44B0X的嵌入式GUI的实现
屏幕驱动的程序设计主要是PSD(Pointer to Screen Device)的结构指针,指针所指向的结构中记录了有关的一切属性,根据显示属性判断选择那个子函数来提供有关的显示函数。图形引擎调用PSD完成矩形,圆形等作图函数,这些函数调用底层的屏幕驱动基本作图函数来完成图形显示。
4.3、RTL8019AS驱动程序在uClinux下的实现
在uClinux中,网络接口被看作是一个发送和接收数据包的实体,用一个net_device的数据结构表示,在数据结构中定义对网络接口的各种操作。程序我们是在uClinux网络驱动文件的基础上修改而成,主要修改在/drivers/net下的两个文件:ne.c和8390.c,包括芯片的初始化、收包、网络注册等大部分工作。内核在初始化时会自动调用函数ne_probe(),读取RTL8019AS标识寄存器,检测设备是否存在以决定是否启动驱动程序,配置和初始化硬件,然后初始化net_device结构中的变量,再调用Rtl8019as_init()对RTL8019AS做寄存器的相关设置,最后根据starp的值来启动和关闭RTL8019AS。
五、结束语
针对心电信号ECG极其微弱和极易受到外界干扰的特点,本文的创新点为采用具有低漂移、共模抑制比的仪表放大器AD620对信号进行初级放大,并设计右腿驱动电路以增强信号的抗干扰能力; LCD的引入给人直观的印象和常识性的判断;采集到的数据可通过以太网实时传输到远程数据中心,供专家分析和诊断;嵌入式uClinux的引入保证了系统稳定、可靠的运行;小型化的设计,更有利于患者的携带。随着心血管疾病的发病率不断地逐年上升,这种便携式心电监护仪具有很高的应用价值和良好的市场前景。
参考文献:
[1] 张华 和卫星 徐栋君 陈相朝 基于S3C44B0X的便携式心电监测仪的研制 2006
[2] 杨崎 刘大茂 一种用于心电信号采集接口的调理方法 福州大学学报 2003
[3] 唐鸿华,罗贵娥,吕扬生. 基于S3C44B0X的智能仪表以太网接口设计.电子质量.2004.6
[4] 张州 基于ARM7的便携式心电监护仪及心电分析的研究 广东工业大学 2005
[5] 唐怀武 基于ARM处理器的仪器网络化应用与研究浙江大学 2005
[6] ANALOG DEVICES INC. AD620 DATA SHEETS. 2005
[7] 毛德操 胡希明 Linux内核源代码情景分析 浙江大学出版社
[8] 吴旭 移植uClinux到嵌入式系统的方法有线电视技术 2005.14[9] 杨亮 杨宜民 陈波 基于uClinux平台的程序设计《微计算机信息》 2004