基于Linux和MCU的心电监护仪设计

发布者:lqs1975最新更新时间:2023-01-12 来源: elecfans关键字:Linux  MCU  心电监护仪  S3C2440 手机看文章 扫描二维码
随时随地手机看文章

  随着人们生活节奏加快,人口逐渐老龄化,心脏疾病成为危害人类健康和生命的主要疾病之一。心电监护系统为心脏病人诊断和治疗提供了一个有效的手段,对心脏疾病的防治和诊断具有重大的意义,本介绍一种基于Linux 和MiniGUI 的心电监护系统,能够满足患者随时随地对心电进行方便快捷的监测,及时地发现异常情况并采取有效的措施,从而更好地保护人们的身体健康。


  1 硬件系统设计

  本系统采用S3C2440 处理器作为控制中心,S3C2440 是基于ARM920T 内核的16 /32 位RISC 嵌入式处理器,最高主频可达532MHz,提供64MSDRAM、64M Nand Flash 以及2M Nor Flash 的存储设备,独立的16kB 指令缓存和16kB 数据缓存,LCD 控制器,3通道的异步串口,SPI 同步串口,117 位通用的I /O 口,1个内部时钟,8通道10 位的ADC,触摸屏接口,以太网控制器、PCMCIA 接口、USB 接口等,具有高性能、低功耗、高性价比等特点,主要用于视频会议、网络监控,GPS 定位/导航仪等,特别是医疗电子设备。系统的整体硬件结构如图1 所示,能够实现对心电信号采集、处理、显示、存储等功能。

  图1 系统总体硬件结构

  图1 系统总体硬件结构

  2 软件系统设计

  2.1  构建嵌入式Linux

  心电界面的开发是基于MiniGUI 的嵌入式Linux系统。在各种嵌入式操作系统中,Linux 以其结构清

  晰、源代码公开、功能强大、又易于移植得到广泛的使用。本系统内核采用2. 6 版本的内核,Linux 2. 6 内核在性能、模块支持、可用性、可测量性等方面有大幅度的提高。一个完整的嵌入式Linux 系统主要包括BootLoader( 引导程序) 、内核和根文件系统3 个方面。本系统中Bootloader 采用ViVi,文件系统采用Yaffs。根据目标平台实际的需要,对引导程序、内核和文件系统进行裁减、配置,最后把编译好的ViVi 以及生成的Linux 内核和文件系统的镜像文件烧录到平台中并运行,嵌入式Linux 构建完毕。


  2.2 图形用户界面MiniGUI

  MiniGUI 是基于Linux 的轻量级的图形用户界面支持系统,是由原清华大学教师魏永明主持开发,遵循GPL 公约。所支持的操作系统已不仅仅限于Linux,它还可以在uClinux、uC /OS-Ⅱ、eCos 和Vx-Works 等系统上运行。已验证的硬件平台包括Intelx86,ARM ( ARM/AMR9 /StrongARM/xScale ) ,Power-PC,MIPS,M68K ( DragonBall /ColdFire ) 等。对MiniGUI 移植,首先下载MiniGUI 的源代码libminigui-1. 6. 10. tar. gz ( MiniGUI 函数库源代码) 和minigui-minigui-res-1. 6. 10. tar. gz( MiniGUI 所使用的资源,包括基本字体、图标、位图和鼠标光标) ,然后编译安装并将MiniGUI 的资源拷贝到目标平台上,最后修改目标平台的/etc /MiniGUI. cfg 文件,对目标平台MiniGUI 的运行环境进行配置。


  2. 3 心电采集界面设计

  2.3. 1 主界面

  MiniGUI 中有3 种窗口类型: 主窗口、对话框和控件窗口,心电采集界面是采用对话框进行设计,对话框编程是一种快速构建用户界面的技术,MiniGUI提供了一种基于模板的机制,利用DLGTEMPLATE和CTRLDATA 两个结构体来表示,DLGTEMPLATE用来定义对话框本身,结构体CTRLDATA 用来定义控件。利用这两个结构体模板,用户可以根据需要在程序中定义自己的对话框和控件。主界面的对话框定义如下:

  staTIc DLGTEMPLATE DlgInitProgress =

  {

  WS_BORDER WS_CAPTION,

  WS_EX_NONE,

  0,0

  , 240, 320,

  “ 欢迎使用心电信号采集系统” ,

  0,0

  ,

  10,NULL,

  0

  } ;

  用CTRLDATA 定义对话框中所有的控件并用数组表示,对话框常常使用控件来实现提示或者设置等功能,定义控件数组模型如下:

  staTIc CTRLDATA CtrlInitProgess[]=

  {

  { CTRL_STATIC,

  WS_CHILD|WS_VISIBLE| SS_NOTIF

  |WS_BORDER,

  0,0

  , 240, 30

  IDC_STATIC1,

  “欢迎使用心电信号采集系统”,

  0

  } ;

  {

  …

  } ;

  …

  } ;

  通过上述方法生成的心电监护仪主界如图2 所示。心电采集界面主要有心电数据采集与显示、存储、分析等功能,采用多线程编程,为采集、显示、存储、分析各建立一个专门的线程。多线程进行数据采集可以有效地加快程序的反应速度、增加执行的效率。


  在 MiniGUI 中,使用消息驱动作为应用程序的创建构架。在消息驱动的应用程序中,计算机外设发生的事件都由支持系统收集,将以事先的约定格式翻译为特定的消息。应用程序一般包含有自己的消息队列,系统将消息发送到应用程序的消息队列中。从消息队列中读取这些消息,并由窗口过程函数来处理这些消息。本系统界面通过鼠标键的按击,翻译成特定的消息,若收到的是控件消息,则判断ID,根据应用程序进行相应的消息处理。


  2. 3.2 心电采集与显示

  心电数据采集采用定时器进行采集和显示,定时器使用SetTimer 函数创建,创建时需要指定定时器标识号以及定时时间,当定时时间到达时,定时器将会产生MSG _ TIMER 消息,本系统的心电采集频率为200Hz。


  从A/D 寄存器读取三通道的数据存入数组中,并将数组中的数据在液晶显示器上绘出。在MiniGUI 中实时绘图采用GDI,GUI 系统的一个重要组成部分就是GDI,即图形设备接口( Graphics Device Interface) 。通过GDI,GUI 程序就可以在计算机屏幕上,或者其它的显示设备上进行图形输出,包括基本绘图和文本输出。所有绘图相关的函数均需要有一个设备上下文,为了提高绘图效率,在这里建立私有设备上下文,所建立的设备上下文在整个窗口生存期内有效,从而免除了获取和释放的过程。利用hdc =GetPrivateClientDC( hDlg) 可获得私有设备上下文。然后调用MoveTo ( HDC hdc, int x, int y) 和LineTo( HDC hdc, int x, int y) 对数组中的数据进行画线,由于采集到的心电数据较小,因此在对其进行画线之前根据显示区域对所有数据进行适当放大,这样可以使心电波形在液晶显示器上直观显示。


  2.3. 3 心电数据分析

  在心电数据显示和分析线程中,由于心电信号容易受到各种干扰的影响,为了滤除心电信号中的干扰成分,首先要进行数字滤波处理,采用FFT 滤波和滑动平均滤波的方法使图像得以平滑,并采用差分方法进行R 波检测。当采集到5 秒的数据的时候,程序启动心电数据分析线程,对存储在数组中的心电数据进行分析,主要进行R 波检测,并且在液晶显示器上显示。


  2.3.4 心电界面程序的编译

  心电界面程序首先是在PC 机上编写的,为了能够在目标平台上运行,必须先进行交叉编译,编译

  如下:

  #arm-linux-gcc -I /home /include -L/home /lib-O2 -oxindian xindian.c -lminigui -lmgext -lm -ljpeg-lpthread-lpng

  这时生成心电界面程序的可执行文件,将其下载到目标平台中即可运行。


  3 结束语

  本文研制的心电监护仪采用高性能的ARM9 微处理器为核心,在其上移植Linux 操作系统,并用MiniGUI 进行心电界面开发,能够对心电信号进行采集、波形显示及处理,实现心电信号的实时监护的目的。该心电监护仪结合了目前现有的心电监护仪的优点,体积小、重量轻,并且具有操作界面简洁、可扩展性强等优点,对各种心率失常及各种心脏病变有较高的诊断价值。


关键字:Linux  MCU  心电监护仪  S3C2440 引用地址:基于Linux和MCU的心电监护仪设计

上一篇:基于3G手机的视频监控系统设计
下一篇:基于ADV7125的嵌入式系统VGA接口设计

推荐阅读最新更新时间:2024-11-08 12:14

单片机中按键消抖动
对于单片机中的按键消抖动,本节Bingo根据自己当年写过的单片机其中的一个代码来讲解,代码如下所示: unsigned char key_scan(void) { if(key == 0) //检测到被按下 { delay(5); //延时5ms,消抖 if(key != 0) retrurn 0; //是抖动,返回退出 while(!key1); // 确认被按下,等下释放 delay(5); //延时5ms,消抖 while(!key1); //确认被释放 return 1; //返回按下信号 } return 0; //没信号 } 针对以上代码,消抖动的顺序如下所示: (1)检测到信号 (2)延
[单片机]
如何调整STM32单片机中flash与时钟速率之间的关系
void Flash_Init(void) { // 调整flash与时钟速率之间的关系 FLASH-》ACR |= FLASH_ACR_LA TE NCY; } void Flash_Unlock(void) { // FLASH-》CR 的第7位为解锁的标志位或者上锁的操作位 while(FLASH-》CR & FLASH_CR_LOCK) { FLASH-》KEYR = FLASH_FKEY1; FLASH-》KEYR = FLASH_FKEY2; } } void Flash_Lock(void) { FLASH-》CR |= FLASH_CR_LOCK; } void Flash_Clear_All_Flag(voi
[单片机]
如何调整STM32<font color='red'>单片机</font>中flash与时钟速率之间的关系
分析解决“STM8L101单片机IO口模拟串口通讯发生的奇怪现象”
日因工作关系,需要用STM8L101F3P6这款单片机用IO口模拟串行通讯,波特率2400bps,前辈同事已经写完了程序,我需要拿来研究一下该款MCU的低功耗的情况,而在调试的过程中,发现1个奇怪的问题,描述如下: 在while(1){}的循环中,无论是接收还是发送。第一次循环的收发数据都是错的,此后的循环均正确。比如:PC一个字符一个字符的发送0x01,0x02,0x03,接收到3个字符MCU就发回来,但第1次循环接收到是错误数据0x40,0xA0,0xE0,此后再循环收发均正确。。。百思不得其解,在while(1)循环内还会出这种问题? 代码如下: /**********************************
[单片机]
分析解决“STM8L101<font color='red'>单片机</font>IO口模拟串口通讯发生的奇怪现象”
msp430fr2311单片机adc序列通道采样详细说明
使用P1.2、P1.3、P1.4、P1.5为采样通道,以demo的msp430fr231x_adc10_10.c文件为例。 1、将上述4个管脚配置为ADC模式: P1SEL0 |= BIT2 + BIT3 + BIT4 + BIT5; P1SEL1 |= BIT2 + BIT3 + BIT4 + BIT5; 2、查看资料可知,有4种adc采样模式,单通道单次,序列通道单次,单通道多次,序列通道多次; 本例选择序列通道单次,将ADCCT寄存器设为L1ADCCONSEQ_1;430读取通道数据时是由最高通道开始,直至A0,因此将ADCMCTL0设置为ADCINCH_5(通道5), ADCMCTL0 |= ADC
[单片机]
MCS51单片机数制转换程序
;BCD小数转换为二进制小数(2位) ;入口 :R0(低位首址),R7 ;占用资源:ACC,B,R5 ;堆栈需求:2字节 ;出口 :R3,R4 PDTB :CLR A MOV R3,A MOV R4,A PDB1 :MOV A,R3 MOV B,#9AH MUL AB MOV R5,B XCH A,R4 MOV B,#19H MUL AB ADD A,R4 MOV A,R5 ADDC A,B MOV R5,A MOV A,@R0 MOV B,#9
[单片机]
基于MSP430单片机的开关稳压电源设计
  1 引 言   MSP430系列单片机是美国TI公司生产的新一代16位单片机,是一种超低功耗的混合信号处理器(MixedSignal Processor),它具有低电压、超低功耗、强大的处理能力、系统工作稳定、丰富的片内外设、方便开发等优点,具有很高的性价比,在工程控制等领域有着极其广泛的应用范围。开关Boost稳压电源利用开关器件控制、无源磁性元件及电容元件的能量存储特性,从输入电压源获取分离的能量,暂时把能量以磁场的形式存储在电感器中,或以电场的形式存储在电容器中,然后将能量转换到负载。对DC-DC主回路采用Boost升压斩波电路。   2 系统结构和总设计方案   本开关稳压电源是以MSP430F449为主控制器件,
[单片机]
基于MSP430<font color='red'>单片机</font>的开关稳压电源设计
花样流水灯的设计1(单片机-汇编)
;This program will show you cycle glitter between 8 led lamps ; maker:Chen Weiwu ; date:2012-11-08 ; version:1.0.0 ;------------------------------------------------------------- ;Define Ledprt equ p0 SegDisPlay equ p2 L1 equ 30h l3 equ 32h button1 equ p1.0 button2 equ
[单片机]
基于STM32单片机的防丢失手环系统设计
一.系统设计 通过STM32单片机进行主控,两个NRF024L01进行数据的发射和接收,发射端的位置信息首先会在显示屏上进行显示,并且会通过无线模块将位置信息传输到接收端的显示屏上进行显示。系统内为了实现防丢功能设置了按键报警的功能,在发射端按下按键,在接收端就会进行报警,另外还可以通过按键设置活动区域,当使用者超出活动范围,在接收端也会进行报警。 图1 系统框图 二.硬件设计 防丢失手环系统内主要有单片机最小系统电路、GPS定位电路、显示电路、发射和接收电路、报警电路。 图2 硬件电路 三.软件设计 系统的软件逻辑清晰,GPS模块采集的位置数据会在显示屏上进行显示,并通过无线模块将数据上传到接收端进行显示,判断求
[单片机]
基于STM32<font color='red'>单片机</font>的防丢失手环系统设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved