完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
多参数监护仪广泛应用于ICU、CCU、病房、手术室等。目前我国也有自主知识产权的产品,如迈瑞、金科威、金脑人等,但与GE、飞利浦世界先进产品比较,在监测和计算、可靠性、实时性、稳定性、信号变异的处理分析、远程传输等方面都较落后 。
|
|
相关推荐
2个回答
|
|
嵌入式系统把计算机直接嵌入到应用系统之中,它融合了通信技术和半导体微电子技术,是信息技术IT的最终产品[2]。因此将嵌入式系统,网络等技术应用于医用监护仪领域,能使多参数监护仪顺应现代医用监护仪市场缩小体积,提高数据处理能力,远程医疗等方面的要求。
本文介绍一种基于ARM的实时监护系统,它将32位RISC结构的ARM内核处理器与实时多任务嵌入式系统相结合,并通过嵌入式TCP/IP协议栈为平台添加网络传输功能,构建一个新型的多参数监护仪系统。 2 系统硬件设计 医用监护仪具有以下几个方面功能:测量功能、分析功能、报警功能、打印功能、网络通信功能等。六参数模块通过导联端、光手指、袖带获得人体的心电、无创血压、血氧、脉率、呼吸、体温六参数信号,通过串口通信方式与以ARM7为内核的嵌入式处理器相连,数据从串口送到ARM7中央处理器,通过多任务调度,进行实时数据处理,并在LCD上实时显示各种信号的图形和数值,还可以由外部键盘控制,进行存储和网络发送,并对各种检测信号设置报警线,对超出报警范围的检测情况进行报警。硬件结构图1所示: |
|
|
|
3 开发系统软件设计
3.1 软件开发总体介绍 利用PC机运行的Hitool forARM开发环境下调试程序:首先运行系统、Memory及I/O端口的初始化程序,随后进入主程序,采用外部中断方式,判断是否有键输入,若有则调用键盘控制子程序进行识别所按下的键,根据键盘的控制执行相应的任务;若无就调用串口读入程序,采集心电、血氧、血压等数据,并判别所采集数据的类型,存入不同地址的SDRAM中,并依次分类进行处理,处理完毕,判断是否超越各自的报警限,若是则调用报警程序和显示程序,若否则直接调用显示程序;这样,各种数据就实时地采集进来,并在LCD上显示测试数值和心电、呼吸波形。其中测试数值按每分钟存储,心电、呼吸波形按键存储,按翻页键可以调出相应的存储波形并进行显示;根据打印和网络命令进行打印和网络命令处理等。程序主要用C语言编写。 3.2 串口的处理 硬件接口采用标准RS-232C异步串行接口,选用发送 (TXD)、接收(RXD)和地线的三线方式,其它的握手信号直接悬空。要实现六参数模块与S3C44BO之间的串口通信,必须使两者采用相同的数据传输方式,它们通信的数据格式如下;波特率为9600bps, 8位数据位, 1位停止位,无奇偶校验位。 另外,在I/O端口初始化程序中,定义Uart_Init函数,对串行口各寄存器进行初始化,配置参数时钟和波特率等。在设计中主要进行以下串行口寄存器设置: UART线性控制寄存器ULCON1=0x3; UART控制寄存器UCON1=0x245; UART先进先出控制寄存器UFCON1=0x1; UART波特率寄存器UBRDTV,根据公式计算出。 在串口读入程序中,采用了中断方式,来实现双向数据传输,达到实时控制的目的。串口程序数据接收过程为:调用Uart_Getch()函数读入N个字符,以数组的方式放置在SDRAM中,然后进行数据处理。在lib.C程序中部分源代码如下: charUart_Getch() {… while(! (rUTRSTAT1& 0x1)); //Receive data ready return rURXH1; …} 3. 3 LCD显示 当有新数据需要显示时, LCD显示模块将新的采样数据写入LCD显示存储器中, S3C44BO芯片所支持的LCD控制器在不需要CPU介入的情况下,通过专用DMA自动地将需要显示的数据从显示存储器传送到LCD显示器中。LCD显示器不断地接收数据,就在LCD上显示监测内容。 3. 3. 1 LCD初始化 定义Lcd_MonoInit()函数,在LCD的三个控制寄存器中,设置LCD扫描宽度等与硬件时序有关的量:如:使用160×240的黑白单色显示屏, 4-bit单扫描等。在LCD的三个缓冲初始地址寄存器中,主要配置了帧缓冲寄存器BUFFER的起始地址等。 以上各寄存器基本的配置的源程序如下: void Lcd_MonoInit(void) //初始化LCD屏幕 { //160×240 1bit/1pixelLCD #defineMVAL_USED 0 rLCDCON1=(0) (1<<5) (MVAL_USED<<7) (0x3<< 8) (0x3<<10) (CLKVAL_MONO<<12); //disable, 4B_SNGL_SCAN,WDLY=8clk,WLH=8clk rLCDCON2=(LINEVAL) (HOZVAL<<10) (10<<21); //LINEBLANK=10(without any calculation) rLCDSADDR1= (0x0<<27) (((U32) frameBuffer1>>22)<< 21 ) M5D((U32)frameBuffer1>>1); //monochrome,LCDBANK,LCDBASEU rLCDSADDR2=M5D( (((U32)frameBuffer1+(SCR_XSIZE*LCD_ YSIZE/8))>>1)) (MVAL<<21) (1<<29); rLCDSADDR3=(LCD_XSIZE/16) ((SCR_XSIZE-LCD_XSIZE) / 16)<<9); } 3. 3. 2 打开LCD 1)在内核中开辟内存空间用于显示内存 可在显示模块中加入:#define frameBuffer1 0xC400000 2)定义帧缓冲器长度,并对其赋初值设置一个行列与LCD 高宽相对应的数组pbuffer, pbuffer用于存放发送至显示屏的每帧像点数据,像点数据的多少取决于显示屏的大小; pbuffer="BitsPerPixe"*l Lines* /8=160* 240/8=4800(字节)。 由于pbuffer被定义为U32,即32位(八个四位)指针,每一个元素对应LCD显示屏上的一个像素点,显示方式采用4-bit单扫描,所以应当循环4800(字节) /4=1200次,实际上对应的单元数为整个160×240的屏幕范围。 for( i="0", i<1200; i++) #(pBuffer[ i])=0x0; 3)数据处理 LCD的数据处理主要对要显示的数据进行处理(4bit到32bit的转换)。 temp_data=(Buf[ i* 4+3]<<24)+(Buf[ i* 4+2]<< 16)+(Buf[*i 4+1]<<8)+(Buf[*i 4]); |
|
|
|
只有小组成员才能发言,加入小组>>
785 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2859 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1068浏览 3评论
193浏览 2评论
455浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 03:02 , Processed in 2.114248 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号