-
ADC
模块采样校正技术
1.
F2812
< br>的
ADC
模块
TMS320F2812
内部集成了
ADC
转换模块,该模块具有如下的功能:
1
.
12
位
ADC
核,内置了双采样-保持器(
S/H
)
;
2
.顺序采样模式或者同步采样模式;
3
.模拟输入:
0V
< br>~
3V
;
4
.快速转换时间运行在
25MHz
,
ADC
时钟,或
12.5MSPS
;
5
.
p>
16
通道,多路选择输入;
6
.自动序列化,在单一时间段内最大能提供
16<
/p>
个自动
A/D
转换,每个转换可编程对<
/p>
16
个
输入通道中的任何一个进行选择。
7
.序列发生器可按
2
个独立的
8
状态序列发生器
或
1
个
16
状
态序列发生器。
2.
ADC
模块误差
2.1
误差定义
< br>常用的
A/D
转换器主要存在:
失调误差、增益误差和线性误差
。这里主要
讨论
失调误差和增益误差
。
理想情况下,
< br>ADC
模块转换方程为
y=x×
mi
,
式中
x=
输入计数值
=
输入电压
×
4095/3
;
y=<
/p>
输出计数值。在实际中,
A/D
转换模块
的各
种误差是不可避免的,这里定义具有增益误差和失调误差的
ADC
模块的转换方
程为
y=x×
p>
ma±
b
,式中
m
a
为实际增益,
b
为失调误差。通过对
F2812
的
ADC
< br>信号采集进行多次测量后,发现
ADC
增益误差一般在<
/p>
5%
以内,即
0.95
图
1
理想<
/p>
ADC
转换与实际
ADC
转换
2.2
影响分析
在计算机测控系统中,
对象数据的采集一般包含两种基本物理量
:
模拟量和
数字量。
对于数字量计算机
可以直接读取,
而对于模拟量只有通过转换成数字量
才能被计算
机所接受,
因此要实现对模拟量准确的采集及处理,
模数转换的
精度
和准确率必须满足一定的要求。
由于
F2812
的
ADC
具有一定增益误
差的偏移误
差,所以很容易造成系统的误操作。下面分析两种误差对线性电压输入及
p>
A/D
转换结果的影响。
F2812
用户手册提供的
ADC
模块输入模拟电压为
< br>0
~
3 V,
而实际使用中由<
/p>
于存在增益误差和偏移误差,其线性输入被减小。
下面以
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
中的最后一行显示了
AD
C
操作的安全参数,其有效位数减少为
11.865
位,
mV/
计数位从
0.
7326
增加为
0.7345
,这将会
使转换结果减少
0.2%
。
在实际应用中,所采集的信号经常
为
双极型信号
,因此信号在送至
ADC
之
前需要添加转换电路,将双极型信号转化为单极型信号。典型
的转换电路如图
2
所示。对于
ADC<
/p>
模块,考虑到增益误差和失调误差对输入范围的影响,转换电
路需
要调整为如图
3
所示的电路。在图
3<
/p>
中,输入增益误差的参考范围已经改
变。
图
2
理想情
况下的电压转换电路
图
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%
误差
)
。通过计算可以看出,<
/p>
ADC
的
误差大大增加,因此要使用
p>
ADC
进行数据采集,就必须对
ADC
p>
进行校正,提
高其转换精度。
通过以上分析可以看出,
F2812
的
ADC
转换精度较差的
主要原因是存在增
益误差和失调误差
,因此要提高转换精度就必须对两种误差进行补偿。<
/p>
3.
ADC
校正措施
3.1
.硬件角度
< br>(
1
)硬件滤波,滤除干扰信号;
(
2
)电路板布线时需要注意
p>
不要让
ADCINxx
引脚运行在靠近数字
信
号通路的地方,
这样能使耦合到
AD
C
输入端的数字信号开关噪声大大
降低;
(
3
)采用适当的隔离技术,将<
/p>
ADC
模块电源引脚
和
< br>数字电源隔离
;
(
4
)如果采样电路部分是经过多路开关切换的,可以在
多路开关输
出上接下拉电阻到地
;
(
5
)
采样通
道上的
电容效应
也可能会
导致
AD
采样误差
,
因为采
样通
道上的等效电容可能还在保持有上一个采样数据的数值的时候,
就对
当前数据进行采样,
会造成当前数据不准确。
如果条件允许,
可以在
每次转化完成后现将输入
切换到参考地,
然后在对信号进行下一次采
样
< br>。
2
.软件角度
(
1
)多次采样取
平均值算法
,最为简单;
(
2
)数字滤波算法,例如采用
中值滤波法
,具体方法为:连续采样
20
个数据,对这些数据进行排序之后
,去掉最小的
5
个和最大的
5
个,然后取中间
10
个采样数据的平均值。
p>
(
3
)软件校正
算法。
F2812
的
ADC
转换精度较差的主要原因是存在
增益误差(
Gai
n Error
)和偏置误差(
Offset Error
p>
)
,要提高转换
精度就必须对两种误差进行
补偿,
下面将具体介绍这种实用的补偿方
法。
< br>
理想的
12
位
ADC
应该是没有增益误差和偏置误差的,因此其转换的计算公式为:
Y=x*mi
其中,
x=input
count=inputvoltage*4095/3.0V
Y=output count
Mi=ideal gain=1
但是,实际上
F2812
的
AD
是存在增
益误差和偏置误差的,其转换的计算公式如式
2
所示:
Y=x*ma+mb
其中,
ma=actual gain
B=actualoffset
(与输入为
0
时相关)
实际的和理想的转换计算曲线如图
2
所示:
在校正的时候,首先选用
ADC
的任意两个通道(例如
A1,A2
)作为参考输入通道,并分别
输入已知的直流参考电压,
通过读取相应的结果寄存器获取
转换值,
利用两组输出值便可求
得<
/p>
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_COUNT
3413//
理想高值
#defineLOW_IDEAL_COUNT
683//
理想低值
#define
SAMPLES20//
采样次数
//
定义所需的各个变量
Uint16Avg_HighActualCount;
Uint16Avg_LowActualCount;
Uint16Sum_HighActualCount;
Uint16Sum_LowActualCount;
Uint16 CalGain;
Uint16CalOffset;
Uint16HighActualCount[SAMPLES];
Uint16LowActualCount[SAMPLES];
由图可以得到各参
//
变量初始化
Voidinitvar (void)
{
Avg_HighActualCount=0;
Avg_LowActualCount=0;
Sum_HighActualCount=0;
Sum_LowActualCount=0;
CalGain=0;
CalOffset=0;
Uint16 I;
<
br> // <
br>基准电路图设计
For(i=0;i
{
HighActualCount[I]=0;
LowActualCount=0;
}
}
//
计算增益和偏置的函数
Voidcalerror (void)
{
Static Unit16
i;//
采样计数
Uint16k;
HighActualCount=ult1>>4;//<
/p>
读采样数据
LowActualCount=ult2>>4;
If(i>=SAMPLES)//
采样满规定次数
{
i=0;
for(k=0;k
{
Sum_HighActualCount+= HighActualCount;
Sum_LowActualCount+=LowActualCount;
}
Ave_HighActualCount= Sum_H
ighActualCount/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)
{
。
。
。
。
。<
/p>
。
。
。
。
。
newResult n=
ULTn*CalGain - CalOffset;
。
。
。
。
。
。
p>
。
。
。
。
}
4.
实际的
ADC
假设实
际增益为
ma,
实际偏移量为
b
,
则模拟量输入与数字量输出
Y
之间的
关系为:
Y
?
m
a
?
X
?
b
在这个式子里,很明显,
ma
和
b
是个未知量。假如我们知道了
ma
和
b
,那
么通过采样结果显示的数据<
/p>
Y
,我们就能够知道实际输入的电压
X<
/p>
。也就是说关
键是如何来求出
ma
和
b
我们在初中的时候就学过,
对于二元一次方程,
如果下
面两条方程组成了二元一
次方程组的话,其中
(X1,Y1)
和
(X2,Y2)
已知的话,
ma
和
p>
b
就可以得到了
?
Y
1
?
m<
/p>
a
?
X
1
?
b
?
Y
?
m
?
X
?
b
a
2
?
2
我们可以通过两路精准电源
,提供给
ADC
的任意两个输入通道,例如
-
-
-
-
-
-
-
-
-
上一篇:DSP电机控制系统驱动程序的设计
下一篇:新概念英语第二册课堂笔记:第19课