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,太高了会缩小电压采集的范围。此时
(V+ -V- )G+VREF=VC(VC=0.5) (3)
消除零点漂移是一个逐渐逼近的过程,每次逼近的步长可以通过软件设定,但由于受到DAC分辨率的影响,最小步长是DAC的1LSB代表的电压,所以我们最小只能将零漂控制在0到最小步长之间。受DAC输出范围的限制,初始时DAC0输出1.2V,若设此时的零漂为VD(通常我们认为是零),那么,我们能够调节的最大零点漂移范围是[VD-1.2/G,VD+1.2/G]。当单片机的系统时钟为16M时,完成一个采集,调整的周期最多用数百uS。列车通过时间一般在十分钟以内,在此时间内完成的数据采集,对缓慢的零点漂移来说影响是不大的。
硬件、软件实现
放大器零点校正的硬件原理图如图1所示。
图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高性能单片机,其功能和速度均可同时满足上述要求。