摘要:介绍了一种基于C8051F021单片机的多生理参数采集装置。该装置作为远程诊断与急救支援系统的一部分,能动态地获取患者的生理参数,并通过无线方式传送给远端的会诊中心,使现场的医护人员能够及时得到远程会诊中心的专家指导,为远程医疗提供基本的医学信息。
关键词:C8051F021 UART A/D转换 无线传输
随着多媒体技术、计算机网络和通信技术的发展,远程医疗成为目前国际上发展十分迅速的跨学科高新科技。远程诊断与急救支援系统是远程医疗的一个重要分支,依靠这个系统,可以将急救现场患者的各种生命信息传送给远端的医生,及时得到医疗指导或诊治。这对患者获得高水平的医疗服务及紧急情况时的急救支援,具有重要意义[1]。
系统中患者生理参数的获取和传输是一个重要组成部分,为此,笔者设计了以美国CYGNAL公司的SOC芯片C8051F021为中央控制单元的多生理参数的采集与无线传输装置。该装置由生理参数采集部分和实时无线数字传输的人机接口组成。这两部分做成一个小巧的装置,病人可以方便地携带在身上,连续动态地监测病人的体温、血压、血氧、脉搏、心电等生理参数,并将这些参数以无线方式发送到与网络相连的计算机上,经处理后传送到远端的会诊中心。利用该远程诊断与急救支援系统,会诊中心的专家可以了解病人的状况,及时指导现场的救护人员对患者实施恰当的救护措施。
1 硬件设计
基于C8051F021的多生理参数采集装置包括心电模块、血压模块、血氧模块、体温模块和无线数据传输模块五部分,各部分的协调工作和数据的无线传输由主微控制器C8051F021管理。主微控制器是该系统的核心,完成体温和心电参数的检测,负责控制其它模块并与之进行数据交换,同时还控制生理参数的无线传输。因此,对其运行速度和接口功能都有较高的要求。
C8051F021以其速度快、性能高等特点,能确保心电信号检测与处理的实时性要求。另外,其丰富的端口资源能满足各模块结构设计中所需的多种串行通信接口的需要。其中体温模块通过单线接口与微控制器双向通信;血压模块通过高速串行通信方式将采集的参数传送给C8051F021;血氧模块则通过UART将检测的参数结果传送给微控制器;无线传输模块也是通过微控制器的串口传送数据。C8051F021内部自带的A/D转换、D/A转换和串行口为系统设计省去了很多外围电路,大大减小了体积。其框架图如图1所示。
1.1 C8051F021简介
C8051F021是美国CYGNAL公司推出的混合信号系统芯片,是高度集成的片上系统。它嵌入了一款高速、低功耗、高性能的8位微处理器,最突出的特点是高速指令处理能力[2、3]。C8051F021采用CIP-51微控制器内核,与MCS-51指令完全兼容。CIP-51采用流水线结构,与标准的8051结构相比,指令执行速度有很大的提高。CIP-51在最大系统时钟频率25MHz工作时,其峰值速度可达25MIPS。
C8051F021除了具有标准8051的数字外设部件之外,内部还集成了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件。片内集成了多通道12位和8位A/D转换器以及一个双12位D/A转换器,两个增强型UART串口,便于模拟量和数字量的采集、控制和通信传输。该单片机还集成有4KB内部数据RAM和64KB Flash以及外部64KB数据存储器接口(可编程为复用方式和非复用方式)、总线接口、电压比较器、温度传感器等部件,比常规51单片机有更多的定时计数器、中断、数字I/O接口。片内还配置了标准的JTAG接口(IEEEll49.1)。在上位机软件的支持下,通过串行的JTAC接口可直接对安装在最终应用系统上的单片机进行非侵入式、不占用片内资源、全速在线系统的调试,无需另配编程器及仿真器,是目前功能最强大、性能价格比最好的单片机之一[4]。
1.2 各模块与微控制器通信的实现
1.2.1 测温部分
采用DSl8B20温度传感器构成测温系统。DSl8B20是美国DALLAS公司生产的单线数字温度传感器,它可把温度信号直接转换成串行数字信号供微控制器处理。DSl8B20数字温度计能提供9位温度读数,通过单线接口与C8051F021的I/O口P1.0进行双向通信。读写及温度变换的功率来自于数据线而不需额外的电源。
1.2.2 心电部分
心电信号经过前置放大和第二级放大后送入C8051F021自带的A/D转换器进行采样。
C8051F021片内集成了两个多通道ADC子系统(每个子系统包括一个可编程增益放大器和一个模拟多路选择器)。选用ADC0将心电信号进行A/D转换。ADC0子系统包括:一个9通道的可配置模拟多路开关(AMUX0)、一个可编程增益放大器(PGA0)和一个100ksps的12位分辨率的逐次逼进寄存器型ADC,ADC中还集成了跟踪保持电路和可编程窗口检测器。所有这些特性完全由CIP-51通过特殊功能寄存器控制。心电信号采样的设置如下:(1)置AMUX0配置寄器AMX0CF=0x00;使AIN0~AIN7为独立的单端输入。(2)置AMUX0通道选择寄存器AMX0SL=0x00;选择AIN0为ADC0的模拟输入,即采集的心电信号从AIN0模拟通道输入C8051F021。(3)置ADC0配置寄存器ADC0CF=0x48;使ACD0采样/保持放大器获取输入的模拟信号的周期数为1/10个系统时钟,内部放大器增益为1。(4)置ADC0控制寄存器ADC0CN.0=0;使ADC0H和ADC0L寄存器数据右对齐;ADC0CN.7=1;ADC处于活动状态,并准备转换数据。(5)置EIE2.1=1;ADC0转换中断允许。
图4
完成ADC0相应的寄存器设置后,采用定时器3设置心电采样时间间隔,心电的采样频率设为360Hz。当定时器3溢出中断时,启动ADC0开始转换。通过ADC0控制寄存器ADC0CN.5,判断转换是否结束。转换结束后,采样结果自动存放在ADC0H的低4位和ADC0L中。读取这12位心电数据并通过自适应算法抑制心电信号中的基线漂移,获得稳定的心电信号。
1.2.3 血压模块
血压模块与微控制器之间采用高速串行的通信方式,血压模块的工作状态、测量结果通过两个功能引脚输出,供微控制器处理。这两个功能引脚连接到C8051F021的两个I/O口,其中输出的串行时钟线连到I/O口P1.2,输出的串行数据线连到I/O口P1.3。若在一个时钟周期内数据线上出现一个电压由高到低的跳变,则开始接收数据。
输出的数据格式如图2所示。开始处的电压跳变如图3所示。开始表示在此后的16个时钟信号内将传送16位的数据,其高4位的数据表示数据类型,不同的编码表示不同的数据,如舒张压、收缩压和心率分别有各自的代码,如表1所示;而低12位数据则表示具体的数值,对应前面的数据类型可以得到收缩压、舒张压和心率的数据。
表1 高速串行通信数据帧16位数据定义
D15~D12
D11~D0
0 0 0 0
实时压力0~300
0 0 0 1
收缩压60~280
0 0 1 0
舒张压40~200
0 0 1 1
心率40~200
0 1 0 1
自检信号
1 1 1 0
测量出错
1.2.4 血氧模块
血氧模块通过RS232串行接口传输测量结果,本系统选用C8051F021的UARTl与血氧模块进行数据交换,而将UART0分配给无线收发模块。
首先,主微控制器C8051F021通过设置优先交叉开关译码器XBR0、XBRl和XBR2的值完成数字资源的动态分配。优先权交叉开关译码器可以按优先权顺序将P0~P3口的引脚分配给器件上的数字外设(UART、SM-Bus、ICA、定时器等)。
其次,要实现C8051F021与血氧模块的通信,需完成以下寄存器的配置:(1)初始化交叉开关配置寄存器XBR2,初始值为0x44;分别使能交叉开关和UARTl;(2)初始化端口0输出方式寄存器P0MDOUT,初始值为0x05;将P0.2和P0.3分别分配给TXl和RXl;(3)完成UARTl工作模式和波特率的设置。
血氧模块的串口工作在模式1、波特率为9600bps,采用定时器2完成UABTl对应波特率的设置。
1.2.5 生理参数的传输
为了方便患者携带和医生使用,选用无线收发芯片nRF401完成生理参数的无线传输。单片收发芯片nRF401片内集成了高频发射、高频接收、PLL合成、FSK调制、FSK解调以及多频道切换等功能模块。它工作在ISM国际公用频段,最大能以20kbps的速度进行无线数据传输[5]。微控制器只需对nRF401进行简单的控制就可以通过串口完成数据的收发,nRF401与C8051F021构成的无线通信系统如图4所示。
C8051F021的UART0的设置与UARTl的设置相似,首先初始化交叉开关寄存器XBR0=0x04、XBR2=0x40;分别使能UART0和交叉开关;再初始化特殊功能寄存器P0MDOUT=0x01;将P0.0和P0.1分别分配给TXl和RX1;因为UART0有最高优先权,当UART0EN设置为1时,P0.0和P0.1总是分配给TXl和BXl;最后完成UART0工作模式和波特率的设置。
为了将采集到的生理参数发送给接收系统,在发送数据之前,芯片首先上电工作(即PWR_UP=1),然后选择数据传输通道。nRF401有两个传输通道可供选择:通道l(433.92MHz)和通道2(434.33MHz)。将TXEN引脚置为高电平(发送模式),nRF401就能通过微控制器的串口发送数据。
2 系统软件的设计
系统软件主要完成以C8051F021为核心的生理参数的采集和无线发送。由于要处理多个不同的模块,在实现过程中采用了巡回检测的方法。在数据传送过程中,设置了一个生理信息包协议,在采集系统和无线发送模块之间,定义通信协议包如表2所示。串口对连续接收的2个字节的数据依据协议规则重新装配。由于生理数据(心电、血压、体温等)一般不超过12位,采集系统将它们分别拆为低7位和高5位进行传输。其中,高位的第一位为高位数据标识,设为0;低8位的第一位为低位数据标识,设为1。
表2 串口通信协议包
1bit
2bit
5bit
1bit
7bit
B7
B6
B5
B4
B3
B2
B1
B0
B7
B6
B5
B4
B3
B2
B1
B0
0
type
data
1
data
表3 各参数的具体识别方式
B6 B5 B4 B3
0 0
心电参数(12位)
1 0 0 0
血压参数(收缩压)
1 0 0 1
血压参数(舒张压)
1 0 1 0
心率
1 0 1 1
体温
1 1 0 0
血样饱和度
为了识别不同的生理参数,对不同生理信号设置不同的信号标识进行相应的帧编码。对心电数据采用高8位的B6B5识别,其它的各类数据采用高8位的B6B5B4B3识别,各参数的具体识别方式如表3所示。编码后的数据经微控制器的UART0与nRF401实现无线发送。微控制器的UART0设置为工作模式1,波特率为9600bps。
系统软件采用模块化编程方法,根据功能将该系统程序分为六个基本模块:系统初始化模块(包括C8051F021微控制器I/O口设置、寄存器及变量的定义)、体温模块、心电模块、血压模块、血氧模块和无线传输模块。系统软件的流程如图5所示。