资讯详情

开关稳压电源软件设计

开关稳压电源



一、题目要求

1.题目

在这里插入图片描述 制作如图所示的开关稳压电源。

2.系统总体框图

二、控制核心和环境配置

MSP430系列单片机:MSP430F6638 IDE:Code Composer Studio

三、实现系统核心功能

1.基本电路和理论

采用Boost电路升压,上图是典型的正输入正输出Boost电路结构。 分析电感电压和电感电流:

开关导通时有: I ( t ) d t = V i n L \frac{I(t)}{dt} = \frac{V_{in}}{L} dtI(t)=LVin P i n = U i n ? I L ? T o n P_{in} = U_{in}\cdot I_L\cdot T_{on} Pin​=Uin​⋅IL​⋅Ton​ 开关关断时有: I ( t ) d t = V i n − V o L \frac{I(t)}{dt} = \frac{V_{in}-V_o}{L} dtI(t)​=LVin​−Vo​​ P o u t = ( U o − U i n ) ⋅ I L ⋅ T o f f P_{out} = (U_o-U_{in})\cdot I_L\cdot T_{off} Pout​=(Uo​−Uin​)⋅IL​⋅Toff​ 由此可以推出: V o = V i n 1 − D V_o =\frac{V_{in}}{1-D} Vo​=1−DVin​​

其中 D = T o n T o f f D=\frac{T_{on}}{T_{off}} D=Toff​Ton​​,即通过控制开关S的占空比可以控制输出电压的大小。这是软件控制实现稳压的理论基础。

2.电路的改进

将电路的开关换成mos管,二极管也换成mos管,通过生成两个互补的PWM波可以实现"开关"的导通和关断,注意设置死区! 否则可能造成电路短路!

3.用PID算法实现稳压

本系统使用ADS1118芯片进行电压电流采样,通过采样得到的电压进行负反馈实时调节给mos管的PWM波占空比。在本题中,由于系统对输出电压的损耗很小,几乎没有稳态误差,故用PI调节即可。

PI调节代码如下

float PID(void)
{ 
        
    float deltD;
    deltV[1] = Vin - Vout;  //当前
    deltD = Kp * (deltV[1] - deltV[0]) + Ki * deltV[1];
    deltV[0] = deltV[1];    //当前值赋先前值
    return deltD;
}

值得注意的是,有的AD芯片单次采样值可能会产生较大误差,可以取多次采样的值作平均以得到较为准确的采样值,这样可以使PI调节更准确稳定。

同时,由于PI调节的范围可能较大,调节的占空比范围最好取一个限定范围,防止烧毁mos管。

四、代码设计

主函数main.c中的顶层代码如下

#include <msp430.h> 
#include "lib/oled/oled.h"
#include "lib/oled/key_button.h"
#include "lib/ADS1118.h"
#include "lib/setclock.h"
#include "lib/PWM.h"
/** * main.c */
void Vinctrl(void);
float PID(void);
void PWMctrl(float deltD);
void getAD(void);
void overCurrent(void);
void showStatus(void);
int dataLen(int data);

const unsigned int adsConfig0 = 0xc38b;
const unsigned int adsConfig1 = 0xd38b;
const double FS = 4.096;
const float R = 0.04955;

int a = -1;
float Ki = 0.020;   //0.020
float Kp = -0.0010; //-0.0010
float Vin = 33;
float Vout = 0;
float Iout = 0;
float deltV[2] = { 
        0}; //deltV[1]为当前值,deltV[0]为先前值
int duty = 218;
int main(void)
{ 
        
	WDTCTL = WDTPW | WDTHOLD;
	SetClock_MCLK12MHZ_SMCLK12MHZ_ACLK32_768K();
	ADS1118_GPIO_Init();
	
	init_PWM();
	init_key();
	OLED_Init();
	OLED_Clear();
	//过流保护管脚的初始化
    P8DIR |= BIT4;  //输出
// P8REN &=~ BIT4; //拉低使能
    P8OUT &=~ BIT4; //拉低
	while(1)
	{ 
        
	    a = key();
	    Vinctrl();
	    PWMctrl(PID());
// PWMctrl(0);
	    getAD();
	    showStatus();
	}
}

完整代码见程序压缩包

总结及注意事项

升压和稳压的关键在于PI算法合理地调节两互补PWM波的占空比,PWM波可以用硬件产生或者软件中断产生。 在写AD采样函数的时候要注意看AD芯片的datasheet,关注其时序要求、采样量程以及采样模式。

标签: pin二极管开关二极管用in5388b做稳压电路

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台