基于PID控制的DC-DC升压开关电源设计_第1页
基于PID控制的DC-DC升压开关电源设计_第2页
基于PID控制的DC-DC升压开关电源设计_第3页
基于PID控制的DC-DC升压开关电源设计_第4页
基于PID控制的DC-DC升压开关电源设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于PID控制的DC-DC升压开关电源专 业:电子信息科学与技术班 级: 0310412班 学 号: 031041202 姓 名: 李范佩 一、 设计要求本课程要求设计一个基于PID控制的DC-DC升压开关电源,输入低压直流信号,输出为高压直流信号。设计要求:1、输入1.5V直流,输出512V、30mA直流 2、在额定负载情况下,纹波的峰-峰值<=30mV3、应用PID控制程序二、 设计方案1、 理论基础The boost converter,是一种开关直流升压电路,它可以是输出电压比输入电压高。在充电过程中,开关闭合(三极管导通),等效电路如图二,开关(三极管)处用导线代替。这时,输入

2、电压流过电感。二极管防止电容对地放电。由于输入是直流电,所以电感上的电流以一定的比率线性增加,这个比率跟电感大小有关。随着电感电流增加,电感里储存了一些能量。当开关断开(三极管截止)时,由于电感的电流保持特性,流经电感的电流不会马上变为0,而是缓慢的由充电完毕时的值变为0。而原来的电路已断开,于是电感只能通过新电路放电,即电感开始给电容充电,电容两端电压升高,此时电压已经高于输入电压了。升压完毕。说起来升压过程就是一个电感的能量传递过程。充电时,电感吸收能量,放电时电感放出能量。如果电容量足够大,那么在输出端就可以在放电过程中保持一个持续的电流。如果这个通断的过程不断重复,就可以在电容两端得到

3、高于输入电压的电压。2、 实际方案本课题采用驱动式开关升压方式,主要利用电容和电感的储能特性实现。具体可以分为以下几个部分。第一个是振源,因为是开关电路,所以需要利用高频的方波信号实现三极管的导通与截止。然后的主放大电路用来给负载端升压,需要一个三极管和一个电感,利用电感的储能实现直流信号的输出。由于在开关闭合的瞬间,电感上会产生巨大的瞬时电压,而且电感的充电与放电是交替进行的,所以输出不可能是一个单纯的直流信号,那么就需要一个滤波电路把交流信号滤除。之后为了稳定输出电压,就需要一个负反馈调节电路来控制主放大电路的开关。三、 方框图滤波电路主电路振荡源控制部分四、 具体电路设计1、 振荡电路此

4、部分电路是由stm32单片机提供振荡源,具体程序参见附录。2、 主电路主电路就是要完成从输入到输出的升压过程,它主要由一个大功率三极管和一个上拉电感构成,三极管主要用于配合输入的方波进行开关转换,电感的作用是将电能和磁场能相互转换的能量转换器件,当三极管开关管闭合后,电感将电能转换为磁场能储存起来,当三极管断开后电感将储存的磁场能转换为电场能,且这个能量在和输入电源电压叠加后通过二极管和电容的滤波后得到平滑的直流电压提供给负载,由于这个电压是输入电源电压和电感的磁砀能转换为电能的叠加后形成的,所以输出电压高于输入电压,即升压过程的完成。不过为了防止三极管截止时产生的过高的电压烧坏元器件,所以我

5、们在电感的两端并联一个电容用来吸收电压,保护元件。3、 滤波电路由于我们需要的输出为直流信号,但是在借助电感进行充放电的时候混入了一些交流信号,所以需要滤波电路来帮助滤除这些交流信号。在主电路的输出上先接一个二极管,这个二极管主要起隔离作用,当三极管截止时,二极管的正极电压比负极电压低,此时二极管反偏截止,使此电感的储能过程不影响输出端电容对 负载的正常供电。当三极管导通时,两种叠加后的能量通过二极向负载供电,此时二极管正向导通,要求其正向压降越小越好,尽量使更多的能量供给到负载端。之后的滤波电路采用LC复式滤波电路,如果单独使用电容或电感来滤波,可能效果不够理想,所以同时使用两个元件,利用他

6、们对直流和交流呈现出的不同的电抗特性,选择合适的参数,就可以完成滤波。五、 软件设计本系统可采用开环或者闭环控制,基于输出的要求较高,本系统采用闭环控制。而关于闭环控制,软件最好采用PID调节。PID调节器分为位置式PID和增量式PID,其区别有:(1) 位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大; (2)增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。 (3)由于增

7、量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大。 故本设计采用增量式PID控制方法,其程序在附录中给出。附录以下是主要程序,其他未给出。14MAIN.C#include <stm32f10x_lib.h>#include "math.h"#include "sys.h"#include "usart.h"#include "delay.h"#include "

8、led.h"#include "KEY.h"#include "adc.h"#include "joy.h"#include "lcd.h"#include "pid.h"#include "timer.h"#include "24cxx.h"#include "Touch.h"u32 setp;u8 p,i;int pro_controller(u32 x)s32 pwm = 0;PIDsetpoint(setp);PIDS

9、etKp(p);PIDSetKi(i);PIDSetKd(5);pwm=IncPIDCalc(x) ;return pwm;void display_voilate(u16 x)float temp;LCD_ShowNum(156,110,x,4,16);/显示ADC的值temp=(float)x*66/4096;x=temp;LCD_ShowNum(156,130,x,2,16);/显示电压值temp-=x;temp*=1000;LCD_ShowxNum(180,130,(u16)temp,3,16,0X80); void display_den(u16 x)u16 temp;temp=x*

10、10/9;LCD_ShowxNum(108,90,temp,3,16,0X80); void display_setpoint(u32 x)u8 a,b;a=x/5000;LCD_ShowNum(156,210,a,2,16);/显示电压值b=x%5000/500;LCD_ShowxNum(180,210,b,1,16,0X80); int main(void)u32 adcx;s32 zengliang;s32 temp;u16 den;setp=150000;p=80;i=1;PWM_VAL=100; Stm32_Clock_Init(9);uart_init(72,9600); dela

11、y_init(72); LED_Init(); key_Init();joy_Init();Adc_Init();LCD_Init();PWM_Init(899,0); /PB0 PWM输出AT24CXX_Init();/IIC初始化 Touch_Init();while(AT24CXX_Check()/检测不到24c02LCD_ShowString(60,130,"24C02 Check Failed!");delay_ms(500);LCD_ShowString(60,130,"Please Check! ");delay_ms(500);LED0=

12、!LED0;/DS0闪烁POINT_COLOR=RED;/设置字体为红色 writeString("李范佩制作",20,20,RED);LCD_ShowString(120,40,"-2013/8/8");POINT_COLOR=BLUE;/设置字体为蓝色LCD_ShowString(60,90,"den:0.000");LCD_ShowString(60,110,"ADC_CH0_VAL:"); LCD_ShowString(60,130,"ADC_CH0_VOL:00.000V");LCD_

13、ShowString(60,170,"PIDSetKp:000");LCD_ShowString(60,190,"PIDSetKi:000");LCD_ShowString(60,210,"PIDsetpoint:00.0V");writeString("设置电压",60,270,RED);writeString("单位",134,270,RED);LCD_ShowString(164,270,"(V)");LCD_ShowString(0,290,"+0.1&qu

14、ot;);LCD_ShowString(40,290,"-0.1");LCD_ShowString(80,290,"+0.5");LCD_ShowString(120,290,"-0.5");LCD_ShowString(160,290,"+1.0");LCD_ShowString(200,290,"-1.0");delay_ms(500);while(1) if(Pen_Point.Key_Sta=Key_Down)/触摸屏被按下 Pen_Int_Set(0);/关闭中断Convert_Pos

15、(); /装换得到坐标Pen_Point.Key_Sta=Key_Up; /去掉按下标志if(Pen_Point.X0>0&&Pen_Point.Y0>290&&Pen_Point.X0<40&&Pen_Point.Y0<320) while(PEN!=1);Pen_Int_Set(1);/开启中断Pen_Point.Key_Sta=Key_Up; /去掉按下标志setp=setp+500;if(Pen_Point.X0>40&&Pen_Point.Y0>290&&Pen_Poi

16、nt.X0<80&&Pen_Point.Y0<320) while(PEN!=1);Pen_Int_Set(1);/开启中断Pen_Point.Key_Sta=Key_Up; /去掉按下标志setp=setp-500;if(Pen_Point.X0>80&&Pen_Point.Y0>290&&Pen_Point.X0<120&&Pen_Point.Y0<320) while(PEN!=1);Pen_Int_Set(1);/开启中断Pen_Point.Key_Sta=Key_Up; /去掉按下标志

17、setp=setp+2500;if(Pen_Point.X0>120&&Pen_Point.Y0>290&&Pen_Point.X0<160&&Pen_Point.Y0<320) while(PEN!=1);Pen_Int_Set(1);/开启中断Pen_Point.Key_Sta=Key_Up; /去掉按下标志setp=setp-2500;if(Pen_Point.X0>160&&Pen_Point.Y0>290&&Pen_Point.X0<200&&Pe

18、n_Point.Y0<320) while(PEN!=1);Pen_Int_Set(1);/开启中断Pen_Point.Key_Sta=Key_Up; /去掉按下标志setp=setp+5000;if(Pen_Point.X0>200&&Pen_Point.Y0>290&&Pen_Point.X0<240&&Pen_Point.Y0<320) while(PEN!=1);Pen_Int_Set(1);/开启中断Pen_Point.Key_Sta=Key_Up; /去掉按下标志setp=setp-5000; while

19、(PEN!=1); Pen_Int_Set(1);/开启中断 Pen_Point.Key_Sta=Key_Up; /去掉按下标志 display_setpoint(setp);adcx=Get_Adc_Average(ADC_CH9,30); /PB1口,adc通道8display_voilate(adcx);adcx=adcx*330000/4096;zengliang=pro_controller(adcx);temp=(s32)PWM_VAL; if(temp+zengliang/100000)<0)PWM_VAL=50;else if(PWM_VAL>800)PWM_VAL

20、=700; else PWM_VAL=PWM_VAL+(zengliang/100000);den=PWM_VAL; display_den(den);LCD_ShowNum(132,170,p,3,16);LCD_ShowNum(132,190,i,3,16);LCD_ShowNum(60,230,den,3,16); PID.C#include"pid.h"/*增量式PID*计算公式:u(n)=Kp*e(n)-e(n-1)+Ki*e(n)+Kd*e(n)-2e(n-1)+e(n-2)*增量式PID算法 uk的变化量=kp*ek-ki*e(k-1)+kd*e(k-2)*/

21、*PID算法的数据结构 */typedef struct PID int setpoint; long sumerror; double kp; double ki; double kd; int lasterror; int preverror;PID;static PID spid;static PID *sptr = &spid;/*函数说明:void PIDInit(void)入口参数:无功能 :初始化PID各参数返回值 :无*/void PIDInit(void) sptr->setpoint = 0; sptr->sumerror = 0; sptr->k

22、p = 0; sptr->ki = 0; sptr->kd = 0; sptr->lasterror = 0; /error-1 sptr->preverror = 0; /error-2/*函数说明:PIDsetpoint(int setpoint)入口参数:int setpoint功能 :设置目标值 返回值 :无*/void PIDsetpoint(u32 setpoint) sptr->setpoint = setpoint;/*函数说明:int PIDGetsetpoint(void)入口参数:无功能 :读回设定的目标值返回值 :设定的目标值*/int P

23、IDGetsetpoint(void) return (sptr->setpoint);/*函数说明:void PIDSetKp(double kp)入口参数:在增量式PID里,kp表示:kp=kp*(1+T/Ti+Td/T)功能 :设定kp返回值 :无*/void PIDSetKp(double kp) sptr->kp = kp;/*函数说明:double PIDGetKp(void)入口参数:无功能 :读回设定的kp返回值 :设定的kp*/double PIDGetKp(void) return (sptr->kp);/*函数说明:void PIDSetKi(double ki)入口参数:在增量式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论