引言
在数据采集系统中,前级放大器的零点漂移是探测误差的主要来源,特别是在环境恶劣的条件下。例如,用于铁路轴温检测的红外探头,要在环境温度—40℃至+55℃的范围内可靠的工作,其零点的温漂范围很大,是很难采用简单的软件修正和硬件补偿技术完全解决的。本文介绍利用C8051F007单片机,在进行温度数据采集和处理的同时,通过片上DAC对前级放大器进行零点自动调整,采用“软硬兼施”的闭环调整方法,补偿了系统的零点漂移。
根据本课题的特点,由于环境温度变化的速度十分缓慢,当采集时间相对环境温度变化较短时,可以认为在采集过程中零点的漂移量是相对固定的。那么,当传感器差动放大器的输入端上产生零点漂移时,我们可以在非数据采集时间内动态地调整放大器的输出参考点,抵消掉零点漂移带来的影响。
此种方法同样可用于其它传感器零点漂移范围较大、信号变化较慢的情况。
零点误差的产生
传感器输出电压VS由零点电压VZ和信号电压VR组成,
VS=VZ+VR
VR是与被测量物理量直接相关的电压,要通过ADC转换成数字量。VZ是零点电位,从长时间来看,VZ往往是随环境温度缓慢变化的,但在较短的采集时间内,也可以近似看作不变。
为了只将VR进行放大采集,我们将另行提供一个补偿电压VN,并且使VN=VZ,将VS和VN输入到一个差模放大器的两输入端。设放大器的增益为G,则放大器输出为(VZ+VR-VN)G。如果VN=VZ,则输出为VRG,直接得到我们需要的电压。但实际中,VZ会随时间缓慢变化,我们无法时刻做到VN=VZ。而一旦VN≠VZ,输出就会产生零点误差(VZ-VN)G,尤其是在G很大的时候,误差会十分明显。
根据探测现场的实际情况,平时无列车通过,探头暂停采集的时候,我们可以利用ADC不停地捕捉零点漂移,并通过DAC输出补偿电压VN,随时去掉零点误差。而当列车通过探头的时间内,单片机停止校正并锁存DAC调零输出,探头以此刻DAC调整的输出状态作为探测零点开始进行工作。
主要器件介绍
仪表放大器AD620
仪表放大器是一个双端输入的差动放大器,除了高精度,高稳定性的特点外,其输出零点参考电压可以通过REF管脚的电压任意设置,这就为我们调整零漂提供了可能。
AD620的输入端有着高达109Ω的输入阻抗;输入失调电压30uV,输出失调电压400uV。输入偏置电流很低,通常在0.5nA最高不超过2nA;增益为100时,增益误差0.15%;增益100时的共模抑制比高达130dB;输入噪声,输出噪声 除此以外,AD620的温度稳定性也十分优异:增益大于1时,增益的温度系数为-50ppm,输入失调电压和输出失调电压的平均温度系数分别为0.3uV/℃和5.0uV/℃。
与通用运放不同的是,通用运放大多用连接在输入与输出间的外部电阻控制自身闭环增益,而仪表放大器采用内部反馈网络,它的增益控制电阻是不与输入、输出端连接在一起的,有专门用来连接增益设置电阻的引脚。AD620通过接在1、8脚之间的电阻来设置增益大小,增益G与增益设置电阻之间的关系如公式1。
一般通用运放的输出都是对地输出,而仪表放大器的输出是相对于放大器的输出参考引脚电位的。通过在输出参考引脚施加不同的电压可以设置对地输出电压的输出零点。仪表放大器的对地输出电压公式如公式2。
VO=G(V+ -V-)+VREF(2)
C8051F007单片机
本设计方案需要用到高速MCU和高精度ADC、DAC,Silicon Laboratories公司的高性能单片机C8051F007正好满足这一需要。该单片机集成了8051内核,但时钟频率更高,处理能力更强。片上集成8通道12位ADC和2个12位DAC,除了完成采集和处理任务之外,还有足够的模拟部件进行零漂调整。比用分离元件既提高了可靠性,又简化了电路,也降低了成本。
·片上集成DAC
C8051F007片上集成的两个DAC使用方法十分简单,DAC可以用单片机内部提供的2.43V参考电压,也可以外部提供。我们在这里使用内部参考电压。参考电压配置寄存器是REF0CN,地址是0xD1。无论使用DAC0还是DAC1,都需要将寄存器的0、1位置“1”。
在本应用中,bit2到bit0设置成“000”,也就是12位转换数值的MSB到LSB存在DAC0H的bit3到DAC0L的bit0。
DAC1的设置过程与DAC0相同,不再赘述。
·片上集成ADC
C8051F007片上集成了一个8通道12位ADC。8个通道既可以单独设置成单通道,也可以两两设置成双端差动采集。在ADC的输入端还有一个前端放大器,放大倍数可以编程。ADC参考电压可以外部提供,也可以使用内部参考电压。内部参考电压2.43V。可以选择多个ADC转换开启信号。
ADC使用前,也要先设置参考电压,内部参考电压的设置过程可以参考DAC。
接着设置ADC的输入方式寄存器AMX0CF(地址0xBA)和通道选择寄存器AMUX0SL(0xBB)。8个输入通道两两分成一组(通道0和通道1、通道2和通道3、通道4和通道5、通道6和通道7)。AMX0CF的bit0到bit3可以分别设置这四组输入的方式。置“1”将该组两个输入设置成双端输入方式,清0则该组两通道各自为单端输入方式。AMUX0SL的bit3到bit0为输入端口选择位,控制多路器是外部某一输入端口与ADC相连。具体设置方式可以参考C8051F007的数据手册。
寄存器ADC0CF,用来设置ADC的转换速率和输入增益。地址0xBC,复位初始数值0x60,表1给出了寄存器ADC0CF的配置说明。
Bit7- Bit 5: ADC转换时钟设定,通过设定000至1xx来控制ADC的转换周期分别为1、2、4、8和16倍时钟。
Bit4- Bit 3: 无用
Bit2- Bit 1: ADC内部前置放大器增益设置,通过设定000至1xx来控制放大器分别为1、2、4、8和16倍的增益。
ADC0CN寄存器,用于控制ADC的各种转换功能。地址0xE8,复位初始数值0x00,表2给出了ADC0CN寄存器的配置说明