電子信息系統(tǒng)綜合設(shè)計(jì)實(shí)驗(yàn)報(bào)告 專業(yè):電子信息 班級(jí):電子141班 學(xué)號(hào):14072001784 姓名:劉成成 一、實(shí)驗(yàn)?zāi)康?/strong> 設(shè)計(jì)并制作一臺(tái)數(shù)控型DCDC穩(wěn)壓電源。 二、實(shí)驗(yàn)要求 1、輸出電壓范圍 :0.5v~4.5v?梢酝ㄟ^按鍵實(shí)現(xiàn)電壓調(diào)整 2、必須使用PID閉環(huán)控制算法 3、發(fā)揮部分: PID控制的三個(gè)系數(shù),可以通過遺傳算法來確定。 三、實(shí)驗(yàn)內(nèi)容 1、原理框圖
0.png (8.83 KB, 下載次數(shù): 79)
下載附件
2017-10-30 21:22 上傳
2、實(shí)驗(yàn)原理 PID( Proportional Integral Derivative)控制是 最早發(fā)展起來的控制策略之一,由于其算法 簡(jiǎn)單、魯棒性好和可靠性高,被廣泛應(yīng)用于 工業(yè)過程控制,尤其適用于可建立精確數(shù)學(xué) 模型的確定性控制系統(tǒng)。 如圖一, 圖一 該實(shí)驗(yàn)使用PID算法,通過按鍵控制單片機(jī)PWM波形的占空比。PWM波形通過74HC595驅(qū)動(dòng)電路之后進(jìn)入BOOST電路控制輸出電壓。 即,通過改變占空比來改變輸出電壓。 該實(shí)驗(yàn)實(shí)現(xiàn)的結(jié)果為,設(shè)計(jì)了五個(gè)按鍵,每個(gè)按鍵按下之后會(huì)輸出不同的電壓值,輸出電壓值在依次為1,、2、3、4、5V。 如圖二為BOOST電路部分,實(shí)現(xiàn)升壓功能。 圖二 圖三為驅(qū)動(dòng)電路部分,有了驅(qū)動(dòng)電路,才能讓PWM波形在BOOST電路上工作。 圖三 圖四為單片機(jī)部分 圖四 圖五為AD轉(zhuǎn)換部分 圖五 圖六為顯示部分: 圖六 總的原理框圖如圖七: 圖七 3、程序如下:(見附件)
該實(shí)驗(yàn)最后基本實(shí)現(xiàn)了實(shí)驗(yàn)要求,圖為按下輸出電壓為2V相應(yīng)的按鍵后的示波器和數(shù)碼管顯示的狀態(tài)。示波器黃線為PWM波形,藍(lán)線為電壓波形。數(shù)碼管顯示為1.9V,誤差為0.1V。 通過本次設(shè)計(jì),對(duì)穩(wěn)壓電源和PID算法原理有了一定的理解。初步掌握了Proteus程序的基本用法。并且在進(jìn)行模擬仿真的時(shí)候,對(duì)Proteus運(yùn)用很陌生,在網(wǎng)上大量搜索之后完成了仿真設(shè)計(jì),總體來說還需要不斷地練習(xí)。
buck型DCDC穩(wěn)壓電源的51單片機(jī)源程序如下:
- #include"reg52.h"
- #include"iic.h"
- #include"math.h"
- #include"intrins.h"
- #include<absacc.h>
- //#define unsigend char uchar
- unsigned
- char code shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
- char code sho[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f};
- sbit SHCP=P2^2;
- sbit DS=P2^3;
- sbit STCP=P2^4;
- sbit P11=P3^5;
- sbit P12=P3^7;
- sbit pwm=P2^7;
-
- sbit CS = P1^2;
- sbit CLK = P1^3;
- sbit DIO = P1^4;
-
- sbit button1=P3^0;
- sbit button2=P3^1;
- sbit button3=P3^2;
- sbit button4=P3^3;
- sbit button5=P3^4;
- unsigned char j,k,m,n,i,a,l;
- unsigned int b;
-
- int pwm_add=0;
- int PWM_control=0;
-
- float voltage_get=0;
- float voltage_set=0;
-
- float voltage_kp=0.01;
- float voltage_ki=0.12;
- float voltage_output=0;
- float voltage_error=0;
- float voltage_error_last=0;
-
- void timer_init();
- void display();
- unsigned char Get_ADC(bit ch);
-
- void main()
- {
-
- float x1=0.5,x2=1.5,x3=2,x4=2.5,x5=3;
- timer_init();
-
-
-
- while(1)
- {
- if(button1==0) {voltage_set=1;}
- if(button2==0) {voltage_set=2;}
- if(button3==0) {voltage_set=3; }
- if(button4==0) {voltage_set=4;}
- if(button5==0) {voltage_set=5;}
-
-
- a=Get_ADC();
- b=a*9;
- m=b%1000/100;
- n=b%100/10;
- //l=b%1000/100/10
- display();
- }
-
- }
- void delay(unsigned char t) //?óê±3ìDò
- {
- while(t--);
- }
- void timer_irq() interrupt 1
- {
- pwm_add++;
- if (pwm_add==PWM_control) {pwm=0;}
- else if (pwm_add>=50) {pwm=1;pwm_add=0;}
-
- }
-
- void timer1_irq() interrupt 3
- {
- TH1=(65536-50000)>>8;
- TL1= 65536-50000;
-
- voltage_get=(Get_ADC(0)/10.2);
- // voltage_get=17;
- voltage_error=voltage_set-voltage_get;
-
- voltage_output+=voltage_kp*(voltage_error-voltage_error_last)
- +voltage_ki*voltage_error;
-
- voltage_error_last=voltage_error;
-
- if (voltage_output>49) voltage_output=49;
- else if(voltage_output<1) voltage_output=1;
-
- PWM_control=(int)voltage_output;
-
-
- }
-
- void timer_init()
- {
- TMOD=0X12;
- TH0=TL0=256-200;
- TH1=(65536-50000)>>8;
- TL1= 65536-50000;
- EA=1;ET0=1;ET1=1;TR0=1;TR1=1;
- }
-
-
- unsigned char Get_ADC(bit ch)
- {
- unsigned char i,dat1 = 0,dat2 = 0;
- CS = 0; CLK = 0;
- DIO = 1; _nop_(); _nop_();
- CLK = 1; _nop_(); _nop_();
- CLK = 0; DIO = 1; _nop_(); _nop_();
- CLK = 1; _nop_(); _nop_();
- CLK = 0; DIO = ch; _nop_(); _nop_();
- CLK = 1; _nop_(); _nop_();
- CLK = 0; DIO = 1; _nop_(); _nop_();
- for(i = 0; i < 8; i++)
- {
- CLK = 1; _nop_(); _nop_();
- CLK = 0; _nop_(); _nop_();
- dat1 = (dat1 << 1)|DIO;
- }
- for(i = 0; i < 8; i++)
- {
- dat2 = dat2|((unsigned char)DIO<<i);
- CLK = 1; _nop_(); _nop_();
- CLK = 0; _nop_(); _nop_();
- }
- CS = 1;
- return dat1;
- }
- void display()
- {
-
-
-
- j=0x01;
- for(i=0;i<8;i++)
- {
- if((sho[m]&j)==0)
- {
- DS=0;
- }
- else
- {
- DS=1;
- }
- SHCP=1;
- SHCP=0;
- j<<=1;
- }
- P12=0;
- P11=1;
- STCP=0;
- STCP=1;
-
- delay(200);
-
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (43.04 KB, 下載次數(shù): 63)
下載附件
2017-10-30 21:25 上傳
所有資料51hei提供下載:
穩(wěn)壓電源.zip
(468.82 KB, 下載次數(shù): 292)
2017-10-30 17:40 上傳
點(diǎn)擊文件名下載附件
閉環(huán)算法 下載積分: 黑幣 -5
|