本帖最后由 dontium 于 2015-3-19 17:34 编辑
数字电源,说起来高级,实际上很普通,跟我一起做一做,你就会掌握它。---先从BUCK电源说起。
1、 开关电源的公式:
Uo = Ui * D
就这么简单:输出电压等于输入电压乘占空比!
想要输出电压多高,根据公式选择占空比,这样就成了!
今天说的傻瓜电源,即最基本的电源,把所有其它问题抛开,只把主要部分实现。
上面的公式有了,怎样实现呢?---占空比!
决定输出电压的只有占空比,如果你会单片的PWM,肯定知道占空怎么解决了。
那么我们就做第一个实验,
实验一:
电路形式:
设输入电压为12V,要求输出电压为5V,根据公式,需要将占空比设计为41.66667%的PWM波。
--------如果你使用的是STM32 CPU,那就设置:
TIM_TimeBaseStructure.TIM_ClockDivision = 123 // ---设置分频
TIM_TimeBaseStructure.TIM_Prescaler = 456 // ---再设置分频
TIM_TimeBaseStructure.TIM_Period = 789 // 周期
这样就设置了PWM的周期,根据具体芯片的时钟,及自己期望开关电源的频率计算得出以上数值。
然后,设置ARR寄存器的数值,假如PWM的周期是1200,为了实现在12V输入时输出5V电压,就要设置ARR=500(单片机的输出状态自己考虑怎么办了)。
--------如果你使用的是C2000系列CPU,则设:
EPwm1Regs.TBPRD = 123; // Set timerperiod
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 456; // Clock ratio to SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = 789;
然后,设置EPwm1Regs.CMPA.half.CMPA寄存器的数值,同上,假如PWM的周期是1200,为了实现在12V输入时输出5V电压,就要设置CMPA=500。
-----好了,就这样实验一下你的电源,看看结果是不是达到期望的输出?
实验二:
上面的实验,采用固定的PWM占空比的办法,理论上,在规定条件下,确实可以按期望输出所需要的电压。但是,实际情况并非都是理想情况。比如,输入电压有点波动怎么办?使用的管子、电感并非理想器件怎么办?--- 还有其它情况都可能不是所期望的结果,使输出电压有些偏离期望值。这就需要调整。
下面实验跟踪输出电压的办法来解决所期望的输出电压问题。现在增加R1、R2作为输出电压的采样,由CPU作ADC转换,以ADC的结果来控制输出电压的高低,这样就可以达到期望的输出电压。
由上面的电路,对于单片机来说,根据ADC的值来决定PWM的占空比了。
这里,设期望的输出电压为Vo,ADC采集的电压为Uadc,如果原来的PWM的数值为Npwm,则,根据输出电压决定的新的PWM值New-pwm为:
New-pwm = Npwm + k * ( Vo – Uadc )
这里的k就相当于模拟电路中反馈放大器的放大倍数。它的过大或过小都会使输出达不到期望值。上式就相当于PID控制中的P控制,这也是PID控制中的主要部分。
再者,根据CPU的处理速度----响应时间,以及电路中影响时间的电感、滤波电容等,有可能出现附加振荡,如图:
出现这种情况的处理办法有两种:
1、减小调整量。即上式中取小的k值,每次调整一较小量,使输出慢慢逼近要求的电压。
2、延长调整间隔。在相邻两次修改PWM的间隔,设为t,它的最短时间受CPU的速度限制。但此应用是要延长t值,即当上次送出PWM的占空比后,等待一段时间t,让输出稳定,再采集输出的电压值,作运算后去调整PWM占空比。t值大小,主要由输出部分的时间常数决定,实验中可逐次调整至稳定。
实验电路图:
与之对应的PCB: