久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1451|回復: 0
打印 上一主題 下一主題
收起左側

參考壇友DCDC 51單片機PWM PID電源仿真程序,改了一下

[復制鏈接]
跳轉到指定樓層
樓主
之前的程序下載 后不啟動,不知道是不是版本問題,改后正常。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1.   #include"reg52.h"
  2.   #include"iic.h"
  3.   #include"math.h"
  4.   #include"intrins.h"
  5.   
  6.   //#define unsigend char  uchar

  7.   sbit  pwm=P2^7;  //  定義pwm脈沖
  8.   sbit  P01=P0^1;  //  定義pwm脈沖
  9.   sbit CS  = P1^2; //使能。
  10.   sbit CLK = P1^3;//時鐘
  11.   sbit DIO = P1^4;

  12.   sbit button1=P3^0;
  13.   sbit button2=P3^1;
  14.   sbit button3=P3^2;
  15.   sbit button4=P3^3;
  16.   sbit button5=P3^4;


  17.   int pwm_add=0;            //pwm增量
  18.   int PWM_control=0;        //pwm占空比調節

  19.   float voltage_get=0;                        //獲取電壓值
  20.   float voltage_set=0;                    //設定電壓值   這個地方就是你要設定的電壓  修改這個值就可以獲得想要的電壓值  現在是36V

  21.   float voltage_kp=0.01;                //PID  KP比例系數
  22.   float voltage_ki=0.1;                        //PID  KI積分系數
  23.   float voltage_output=0;            //PID輸出
  24.   float voltage_error=0;                //實際值與給定的誤差
  25.   float voltage_error_last=0;        //記錄上次的誤差

  26.   void timer_init();
  27.   unsigned char Get_ADC(bit ch);
  28.         
  29.         
  30. static void Delay_ms(unsigned int ms)
  31. {
  32.         unsigned int i, j;
  33.         for(i = 0; i < ms; i++)
  34.                 for(j = 0; j < 990; j++);
  35. }
  36.   void main()
  37.   {
  38.       timer_init();           //初始化定時器
  39.                 pwm=0;
  40.                 voltage_set=12;
  41.           while(1)
  42.           {
  43.                if(!button1)        
  44.                                          voltage_set=0;
  45.                    else if(!button2)          voltage_set=3;
  46.                    else if(!button3)          voltage_set=6;
  47.                    else if(!button4)          voltage_set=9;
  48.                    else if(!button5)          voltage_set=12;
  49.                         //         voltage_set=9;
  50.                
  51.       // Delay_ms(3);
  52.                         //PWM_control=20;
  53.       }           
  54.                
  55.                         
  56.   }

  57. //定時器0  用于產生PWM波
  58.   void timer_irq() interrupt 1
  59.   {
  60.      pwm_add++;
  61.             if (pwm_add==PWM_control)
  62.      {pwm=0;}
  63.          else if (pwm_add==50)               
  64.          {
  65.          pwm=1;
  66.          pwm_add=0;
  67.          }

  68.   }

  69.   void timer1_irq() interrupt 3
  70.   {
  71.       TH1=(65536-50000)>>8;
  72.           TL1= 65536-50000;

  73.           voltage_get=(Get_ADC(0)/10.2);//獲取當前電壓
  74.                 //voltage_get=(Get_ADC(0));//獲取當前電壓
  75.          // voltage_get=17;
  76.                 //voltage_set=        voltage_set*10;
  77.           voltage_error=voltage_set-voltage_get;//當前差值=設置的減去獲取的。

  78.           voltage_output+=voltage_kp*(voltage_error-voltage_error_last)
  79.                          +voltage_ki*voltage_error;

  80.           voltage_error_last=voltage_error;

  81.           if     (voltage_output>49)         
  82.                         voltage_output=49;
  83.           else if(voltage_output<1)                  
  84.                         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.   //啟動AD轉換
  101.   CS = 0; CLK = 0;
  102.   DIO = 1; _nop_(); _nop_();
  103.   CLK = 1; _nop_(); _nop_();
  104.   CLK = 0; DIO = 1; _nop_(); _nop_();
  105.   CLK = 1;          _nop_(); _nop_();
  106.   CLK = 0; DIO = ch; _nop_(); _nop_();
  107.   CLK = 1;          _nop_(); _nop_();
  108.   CLK = 0; DIO = 1; _nop_(); _nop_();
  109.   //從高位開始讀
  110.   for(i = 0; i < 8; i++)
  111.   {
  112.     CLK = 1; _nop_(); _nop_();
  113.     CLK = 0; _nop_(); _nop_();
  114.     dat1 = (dat1 << 1)|DIO;
  115.   }
  116.   //從低位開始讀
  117.   for(i = 0; i < 8; i++)
  118.   {
  119.     dat2 = dat2|((unsigned char)DIO<<i);
  120.     CLK = 1; _nop_(); _nop_();
  121.     CLK = 0; _nop_(); _nop_();
  122.   }
  123.   CS = 1;
  124.   //返回讀取結果
  125.   return dat1;
  126. }
復制代碼

仿真程序51hei附件下載:
dcdc buck 閉環4.7z (283.99 KB, 下載次數: 38)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久亚洲 | 黄免费观看视频 | 九久久 | 欧美国产精品一区二区三区 | 成人永久免费视频 | 国产精品久久久久久久免费大片 | 成人不卡| 国产一二区免费视频 | 中文字幕av网站 | 国产精品久久国产精品久久 | 国产综合精品 | 国产成人精品一区二区在线 | 黄色片在线网站 | 欧美成人精品二区三区99精品 | 日韩精品久久一区 | 视频一区中文字幕 | 成人免费视频网站在线观看 | 久久99深爱久久99精品 | 亚洲综合婷婷 | 成人影音 | 99re视频在线 | 97伦理最新伦理 | 涩涩视频在线播放 | 亚洲日韩欧美一区二区在线 | 久久久网| 国产98色在线 | 日韩 | 欧美成人精品二区三区99精品 | 欧美日韩专区 | 久草久草久草 | 天天夜天天操 | 请别相信他免费喜剧电影在线观看 | 精品99在线| 91久久久久久久久久久久久 | 国产成人在线视频 | 亚洲国产精品日韩av不卡在线 | av先锋资源 | 国产免费一区二区三区最新6 | 国产99免费 | 国产 欧美 日韩 一区 | av在线天堂网 | 91在线一区 |