找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11999|回復: 11
打印 上一主題 下一主題
收起左側(cè)

dcdc buck閉環(huán)數(shù)控型穩(wěn)壓電源仿真+單片機程序及實驗報告

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:241835 發(fā)表于 2017-10-30 17:40 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
電子信息系統(tǒng)綜合設計實驗報告
專業(yè):電子信息
班級:電子141班
學號:14072001784
姓名:劉成成
一、實驗目的
設計并制作一臺數(shù)控型DCDC穩(wěn)壓電源。
二、實驗要求
1、輸出電壓范圍 :0.5v~4.5v?梢酝ㄟ^按鍵實現(xiàn)電壓調(diào)整
2、必須使用PID閉環(huán)控制算法
3、發(fā)揮部分: PID控制的三個系數(shù),可以通過遺傳算法來確定。
三、實驗內(nèi)容
1、原理框圖

     2、實驗原理
PID( Proportional Integral Derivative)控制是 最早發(fā)展起來的控制策略之一,由于其算法 簡單、魯棒性好和可靠性高,被廣泛應用于 工業(yè)過程控制,尤其適用于可建立精確數(shù)學 模型的確定性控制系統(tǒng)。
如圖一,
圖一
  該實驗使用PID算法,通過按鍵控制單片機PWM波形的占空比。PWM波形通過74HC595驅(qū)動電路之后進入BOOST電路控制輸出電壓。
  即,通過改變占空比來改變輸出電壓。
  該實驗實現(xiàn)的結(jié)果為,設計了五個按鍵,每個按鍵按下之后會輸出不同的電壓值,輸出電壓值在依次為1,、2、3、4、5V。
如圖二為BOOST電路部分,實現(xiàn)升壓功能。
圖二
圖三為驅(qū)動電路部分,有了驅(qū)動電路,才能讓PWM波形在BOOST電路上工作。
圖三
圖四為單片機部分
圖四
圖五為AD轉(zhuǎn)換部分
圖五
圖六為顯示部分:
圖六
總的原理框圖如圖七:
圖七
3、程序如下:(見附件)

  • 實驗結(jié)果
該實驗最后基本實現(xiàn)了實驗要求,圖為按下輸出電壓為2V相應的按鍵后的示波器和數(shù)碼管顯示的狀態(tài)。示波器黃線為PWM波形,藍線為電壓波形。數(shù)碼管顯示為1.9V,誤差為0.1V。
  • 實驗總結(jié)
通過本次設計,對穩(wěn)壓電源和PID算法原理有了一定的理解。初步掌握了Proteus程序的基本用法。并且在進行模擬仿真的時候,對Proteus運用很陌生,在網(wǎng)上大量搜索之后完成了仿真設計,總體來說還需要不斷地練習。

buck型DCDC穩(wěn)壓電源的51單片機源程序如下:
  1. #include"reg52.h"
  2.   #include"iic.h"
  3.   #include"math.h"
  4.   #include"intrins.h"
  5.               #include<absacc.h>                                                         
  6.   //#define unsigend char  uchar
  7. unsigned
  8. char code shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};            
  9. char code sho[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f};
  10. sbit SHCP=P2^2;                           
  11. sbit DS=P2^3;                           
  12. sbit STCP=P2^4;                           
  13. sbit P11=P3^5;
  14. sbit P12=P3^7;
  15.   sbit  pwm=P2^7;

  16.   sbit CS  = P1^2;
  17.   sbit CLK = P1^3;
  18.   sbit DIO = P1^4;

  19.   sbit button1=P3^0;
  20.   sbit button2=P3^1;
  21.   sbit button3=P3^2;
  22.   sbit button4=P3^3;
  23.   sbit button5=P3^4;
  24. unsigned char j,k,m,n,i,a,l;               
  25. unsigned int b;

  26.   int pwm_add=0;               
  27.   int PWM_control=0;            

  28.   float voltage_get=0;                           
  29.   float voltage_set=0;                             

  30.   float voltage_kp=0.01;                           
  31.   float voltage_ki=0.12;                                         
  32.   float voltage_output=0;               
  33.   float voltage_error=0;                           
  34.   float voltage_error_last=0;            

  35.   void timer_init();
  36.               void display();
  37.   unsigned char Get_ADC(bit ch);

  38.   void main()
  39.   {

  40.                             float x1=0.5,x2=1.5,x3=2,x4=2.5,x5=3;
  41.       timer_init();               
  42.                            
  43.                                          
  44.                            
  45.                 while(1)
  46.                 {
  47.                             if(button1==0)                      {voltage_set=1;}
  48.                                if(button2==0)                {voltage_set=2;}
  49.                                             if(button3==0)                  {voltage_set=3; }
  50.                                   if(button4==0)     {voltage_set=4;}
  51.                                                             if(button5==0)    {voltage_set=5;}
  52.                                          
  53.                                          
  54.                                           a=Get_ADC();                                         
  55.    b=a*9;                           
  56.    m=b%1000/100;            
  57.    n=b%100/10;            
  58.    //l=b%1000/100/10            
  59.                                           display();
  60.                                              }               
  61.                            
  62.   }
  63.               void delay(unsigned char t)      //?óê±3ìDò   
  64.   {
  65.    while(t--);
  66.    }
  67.   void timer_irq() interrupt 1
  68.   {
  69.      pwm_add++;
  70.               if      (pwm_add==PWM_control)  {pwm=0;}
  71.               else if (pwm_add>=50)                                          {pwm=1;pwm_add=0;}

  72.   }

  73.   void timer1_irq() interrupt 3
  74.   {
  75.       TH1=(65536-50000)>>8;
  76.                 TL1= 65536-50000;

  77.                 voltage_get=(Get_ADC(0)/10.2);
  78.               // voltage_get=17;
  79.                 voltage_error=voltage_set-voltage_get;

  80.                 voltage_output+=voltage_kp*(voltage_error-voltage_error_last)
  81.                                +voltage_ki*voltage_error;

  82.                 voltage_error_last=voltage_error;

  83.                 if     (voltage_output>49)                voltage_output=49;
  84.                 else if(voltage_output<1)                              voltage_output=1;
  85.                
  86.                 PWM_control=(int)voltage_output;            


  87.   }
  88.                
  89.   void timer_init()
  90.               {
  91.                 TMOD=0X12;  
  92.                 TH0=TL0=256-200;
  93.                 TH1=(65536-50000)>>8;
  94.                 TL1= 65536-50000;
  95.       EA=1;ET0=1;ET1=1;TR0=1;TR1=1;
  96.               }


  97. unsigned char Get_ADC(bit ch)
  98. {
  99.   unsigned char i,dat1 = 0,dat2 = 0;
  100.   CS = 0; CLK = 0;
  101.   DIO = 1; _nop_(); _nop_();
  102.   CLK = 1; _nop_(); _nop_();
  103.   CLK = 0; DIO = 1; _nop_(); _nop_();
  104.   CLK = 1;          _nop_(); _nop_();
  105.   CLK = 0; DIO = ch; _nop_(); _nop_();
  106.   CLK = 1;          _nop_(); _nop_();
  107.   CLK = 0; DIO = 1; _nop_(); _nop_();
  108.   for(i = 0; i < 8; i++)
  109.   {
  110.     CLK = 1; _nop_(); _nop_();
  111.     CLK = 0; _nop_(); _nop_();
  112.     dat1 = (dat1 << 1)|DIO;
  113.   }
  114.   for(i = 0; i < 8; i++)
  115.   {
  116.     dat2 = dat2|((unsigned char)DIO<<i);
  117.     CLK = 1; _nop_(); _nop_();
  118.     CLK = 0; _nop_(); _nop_();
  119.   }
  120.   CS = 1;
  121.   return dat1;
  122. }
  123. void display()                                                         
  124. {

  125.             

  126.   j=0x01;                                                                       
  127.   for(i=0;i<8;i++)
  128.   {
  129.       if((sho[m]&j)==0)                             
  130.        {
  131.                    DS=0;                                         
  132.                  }
  133.       else
  134.                  {
  135.                    DS=1;            
  136.                  }
  137.     SHCP=1;
  138.     SHCP=0;
  139.       j<<=1;            
  140.    }            
  141.               P12=0;                           
  142.     P11=1;                           
  143.     STCP=0;                                          
  144.     STCP=1;

  145.     delay(200);

  146. ……………………

  147. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


所有資料51hei提供下載:

穩(wěn)壓電源.zip (468.82 KB, 下載次數(shù): 292)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:304545 發(fā)表于 2018-4-17 09:43 | 只看該作者
看了很有幫助
回復

使用道具 舉報

板凳
ID:20672 發(fā)表于 2018-12-23 14:41 | 只看該作者
謝謝分享~~。!
回復

使用道具 舉報

地板
ID:318489 發(fā)表于 2019-2-26 11:00 | 只看該作者
謝謝分享。。。
回復

使用道具 舉報

5#
ID:728172 發(fā)表于 2020-4-24 10:40 | 只看該作者
感謝分享,很好的資料
回復

使用道具 舉報

6#
ID:590748 發(fā)表于 2020-4-27 15:08 | 只看該作者
東西下載來看看,學習學習
回復

使用道具 舉報

7#
ID:837828 發(fā)表于 2021-4-30 10:11 | 只看該作者
真的謝謝,你的文章剛好提供了思路
回復

使用道具 舉報

8#
ID:837828 發(fā)表于 2021-4-30 20:33 | 只看該作者
??標題是BUCK,內(nèi)容用的是BOOST電路,說的是輸出12345V,實際仿真圖里是其他的....
回復

使用道具 舉報

9#
ID:586915 發(fā)表于 2021-6-29 16:11 | 只看該作者
代碼都不備注新手怎么看
回復

使用道具 舉報

10#
ID:156220 發(fā)表于 2021-6-29 16:32 | 只看該作者
參考參考,謝謝樓主的分享
回復

使用道具 舉報

11#
ID:586915 發(fā)表于 2021-6-29 16:45 | 只看該作者
下載后測試輸出電壓誤差大的一逼 選2V 的時候電壓從1.5-2.0在跳
回復

使用道具 舉報

12#
ID:899981 發(fā)表于 2023-10-10 18:05 | 只看該作者
lsx116 發(fā)表于 2021-6-29 16:45
下載后測試輸出電壓誤差大的一逼 選2V 的時候電壓從1.5-2.0在跳

我的壓根就沒電壓
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表