我在初中的时候有过一两个可调直流电源,那类商品是靠多档开关切换变压器次级抽头做的。第一宗罪是输出电压不准,空载明显很高,且输出电压随负载变动;第二宗罪是纹波干扰大,不能给收音机用。我那时的梦想就是有块LM317来做电源。上图是我的第一个实验电源,若干年后才做的,核心器件是变压器、LM317三端可调稳压和多圈电位器。变压器是去逛电子市场淘到的15V带中间抽头EI形(而且这只的发热损耗低是我日后买过所有EI变压器都不如的),所以我加了一个小开关切换整流管的接法,整流后的电压有两挡。为了使用方便我设了一个20V量程的直流电压表头。电源外壳是一个铝质药盒,电压调节旋钮还是牙膏盖做的。这个实验电源多年后因为多圈电位器接触不良的毛病就很少拿出来使用了。LM317是很经典的可调线性稳压器,大概是我做过的稳压电源(包括固定的和可调的)用得最多的芯片了。它的稳压特性是保持ADJ端和OUT端有固定的1.25V压差。因为ADJ端的电流很小,若能忽略掉的话就可以用两个电阻分压实现1.25V以上的电压输出了。下面图中的R2换成可调电阻,就构成了可调稳压电源。LM317可以允许约40V的电压输入,输出电流最大1.5A,可以拧到散热器上而且具备热保护,所以是很容易使用的。稳压的原理(线性稳压)就是用一个反馈环路调整功率晶体管的驱动电压,让输出电压的取样与参考电压相等。LM317的内部框图是这样的:其实所有的稳压电路都存在一个类似运放或者电压比较器的东西,再考虑不同的电源调节方式以及电路拓扑,就诞生了很多的稳压器元件。LM317的一个明显弱点是它不是低压差的,也就是LM317输入端的电压比输出端要高一截,一般要3V. 在工频变压器加整流桥的电源里这不是太大问题(因为整流滤波输出电压波动大,要给充分余量),但5V稳压3.3V的应用它就不能胜任了——于是这时候大家熟悉的AMS1117来代替了。输入输出压差乘以输出电流,基本就是线性稳压芯片上的功耗,会转换为热量。所以现在需要低功耗的时候,都用DC-DC电路,也就是开关电源,来替代线性稳压。另外还有升压型和极性反转型的DC-DC电路。我现在制作的这款袖珍实验电源就是升压型的,目标之一是要小巧,能随手拿来用不占地方。输入电压支持3.2V~5.5V的范围,磷酸铁锂电池和USB供电都可以用了。只针对小功率测试和应用,初步设计的输出电压为最高20V,提供最少100mA的输出能力(要大电流就另外设计吧)。目标之二是数控——不再使用电位器,而是用MCU来控制输出电压,我利用了STM32F072的DAC来实现。因为用了数控,可以做同步调节,于是我在DC-DC升压后面加了一个线性的低压差稳压器,以降低开关电源的输出纹波和提升负载响应能力。MCU是拿来做控制的。电源方面用了两颗国产芯,一颗是TX4211开关升压芯片,另一颗是SY6345线性降压芯片。都是SOT-23的封装,体积小但还可手焊。这两颗电源芯片都是可调电压输出的,为什么选择它们是有一定的偶然的(在立创商城遇到),满足了我的设计需求就用上了。大家自己设计电源的时候也不要拘泥于具体的厂商、型号。从电源输入先经过TX4211构成的升压变换,得到输出预期的电压。因为我想用磷酸铁锂3.2V供电,摆脱电源线的限制,所以第一级设计成升压。TX4211支持更高的输入电压和超过我需要的输出电流的能力了。稍欠缺的地方是它不是同步整流,得有一个肖特基二极管的损耗,不过我只用小电流就没关系。TX4211是如何实现电压调节的呢?前面我提到,输入需要电压取样,与参考电压比较,控制调节电路。只不过现在调节不再是线性调节晶体管,而是调节PWM占空比去控制MOSFET开关了。当芯片的FB端电压和内部的参考电压相等时,就达到了平衡状态。否则,芯片会根据FB和参考的压差去调节PWM电路来试图取得平衡。从电源输出用电阻分压后连到FB端,就可以设定输出电压。这是现在绝大多数可调电源芯片的设计方式了。TX4211内部的参考电压是0.6V,就用上面的公式来根据输出电压计算需要的电阻。那么要实现数控怎么做?用电动机去调可调电阻?在这里显然没必要。用数字电位器代替电阻呢?成本太高了,依然还是元器件的思维,还没有到线性电路的思维。依照我刚讲到的平衡状态,从输出电压“计算”出一个FB电压就达到了平衡,那么再引入另一个变量,不仅有输出电压,再加一个受控的电压源,就可以解出平衡状态时的输出电压了。和稳压芯片手册上的电路相比,上图多了一个电阻R10,连到一个控制电压(MCU的DAC输出)了。因此,按照电流关系可以把平衡条件写成:很明显,输出电压和控制电压呈线性关系,并且是控制电压升高对应输出电压下降,比例因子是R1/R10. 控制电压的范围是MCU的DAC能够输出的电压范围。对于STM32F072的DAC,输出电压范围是0到VDDA(因为VREF+和VDDA是同一个引脚),需要用稳压电路给VDDA供电来保证DAC输出电压稳定,从而使实验电源的输出稳定。因为STM32的VDD或VDDA都不能超过3.6V,在这个应用里面需要将输入电压稳压后给MCU. 我用的是2.5V输出的RT9193给MCU以及液晶显示模块供电。STM32F072有两路DAC输出,分别用来调节TX4211和SY6345的输出电压,调节原理和计算方法完全一样。但在用公式计算前要注意DAC输出驱动的问题,且先看下规格书对DAC的描述:DAC输出有经过缓冲(增加驱动能力)和不经过缓冲的选项。如果不用缓冲,那么输出电压几乎可以覆盖0~VDDA的范围,但是DAC输出的阻抗是比较高的。也就是说,相当于在上面电路图和公式中的R10上面又串联了一个未知的电阻,且不知这个电阻是否是恒定的。要减少DAC输出阻抗的影响,控制电源用的分压电阻就要取得很大,这样对电源芯片又未必合适了。因此我考虑用DAC的缓冲输出模式,外面负载电阻在5千欧以上就可以了,容易满足。那么DAC输出电压范围保守些可按0.2V~2.3V计。按照上面的公式,从已知的DAC最低输出电压和电源芯片最高输出电压可以得到一个等式,再从已知的DAC最高输出电压和电源芯片最低输出电压可以得到另一个等式,然后通过这两个等式求解R1,R5和R10. 当然三个变量两个方程的解是不确定的,但R10/R5和R1/R5的比例是可以解出来,或者说固定其中一个电阻解另外两个电阻是可以的。实际用的电阻器并不能取任意值,而是从系列电阻值里面取。所以我们要尝试一些和解相近的电阻值,带回公式算一下输出电压的范围是否够用。我的电源设计LDO输出0.7V~20V,最后使用的分压电阻值如下表,供参考。DC-DC升压之后,经过SY6345这只LDO进行稳压再作为实验电源最终输出。为了减少SY6345上的功耗,尽量保持TX4211的输出只比SY6345的输出高300~400mV. 这是通过软件同步调节两个DAC来实现的。另外稍加注意的就是电源芯片本身输入输出最低电压的限制了。TX4211是DC-DC 升压电路,不能用来降压,因此最低输出电压(当里面的开关管永不开启时)是输入电压减去二极管的压降,用DAC控制不能得到更低的输出。SY6345是线性稳压,理论上最低输出电压是VFB=0.6V. 但SY6345有最低输入电压4V的限制,所以软件控制的时候TX4211的输出电压不要低于4V.以上就是用MCU的DAC控制电源芯片输出电压的原理介绍。至于用电阻分压采样输出电压到MCU的ADC测量实际电压,以及用开关和旋转编码器、液晶显示模块进行用户界面设计,对于EEWorld论坛的MCU玩家来说都不是陌生的,我就不在此详述了。这个帖子目的就是跟大家分享一个数控电源的实现思路,抛砖引玉。做升压还是降压,支持多大功率都看网友们的需要了。欢迎将我们设为“星标”,这样才能第一时间收到推送消息。