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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7090|回復(fù): 5
收起左側(cè)

單片機(jī)PID算法控制直流電機(jī)轉(zhuǎn)速程序,可穩(wěn)定調(diào)節(jié)到目標(biāo)轉(zhuǎn)速

  [復(fù)制鏈接]
ID:811102 發(fā)表于 2020-12-22 09:36 | 顯示全部樓層 |閱讀模式
根據(jù)實(shí)際轉(zhuǎn)速來穩(wěn)定調(diào)節(jié)到目標(biāo)轉(zhuǎn)速
51hei.png 51hei.png

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define THC0 0xf9
  6. #define TLC0 0x0f   //2ms
  7. unsigned char  code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共陰極數(shù)碼管,0-9段碼表
  8. unsigned char  Data_Buffer[8]={0,0,0,0,0,0,0,0};

  9. uchar i=0;
  10. sbit AddSpeed=P1^1;
  11. sbit SubSpeed=P1^2;
  12. sbit PWM_FC=P1^0;
  13. int e ,e1 ,e2 ;//pid 偏差
  14. float uk ,uk1 ,duk ;//pid輸出值
  15. float Kp=10,Ki=12,Kd=1.6;//pid控制系數(shù)        10,12,1.5
  16. int out=0;
  17. uint SpeedSet=380;
  18. uint cnt=0;
  19. uint Inpluse=0,num=0;//脈沖計(jì)數(shù)
  20. uint PWMTime=100;//脈沖寬度
  21. unsigned char  arry[];
  22. void SendString(uint ch);
  23. void PIDControl();
  24. void SystemInit();
  25. void delay(uchar x);
  26. void PWMOUT();
  27. void SetSpeed();
  28. void SegRefre();
  29. /**************主函數(shù)************/
  30. void main()
  31. {
  32.         SystemInit();
  33.         while(1)
  34.         {
  35.                 SetSpeed();
  36.                 SegRefre();
  37.                 PWMOUT();

  38.         }
  39. }

  40. void PIDControl()        //pid偏差計(jì)算
  41. {
  42.         e=SpeedSet-num;
  43.         duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2))/50;         //+Kd*(e-2e1+e2)
  44.         uk=uk1+duk;
  45.         out=(int)uk;
  46.         if(out>1000)
  47.         {
  48.                 out=1000;
  49.         }
  50.         else if(out<0)
  51.         {
  52.                 out=0;
  53.         }
  54.         uk1=uk;
  55.         e2=e1;
  56.         e1=e;
  57.         PWMTime=out;
  58. }

  59. void delay(uchar x)
  60. {
  61.         uint i,j;
  62.         for(i=x;i>0;i--)
  63.                 for(j=50;j>0;j--);
  64. }

  65. void PWMOUT()
  66. {
  67.         if(cnt<PWMTime)
  68.         {
  69.                 PWM_FC=1;
  70.         }
  71.         else
  72.         {
  73.                 PWM_FC=0;
  74.         }
  75.         if(cnt>1000) cnt=0;
  76. }
  77. void SystemInit()
  78. {
  79.         TMOD=0X21;   
  80.         TH0=THC0;
  81.         TL0=TLC0;
  82.         TH1=0xC0;
  83.         TL1=0XC0;
  84.         ET1=1;
  85.         ET0=1;
  86.         TR0=1;
  87.         TR1=1;
  88.         EX0=1;     //中斷0用來測(cè)量轉(zhuǎn)速
  89.         IT0=1;
  90.         EA=1;
  91.         e =0;
  92.         e1=0;
  93.         e2=0;
  94. }
  95. void SetSpeed()
  96. {
  97.         if(AddSpeed==0)
  98.         {
  99.                 delay(200);
  100.                 if(AddSpeed==0)
  101.                 {
  102.                         SpeedSet+=10;
  103.                         if(SpeedSet>1500)
  104.                         {
  105.                                 SpeedSet=1500;
  106.                         }
  107.                 }
  108.         }
  109.         if(SubSpeed==0)
  110.         {
  111.                 delay(200);
  112.                 if(SubSpeed==0)
  113.                 {
  114.                         SpeedSet-=10;
  115.                         if(SpeedSet<0) SpeedSet=0;
  116.                 }
  117.         }
  118. }
  119. void SegRefre()                  //顯示刷新
  120. {
  121.          Data_Buffer[0]=SpeedSet/1000;
  122.          Data_Buffer[1]=SpeedSet%1000/100;
  123.          Data_Buffer[2]=SpeedSet%100/10;
  124.          Data_Buffer[3]=SpeedSet%10;
  125.          Data_Buffer[4]=num/1000;
  126.          Data_Buffer[5]=num%1000/100;
  127.          Data_Buffer[6]=num%100/10;
  128.          Data_Buffer[7]=num%10;
  129. }

  130. void int0() interrupt 0
  131. {
  132.         Inpluse++;
  133. }
  134. void t0() interrupt 1
  135. {
  136.         static unsigned char Bit=0;//靜態(tài)變量,退出程序值保留
  137.         static unsigned int time=0;
  138. //        static unsigned int aa=0;
  139.         TH0=THC0;
  140.         TL0=TLC0;
  141. //        aa++;
  142. //        if(aa==50)
  143. //        {
  144. //                aa=0;
  145. ////                flag0=1;
  146. //        }

  147.         Bit++;
  148.         time++;  //轉(zhuǎn)速測(cè)量周期
  149.         if(Bit>8) Bit=0;
  150.         P0=0xff;
  151.         P2=Duan[Data_Buffer[Bit]];
  152.         switch(Bit)
  153.         {
  154. ……………………

  155. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
案列1 PID自動(dòng)控制電機(jī)轉(zhuǎn)速.zip (75.46 KB, 下載次數(shù): 187)

評(píng)分

參與人數(shù) 2黑幣 +80 收起 理由
SD_FL + 30 共享資料的黑幣獎(jiǎng)勵(lì)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:390416 發(fā)表于 2021-1-19 16:10 | 顯示全部樓層
做過實(shí)物測(cè)試嗎?
回復(fù)

使用道具 舉報(bào)

ID:880346 發(fā)表于 2021-1-25 17:23 | 顯示全部樓層
帶負(fù)載時(shí)有處理嗎
回復(fù)

使用道具 舉報(bào)

ID:684871 發(fā)表于 2021-3-7 20:49 來自觸屏版 | 顯示全部樓層
調(diào)速的模型的傳遞函數(shù)怎么寫?
回復(fù)

使用道具 舉報(bào)

ID:1127911 發(fā)表于 2024-7-2 21:58 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:50577 發(fā)表于 2025-1-16 15:40 | 顯示全部樓層
電機(jī)調(diào)速還自動(dòng)收藏了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产99久久久国产精品下药 | 特级黄一级播放 | 国产精品自产av一区二区三区 | 精品中文字幕在线 | 亚洲精品在线观 | 99精品99 | 亚洲欧美中文字幕在线观看 | 亚洲精品一区二区三区中文字幕 | 国产亚洲第一页 | 日韩国产在线观看 | 国产亚洲网站 | 天堂成人国产精品一区 | 久久精品国产99国产精品 | 国产精品日韩一区 | 国产视频三级 | 久久人人爽人人爽 | 久久亚洲天堂 | 久久99精品久久久久久 | 一区二区三区av | 伊人精品久久久久77777 | 成人综合视频在线观看 | 国产综合久久久久久鬼色 | 搞av.com| 亚洲视频欧美视频 | 中文字幕在线观看一区 | 国产欧美一级二级三级在线视频 | 国产精品视频在线免费观看 | 91tv在线观看| 91视频免费视频 | 天堂网中文字幕在线观看 | 亚洲视频在线看 | www久| 一级高清免费毛片 | 欧美精品三区 | 区一区二在线观看 | 国产精品久久九九 | 91视频进入| 成人精品在线观看 | 黄色在线观看网站 | 人妖一区 | 日韩欧美国产一区二区三区 |