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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12046|回復: 17
收起左側

補充—數控穩壓電源 PID閉環控制 帶仿真 源碼 51單片機制作

  [復制鏈接]
ID:169702 發表于 2017-8-20 12:25 | 顯示全部樓層 |閱讀模式
本文是作為我前段時間發的作品的補充:http://www.zg4o1577.cn/bbs/dpj-85002-1.html
設計采用分檔位操作,可以設置輸出電壓,0V-3V-6V-9V-12V,在此基礎上可進行修改設計,編程Keil4或者Keil5  仿真Proteus

設置12V輸出

設置12V輸出

設置3V輸出

設置3V輸出
0.png

單片機源程序如下:
  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 CS  = P1^2; //使能。
  9.   sbit CLK = P1^3;//時鐘
  10.   sbit DIO = P1^4;

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


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

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

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

  25.   void timer_init();
  26.   unsigned char Get_ADC(bit ch);

  27.   void main()
  28.   {
  29.       timer_init();           //初始化定時器
  30.           while(1)
  31.           {
  32.                if(!button1)                  voltage_set=0;
  33.                    else if(!button2)          voltage_set=3;
  34.                    else if(!button3)          voltage_set=6;
  35.                    else if(!button4)          voltage_set=9;
  36.                    else if(!button5)          voltage_set=12;
  37.       }          
  38.   }

  39. //定時器0  用于產生PWM波
  40.   void timer_irq() interrupt 1
  41.   {
  42.      pwm_add++;
  43.          if      (pwm_add==PWM_control)  {pwm=0;}
  44.          else if (pwm_add>=50)                         {pwm=1;pwm_add=0;}

  45.   }

  46.   void timer1_irq() interrupt 3
  47.   {
  48.       TH1=(65536-50000)>>8;
  49.           TL1= 65536-50000;

  50.           voltage_get=(Get_ADC(0)/10.2);
  51.          // voltage_get=17;
  52.           voltage_error=voltage_set-voltage_get;

  53.           voltage_output+=voltage_kp*(voltage_error-voltage_error_last)
  54.                          +voltage_ki*voltage_error;

  55.           voltage_error_last=voltage_error;

  56.           if     (voltage_output>49)          voltage_output=49;
  57.           else if(voltage_output<1)                  voltage_output=1;
  58.           
  59.           PWM_control=(int)voltage_output;       


  60.   }


  61.   //定時器初始化           具體的下面的代碼已經配置好了   不用太關注
  62.   void timer_init()
  63.         {
  64.           TMOD=0X12;   
  65.           TH0=TL0=256-200;
  66.           TH1=(65536-50000)>>8;
  67.           TL1= 65536-50000;
  68.       EA=1;ET0=1;ET1=1;TR0=1;TR1=1;
  69.         }


  70. unsigned char Get_ADC(bit ch)
  71. {
  72.   unsigned char i,dat1 = 0,dat2 = 0;
  73.   //啟動AD轉換
  74.   CS = 0; CLK = 0;
  75.   DIO = 1; _nop_(); _nop_();
  76.   CLK = 1; _nop_(); _nop_();
  77.   CLK = 0; DIO = 1; _nop_(); _nop_();
  78.   CLK = 1;          _nop_(); _nop_();
  79.   CLK = 0; DIO = ch; _nop_(); _nop_();
  80.   CLK = 1;          _nop_(); _nop_();
  81.   CLK = 0; DIO = 1; _nop_(); _nop_();
  82.   //從高位開始讀
  83.   for(i = 0; i < 8; i++)
  84.   {
  85.     CLK = 1; _nop_(); _nop_();
  86.     CLK = 0; _nop_(); _nop_();
  87.     dat1 = (dat1 << 1)|DIO;
  88.   }
  89.   //從低位開始讀
  90.   for(i = 0; i < 8; i++)
  91.   {
  92.     dat2 = dat2|((unsigned char)DIO<<i);
  93.     CLK = 1; _nop_(); _nop_();
  94.     CLK = 0; _nop_(); _nop_();
  95.   }
  96.   CS = 1;
  97.   //返回讀取結果
  98.   return dat1;
  99. }
復制代碼

所有資料51hei提供下載:
dcdc buck 閉環.zip (87.92 KB, 下載次數: 262)


評分

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

查看全部評分

回復

使用道具 舉報

ID:295290 發表于 2018-3-21 23:03 | 顯示全部樓層
下來看看
回復

使用道具 舉報

ID:7503 發表于 2018-3-22 08:07 | 顯示全部樓層
學習學習,正需要,謝謝分享
回復

使用道具 舉報

ID:281465 發表于 2018-3-26 23:07 | 顯示全部樓層
if     (voltage_output>49)          voltage_output=49;
          else if(voltage_output<1)                  voltage_output=1;
大師,這個是啥意思,累計到一定程度,就發49條件下的占空比?
回復

使用道具 舉報

ID:83761 發表于 2018-4-12 20:50 | 顯示全部樓層
看看,謝謝分享!
回復

使用道具 舉報

ID:314036 發表于 2018-7-11 20:18 | 顯示全部樓層
謝謝樓主分享,很實用
回復

使用道具 舉報

ID:390891 發表于 2018-8-29 15:51 | 顯示全部樓層
我下載了,不能工作,何解?
回復

使用道具 舉報

ID:390891 發表于 2018-8-29 15:53 | 顯示全部樓層
按3-12v 任何按鍵,脈沖占空比都會幾乎變得滿格 接近100%
回復

使用道具 舉報

ID:390891 發表于 2018-8-29 17:30 | 顯示全部樓層
可以用 我換了一個電感 所以才不好用 不好意思!
回復

使用道具 舉報

ID:114519 發表于 2018-10-1 12:14 | 顯示全部樓層
現在正在學習,正需要,謝謝分享
回復

使用道具 舉報

ID:227832 發表于 2018-10-14 20:19 | 顯示全部樓層
學習學習,謝謝分享!
回復

使用道具 舉報

ID:160658 發表于 2018-11-29 20:46 | 顯示全部樓層
能配一些文字說明就更好了,頂!
回復

使用道具 舉報

ID:315343 發表于 2019-2-23 11:42 | 顯示全部樓層
正好需要開關電源的例子
回復

使用道具 舉報

ID:380985 發表于 2019-7-11 16:21 來自觸屏版 | 顯示全部樓層
不錯,有助于學習
回復

使用道具 舉報

ID:56665 發表于 2019-7-12 08:26 | 顯示全部樓層
沒有原理圖。
回復

使用道具 舉報

ID:282095 發表于 2019-7-12 09:05 | 顯示全部樓層
好資源頂一個
回復

使用道具 舉報

ID:899981 發表于 2023-10-8 12:38 | 顯示全部樓層
不能仿真,三極管基極沒有脈沖。
回復

使用道具 舉報

ID:1083996 發表于 2023-10-8 13:33 | 顯示全部樓層
精度能到多少呢?穩定性如何?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品美女久久久久久免费 | 日韩三区| 亚洲精品成人av | 日日碰碰| 亚洲三级在线观看 | 激情久久网 | 国产成人精品一区二区三区四区 | 久久亚洲国产精品日日av夜夜 | 日韩视频免费 | 中文字幕av在线播放 | 国产精品99久久久久久久久久久久 | 日韩免费| 999精品网 | 亚洲国产成人精品女人久久久 | 成人在线视频免费观看 | 北条麻妃99精品青青久久 | 国产精品久久久久久一区二区三区 | 亚洲精品视频播放 | 成人免费淫片aa视频免费 | 久久新| 色永久 | 久久综合久 | 中文字幕亚洲视频 | 四虎影 | 欧美视频在线播放 | 韩国久久 | 欧美黑人激情 | 亚洲一区久久久 | 99国产精品99久久久久久 | 欧美一级片免费看 | 国产99久久精品一区二区永久免费 | 国产精品免费av | 日韩在线看片 | 国产成人jvid在线播放 | 黄色91在线 | 免费欧美 | 欧美日本在线观看 | 欧美日韩久久 | 福利视频网址 | 亚洲一区二区三区欧美 | 中文字幕蜜臀 |