TMS320C28x模数转换器的精度校正

发布者:陈书记最新更新时间:2011-08-31 关键字:ADC  精度校正 手机看文章 扫描二维码
随时随地手机看文章
   

引 言:

  TMS320F2812内部集成了ADC转换模块。ADC模块是一个12位、具有流水线结构的模数转换器,内置双采样保持器(S/H),可多路选择16通道输入,快速转换时间运行在25 MHz、ADC时钟或12.5 Msps,16个转换结果寄存器可工作于连续自动排序模式或启动/停止模式。

  实际使用中,发现该ADC的转换结果误差较大,如果直接将此转换结果用于控制回路,必然会降低控制精度。笔者在进行了大量实验后,提出一种用于提高TMS320F2812ADC精度的方法,使得ADC精度得到有效提高。

  1 ADC模块误差的定义及影响分析

  1.1 误差定义

  常用的A/D转换器主要存在:失调误差、增益误差和线性误差。这里主要讨论失调误差和增益误差。理想情况下,ADC模块转换方程为y=x×mi,式中x=输入计数值 =输入电压×4095/3;y=输出计数值。在实际中,A/D转换模块的各种误差是不可避免的,这里定义具有增益误差和失调误差的ADC模块的转换方程为y=x×ma±b,式中ma为实际增益,b为失调误差。通过对F2812的ADC信号采集进行多次测量后,发现ADC增益误差一般在5%以内,即0.95

  

理想ADC转换与实际ADC转换

 

  图1理想ADC转换与实际ADC转换

  1.2影响分析

  在计算机测控系统中,对象数据的采集一般包含两种基本物理量:模拟量和数字量。对于数字量计算机可以直接读取,而对于模拟量只有通过转换成数字量才能被计算机所接受,因此要实现对模拟量准确的采集及处理,模数转换的精度和准确率必须满足一定的要求。由于F2812的ADC具有一定增益误差的偏移误差,所以很容易造成系统的误操作。下面分析两种误差对线性电压输入及A/D转换结果的影响。

  F2812用户手册提供的ADC模块输入模拟电压为0~3 V,而实际使用中由于存在增益误差和偏移误差,其线性输入被减小,分析如表1所列。

  

 

  下面以y=x×1.05+80为例介绍各项值的计算。当输入为0时,输出为80,由于ADC的最大输出值为4095,则由式y=x×1.05+80求得输入最大电压值为2.8013。因此,交流输入电压范围为1.4007±1.4007,此时有效位数N=ln4015/ln2=11.971,mV/计数位=2.8013/4015=0?6977,其余项计算同上。表1中的最后一行显示了ADC操作的安全参数,其有效位数减少为11.865位,mV/计数位从0.7326增加为0.7345,这将会使转换结果减少0.2%。

  在实际应用中,所采集的信号经常为双极型信号,因此信号在送至ADC之前需要添加转换电路,将双极型信号转化为单极型信号。典型的转换电路如图2所示。对于ADC模块,考虑到增益误差和失调误差对输入范围的影响,转换电路需要调整为如图3所示的电路。在图3中,输入增益误差的参考范围已经改变。

  对于双极性输入,其0 V输入的增益误差对应单极性输入的1.4315V的增益误差,因此,原有ADC的增益误差和失调误差被增大了。例如,如果ADC的增益误差为5%,失调误差为2%,则其双极性的增益误差计算如下:双极性输入x′= 0.0000 V,单极性的ADC输入电压x = 1.4315 V,其理想的转换值为ye=1.4315×4095/3=1954,而由ya=1954×1.05+80计算得实际转换值,则双极性增益误差为ya-ye=2132-1954=178(9.1%误差)。通过计算可以看出,ADC的误差大大增加,因此要使用ADC进行数据采集,就必须对ADC进行校正,提高其转换精度。

  

 

  图2理想情况下的电压转换电路

  

 

  图3校正后的电压转换电路

  2 ADC校正

  2.1校正方法

  通过以上分析可以看出,F2812的ADC转换精度较差的主要原因是存在增益误差和失调误差,因此要提高转换精度就必须对两种误差进行补偿。对于ADC模块采取了如下方法对其进行校正。

  选用ADC的任意两个通道作为参考输入通道,并分别提供给它们已知的直流参考电压作为输入(两个电压不能相同),通过读取相应的结果寄存器获取转换值,利用两组输入输出值求得ADC模块的校正增益和校正失调,然后利用这两个值对其他通道的转换数据进行补偿,从而提高了ADC模块转换的准确度。图1示出了如何利用方程获取ADC的校正增益和校正失调。具体计算过程如下:

  ① 获取已知输入参考电压信号的转换值yL和yh。

  ② 利用方程y=x×ma+b及已知的参考值(xL,yL)和(xH,yH)计算实际增益及失调误差:

  实际增益ma=(yH-yL)/(xH-xL);

  失调误差 b="yL" -xL×ma。

  ③ 定义输入x=y×CalGain-CalOffset,则由方程y=x×ma+b得校正增益CalGain=1/ma=(xH-xL)/(yH -yL),校正失调CalOffset=b/ma=yL/ma-xL。

  ④ 将所求的校正增益及校正失调应用于其他测量通道,对ADC转换结果进行校正。

  上述即为实现ADC校正的全过程,通过使用这种方法,ADC的转换精度有很大提高。由于这种方法是通过某个通道的误差去修正其他通道的误差,因此要采用这种方法,必须保证通道间具有较小的通道误差。对F2812ADC转换模块,由于其通道间的增益及失调误差均在0.2%以内,所以可以采用这种方法对其进行校正。

  [page]

 

    2.2软件实现

  与一般的ADC转换程序相比,带校正的ADC转换程序需要另外增加两个程序段:校正值的计算以及利用校正值对ADC进行处理。为了方便操作及转换结果获取,实现中定义了结构体变量ADC?CALIBRATION?VARS,用来保存ADC转换后的各种数据。另外,提高程序的通用性,采样的方式、参考电压值及高低电压理想的转换值均在ADC转换头文件ADCCalibration.h中定义。ADC?CALIBRATION?VARS定义如下:

  typedefstruct{

  Uint*RefHighChAddr;//参考高电压所连通道地址

  Uint*RefHighChAddr;//参考低电压所连通道地址

  Uint*ChoAddr;//0通道地址

  UintAvg_RefHighActualCount;//参考高电压实际转换值

  UintAvg_RefHighActualCount;//参考低电压实际转换值

  UintRefHighIdealCount;//参考高电压理想转换值

  UintRefLowCount;//参考低电压实际转换值

  UintCalGain;//校正增益

  UintCalOffset;//校正失调

  //校正通道的转换值

  UintCh0;

  UintCh16;

  }ADC?CALIBRATION?VARS;

  整个A/D转换任务由中断函数intADC()和主函数ADCCalibration()构成。中断函数主要用于转换数据的读取,而校正参数计算及各通道转换结果的修正在主函数完成。校正完后,将结果保存到所定义的结构体变量中。此处,对ADC的校正采用单采样单校正的处理方法,当然也可以采用多采样单校正的处理方法,但是为了提高精度,如果设计系统开支允许,建议最好使用单采样单校正的方法,以提高ADC精度。

  2.3实验结果

  笔者在自己所使用的F2812系统上进行了实验,选用1 V和2 V作为参考电压,选用通道A6和A7作为参考通道,通过对0 V、0.5 V、1.5 V、2.5 V校正前后的数据进行比较,发现采用上述校正方法后,ADC的转换准确度明显得到改善,比较结果如表2所列。

  

 

  注:由参考电压计算得:CalGain=0.965;CalOffset=6.757。

  表2中所给出的数据只是笔者进行大量实验后所得数据的一组,实验证明通过校正后ADC的误差能被控制在0.5%以内,这对大多数测控系统来说已满足要求,对于转换精度要求更高的系统,可以采用外扩A/D转换器。

  结语

  TMS320F2812ADC模块精度的提高,将进一步提高其在控制领域中的应用。本文提出的用于提高ADC模块精度的校正算法,经实际应用证明实用可行。

关键字:ADC  精度校正 引用地址:TMS320C28x模数转换器的精度校正

上一篇:一种定点数字信号处理器与单片机的接口设计方
下一篇:数字信号在不同时钟域间同步电路的设计

推荐阅读最新更新时间:2024-05-02 21:33

STM32 ADC笔记单次转换已测试通过
下面分别为库函数和直接操作寄存器的两个范便,我都已测试通过 使用此程序前必要对GPIO设好为模拟输入方式 =====================================库函数版========================================= void AD_CONFIG_SINGLE(void ) { //先配置IO口: ADC_InitTypeDef adcInitStruct; // //PB1 作为模拟通道输入引脚 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE); //使能ADC和GPIOC时钟 //配置ADC:
[单片机]
LPC1788--ADC连续中断多通道转换程序学习分析
LPC1788的ADC转换可以单次转换-也可以连续转换---可以轮询--也可以中断---这里使用的是中断连续转换3个通道的AD值----主要是对AD控制寄存器CR的设置与中断函数中对AD通道的判断。 在主函数中只需要调用初始化函数与在循环采集中不停打开ADC中断--因为在中断函数中为了防止中断嵌套禁止了ADC中断 /////////////////////////////////////////////////////////// void main(void) { uint32_t i; ADC_Init(60000000,4000000); //初始化---外设时钟60M--ADC转换频率4M while
[单片机]
MAX78700 多通道隔离精密ADC
MAX78700是一个模拟 - 数字转换器(ADC),用于与一个兼容MAX78xxx能量测量处理器。该器件可提供的主机,而主机提供控制,命令,MAX78700电源的电流和电压测量。的脉冲变压器提供的移动设备和主机之间的数据隔离和功率路径,测量子系统中省去额外的隔离组件。 关键特性 优于0.5%瓦特小时在宽动态范围的精确度,使用单一校准点 高分辨率Δ-ΣADC 工厂校准电压参考和模具温度传感器 简化的系统架构 无需电源 完全采用隔离变压器的主机 消除了数据隔离元件 减小体积,物料 小型10引脚μMAX®封装 图表
[模拟电子]
MAX78700 多通道隔离精密<font color='red'>ADC</font>
STM8单片机ADC模拟看门狗功能实现
  看门狗的功能大家都知道,而这个模拟看门狗又是什么东西呢?   简单的说就是这个模拟看门狗可以实时监控ADC采样的数据,当采样的数据值小于设置的最小值或者大于设置的最大值时,单片机就会触发ADC中断。这个在温度监控中非常实用,比如现在要监控设备的温度值,当温度值不在设置范围内的时候,就会自动触发中断,而不需要程序一直去采集ADC通道的值,然后使用软件来判断当前的温度值是否超出正常范围。   官方介绍如下:   下面直接通过代码来演示一下这个模拟看门狗的功能: #include adc.h #include main.h u16 DATAH = 0; //ADC转换值高8位 u16 D
[单片机]
STM8单片机<font color='red'>ADC</font>模拟看门狗功能实现
闲聊飞思卡尔ADC模块
因为 ADC 模块是各种控制比较重要的功能模块,基本的保护算法都要考 ADC 的采样数据来执行,所以 ADC 模块还是要熟练掌握,今天我们就来学习下飞思卡尔的ADC模块,如果有猿友使用过microchip的MCU就会发现这两种MCU的ADC模块还是有很大的不同的。 ADC模块简介 KV4x系列MCU 的ADC(Analog to Digital Converter)模块有16个通道,是双端12位的ADC,有独立的参考电压源和控制块,分为ADCA和ADCB,各有8个通道,ADCA和ADCB可以并行采样也可以串行采样,有各自的采样保持电路,特性主要有: 12位的分辨率 最大时钟频率为25M,周期为40ns. 采样速率可以达到
[单片机]
基于ISA总线的ADC板卡设计
1 引言    模数转换器是工业测量和控制系统中数据采集子系统的重要部件,它是测控现场的模拟信号源与数字计算机之间的接口,其任务是把现场中连续变化的被测信号转换成离散信号,再由工控计算机作进一步的数据处理。这就要求系统将所采集的模拟数据信号尽可能真实地、不失真地显示给控制人员,为此,笔者研制了基于ISA总线的A/D转换板卡。该板卡以AD574为A/D转换核心,在ISA总线技术的基础上,利用较少的外围元件来实现多通道、高精度的A/D转换。该板卡具有32路单端信号输入,电压范围为0V~12V,转换位数为12bit/8bit任选,同时具有自检功能。本文主要介绍该板卡的硬件组成原理和软件实现方法。 2硬件电路    本转换卡的
[嵌入式]
stm32cubemx 多路adc采集
采用的软件是STM32CUBEMX+KEIL5 硬件为stm32F103C8T6 我与原文作者做的区别在于 External Trigger Conversion Edge,我在进行配置的时间没有None选项,我选择的是默认的Regular Conversion launched by software 原文地址: http://www.eemaker.com/stm32cubemxadc.html 实现功能:stm32cubeMX配置ADC多通道采集(非dma和中断方式) Stm32ADC的转换模式还是很灵活,很强大,模式种类很多,那么这也导致很多人使用的时候没细心研究参考手册的情况下容易混淆。不知道该用哪种方
[单片机]
stm32cubemx 多路<font color='red'>adc</font>采集
MSP432P401R学习:ADC
MSP432P401R laucnpad中的Precision ADC 模块是原生的 14 位 SAR 模数转换,通过软件过采样支持高达 16 位的精度。该模块实现了一个 14 位 SAR 内核、样本选择控制和多达 32 个独立的转换和控制缓冲器。转换和控制缓冲器允许转换和存储多达 32 个独立的模数转换器 (ADC) 样本,而无需任何 CPU 干预。具体的信息详见用户手册,手册中说的非常的明了。ADC是单片机学习中非常重要的一部分,也是经常会使用到的功能,通过ADC模块可以使模拟量转变为数字量,让单片机可以实现的功能更加的丰富。下面来实现一下MSP432中的ADC程序。 MSP432P401R的SDK中也给了不少的例程,可以
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved