STM32微控制器中内置的ADC使用SAR(逐次逼近) 原则,分多步执行转换。转换步骤数等于ADC转换器中的位数。每个步骤均由ADC时钟驱动。每个ADC时钟从结果到输出产生一位。ADC的内部设计基于切换电容技术。
一,采样状态:
VIN :待采样的信号
VREF:参考电压
Sa切换至VIN,电容充电至电压VIN
Sb开关闭合,比较器正向端拉至GND。
VIN给所有电容充电,同时比较器的正负两极都拉至GND。
二,保持状态:
输入断开
Sb开关打开
然后S1-S11切换至GND
电容的一端到GND,一端到运放正向输入端,没有构成回路,所以经过上一个环节的充电,电容上的电压保持-VIN。
三,比较,S1切换至VREF
-VIN是上一个环节电容存储的电压
在电路中,电容的串联等效电容可以通过以下公式来计算:
1/Ceq = 1/C1 + 1/C2 + 1/C3 + ... + 1/Cn。
其中,Ceq表示串联后的等效电容,C1、C2、C3等表示串联的各个电容。
有了串联等效电容后,我们就可以利用分压公式来求解每个电容上的电压。在电路中,电容上的电压可以通过以下分压公式来计算:
V1 = Veq (Ceq / C1)。
V2 = Veq (Ceq / C2)。
...
Vn = Veq (Ceq / Cn)。
其中,V1、V2、V3等表示各个电容上的电压,Veq表示串联电路的总电压,C1、C2、C3等表示各个电容,Ceq表示串联后的等效电容。
所以:VCOMP=-VIN+VREF/2
如果VCOMP大于0,即VREF/2>VIN,则比较器输出高电平,锁存器输出ADC记录1。
以此类推,切换不同的电容
如果VCOMPVREF/4VIN,则比较器输出低电平,锁存器输出ADC记录0。
以上是ADC的采样原理
ADC的误差主要来源有:ADC自身导致的误差和环境导致的误差;
ADC自身导致的误差有
一,偏移误差:偏移误差是第一次实际转换和第一次理想转换之间的偏离,用EO表示。
对于STM32 ADC,电压的最小可检测增量变化用LSB表示为:
1 LSB = VREF+/4096(在某些封装上, VREF+ = VDDA)。
理想情况下,当模拟输入介于0.5 LSB和1.5 LSB之间时,数字输出应为1
如果 VREF+ = 3.3 V,1 LSB=805.6 μV则在理想情况下, 402.8 μV ( 0.5 LSB = 0.5 × 805.6 μV)的输入应导致生成数字输出 1。但实际上, ADC 可能仍然提供读数 0。如果从 550 μV 的模拟输入获得数字输出 1,则:
偏移误差 = 实际转换 – 理想转换
EO = 550 μV – 402.8 μV = 141.2 μV
EO = 141.2 μV / 805.6 μV = 0.17 LSB
二,增益误差:增益误差是最后一次实际转换和最后一次理想转换之间的偏离,用EG表示。
想情况下,当模拟输入等于VREF+ – 0.5LSB时,应存在从0xFFE到0xFFF的最后一次实际转换。VREF+= 3.3 V,最后一次理想转换应发生在3.299597 V处。
EG = 最后一次实际转换 – 理想转换
如果VREF+ = 3.3 V且VAIN = 3.298435 V时生成从0xFFE到0xFFF的转换,则:
EG = 3.298435 V – 3.299597 V
EG = –1162 μV
EG = ( –1162 μV / 805.6 V) LSB = –1.44 LSB
三,微分线性误差:是实际步进和理想步进之间的最大偏离,用ED表示。
ED = 实际步宽 – 1 LSB
理想情况下,步宽应为1 LSB。
如果VREF+ = 3.3 V,则1.9998 V( 0x9B1)的模拟输入可提供介于0x9B0和0x9B2之间的结果。同样的, 2.0014 V( 0x9B3)的输入可提供介于0x9B2和0x9B4之间的结果。
因此, 0x9B2步进所对应的总电压变化量为:
0x9B3 – 0x9B1,即 2.0014 V – 1.9998 V = 1.6 mV ( 1660 μV)
ED = 1660 μV – 805.6 μV
ED = 854.4 μV
ED = ( 854.4 μV/805.6 μV) LSB
ED = 1.06 LSB
四,积分线性误差:是任何实际转换和端点相关线间的最大偏离,用EL表示。
如果从 0 到 1 的第一次转换发生在 550 μV 处并且最后一次转换 ( 0xFFE 到 0xFFF)发生在3.298435 V (增益误差)处,则传输曲线上连接实际数字代码 0x1 和 0xFFF 的线为端点相关线,EL是指与每一次转换的这条线的偏离。
五,总未调整误差:是实际和理想传输曲线间的最大偏离,用ET表示
环境导致的误差有
一,参考电压噪声
当模拟参考为3.3 V( VREF+ = VDDA)且信号输入为1 V时,转换后的结果为:( 1/3.3) × 4095 = 0x4D9
但是,当模拟参考中的峰间波动为40 mV时,转换值变为:
( 1/3.34) × 4095 = 0x4CA( VREF+在其峰值处)。
误差 = 0x4D9 – 0x4CA = 15 LSB
二,参考电压/电源压降
如果电源提供的电压等于3.292 V(在其输出连接到VREF+后),则:
压降产生的误差为:0x4DC – 0x4D9 = 3 LSB。
三,外部参考电压源温度漂移
四,模拟输入信号噪声
五,最大输入信号幅度的ADC动态范围匹配不佳
ADC动态范围必须与待转换信号的最大幅度相匹配
六,模拟信号源电阻的影响
添加了源电阻( RADC)后,通过对ADC采样原理的了解我们知道,保持电容充满电所需的时间将延长。
充电时间常量为tc=( RADC+RAIN) ×CADC。如果采样时间短于通过RADC + RAIN将CADC充满电所需的时间( ts c),则ADC转换的数字值小于实际值。
七,PCB源电容和寄生电容的影响
外部源电容和寄生电容分别用CAIN和Cp表示
在转换模拟信号时,必须考虑源电容和模拟输入引脚上的寄生电容,源电阻和电容构成RC网络。
除非将外部电容( CAIN+ Cp)完全充满至输入电压值,否则ADC转换结果可能不准确
( CAIN + Cp)值越大,源频率越有限。
八,注入电流的影响
任何模拟引脚(或紧邻的数字输入引脚)上的负注入电流都可能在ADC输入中产生泄漏电流。最坏情况是相邻模拟通道。当VAIN SS时,产生负注入电流,导致电流从I/O引脚流出。
九,I/O引脚串扰
由于I/O之间的电容耦合,切换I/O可能会在ADC的模拟输入中产生一些噪声。彼此距离很近或交叉的PCB走线可能会产生串扰。
十,EMI产生的噪声
邻近电路产生的电磁辐射可能在模拟信号中产生高频噪声
如何获得最佳ADC精度
一,温度补偿
使用内部温度传感器和ADC看门狗,以在温度变化达到给定值时重新校准
ADC。
二,参考电压/电源噪声最小化
LDO输出质量更佳,如果使用DCDC电源,建议使用线性稳压器为参考电压供电,在靠近MCU参考电源的位置安装一个 0.1 μF 和一个 1 至 10 μF 的电容。VREF+在不同负载时必须保持稳定,每当通过开启电路的某部分增加负载时,电流的增大不得导致电压下降。
要过滤高频噪声,可使用与电源串联的铁氧体电感器。对于多个VDD和VSS引脚,应使用单独的去耦电容。
三,模拟输入信号噪声消除
即通过软件对模拟输入多次采样,取所有结果的均值,STM32L0和STM32L4微控制器中,可由硬件执行平均采样。
添加外部RC滤波器以消除高频,截止频率fC刚好高于所涉频率范围的相对简单的低通滤波器将足以限制噪声和混叠,通常为fC的2至5倍。
四,添加白噪声或三角波扫描来改善分辨率
输入信号电平介于两个ADC字级之间(例如0x14A和0x14B之间),因此,不能更精确地确定输入电压值。解决办法是向输入信号中加入噪声或一些信号变化(信号均匀分布,例如三角波扫描,不要修改原始输入信号的平均值),将其电平推过1位ADC电平,应用软件平均法可得到原始输入信号的平均值。
五,将ADC动态范围与最大信号幅度进行匹配
六,外部串联电阻
tc是CADC电容充满电所需的时间
Vc是电容 CADC的充电电压
ts表示采样时间
VAIN是加在CADC上的电压源,及需要采样的信号电压
VREF+是参考电压
ts = TS/fADC,其中Ts是以周期计的采样时间
加载在CADC电容上的初始电压越高,需要更多时间从0V充电到VAIN,对于给定的ts,电容上充电的电压距离充满的差距越大,因此, VAIN = VREF+是验证最大源电阻时要考虑的最坏情况。
我们假设允许的最大误差等于1/2 LSB,即:Error= VAIN – Vc =1/2LSB
设V0 为电容上的初始电压值;
V1 为电容最终可充到或放到的电压值;
Vt 为t时刻电容上的电压值。则:
V0=0,所以:
N为ADC分辨率
Rmax =( RAIN + RADC)
因为:
ts = TS/fADC
Rmax =( RAIN + RADC)
所以:
当采样时间较长且ADC时钟数量较少时,可以获得更好的结果。通过降低ADC时钟频率或选择较低分辨率,可进一步增大允许的外部电阻。
七,外部电容
如果电容没有通过模拟源充满电,外部电容将不允许模拟输入电压与VAIN完全相同。如果模拟输入信号发生变化,则模拟信号频率( FAIN)应使该模拟信号的时间周期至少为:10 × RAIN ×( CAIN + Cp)。
TAIN = 模拟信号时间周期 = 1/FAIN。
TAIN ≥ 10 × RAIN ×( CAIN + Cp)
如果RAIN = 25 k?, CAIN = 7 pF, Cp = 3 pF,则:
因此,系统的最大频率将为:
因此,输入信号的频率不得超过400 kHz,否则ADC转换结果将不准确。
八,外部注入电流最小化
确认是否有任何数字或模拟输入电压可能小于VSS或VSSA。如果是这样,将从该引脚注入反向电流,会显著降低另一个模拟输入上正在进行的转换作业的精度。
如果数字输入接近正在转换的模拟输入,对精度的影响将更大。
九,I/O引脚串扰最小化
通过让接地走线与之交叉来屏蔽模拟信号,可以减少串扰产生的噪声。
十,减少EMI所致噪声
使用适当的屏蔽和布局技巧来减少EMI噪声
比如:
沿敏感模拟信号布置接地走线,在PCB上提供屏蔽。双层PCB的另一侧也应具有接地板。这样可以防止干扰和I/O串扰影响信号
应注意尽可能缩短PCB上这些类型的信号的路径长度。
应使用屏蔽线缆将远距离信号(例如传感器)连接到PCB。
在将接地参考从传感器或模拟源传输到微控制器时,不应使用屏蔽线缆。应使用单独的线作为接地。
屏蔽层应只在靠近接收器的一个位置接地,例如微控制器的模拟接地。在两端(源和接收器)将屏蔽层接地可能产生接地环路,导致电流流经屏蔽层。这种情况下,屏蔽层相当于天线,丧失了屏蔽用途。
十二,布局布线
将模拟和数字布局分开
快速切换会导致数字信号产生高频噪声。通过PCB基底(玻璃、陶瓷或塑料)提供的介电隔离金属连接(走线)形成的电容性耦合。建议使用不同的板提供模拟和数字接地。如果有许多模拟电路,建议使用模拟接地板。模拟接地必须位于模拟电路下方。
如果微控制器之外有许多模拟和数字电路,则最好使用单独的模拟和数字电源,建议以星形网络连接模拟和数字接地。这意味着您必须在一个点连接模拟和数字接地。这样可防止数字信号切换在模拟供电电路中产生噪声。这样还可以防止电流浪涌影响模拟电路。
对供电和接地使用单独的PCB层
对于双层PCB,建议提供最大接地板面积。应通过粗线供电( VDD、 VDDA)。如果两个层使用相同接地信号,则两个层可通过重叠区域的多个连接一起提供接地短路。未使用的PCB区域可用作接地板。
另一种惯例是将一层上的未使用PCB区域连接到正电源( VDD),并将另一层上的未使用区域接地。这样做的好处在于降低了供电和接地信号的阻抗。为PCB上的接地提供最大接地面积会产生良好的屏蔽效果,并降低电路的电磁感应敏感性。
如可能,尝试使用多层PCB,并对供电和接地使用单独的PCB层。各种不同器件的VDD和VSS引脚可以直接连接到供电板,从而缩短连接电源和接地所需的走线长度。长走线具有强电感效应。模拟接地可以从一个点连接到该接地板。如果是,此点应靠近电源。完整接地板提供良好的屏蔽效果,并能降低电路的电磁感应敏感性。
必须使用极短的引线连接电阻和电容等元件。您可以使用贴片电阻和电容。您可以将SMD电容放置在微控制器附近以便于去耦。
使用粗线供电,否则走线的串联电阻会导致压降。事实上,细供电线具有不可忽略的有限电阻,因此,通过它们的高负载电流会导致其两侧存在压降。
石英晶振必须位于接地走线/板周围。接地板最好应覆盖双层PCB在晶振下方的另一侧。大多数晶振具有应接地的金属体。同样地,应将晶振置于微控制器附近。您可以使用贴片晶振。
十三,软件算法
平均采样:– 平均会降低速度但可以提高精度
数字滤波(抑制DC值中的50/60 Hz噪声)– 设置适当的采样频率(这种情况下,从计时器触发十分有用)。– 对采样数据执行软件后处理(例如,对50 Hz噪声及其谐波抑制进行组合滤波)。适合于噪声频谱已知。
AC测量的快速傅里叶变换( FFT)– 此方法可以显示被测信号中的谐波部分。由于使用了更强的计算能力,因此速度较慢。被测信号的频率必须已知,并且必须严格地将ADC采样频率设置为被测频率的2n乘数。
使CPU生成的内部噪声最小化,应用设计必须确保 ADC转换期间来自微控制器的干扰尽可能小。使采样和转换期间的数字信号变化量最小化(数字静默)。 |