32位高性能数字信号处理器内部AD的精度校正方法
TMS 320F2812是TI公司设计的一款用于工业控制、 机床控制等高精度应用领域的DSP。它是一款最高主频可达150MHZ的32位高性能数字信号处理器(DSP),内部集成了16路12位ADC转换模块。该模块内置两个采样保持器(S/H-AS/H-B),有自动排序功能,且其转换时间最短可在100ns以内进行过采样处理。但在实际应用中发现, 即使使用了过采样处理, TMS 320F2812内部 ADC转换器的转换结果仍存在较大误差, 在测控系统中, 这会降低控制回路的控制精度,导致运行结果出现一定的偏差。
本文提出一种提高ADC转换精度的方法, 使得TMS 320F2812的ADC转换精度得到有效提高,能让TMS 320F2812更好的满足高精度控制系统的需要。
适用于控制领域的 TMS320C2000系列 DSP内部集成了ADC转换模块,为进一步提高其转换精度,实现更精确控制,提出对 ADC转换模块存在的增益误差和偏移误差采用加参考信号与编程算法结合的方法进行校正偿,给出了具体的校正方案。并在 F2812芯片上进行了验证。实验结果表明,此方法起到了补偿误差的作用,能够大幅度提高转换精度。
1ADC转换器的误差分析
计算机测控系统在测量数据时不可避免的会有随机误差和系统误差, 其中随机误差一般是由各种干扰引入的,可通过统计的方法在数据处理中消除,系统误差一般在数值上较大,对测量正确度影响较大,且不能在数据处理中消除,必须要出来并通过一定的方法进行消除。
对于线性系统,常用的 A/D转换器主要存在偏移误差和增益误差, 这两种误差都属于系统误差。首先我们介绍一下什么偏移误差?什么是增益误差?增益误差是指从负满量程转为正满量程输入时实际斜率与理想斜率之差。偏移误差是指对AD转换器采用零伏差动输入时实际值与理想值之间的差异。增益和偏移增益误差通常是AD转换器中主要的误差源。为了减小增益误差和偏移误差,可采取检测其值,然后对其进行修正的方法。系统误差(增益和偏移误差)导致被测数据的实际值与理论值有一定的偏差,且偏差是有规律的。ADC的理想状态与实际状态比较如图1所示,由图我们可以知道理想情况下输入的模拟电压值和转换后的数值之间的对应关系为: 
                      (式中的 ADCLO 为 AD 转换的参考电平,在我们实际使用的过程中,通常将其与 GND 连在一块,因此此时ADCLO的值为 0。) ,即x =理论转换值 =输入电压×4095/Vmax(Vmax 为ADC满量程电压值,TMS 320F2812的Vmax=3.0V ),y= 实际转换值。 
这里定义具有增益误差和偏移误差的ADC模块的转换方程流程图转换为ns图为 Y=x×ma±b, 式中ma为实际增益,b为偏移误差,如果Y在理想情况下(没有偏移和增益误差),ADC模块转换方
程为 y=x×mi , 式中mi为理想增益, mi一般等于1.0 。从图1可以看出ADC精度校正的目的就是对实际转换y 进行修正, 让它更加接近理论转换值 x 。
(失调即为偏移)
图1理想ADC转换与实际ADC转换
2ADC的校正方法
    好了,现在我们已经知道什么是增益误差、什么是偏移误差?我们怎么去校正它呢?
    无论用什么方法去校正,其目的都在于使实际转换值Y无限地接近理论转换值 X(最理想就是Y=X
校正方法主要有硬件校正和软件校正, 为了节约硬件空间和成本, 一般主要采用软件的方法进行校正。通过上文的分析可知,TMS 320F2812的 ADC转换精度较差的主要原因是存在增益误差和偏移误差, 因此要提高转换精度就必须对这两种误差进行补偿。
由方程  Y=X×ma+b 得 X=Y/ma-b/ma ,则我们要想得到真实测量值X, 必须在得到转换结果 Y 后通过上式对它进行换算。在上式中还有两个重要参数即实际增益 ma及偏移误差b , 只要知道了实际增益 ma和偏移误差 b的值, 就可以通过计算对测量值的转换结果进行误差补偿。根据误差的定义可知, 增益误差为输出 y的斜率变化引起的, 偏移误差为输出 Y的零点变化引起的。由图 1知, 实际增益 ma为变化后的斜率, 截距 b为偏移误差, 通过两点法可得曲线 2的斜率, 即实际增益 ma的值,再通过方程 Y =X×ma+b可得偏移误差b的值。这里我们定义方程 X=Y/ma-b/ma中的1/ma为校正增益 mG ,b/ma为校正偏移 bG , 则可由公式 X=mG×Y-bG计算出校正后的ADC转换结果, 该结果消除了实际增益和偏移误差的影响, 理论上可以大大提高 ADC转换的精度。
3、ADC软件校正实现
软件校正的过程主要包括两部分, 首先采集两个已知的精度很高的参考电压, 根据两次得
到的实际采样结果 y 和两个理论值 x , 计算得到 mG和 bG ,然后再根据公式 x =mG×y -bG对系统工作过程中ADC的转换值 y 进行校正。其中 nG和 bG的值在TMS 320F2812每次上电时计算一次即可。
图2为计算校正增益 mG和校正偏移 bG的子程序流程图。首先测量参考点, 选用 TMS 320F2812的 ADC的任意两个通道( 如 ADCIN1和 ADCIN2 )作为参考输入通道, 在这两个通道输入已知的直流参考电压 xH xL , 通过读取相应的结果寄存器获取转换值, 并将多次采样结果取平均值(为保证对信号采样的稳定性), 记为 yH和yL , 得参考点(xL,yL) 和(xH,yH) ; 然后计算校正增益 mG和校正失调 bG , 先利用方程 y=x×ma+b 及已知的参考值然后计算校正(xL,yL) 和(xH,yH) 计算实际增益及失调误差( 实际增益ma=(yH-yL)/(xH-xL) , 偏移误差 b=yL-xL×ma ) , 再由 mG= 1/ma ,bG=b/ma得校正增益 mG和校正偏移 bG并存储在 TMS 320F2812的FLASH内或片外FLASH里。
图2  计算 mG和 bG的程序流程图
得到校正增益 mG和校正失调 bG后, 就可以对过采样并经过算术平均值数字滤波法处理后的转换结果y 进行校正, 从而得到更精确的 AD转换结果。通过该方法所求的校正增益
及校正偏移可应用于其它AD转换通道, 对ADC转换结果进行校正。
上述即为实现 ADC校正的全过程, 通过使用这种方法, ADC的转换精度有很大提高。由于这种方法是将某些通道(ADCIN1 ,ADCIN2) 的误差作为标准去修正其他通道的误差, 因此要采用这种方法必须保证通道间具有较小的通道误差。对TMS 320F2812 ADC转换模块, 由于其通道间的增益及偏移误差均在0.2%以内, 所以采用这种方法对其进行校正是可行的。
注意:除了进行软件校正之外还应该在设计电路板时尽量减小并消除随机误差, 根据TI公司的TMS 320F2812的工作手册, 在进行PCB板的设计和布局时, 连接到 ADCINxx引脚的模拟量输入信号线不能与数字信号线靠得太近, 这样可以避免数字信号的干扰耦合进 ADC的输入线。
4、校正结果分析
因 TMS 320F2812内部的ADC的模拟输入范围为0~3V , 所以在进行校正实验时, 选用1V和2V作为参考电压。通过采样并转换后得1V和2V的ADC转换结果为 1412和 281
7 , 通过计算得校正增益 mG= 0.97, 校正失调 bG= 5.87 。利用该结果对0V 、0.5V 、1.5V 、2.5V等几个数据也进行了校正实验, 其校正前后的数据见表1 。
由表1所测数据可知, ADC校正值与ADC理论值非常接近, 校正后的误差明显小于校正前的误差, 完全达到了设计要求。
表1  校正前后结果比较及误差比较表
5、结束语
采用文中提出的对DSP的AD转换模块的增益误差和偏移误差进行校正的方法,可以明显改善ADC转换模块的精度,这对于 DSP控制是非常有利的。试验时两路参考电压信号由外部信号源提供, 具体使用时,这两路参考电压信号可以在电路设计时直接从电路板上引出, 能灵
活方便地提高 DSP的 ADC转换精度。此方法的不足是需要占用两个 AD输入通道计算增益误差和偏移误差,但一般 DSP的 AD转换有十六个通道, 除非十六个通道全部使用, 否则以这两个通道的占用来提高转换精度是值得的。
6、思考问题,如果对于对控制要求精度很高的场合(误差下降到1%以下),用上述的方法是否能达到这样的精度?如果不能,那又会是用怎么样的方法去校正呢?
下面介绍另外一种可以将误差下降到1%以下的方法:
数字信号处理器TMS320F2812的片上ADC模块的转化结果往往存在较大误差,最大误差甚至会高达9%,如果这样直接在实际工程中应用ADC,必然造成控制精度降低。对此提出了一种改进的校正方法,即用最小二乘和一元线性回归的思想,精确拟合出ADC的输入/输出特性曲线,并以此作为校正的基准在DSP上进行了验证,实验表明,此方法可以将误差提高到1%以内,适合于对控制要求较高的场合。