摘 要: 针对TMS320F2812在信息采集中存在的精度不够,采样值与真实值偏离过大的问题,本文采用了一种ADC校正算法,可以实现对ADC存在的增益误差和偏移误差进行补偿,结合简易的硬件电路,成功实现了对ADC采样精度的补偿。
关键词: TMS320F2812;ADC校正算法;增益误差;偏移误差
0 引言
DSP芯片在信号处理方面具有独特的优势,其采用了先进的哈佛总线结构,从而使数据的吞吐率提高一倍[1-3]。本文选择TI公司的TMS320F2812为系统的核心,它是一款32位的DSP芯片,TMS320F2812具有12位ADC模块,理论上采样精度可以达到9位,约为 0.2%左右,但在实际应用过程中并不让人满意,采样值和真实值之间的相对误差很大,有时甚至超过15%,这会给实际应用带来很大的麻烦[4]。为了提高TMS320F2812的采样精度,本文采用ADC校正算法进行补偿,经过实际验证,取得了很好的效果。
1 ADC的工作方式选择
TMS320F2812的ADC模块共有16个采样通道,可分为两组:一组是ADCINA0~ADCINA7,另一组ADCINB0~ADCINB7[5-6]。ADC模块的时钟频率最高可配置为25 MHz,采样频率最高为12.5 MS/s,也就是说每秒最高能完成12.5个百万次采样,内置2个采样保持器S/H-A、S/H-B和2个序列发生器SEQ1、SEQ2;基于上述结构,选择不同的采样方式和不同的序列发生器模式,就有不同的工作方式,所以ADC共有4种工作方式,每种工作方式都有各自的特点,需要根据实际需要进行选择。
根据本文校正需要,DSP需要同时采集两路精准电源信号,为了保证两路信号的实时性要求,本文选择级联模式下的并发采样的工作方式,一次采集2个通道,可以保证两路信号的实时性要求,ADC初始化程序如下:
void InitAdc(void)
{
unsigned int i;
AdcRegs.ADCTRL1.bit.RESET=1;
NOP;
AdcRegs.ADCTRL1.bit.RESET=0;
AdcRegs.ADCTRL1.bit.SUSMOD=3;
AdcRegs.ADCTRL1.bit.ACQ_PS=0;
AdcRegs.ADCTRL1.bit.CPS=0;
AdcRegs.ADCTRL1.bit.CONT_RUN=0;
AdcRegs.ADCTRL1.bit.SEQ_CASC=1;
AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;
for(i=0;i<10000;i++)NOP;
AdcRegs.ADCTRL3.bit.ADCPWDN=1;
for(i=0;i<5000;i++)NOP;
AdcRegs.ADCTRL3.bit.ADCCLKPS=15;
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
AdcRegs.MAX_CONV.bit.MAX_CONV=5;
AdcRegs.CHSELSEQ1.bit.CONV00=0x0;
AdcRegs.CHSELSEQ1.bit.CONV01=0x1;
AdcRegs.CHSELSEQ1.bit.CONV01=0x2;
…
}
2 ADC校正原理
ADC模块的误差不仅包括器件本身特性引起的零点、增益、非线性误差,这些因素很难通过措施补偿,但ADC模块的转换特性是线性的,可以通过适当的措施进行补偿。ADC的转换特性曲线如图1所示。
从图中可以看出,理想的ADC转换特性曲线并不存在增益误差和偏移误差,所以可以求得模拟输入量X和数字量输出量Y的对应函数关系,一条过零点的正比例函数,该直线恒过(34 095)点,4 095是结果缓冲寄存器的值右移4位后0x0FFF,但实际中由于增益误差和偏移误差的存在,模拟量和数字的对应关系为:
Y=KX+b(1)
式(1)中的K和b是未知量,只要求得K和b的值,那么通过ADC转换结果缓冲寄存器得到的数据Y,就可以计算出实际的输入电压值X。对于这个二元一次方程,只要找到如式(2)所示的两个方程组就可以求得K和b。
为了能求得K和b的值,可以在硬件电路中增加两路精准电源作为参考电压,本文提供给ADCINA0和ADCINB0采样通道,也就是X1和X2,通过读取ADCINA0和ADCINB0结果缓冲寄存器可以获得Y1和Y2,通过式(2)可获得K和b的值,如式(3)所示:
所以实际的输入值为式(4):
3 ADC校正算法
由ADC校正原理可以知道,只要在硬件电路上提供两路精准电压就可以求得式(3)的K和b值,由这两个参数通过式(4)去校正其他通道的采样值。本文ADC共采集6路信号,两路校正信号(ADCINA0、ADCINB0)和4路待被校正信号(ADCINA1、ADCINB1、ADCINA2、ADCINB2),对每个通道同时采样N次,对结果进行排序,去掉最大值和最小值,取中间N/2平均值,每个平均值作为采样结果等待处理,对参考通道ADCINA0和ADCINB0的结果进行计算,求得增益K和偏移b,为了更好地测试其可行性,本文取N等于8,在实际应用中可以将N取大些以便于提高精准度。算法流程如图2所示。
4 结果验证
为了验证ADC校正算法的有效性,本文在硬件电路设计中加入了两路精准电源作为参考电压ADCINA0= 0.502 V、ADCINB0=1.801 V,软件的调试选用CCS3.3,调试完成后同时给ADCINA1、ADCINB1、ADCINA2、ADCINB2加上不同的电压,然后打开CCS3.3软件下的watch windows观察变量的值,可以得到表1的数据。
在观察watch windows下的变量值时,数据位会不停地变化和刷新,记录一次采样的值可能不准确,所以可以多测几次。从表中数据可以看出,ADC校正算法良好,校正后的结果与真实值很接近。
5 结论
本文采用了ADC校正算法对TMS320F2812数据采集进行校正,在硬件电路中设计了两路精准的参考电压,为软件校正提供硬件支持。通过实验证明,ADC校正算法提高了TMS320F2812数据采集的精准度,解决了在实际应用中理论值和实际值的偏差问题。
参考文献
[1] 张雄伟,陈量,徐光辉.DSP芯片的原理与开发应用[M].北京:电子工业出版社,1997.
[2] 徐科军,张涵,陈智渊,TMS320X281x DSP原理与应用[M].北京:北京航空航天大学出版社,2006.
[3] 周霖.控制工程技术应用[M].北京:国防工业出版社,2005.
[4] 顾卫钢.手把手教你学DSP基于TMS320X281x[M].北京:北京航空航天大学出版社,2011.
[5] Texas Instruments. TMS320F28x analog to digital converter(ADC) reference guide[Z]. 2003.
[6] Texas Instruments. TMS320x281x, 280x serial communications interface(SCI)reference guide (Rev.B)[Z].2004.