基于PID控制的DC-DC升壓開關(guān)電源設(shè)計_第1頁
基于PID控制的DC-DC升壓開關(guān)電源設(shè)計_第2頁
基于PID控制的DC-DC升壓開關(guān)電源設(shè)計_第3頁
基于PID控制的DC-DC升壓開關(guān)電源設(shè)計_第4頁
基于PID控制的DC-DC升壓開關(guān)電源設(shè)計_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于PID控制的DC-DC升壓開關(guān)電源專 業(yè):電子信息科學(xué)與技術(shù)班 級: 0310412班 學(xué) 號: 031041202 姓 名: 李范佩 一、 設(shè)計要求本課程要求設(shè)計一個基于PID控制的DC-DC升壓開關(guān)電源,輸入低壓直流信號,輸出為高壓直流信號。設(shè)計要求:1、輸入1.5V直流,輸出512V、30mA直流 2、在額定負(fù)載情況下,紋波的峰-峰值<=30mV3、應(yīng)用PID控制程序二、 設(shè)計方案1、 理論基礎(chǔ)The boost converter,是一種開關(guān)直流升壓電路,它可以是輸出電壓比輸入電壓高。在充電過程中,開關(guān)閉合(三極管導(dǎo)通),等效電路如圖二,開關(guān)(三極管)處用導(dǎo)線代替。這時,輸入

2、電壓流過電感。二極管防止電容對地放電。由于輸入是直流電,所以電感上的電流以一定的比率線性增加,這個比率跟電感大小有關(guān)。隨著電感電流增加,電感里儲存了一些能量。當(dāng)開關(guān)斷開(三極管截止)時,由于電感的電流保持特性,流經(jīng)電感的電流不會馬上變?yōu)?,而是緩慢的由充電完畢時的值變?yōu)?。而原來的電路已斷開,于是電感只能通過新電路放電,即電感開始給電容充電,電容兩端電壓升高,此時電壓已經(jīng)高于輸入電壓了。升壓完畢。說起來升壓過程就是一個電感的能量傳遞過程。充電時,電感吸收能量,放電時電感放出能量。如果電容量足夠大,那么在輸出端就可以在放電過程中保持一個持續(xù)的電流。如果這個通斷的過程不斷重復(fù),就可以在電容兩端得到

3、高于輸入電壓的電壓。2、 實際方案本課題采用驅(qū)動式開關(guān)升壓方式,主要利用電容和電感的儲能特性實現(xiàn)。具體可以分為以下幾個部分。第一個是振源,因為是開關(guān)電路,所以需要利用高頻的方波信號實現(xiàn)三極管的導(dǎo)通與截止。然后的主放大電路用來給負(fù)載端升壓,需要一個三極管和一個電感,利用電感的儲能實現(xiàn)直流信號的輸出。由于在開關(guān)閉合的瞬間,電感上會產(chǎn)生巨大的瞬時電壓,而且電感的充電與放電是交替進行的,所以輸出不可能是一個單純的直流信號,那么就需要一個濾波電路把交流信號濾除。之后為了穩(wěn)定輸出電壓,就需要一個負(fù)反饋調(diào)節(jié)電路來控制主放大電路的開關(guān)。三、 方框圖濾波電路主電路振蕩源控制部分四、 具體電路設(shè)計1、 振蕩電路此

4、部分電路是由stm32單片機提供振蕩源,具體程序參見附錄。2、 主電路主電路就是要完成從輸入到輸出的升壓過程,它主要由一個大功率三極管和一個上拉電感構(gòu)成,三極管主要用于配合輸入的方波進行開關(guān)轉(zhuǎn)換,電感的作用是將電能和磁場能相互轉(zhuǎn)換的能量轉(zhuǎn)換器件,當(dāng)三極管開關(guān)管閉合后,電感將電能轉(zhuǎn)換為磁場能儲存起來,當(dāng)三極管斷開后電感將儲存的磁場能轉(zhuǎn)換為電場能,且這個能量在和輸入電源電壓疊加后通過二極管和電容的濾波后得到平滑的直流電壓提供給負(fù)載,由于這個電壓是輸入電源電壓和電感的磁碭能轉(zhuǎn)換為電能的疊加后形成的,所以輸出電壓高于輸入電壓,即升壓過程的完成。不過為了防止三極管截止時產(chǎn)生的過高的電壓燒壞元器件,所以我

5、們在電感的兩端并聯(lián)一個電容用來吸收電壓,保護元件。3、 濾波電路由于我們需要的輸出為直流信號,但是在借助電感進行充放電的時候混入了一些交流信號,所以需要濾波電路來幫助濾除這些交流信號。在主電路的輸出上先接一個二極管,這個二極管主要起隔離作用,當(dāng)三極管截止時,二極管的正極電壓比負(fù)極電壓低,此時二極管反偏截止,使此電感的儲能過程不影響輸出端電容對 負(fù)載的正常供電。當(dāng)三極管導(dǎo)通時,兩種疊加后的能量通過二極向負(fù)載供電,此時二極管正向?qū)?,要求其正向壓降越小越好,盡量使更多的能量供給到負(fù)載端。之后的濾波電路采用LC復(fù)式濾波電路,如果單獨使用電容或電感來濾波,可能效果不夠理想,所以同時使用兩個元件,利用他

6、們對直流和交流呈現(xiàn)出的不同的電抗特性,選擇合適的參數(shù),就可以完成濾波。五、 軟件設(shè)計本系統(tǒng)可采用開環(huán)或者閉環(huán)控制,基于輸出的要求較高,本系統(tǒng)采用閉環(huán)控制。而關(guān)于閉環(huán)控制,軟件最好采用PID調(diào)節(jié)。PID調(diào)節(jié)器分為位置式PID和增量式PID,其區(qū)別有:(1) 位置式PID控制的輸出與整個過去的狀態(tài)有關(guān),用到了誤差的累加值;而增量式PID的輸出只與當(dāng)前拍和前兩拍的誤差有關(guān),因此位置式PID控制的累積誤差相對更大; (2)增量式PID控制輸出的是控制量增量,并無積分作用,因此該方法適用于執(zhí)行機構(gòu)帶積分部件的對象,如步進電機等,而位置式PID適用于執(zhí)行機構(gòu)不帶積分部件的對象,如電液伺服閥。 (3)由于增

7、量式PID輸出的是控制量增量,如果計算機出現(xiàn)故障,誤動作影響較小,而執(zhí)行機構(gòu)本身有記憶功能,可仍保持原位,不會嚴(yán)重影響系統(tǒng)的工作,而位置式的輸出直接對應(yīng)對象的輸出,因此對系統(tǒng)影響較大。 故本設(shè)計采用增量式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;/設(shè)置字體為紅色 writeString("李范佩制作",20,20,RED);LCD_ShowString(120,40,"-2013/8/8");POINT_COLOR=BLUE;/設(shè)置字體為藍(lán)色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("設(shè)置電壓",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);/關(guān)閉中斷Convert_Pos

15、(); /裝換得到坐標(biāo)Pen_Point.Key_Sta=Key_Up; /去掉按下標(biāo)志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; /去掉按下標(biāo)志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; /去掉按下標(biāo)志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; /去掉按下標(biāo)志

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; /去掉按下標(biāo)志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; /去掉按下標(biāo)志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; /去掉按下標(biāo)志setp=setp-5000; while

19、(PEN!=1); Pen_Int_Set(1);/開啟中斷 Pen_Point.Key_Sta=Key_Up; /去掉按下標(biāo)志 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算法的數(shù)據(jù)結(jié)構(gòu) */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;/*函數(shù)說明:void PIDInit(void)入口參數(shù):無功能 :初始化PID各參數(shù)返回值 :無*/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/*函數(shù)說明:PIDsetpoint(int setpoint)入口參數(shù):int setpoint功能 :設(shè)置目標(biāo)值 返回值 :無*/void PIDsetpoint(u32 setpoint) sptr->setpoint = setpoint;/*函數(shù)說明:int PIDGetsetpoint(void)入口參數(shù):無功能 :讀回設(shè)定的目標(biāo)值返回值 :設(shè)定的目標(biāo)值*/int P

23、IDGetsetpoint(void) return (sptr->setpoint);/*函數(shù)說明:void PIDSetKp(double kp)入口參數(shù):在增量式PID里,kp表示:kp=kp*(1+T/Ti+Td/T)功能 :設(shè)定kp返回值 :無*/void PIDSetKp(double kp) sptr->kp = kp;/*函數(shù)說明:double PIDGetKp(void)入口參數(shù):無功能 :讀回設(shè)定的kp返回值 :設(shè)定的kp*/double PIDGetKp(void) return (sptr->kp);/*函數(shù)說明:void PIDSetKi(double ki)入口參數(shù):在增量式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論