由于生物体微弱的电信号和丰富的信息量,在生物体多参数测量中,高精度采集也就显得尤为重要。基于此我们研制的生理信号采集系统的采集电路部分采用了ADS8364和DS87C520单片机。
ADS8364是美国TI公司的一种高速、低能耗、6通道同步采样转换,单+5V供电的16位高速并行接口的高性能模数转换芯片,片上带2.5V基准电压源,可用作ADS8364的参考电压。每片ADS8364实际由3个转换速率为250ksps(当外部时钟为5MHz)的ADC构成,每个ADC有2个模拟输入通道,每个通道都有采样保持器,3个ADC组成3对模拟输入端,可同时对其中的1~2对输入信号同时采样保持,然后逐个转换。由于6个通道可以同时采样,很适合用于需同时采集多种信号的场合。
ADS8364前端调理电路
由于输入的模拟信号变化范围较大,通常不是AD芯片所要求的范围,在高精度、高要求的AD采样电路中,为使输入的模拟信号与AD采样所需求的信号相匹配,通常在AD采样电路前加入前端调理电路,以缩放和平移要采样的信号,从而使调理后的信号适合A/D转换器的模拟输入要求。图1是ADS8364一个输入通道的前端调理电路。
ADS8364模拟输入通道+IN和-IN的最大电压输入范围为-0.3V~+6V(ADS8364用+5V供电)。图1电路中使用了2个运放,A2用作跟随器,用来缓冲ADS8364输出的2.5V基准电压;A1和四个电阻构成了信号调理网络,适当配置R1~R4电阻可以实现对输入信号Vi的缩放和平移,以适合ADS8364模拟通道的输入要求。由于R5
=R6则+IN端的输入电压为:
这样,在保证V+IN=0~5V的前提下,Vi可以是双极信号,调整R2、R4的比例使Vi有合适的输入范围。表1是针对不同双极性模拟输入的配置实例。
ADS8364与单片机连接电路
ADS8364与单片机连接电路见图2。ADS8364转换后的结果可通过两种方式输出:①当BYTE=0时,以DB0~DB15
16位输出;②当BYTE=1时,则转换结果分两个字节从DB0~DB7读出,此时采用8位单片机读取非常方便。
本系统中采用8位单片机,根据要求ADS8364的BYTE设为高电平,在第一个/RD信号里,输出低8位数据,第二个RD信号后读出高8位。ADS8364的/HOLDA、/HOLDA
、/HOLDC信号由单片机P1口的P1.0输出的信号控制;A0~A2通过DS87C520的P0口输出,控制线ADD硬件接低电平。图2是DS87C520与ADS8364的连接电路。
系统采用与DS87C520相连的GAL16V8时给出ADS8364的地址为5000H,当DS87C520的/WR=0,且ADS8364的/CS=0时DS87C520将通过数据口对ADS8364写入控制字;当DS87C520的P1.0=0时才开启ADS8364进行AD转换,转换结束后的信号/EOC对DS87C520发出中断请求,则DS87C520在/RD=0时响应中断请求,读取ADS8364的转换结果。
ADS8364转换器初始化操作
AD转换前,首先要进行控制字的写入,信号ADD、A0、A1、A2的设置,配合TYPE确定了数据的输入和输出方式,/RESET、/HOLDA、
/HOLDB和/HOLDC的设置可对AD转换的数据输出寄存器进行清除操作和其
他复位操作。信号对应控制字的各位见表2。
写入控制字时,在软件命令控制下根据ADS8364的口地址,在/CS有效时将表中数据通过低8位数据线写入ADS8364内部寄存器。
软件命令时序如图3所示。
ADS8364的转换启动与数据读取
系统的最终目标是要获取数据,然后进行处理。根据TYPE、ADD、A0、A1和A2,DS87C520需三次读完一路转换的数据,DS87C520控制ADS8364转换和读取转换结果的C51程序如下(写入外部数据RAM的程序省略):
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <intrins.h>
#include <absacc.h>
:
:
sbit p10=P1^0;
#define uint unsigned int
#define uchar unsigned char
#define ADS_A0 XBYTE[0X5000]
:
:
#define ADS_C1 XBYTE[0X5005]
uchar xdata *Sample;
void delay(uchar n) //延时模块
{
uchar i;
for(i=0;i<n;i++)
{
_nop_();
}
}
void enable_int0(void) //开中断
{
EA=1;
EX0=1;
IT0=1;
}
void Start_Conver(void) //启动6路AD转换
{
p10=1;
p10=0;
delay(1);
p10=1;
}
void main(void)
{
int i;
p10=1;
Start_Conver();
ADS_A0=0x07; //ADS8364写入控制字
ADS_A0=0x9e;
EA=0;
while(1){
delay(1);
Start_Conver();
delay(10); //等待转换结束采集数据
for(i=0;i<18;i++) // 读取6路转换数据
{
*Sample++=XBYTE[0X5006];
}
}
}
启动转换后,在读取数据前需要延迟的指令周期数需根据DS87C520和ADS8364的运行速度来调整。
结语
利用ADS8364设计的生理信号采集系统可同时采集多路信号,采集精度高,经初步临床验证完全满足临床要求。