AD7715在精密分析仪器中的应用研究
2.2 设计思想
我们的系统使用12MHz主频的97C52,AD7715的接线如图2所示。
串口方式0很适合三线制接口的使用,此方式下TXD引脚作为串行时钟,接收和发送均使用RXD引脚;RUN接CPU的P1.6引脚,IN_PORT.8是输入端口的第8位,用来接收状态信号DRDY;数字供电(DVDD、DGND)和模拟供电(AVDD、AGND)分开;VREF是基准电压,系统中使用2.39V精密电压。Signal_IN接多路开关(8选1)的输出,因为不需要转换差分信号,所以AIN-接模拟地。
2.3 调试和软件实现
AD7715的最高更新率可以达到500Hz,即理论上2ms可以完成1次A/D转换,但实际上如果考虑到通道切换的因素后,这个速率是不可能的。因为通道轮流切换后,A/D内部的信号需要重新建立,通道间信号差异越大,两次连续转换间误差也越大。这个问题在其它类型的ADC中也存在。有两种方法可以使AD7715在恒定的时间后获得正确的输出:一是使用设置寄存器中的FSYNC(同步)位,二是使用通信寄存器中的STBY(备用)位,我们采用后面一种方法。
另外一个问题就是串口数据,AD7715输出数据和接收命令都是高位在先,而51系列串口的数据时序是低位在先;所以不论是写8位的命令,还是读取16位的转换结果,数据要经过高低位的颠倒处理。
关于校准方式,一般采用自校准就够了,不是特殊情况一般不用进行系统标准。校准一定在有效的复位后进行,否则不能成功。
javascript:window.open(this.src);" style="cursor:pointer;"/>
void initial_7715(){
SCON=0x00; /*串口写*/
initialize_ad(); /*初始化AD7715的通信口*/
writereg(0x10);/*下面写设置寄存器*/(写入时序见图4)
writereg(0x7c);/*自标定,2.4576MHz,500Hz更新率,单极性,非缓冲模式*/
while(!IN_PORT & 0x80)); /*等待自标定结束*/(图3中J3.3所示高电平时间)
while(IN_PORT & 0x80);
}
void writereg(UNCHAR bytepoint){
RUN=0; /*AD7715 CS=0*/
SBUF=exchange(bytepoint); /*字节首尾交换*/
while(!TI);
TI=0;RUN=1;
}
float readdata 16(){
UNCHAR temp1;
UNINT temp2;
writereg(0x04); /*进入stby方式,且下次写通信寄存器*/
writereg(0x38); /*退出standby方式,设置读操作,3/rate时间后出结果*/
while(!(IN_PORT & 0x80));
while(IN_PORT & 0x80); /*等待读时刻到来*/
RUN=0; /*AD7715选中*/
SCON=0X10; /*串口读*/
while(!RI);
temp1=SBUF; /*读低8位*/
temp2=(UNINT)temp1;
while(!RI);
SCON=0x00; /*读两字节后停止接收*/
RUN=1;
temp1=SBUF; /*读高8位*/(两次读取波形见图5)
temp2=((UNINT)temp1)<<8; /*合并成16位*/
return((float)(exchange_16(temp2))/65536.0*VREF); /*首位颠倒后换成电压值*/
}
3 结论
根据我们的对比研究,得出这样的结论:AD7715以及类似的∑-ΔADC系列产品和目前国内几乎所有同类分析仪器中采用的传统双积分或逐次逼近模数转换电路相比,具有精度高、抗干扰性和可靠性强、转换速度可以满足低频要求、电路简单、外围器件少、维修更换方便等许多优势,对于很多方便提供三线制串口时序的系统来说,完全可以作为A/D转换电路的首先。