ADC模块采样校正技术122.docx
《ADC模块采样校正技术122.docx》由会员分享,可在线阅读,更多相关《ADC模块采样校正技术122.docx(18页珍藏版)》请在冰豆网上搜索。
ADC模块采样校正技术122
ADC模块采样校正技术
1.F2812的ADC模块
TMS320F2812内部集成了ADC转换模块,该模块具有如下的功能:
1.12位ADC核,内置了双采样-保持器(S/H);
2.顺序采样模式或者同步采样模式;
3.模拟输入:
0V~3V;
4.快速转换时间运行在25MHz,ADC时钟,或12.5MSPS;
5.16通道,多路选择输入;
6.自动序列化,在单一时间段内最大能提供16个自动A/D转换,每个转换可编程对16个输入通道中的任何一个进行选择。
7.序列发生器可按2个独立的8状态序列发生器或1个16状态序列发生器。
2.ADC模块误差
2.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
图1理想ADC转换与实际ADC转换
2.2影响分析
在计算机测控系统中,对象数据的采集一般包含两种基本物理量:
模拟量和数字量。
对于数字量计算机可以直接读取,而对于模拟量只有通过转换成数字量才能被计算机所接受,因此要实现对模拟量准确的采集及处理,模数转换的精度和准确率必须满足一定的要求。
由于F2812的ADC具有一定增益误差的偏移误差,所以很容易造成系统的误操作。
下面分析两种误差对线性电压输入及A/D转换结果的影响。
F2812用户手册提供的ADC模块输入模拟电压为0~3V,而实际使用中由于存在增益误差和偏移误差,其线性输入被减小。
下面以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=06977,其余项计算同上。
表1中的最后一行显示了ADC操作的安全参数,其有效位数减少为11.865位,mV/计数位从0.7326增加为0.7345,这将会使转换结果减少0.2%。
在实际应用中,所采集的信号经常为双极型信号,因此信号在送至ADC之前需要添加转换电路,将双极型信号转化为单极型信号。
典型的转换电路如图2所示。
对于ADC模块,考虑到增益误差和失调误差对输入范围的影响,转换电路需要调整为如图3所示的电路。
在图3中,输入增益误差的参考范围已经改变。
图2理想情况下的电压转换电路
图3校正后的电压转换电路
对于双极性输入,其0V输入的增益误差对应单极性输入的1.4315V的增益误差,因此,原有ADC的增益误差和失调误差被增大了。
例如,如果ADC的增益误差为5%,失调误差为2%,则其双极性的增益误差计算如下:
双极性输入x′=0.0000V,单极性的ADC输入电压x=1.4315V,其理想的转换值为ye=1.4315×4095/3=1954,而由ya=1954×1.05+80计算得实际转换值,则双极性增益误差为ya-ye=2132-1954=178(9.1%误差)。
通过计算可以看出,ADC的误差大大增加,因此要使用ADC进行数据采集,就必须对ADC进行校正,提高其转换精度。
通过以上分析可以看出,F2812的ADC转换精度较差的主要原因是存在增益误差和失调误差,因此要提高转换精度就必须对两种误差进行补偿。
3.ADC校正措施
3.1.硬件角度
(1)硬件滤波,滤除干扰信号;
(2)电路板布线时需要注意不要让ADCINxx引脚运行在靠近数字信号通路的地方,这样能使耦合到ADC输入端的数字信号开关噪声大大降低;
(3)采用适当的隔离技术,将ADC模块电源引脚和数字电源隔离;
(4)如果采样电路部分是经过多路开关切换的,可以在多路开关输出上接下拉电阻到地;
(5)采样通道上的电容效应也可能会导致AD采样误差,因为采样通道上的等效电容可能还在保持有上一个采样数据的数值的时候,就对当前数据进行采样,会造成当前数据不准确。
如果条件允许,可以在每次转化完成后现将输入切换到参考地,然后在对信号进行下一次采样。
2.软件角度
(1)多次采样取平均值算法,最为简单;
(2)数字滤波算法,例如采用中值滤波法,具体方法为:
连续采样20个数据,对这些数据进行排序之后,去掉最小的5个和最大的5个,然后取中间10个采样数据的平均值。
(3)软件校正算法。
F2812的ADC转换精度较差的主要原因是存在增益误差(GainError)和偏置误差(OffsetError),要提高转换精度就必须对两种误差进行补偿,下面将具体介绍这种实用的补偿方法。
理想的12位ADC应该是没有增益误差和偏置误差的,因此其转换的计算公式为:
Y=x*mi
其中,x=inputcount=inputvoltage*4095/3.0V
Y=outputcount
Mi=idealgain=1
但是,实际上F2812的AD是存在增益误差和偏置误差的,其转换的计算公式如式2所示:
Y=x*ma+mb
其中,ma=actualgain
B=actualoffset
(与输入为0时相关)
实际的和理想的转换计算曲线如图2所示:
在校正的时候,首先选用ADC的任意两个通道(例如A1,A2)作为参考输入通道,并分别
输入已知的直流参考电压,通过读取相应的结果寄存器获取转换值,利用两组输出值便可求
得ADC模块得校正增益和校正偏置,然后利用这两个值对其他通道转换数据进行补偿。
首先,计算两个通道得参考电压转换后得理想结果。
在讲述算法之前,我们先来看看各个参数之间的关系,如下图所示:
由图可以得到各参数之间的关系如下:
y=x*ma+b
ma=(yH–yL)/(xH–xL)
b=yL–xL*ma
CalGain=(xH–xL)/(yH–yL)
CalOffset=yL*CalGain–xL
x=y*CalGain–CalOffset
给A1通道加2.5V,给A2通道加0.5V。
A1input=VHigh=2.5V,则2.5*4095/3.0=3413(理想值)
A2input=VLow=0.5V,则0.5*4095/3.0=683(理想值)
校正C语言的算法如下:
#defineHIGH_IDEAL_COUNT3413//理想高值
#defineLOW_IDEAL_COUNT683//理想低值
#defineSAMPLES20//采样次数
//定义所需的各个变量
Uint16Avg_HighActualCount;
Uint16Avg_LowActualCount;
Uint16Sum_HighActualCount;
Uint16Sum_LowActualCount;
Uint16CalGain;
Uint16CalOffset;
Uint16HighActualCount[SAMPLES];
Uint16LowActualCount[SAMPLES];
//变量初始化
Voidinitvar(void)
{
Avg_HighActualCount=0;
Avg_LowActualCount=0;
Sum_HighActualCount=0;
Sum_LowActualCount=0;
CalGain=0;
CalOffset=0;
Uint16I;
For(i=0;i{HighActualCount[I]=0;LowActualCount=0;}}//计算增益和偏置的函数Voidcalerror(void){StaticUnit16i;//采样计数Uint16k;HighActualCount=AdcRegs.AdcResult1>>4;//读采样数据LowActualCount=AdcRegs.AdcResult2>>4;If(i>=SAMPLES)//采样满规定次数{i=0;for(k=0;k{Sum_HighActualCount+=HighActualCount;Sum_LowActualCount+=LowActualCount;}Ave_HighActualCount=Sum_HighActualCount/SAMPLES;//多次采样取平均值Ave_LowActualCount=Sum_LowActualCount/SAMPLES;CalGain=(HIGH_IDEAL_COUNT-LOW_IDEAL_COUNT)//计算增益系数/(Avg_HighActualCount-Avg_LowActualCount);CalOffset=Avg_LowActualCount*CalGain-LOW_IDEAL_COUNT;//计算偏置}I++;}//在ADC_ISR中,对各个通道进行校正:InterruptAdc_Isr(void){。。。。。。。。。。newResultn=AdcRegs.ADCRESULTn*CalGain-CalOffset;。。。。。。。。。。} 4.实际的ADC基准电路图设计假设实际增益为ma,实际偏移量为b,则模拟量输入与数字量输出Y之间的关系为:在这个式子里,很明显,ma和b是个未知量。假如我们知道了ma和b,那么通过采样结果显示的数据Y,我们就能够知道实际输入的电压X。也就是说关键是如何来求出ma和b我们在初中的时候就学过,对于二元一次方程,如果下面两条方程组成了二元一次方程组的话,其中(X1,Y1)和(X2,Y2)已知的话,ma和b就可以得到了我们可以通过两路精准电源,提供给ADC的任意两个输入通道,例如ADCINA7和ADCINB7,精准电源的输电压是很容易确定的,也就是X1和X2,我们可以通过读取ADCINA7和ADCINB7的转换结果来获得Y1和Y2,这样,我们根据式5,就可以得到转换过程中的实际增益ma和实际的偏移量b了,如式6所示:这样,只要知道数字量转换结果Y,我们就可以得到实际的输入量X了。此方法需要我们在设计硬件AD采样电路时设计两路精准电源,其原理就是将这两路精准电源提供给AD的任意两个通道,通过采集已知的信号来求出2812的AD采样过程中本身存在的增益系数和偏移量,再利用这两个系数去校正其他AD采样通道。试验表明,经过校正后的AD采样精度基本可以到达千分之一,这对于在实际应用中足够了。硬件校准时芯片的选择和基本思路如下:先选择一电压基准,一般实际考虑成本我们选择的时候TL431,如下图所示:如果Vout=3V,Vin=5V,那么可以根据R1和R2的比值计算出电阻值(电阻一般取K级的)。电压基准已经出来,如果我们要用两路已知的基准信号其校正其他14路AD采样,我们一般是将这个3V信号经过运放生成两路子电压,进行采样。假设我们需要进入AD采样的两路电压分别是0.5V和2.5V那么我们先要在一路基准的情况下,生成两路,这是我们可以选择运放,TL084,LM324这些是首选,一路子信号生成电路如下:已知输入是3V信号,输出分别是0.5V和2.5V,根据最基本的模拟电路知识,就能求出相对应的各个电阻的值。我们在这里用ADINA7和ADINB7两采样端口进行校准。AD校正算法:t1=0;//每次采样校准之后将t1清零,确保每次转换的正确性RefHighActualCount=0;//将实际采样2.5v寄存器清零。RefLowActualCount=0;//将实际采样0.5v寄存器清零。RefHighActualCount=AdcRegs.RESULT4>>4;//2.5v实际采样值放寄存器4中。RefLowActualCount=AdcRegs.RESULT3>>4;//0.5v实际采样值放寄存器3中。If(SampleCount>SAMPLES){SampleCount=SAMPLES;}Avg_RefHighActualCount=(Avg_RefHighActualCount*SampleCount+RefHighActualCount)/(SampleCount+1);//2.5V采样软件滤波。Avg_RefLowActualCount=(Avg_RefLowActualCount*SampleCount+RefLowActualCount)/(SampleCount+1);//0.5V采样软件滤波。T2=2730.0;//t2=RefHighActualCount-RefLowActualCount=3413-683=2730.0//实际2.5与0.5v采样值放寄存器后的差值。t1=Avg_RefHighActualCount-Avg_RefLowActualCount;CalGain=t2/t1;//增益误差系数。CalOffset=RefLowActualCount/CalGain-REF_LOW_IDEAL_COUNT;//失调误差系数。//滤波次数。SampleCount++;通过计算出的CalGain和CalOffset,我们就能得到校正后其他通道的输入电压了。在AD软件校正方面,我们还可以加入滤波算法,这种方法一般在采样直流信号中,考虑到成本时用到,一般是把采样值取N个点存储在数组a[]中,在作处理时比较常用的有两种方法:取N个点的均值,或者将N个采样点的值按从小到大进行排列之后,取中间的N/2个值进行求和取平均值。为了使得AD能够获得比较好的精度,在我们PCB布线时就需要注意,下面这段话引自于TI的手册,以供大家参考:“对ADCINxx引脚最主要的限制是不要运行在靠近数字通路的地方,这会使耦合到ADC输入端的数字信号线上的开关噪声减到最小。此外,可以采用适当的隔离技术,将ADC模块电源引脚和数字电源隔离。” 5.实际的ADC采样电路图我们在项目实际研发过程中采用的AD采样的硬件电路如下图所示:图1为电流信号检测与调理电路,电压信号的检测与调理电路与此相类似。从电流传感器输出的信号CT1首先经过了由R1、C1组成的低通滤波电路,滤除高频干扰信号,然后通过U1构成的电压跟随器,实现了电路前后两级的隔离。由于2812的I/O口输入电平必须低于3.3V,因此在芯片引脚的输入前端加了一个稳压管Z1,使AD口输入的电压幅值不超过3V。 6.2327.23238.2329.232310.23211.3212.sgfdg13.实例一:2.1.1AD采样F2812的ADC模块是一个12位的模/数转换器。对于16路的AD输入单元,本实验平台为其中的8路AD输入通道确定了功能,配置了相关的单元电路,包括:两路温度信号采集、交流信号采集、温度给定、鼓风机调速给定、力应变片电桥输出信号采集、压电传感器输出信号采集以及流量计输出信号采集。如图2.1所示:温度给定和鼓风机调速给定是对电位器上直流电压的采样(图a),比较简单不作过多介绍;力应变片电桥输出信号采集、压电传感器输出信号采集(图c)以及流量计输出信号采集(图b)是接口部分,分别与传感器动态试验部分(第四章)和流量仪表部分(第三章)连接。这里着重介绍温度信号采集和交流信号采集。图2.1AD2~AD6的接口电路2.1.1.1温度信号采集两路温度信号分别通过F2812的AD0、AD1通道来采集。由于两个通道完全一样,这里只介绍一路温度信号(AD0)的采集。(1)硬件原理温度传感器采用的是NS公司生产的LM35[5],它具有很高的工作精度和较宽的线性工作范围,它的输出电压与摄氏温度线性成比例,且无需外部校准或微调,可以提供±1/4℃的常用的室温精度。LM35的输出电压与摄氏温度的线形关系可用下面公式(2.1)表示,0℃时输出为0V,每升高1℃,输出电压增加10mV。(2.1)式中,输出电压单位为mV,温度单位为℃。其电源供应模式有单电源与正负双电源两种。正负双电源的供电模式可提供负温度的测量,单电源模式在25℃下电流约为50mA,非常省电。本系统采用的是单电源模式,可测温度范围0~150℃。温度传感器电路将测量到的温度信号转换成电压信号输出到信号放大电路,与温度值对应的电压信号经放大后输出至A/D转换电路。电压信号转换成数字量后DSP根据显示需要对数字量进行处理,再送数码管进行显示。关于数码管显示部分的设计在后面“2.2输出单元”中介绍。由于温度传感器LM35输出的电压范围为0~1.5V,虽然该电压范围在A/D转换器的输入允许电压范围内,但该电压信号较弱,如果不进行放大直接进行A/D转换则会导致转换成的数字量太小、精度低。系统中选用低漂移放大器OPA2335对LM35输出的电压信号进行幅度放大,电压放大倍数为2倍,电路图如图2.2所示。图2.2温度测量硬件原理图(2)软件设计通过定时器在中断中实现AD采样。采用多次采样求平均值的方法使得最后计算出的温度值更准确。主程序实现DSP、ADC、定时器的初始化,并在数码管上显示温度值。软件流程图如图2.3所示。图2.3温度测量单元软件流程图(3)实验结果在实际的使用过程中,我们发现,ADC的转换结果误差较大,如果直接将此转换结果用于控制回路,必然会降低控制精度,最大的转换误差可以达到10%。为减小误差,除了采用上面所述的多次采样取平均值算法,还采用了软件校正算法。通过多次计算、对比,对F2812的ADC存在的偏置误差(OffsetError)作了补偿。多次测试表明该测温系统工作稳定可靠,响应时间短、抗干扰能力强。2.1.1.2交流信号采集(1)硬件原理由于F2812自带的AD转换器是单极性的,即输入电压只能为0~3.3V。因此对于采样交流信号,首先需要将该电压值的中点(0电平点)提升至AD输入量程的中点,然后再进行AD采样[6]。将3.3V电压经R231、R38分压得到1.6V中点电压。双二极管BAT54S保证输入AD7通道的电压在0~3.3V之间。硬件原理图如图2.4所示。图2.4交流采样电路硬件原理图(2)软件设计AD采样在中断中实现,由定时器1来软件触发中断,定时器周期设为0.1ms。每0.1ms采样一次,在AD中断服务程序中,把采样结果保存到内存中去。软件流程如图2.5所示。图2.5交流采样电路软件流程图(3)实验结果用信号发生器产生幅度小于3V,频率为1000Hz的正弦波作为AD7的输入。运行程序,利用DSP的开发软件CCS自带的图形绘制功能可得到A/D的采样结果如图2.6所示。图2.6图形窗口中显示的A/D采样结果14.sf
HighActualCount[I]=0;
LowActualCount=0;
}
//计算增益和偏置的函数
Voidcalerror(void)
StaticUnit16i;//采样计数
Uint16k;
HighActualCount=AdcRegs.AdcResult1>>4;//读采样数据
LowActualCount=AdcRegs.AdcResult2>>4;
If(i>=SAMPLES)//采样满规定次数
i=0;
for(k=0;k{Sum_HighActualCount+=HighActualCount;Sum_LowActualCount+=LowActualCount;}Ave_HighActualCount=Sum_HighActualCount/SAMPLES;//多次采样取平均值Ave_LowActualCount=Sum_LowActualCount/SAMPLES;CalGain=(HIGH_IDEAL_COUNT-LOW_IDEAL_COUNT)//计算增益系数/(Avg_HighActualCount-Avg_LowActualCount);CalOffset=Avg_LowActualCount*CalGain-LOW_IDEAL_COUNT;//计算偏置}I++;}//在ADC_ISR中,对各个通道进行校正:InterruptAdc_Isr(void){。。。。。。。。。。newResultn=AdcRegs.ADCRESULTn*CalGain-CalOffset;。。。。。。。。。。} 4.实际的ADC基准电路图设计假设实际增益为ma,实际偏移量为b,则模拟量输入与数字量输出Y之间的关系为:在这个式子里,很明显,ma和b是个未知量。假如我们知道了ma和b,那么通过采样结果显示的数据Y,我们就能够知道实际输入的电压X。也就是说关键是如何来求出ma和b我们在初中的时候就学过,对于二元一次方程,如果下面两条方程组成了二元一次方程组的话,其中(X1,Y1)和(X2,Y2)已知的话,ma和b就可以得到了我们可以通过两路精准电源,提供给ADC的任意两个输入通道,例如ADCINA7和ADCINB7,精准电源的输电压是很容易确定的,也就是X1和X2,我们可以通过读取ADCINA7和ADCINB7的转换结果来获得Y1和Y2,这样,我们根据式5,就可以得到转换过程中的实际增益ma和实际的偏移量b了,如式6所示:这样,只要知道数字量转换结果Y,我们就可以得到实际的输入量X了。此方法需要我们在设计硬件AD采样电路时设计两路精准电源,其原理就是将这两路精准电源提供给AD的任意两个通道,通过采集已知的信号来求出2812的AD采样过程中本身存在的增益系数和偏移量,再利用这两个系数去校正其他AD采样通道。试验表明,经过校正后的AD采样精度基本可以到达千分之一,这对于在实际应用中足够了。硬件校准时芯片的选择和基本思路如下:先选择一电压基准,一般实际考虑成本我们选择的时候TL431,如下图所示:如果Vout=3V,Vin=5V,那么可以根据R1和R2的比值计算出电阻值(电阻一般取K级的)。电压基准已经出来,如果我们要用两路已知的基准信号其校正其他14路AD采样,我们一般是将这个3V信号经过运放生成两路子电压,进行采样。假设我们需要进入AD采样的两路电压分别是0.5V和2.5V那么我们先要在一路基准的情况下,生成两路,这是我们可以选择运放,TL084,LM324这些是首选,一路子信号生成电路如下:已知输入是3V信号,输出分别是0.5V和2.5V,根据最基本的模拟电路知识,就能求出相对应的各个电阻的值。我们在这里用ADINA7和ADINB7两采样端口进行校准。AD校正算法:t1=0;//每次采样校准之后将t1清零,确保每次转换的正确性RefHighActualCount=0;//将实际采样2.5v寄存器清零。RefLowActualCount=0;//将实际采样0.5v寄存器清零。RefHighActualCount=AdcRegs.RESULT4>>4;//2.5v实际采样值放寄存器4中。RefLowActualCount=AdcRegs.RESULT3>>4;//0.5v实际采样值放寄存器3中。If(SampleCount>SAMPLES){SampleCount=SAMPLES;}Avg_RefHighActualCount=(Avg_RefHighActualCount*SampleCount+RefHighActualCount)/(SampleCount+1);//2.5V采样软件滤波。Avg_RefLowActualCount=(Avg_RefLowActualCount*SampleCount+RefLowActualCount)/(SampleCount+1);//0.5V采样软件滤波。T2=2730.0;//t2=RefHighActualCount-RefLowActualCount=3413-683=2730.0//实际2.5与0.5v采样值放寄存器后的差值。t1=Avg_RefHighActualCount-Avg_RefLowActualCount;CalGain=t2/t1;//增益误差系数。CalOffset=RefLowActualCount/CalGain-REF_LOW_IDEAL_COUNT;//失调误差系数。//滤波次数。SampleCount++;通过计算出的CalGain和CalOffset,我们就能得到校正后其他通道的输入电压了。在AD软件校正方面,我们还可以加入滤波算法,这种方法一般在采样直流信号中,考虑到成本时用到,一般是把采样值取N个点存储在数组a[]中,在作处理时比较常用的有两种方法:取N个点的均值,或者将N个采样点的值按从小到大进行排列之后,取中间的N/2个值进行求和取平均值。为了使得AD能够获得比较好的精度,在我们PCB布线时就需要注意,下面这段话引自于TI的手册,以供大家参考:“对ADCINxx引脚最主要的限制是不要运行在靠近数字通路的地方,这会使耦合到ADC输入端的数字信号线上的开关噪声减到最小。此外,可以采用适当的隔离技术,将ADC模块电源引脚和数字电源隔离。” 5.实际的ADC采样电路图我们在项目实际研发过程中采用的AD采样的硬件电路如下图所示:图1为电流信号检测与调理电路,电压信号的检测与调理电路与此相类似。从电流传感器输出的信号CT1首先经过了由R1、C1组成的低通滤波电路,滤除高频干扰信号,然后通过U1构成的电压跟随器,实现了电路前后两级的隔离。由于2812的I/O口输入电平必须低于3.3V,因此在芯片引脚的输入前端加了一个稳压管Z1,使AD口输入的电压幅值不超过3V。 6.2327.23238.2329.232310.23211.3212.sgfdg13.实例一:2.1.1AD采样F2812的ADC模块是一个12位的模/数转换器。对于16路的AD输入单元,本实验平台为其中的8路AD输入通道确定了功能,配置了相关的单元电路,包括:两路温度信号采集、交流信号采集、温度给定、鼓风机调速给定、力应变片电桥输出信号采集、压电传感器输出信号采集以及流量计输出信号采集。如图2.1所示:温度给定和鼓风机调速给定是对电位器上直流电压的采样(图a),比较简单不作过多介绍;力应变片电桥输出信号采集、压电传感器输出信号采集(图c)以及流量计输出信号采集(图b)是接口部分,分别与传感器动态试验部分(第四章)和流量仪表部分(第三章)连接。这里着重介绍温度信号采集和交流信号采集。图2.1AD2~AD6的接口电路2.1.1.1温度信号采集两路温度信号分别通过F2812的AD0、AD1通道来采集。由于两个通道完全一样,这里只介绍一路温度信号(AD0)的采集。(1)硬件原理温度传感器采用的是NS公司生产的LM35[5],它具有很高的工作精度和较宽的线性工作范围,它的输出电压与摄氏温度线性成比例,且无需外部校准或微调,可以提供±1/4℃的常用的室温精度。LM35的输出电压与摄氏温度的线形关系可用下面公式(2.1)表示,0℃时输出为0V,每升高1℃,输出电压增加10mV。(2.1)式中,输出电压单位为mV,温度单位为℃。其电源供应模式有单电源与正负双电源两种。正负双电源的供电模式可提供负温度的测量,单电源模式在25℃下电流约为50mA,非常省电。本系统采用的是单电源模式,可测温度范围0~150℃。温度传感器电路将测量到的温度信号转换成电压信号输出到信号放大电路,与温度值对应的电压信号经放大后输出至A/D转换电路。电压信号转换成数字量后DSP根据显示需要对数字量进行处理,再送数码管进行显示。关于数码管显示部分的设计在后面“2.2输出单元”中介绍。由于温度传感器LM35输出的电压范围为0~1.5V,虽然该电压范围在A/D转换器的输入允许电压范围内,但该电压信号较弱,如果不进行放大直接进行A/D转换则会导致转换成的数字量太小、精度低。系统中选用低漂移放大器OPA2335对LM35输出的电压信号进行幅度放大,电压放大倍数为2倍,电路图如图2.2所示。图2.2温度测量硬件原理图(2)软件设计通过定时器在中断中实现AD采样。采用多次采样求平均值的方法使得最后计算出的温度值更准确。主程序实现DSP、ADC、定时器的初始化,并在数码管上显示温度值。软件流程图如图2.3所示。图2.3温度测量单元软件流程图(3)实验结果在实际的使用过程中,我们发现,ADC的转换结果误差较大,如果直接将此转换结果用于控制回路,必然会降低控制精度,最大的转换误差可以达到10%。为减小误差,除了采用上面所述的多次采样取平均值算法,还采用了软件校正算法。通过多次计算、对比,对F2812的ADC存在的偏置误差(OffsetError)作了补偿。多次测试表明该测温系统工作稳定可靠,响应时间短、抗干扰能力强。2.1.1.2交流信号采集(1)硬件原理由于F2812自带的AD转换器是单极性的,即输入电压只能为0~3.3V。因此对于采样交流信号,首先需要将该电压值的中点(0电平点)提升至AD输入量程的中点,然后再进行AD采样[6]。将3.3V电压经R231、R38分压得到1.6V中点电压。双二极管BAT54S保证输入AD7通道的电压在0~3.3V之间。硬件原理图如图2.4所示。图2.4交流采样电路硬件原理图(2)软件设计AD采样在中断中实现,由定时器1来软件触发中断,定时器周期设为0.1ms。每0.1ms采样一次,在AD中断服务程序中,把采样结果保存到内存中去。软件流程如图2.5所示。图2.5交流采样电路软件流程图(3)实验结果用信号发生器产生幅度小于3V,频率为1000Hz的正弦波作为AD7的输入。运行程序,利用DSP的开发软件CCS自带的图形绘制功能可得到A/D的采样结果如图2.6所示。图2.6图形窗口中显示的A/D采样结果14.sf
Sum_HighActualCount+=HighActualCount;
Sum_LowActualCount+=LowActualCount;
Ave_HighActualCount=Sum_HighActualCount/SAMPLES;//多次采样取平均值
Ave_LowActualCount=Sum_LowActualCount/SAMPLES;
CalGain=(HIGH_IDEAL_COUNT-LOW_IDEAL_COUNT)//计算增益系数
/(Avg_HighActualCount-Avg_LowActualCount);
CalOffset=Avg_LowActualCount*CalGain-LOW_IDEAL_COUNT;//计算偏置
I++;
//在ADC_ISR中,对各个通道进行校正:
Interrupt
Adc_Isr(void)
。
newResultn=AdcRegs.ADCRESULTn*CalGain-CalOffset;
4.实际的ADC基准电路图设计
假设实际增益为ma,实际偏移量为b,则模拟量输入与数字量输出Y之间的关系为:
在这个式子里,很明显,ma和b是个未知量。
假如我们知道了ma和b,那么通过采样结果显示的数据Y,我们就能够知道实际输入的电压X。
也就是说关键是如何来求出ma和b我们在初中的时候就学过,对于二元一次方程,如果下面两条方程组成了二元一次方程组的话,其中(X1,Y1)和(X2,Y2)已知的话,ma和b就可以得到了
我们可以通过两路精准电源,提供给ADC的任意两个输入通道,例如ADCINA7和ADCINB7,精准电源的输电压是很容易确定的,也就是X1和X2,我们可以通过读取ADCINA7和ADCINB7的转换结果来获得Y1和Y2,这样,我们根据式5,就可以得到转换过程中的实际增益ma和实际的偏移量b了,如式6所示:
这样,只要知道数字量转换结果Y,我们就可以得到实际的输入量X了。
此方法需要我们在设计硬件AD采样电路时设计两路精准电源,其原理就是将这两路精准电源提供给AD的任意两个通道,通过采集已知的信号来求出2812的AD采样过程中本身存在的增益系数和偏移量,再利用这两个系数去校正其他AD采样通道。
试验表明,经过校正后的AD采样精度基本可以到达千分之一,这对于在实际应用中足够了。
硬件校准时芯片的选择和基本思路如下:
先选择一电压基准,一般实际考虑成本我们选择的时候TL431,如下图所示:
如果Vout=3V,Vin=5V,那么可以根据R1和R2的比值计算出电阻值(电阻一般取K级的)。
电压基准已经出来,如果我们要用两路已知的基准信号其校正其他14路AD采样,我们一般是将这个3V信号经过运放生成两路子电压,进行采样。
假设我们需要进入AD采样的两路电压分别是0.5V和2.5V那么我们先要在一路基准的情况下,生成两路,这是我们可以选择运放,
TL084,LM324这些是首选,一路子信号生成电路如下:
已知输入是3V信号,输出分别是0.5V和2.5V,根据最基本的模拟电路知识,就能求出相对应的各个电阻的值。
我们在这里用ADINA7和ADINB7两采样端口进行校准。
AD校正算法:
t1=0;//每次采样校准之后将t1清零,确保每次转换的正确性
RefHighActualCount=0;//将实际采样2.5v寄存器清零。
RefLowActualCount=0;//将实际采样0.5v寄存器清零。
RefHighActualCount=AdcRegs.RESULT4>>4;//2.5v实际采样值放寄存器4中。
RefLowActualCount=AdcRegs.RESULT3>>4;//0.5v实际采样值放寄存器3中。
If(SampleCount>SAMPLES)
{SampleCount=SAMPLES;}
Avg_RefHighActualCount=(Avg_RefHighActualCount*SampleCount+RefHighActualCount)/(SampleCount+1);//2.5V采样软件滤波。
Avg_RefLowActualCount=(Avg_RefLowActualCount*SampleCount+RefLowActualCount)/(SampleCount+1);//0.5V采样软件滤波。
T2=2730.0;//t2=RefHighActualCount-RefLowActualCount=3413-683=2730.0
//实际2.5与0.5v采样值放寄存器后的差值。
t1=Avg_RefHighActualCount-Avg_RefLowActualCount;
CalGain=t2/t1;//增益误差系数。
CalOffset=RefLowActualCount/CalGain-REF_LOW_IDEAL_COUNT;
//失调误差系数。
//滤波次数。
SampleCount++;
通过计算出的CalGain和CalOffset,我们就能得到校正后其他通道的输入电压了。
在AD软件校正方面,我们还可以加入滤波算法,这种方法一般在采样直流信号中,考虑到成本时用到,一般是把采样值取N个点存储在数组a[]中,在作处理时比较常用的有两种方法:
取N个点的均值,或者将N个采样点的值按从小到大进行排列之后,取中间的N/2个值进行求和取平均值。
为了使得AD能够获得比较好的精度,在我们PCB布线时就需要注意,下面这段话引自于TI的手册,以供大家参考:
“对ADCINxx引脚最主要的限制是不要运行在靠近数字通路的地方,这会使耦合到ADC输入端的数字信号线上的开关噪声减到最小。
此外,可以采用适当的隔离技术,将ADC模块电源引脚和数字电源隔离。
”
5.实际的ADC采样电路图
我们在项目实际研发过程中采用的AD采样的硬件电路如下图所示:
图1为电流信号检测与调理电路,电压信号的检测与调理电路与此相类似。
从电流传感器输出的信号CT1首先经过了由R1、C1组成的低通滤波电路,滤除高频干扰信号,然后通过U1构成的电压跟随器,实现了电路前后两级的隔离。
由于2812的I/O口输入电平必须低于3.3V,因此在芯片引脚的输入前端加了一个稳压管Z1,使AD口输入的电压幅值不超过3V。
6.232
7.2323
8.232
9.2323
10.232
11.32
12.sgfdg
13.实例一:
2.1.1AD采样
F2812的ADC模块是一个12位的模/数转换器。
对于16路的AD输入单元,本实验平台为其中的8路AD输入通道确定了功能,配置了相关的单元电路,包括:
两路温度信号采集、交流信号采集、温度给定、鼓风机调速给定、力应变片电桥输出信号采集、压电传感器输出信号采集以及流量计输出信号采集。
如图2.1所示:
温度给定和鼓风机调速给定是对电位器上直流电压的采样(图a),比较简单不作过多介绍;力应变片电桥输出信号采集、压电传感器输出信号采集(图c)以及流量计输出信号采集(图b)是接口部分,分别与传感器动态试验部分(第四章)和流量仪表部分(第三章)连接。
这里着重介绍温度信号采集和交流信号采集。
图2.1AD2~AD6的接口电路
2.1.1.1温度信号采集
两路温度信号分别通过F2812的AD0、AD1通道来采集。
由于两个通道完全一样,这里只介绍一路温度信号(AD0)的采集。
(1)硬件原理
温度传感器采用的是NS公司生产的LM35[5],它具有很高的工作精度和较宽的线性工作范围,它的输出电压与摄氏温度线性成比例,且无需外部校准或微调,可以提供±1/4℃的常用的室温精度。
LM35的输出电压与摄氏温度的线形关系可用下面公式(2.1)表示,0℃时输出为0V,每升高1℃,输出电压增加10mV。
(2.1)
式中,输出电压
单位为mV,温度
单位为℃。
其电源供应模式有单电源与正负双电源两种。
正负双电源的供电模式可提供负温度的测量,单电源模式在25℃下电流约为50mA,非常省电。
本系统采用的是单电源模式,可测温度范围0~150℃。
温度传感器电路将测量到的温度信号转换成电压信号输出到信号放大电路,与温度值对应的电压信号经放大后输出至A/D转换电路。
电压信号转换成数字量后DSP根据显示需要对数字量进行处理,再送数码管进行显示。
关于数码管显示部分的设计在后面“2.2输出单元”中介绍。
由于温度传感器LM35输出的电压范围为0~1.5V,虽然该电压范围在A/D转换器的输入允许电压范围内,但该电压信号较弱,如果不进行放大直接进行A/D转换则会导致转换成的数字量太小、精度低。
系统中选用低漂移放大器OPA2335对LM35输出的电压信号进行幅度放大,电压放大倍数为2倍,电路图如图2.2所示。
图2.2温度测量硬件原理图
(2)软件设计
通过定时器在中断中实现AD采样。
采用多次采样求平均值的方法使得最后计算出的温度值更准确。
主程序实现DSP、ADC、定时器的初始化,并在数码管上显示温度值。
软件流程图如图2.3所示。
图2.3温度测量单元软件流程图
(3)实验结果
在实际的使用过程中,我们发现,ADC的转换结果误差较大,如果直接将此转换结果用于控制回路,必然会降低控制精度,最大的转换误差可以达到10%。
为减小误差,除了采用上面所述的多次采样取平均值算法,还采用了软件校正算法。
通过多次计算、对比,对F2812的ADC存在的偏置误差(OffsetError)作了补偿。
多次测试表明该测温系统工作稳定可靠,响应时间短、抗干扰能力强。
2.1.1.2交流信号采集
由于F2812自带的AD转换器是单极性的,即输入电压只能为0~3.3V。
因此对于采样交流信号,首先需要将该电压值的中点(0电平点)提升至AD输入量程的中点,然后再进行AD采样[6]。
将3.3V电压经R231、R38分压得到1.6V中点电压。
双二极管BAT54S保证输入AD7通道的电压在0~3.3V之间。
硬件原理图如图2.4所示。
图2.4交流采样电路硬件原理图
AD采样在中断中实现,由定时器1来软件触发中断,定时器周期设为0.1ms。
每0.1ms采样一次,在AD中断服务程序中,把采样结果保存到内存中去。
软件流程如图2.5所示。
图2.5交流采样电路软件流程图
用信号发生器产生幅度小于3V,频率为1000Hz的正弦波作为AD7的输入。
运行程序,利用DSP的开发软件CCS自带的图形绘制功能可得到A/D的采样结果如图2.6所示。
图2.6图形窗口中显示的A/D采样结果
14.sf
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1