引言
在数据采集系统中,前级放大器的零点漂移是探测误差的主要来源,特别是在环境恶劣的条件下。
例如,用于铁路轴温检测的红外探头,要在环境温度—40℃至+55℃的范围内可靠的工作,其零点的温漂范围很大,是很难采用简单的软件修正和硬件补偿技术完全解决的。本文介绍利用C8051F007单片机,在进行温度数据采集和处理的同时,通过片上DAC对前级放大器进行零点自动调整,采用“软硬兼施”的闭环调整方法,补偿了系统的零点漂移。
根据本课题的特点,由于环境温度变化的速度十分缓慢,当采集时间相对环境温度变化较短时,可以认为在采集过程中零点的漂移量是相对固定的。那么,当传感器差动放大器的输入端上产生零点漂移时,我们可以在非数据采集时间内动态地调整放大器的输出参考点,抵消掉零点漂移带来的影响。
此种方法同样可用于其它传感器零点漂移范围较大、信号变化较慢的情况。
零点误差的产生
传感器输出电压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。
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寄存器的配置说明
- Bit7: ADC开启位
- 0:ADC进入掉电状态
- 1:ADC进入激活状态,可以随时进行转换
- Bit6: 采样跟踪模式设定
- 0:在下一次采样之前,ADC一直在跟踪
- 1:按照ADSTM1-0(Bit3-2)设定的方式跟踪 ADSTM1-0(Bit3-2)
- 00:向ADBUSY写入1时开始跟踪,需要3个转换周期
- 01:定时器3溢出开始跟踪,需要3个转换周期
- 10:管脚CNVTS上升沿开始跟踪,需要3个转换周期
- 11:定时器2溢出开始跟踪,需要3个转换周期
- Bit5: 转换完成中断标志
- 0:自上次中断标志清除后,没有转换完成
- 1:ADC完成一次转换
- Bit4: ADC忙碌位
- 读:
- 0:转换完成或自复位后无转换;当中断开启时,该位由1变到0时触发中断
- 1:ADC正在忙于转换
- 写:
- 0:无效果
- 1:如果ADSTM1-0(Bit3-2)=00b时,触发一次转换
- Bit3-2: 转换触发模式:
- 00:向ADBUSY写1触发转换
- 01:定时器3溢出触发
- 10:管脚CNVTS上升沿触发
- 11:定时器2溢出触发
- Bit1: 窗口比较中断标志(软件清零)
- 0:窗口比较不满足匹配条件
- 1:窗口比较满足匹配条件
- Bit0: 数据寄存器左对齐设置位
- 0:数据寄存器右对齐
- 1:数据寄存器左对齐
零漂校正过程
首先我们设定在某一环境下,探头输出没有零点漂移,那么根据公式2,我们得到初始状态仪表放大器输出为(V+-V-)G+VREF。DAC0输出中点电位1.2V,即VREF=1.2V。我们可以调节放大器反相输入端的可调电位器,使放大器输出电压VC,该电压在零到ADC最大采集电压之间,略高于0V即可,这样为的是使ADC可以采集到放大器输出在这个电压上下变化的情况。由于ADC不能采集0V以下的电压,所以该电压不能选择0V。在这里我们选择0.5V,太高了会缩小电压采集的范围。此时
当环境改变时,设此时传感器产生零点漂移为DVS。放大器输出(V+-V-)G+DVSG+VREF,零点漂移DVS·G。此时通过ADC采集放大器输出电压,如果输出大于VC,则减小DAC0的输出,即减小VREF;相反,如果输出小于VC,则增大DAC0的输出,即增大VREF,这样如此采集->调整->采集.......使放大器输出电压稳定在
。
比较式3和式4可以看出,我们完全是靠DAC0的变化量DVREF将DVS·G抵消掉。
消除零点漂移是一个逐渐逼近的过程,每次逼近的步长可以通过软件设定,但由于受到DAC分辨率的影响,最小步长是DAC的1LSB代表的电压,所以我们最小只能将零漂控制在0到最小步长之间。受DAC输出范围的限制,初始时DAC0输出1.2V,若设此时的零漂为VD(通常我们认为是零),那么,我们能够调节的最大零点漂移范围是[VD-1.2/G,VD+1.2/G]。当单片机的系统时钟为16M时,完成一个采集,调整的周期最多用数百uS。列车通过时间一般在十分钟以内,在此时间内完成的数据采集,对缓慢的零点漂移来说影响是不大的。
硬件、软件实现
放大器零点校正的硬件原理图如图1所示。
仪表放大器的同相输入端接红外传感器输出电压;反相输入端输入调零电压。放大器1、8脚间接入增益设置电阻。5脚的参考电压输入,连接单片机C8051F007片上DAC0的输出,通过DAC的输出来自动校正放大器的零点。实际电路中VREF也可通过电位器分压来取得调整电压,以提高调整细度。放大器输出电压经AIN0送至单片机片上的ADC转化为数字量。
单片机C语言编程框图如图2所示。
系统在不采集传感器输出电压的时候自身进行系统调零,先将放大器参考点电压设置为0.5V,也就是让DAC0输出0.5V。然后采集放大器的输出电压,如果输出电压大于0.5V,可以减小参考电压抵消漂移;相反,如果输出电压小于0.5V,说明有负向零点漂移产生,则要增大参考电压抵消漂移。
结语
根据仪表放大器的输出公式我们可以看出,当放大倍数很高时,零点漂移也会同时被放大。这样,如果零点漂移本身范围过大时,有可能超出DAC的调节范围。通常有效调节零漂的跨度要略小于DAC的输出范围,可在DAC输出范围的两头各划出一段数据区作为超限标志。程序中每次调节DAC0输出后,要随时检测被转化数字量的大小,一旦发现DAC输出值超出调节范围,可以及时对外发出超限警告。
实际设计中,零点的调整只是解决本传感器的一个问题,其它例如不同环温下的非线性问题还需要另行解决,好在采用C8051F007高性能单片机,其功能和速度均可同时满足上述要求。
参考文献:
1 .C8051F00x datasheet http://www.silabs.com/public/documents/tpub_doc/dsheet
2.AD620 datasheet http://www.analog.com/UploadedFiles/Data_Sheets/897653854AD620_g.pdf
3.王铁流等,“红外轴温监测系统中列车信号的计算机模拟”,《电子技术应用》,1995.9