欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機PID+PWM直流電機轉速閉環控制源碼(12864液晶顯示) [打印本頁]

作者: DONGDONG66    時間: 2018-5-2 18:29
標題: 51單片機PID+PWM直流電機轉速閉環控制源碼(12864液晶顯示)
設計內容及要求
內容包括:
1.        查找文獻資料,學習直流電機控制的工作原理;
2.        轉速控制系統方案設計
3.        硬件電路設計,繪制電路原理圖和PCB圖;
4.        設計軟件,并調試
5.        綜合調試,測試、分析誤差原因
6.        撰寫設計報告
要求:
1.矩陣鍵盤設定并顯示轉速,實時顯示實際轉速
2.按鍵控制電機起停、正反轉
3.PWM轉速閉環控制。
4.用lcd12864液晶屏顯示相關內容
設計
參數
1.轉速調節范圍:1500轉/分--3000轉/分
2.測速誤差<10%


制作完成的pid直流電機轉速控制系統實物圖:


51單片機源程序如下:
  1. #include<reg51.h>
  2. #include "intrins.h"
  3. #include <lcd.H>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define GPIO_KEY P2
  7. sbit PWM=P1^4;                  
  8. sbit P10=P1^0;
  9. sbit P12=P1^2;
  10. uchar speed1[4]={"0000"};//設定轉速
  11. uchar speed2[3]={"000"};//占空比        
  12. uchar speed[]={"0000"};//當前轉速
  13. uchar KeyValue=0;
  14. uint AA,count=0,flag;

  15. float pid_p=0.003,pid_i=0.003,pid_d=0.002;        //PID三個參數 初值
  16. uint SpeedSet=3000,CurrentSpeed;//設定轉速 當前轉速
  17. unsigned char pid_val_mid;//pid_val_mid脈沖寬度
  18. unsigned int lastError=0;
  19. long int sumError=0;//sum偏差和
  20.         
  21.         
  22. void delay1(unsigned int i)
  23. {
  24.    unsigned int j;
  25.          for(;i>0;i--)
  26.          for(j=0;j<333;j++)
  27.          {;}
  28. }        


  29. /********************* 鍵盤掃描*************/
  30. void KeyDown(void)               
  31. {
  32.         GPIO_KEY=0x0f;
  33.                 delay1(10);
  34.         if(GPIO_KEY!=0x0f)
  35.         {
  36.                 delay1(10);
  37.                 if(GPIO_KEY!=0x0f)
  38.                 {
  39.                                 //測試列
  40.                         GPIO_KEY=0X0F;
  41.                         delay1(10);
  42.                         switch(GPIO_KEY)
  43.                         {
  44.                                 case(0X07):        KeyValue=0;break;
  45.                                 case(0X0b):        KeyValue=1;break;
  46.                                 case(0X0d): KeyValue=2;break;
  47.                                 case(0X0e):        KeyValue=3;break;
  48.                         }
  49.                         //測試行
  50.                         GPIO_KEY=0XF0;
  51.                         delay1(10);
  52.                         switch(GPIO_KEY)
  53.                         {
  54.                                 case(0X70):        KeyValue=KeyValue;break;
  55.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  56.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  57.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  58.                         }
  59.                         
  60.                 }

  61.         }
  62. }

  63. void timer()
  64. {
  65.   
  66.          TMOD=0x11;//定時器0工作方式1.16位,定時器1工作方式1,16位定時;
  67.          TH0=0x4b;//50ms初值
  68.          TL0=0xfe;
  69.          
  70.          TH1=0xfc;//1msPWM控制
  71.          TL1=0x66;
  72.          
  73.          TR1=1;          //啟動定時器1
  74.          ET1=1;           //定時器1中斷使能
  75.          IT0=1;//外部中斷下降沿觸發
  76.          TR0=1;        //定時器啟動標志
  77.          ET0=1;        //定時器中斷使能
  78.          EX0=1;        //外部中斷使能
  79.          EA=1;        //全局中斷
  80. }


  81. /***********************lcd顯示*************/
  82. void  display()
  83. {   
  84.    
  85.           speed[0]=CurrentSpeed/1000+0x30; //當前轉速
  86.                 speed[1]=CurrentSpeed/100%10+0x30;
  87.                 speed[2]=CurrentSpeed/10%10+0x30;
  88.                 speed[3]=CurrentSpeed%10+0x30;  
  89.                
  90.                
  91.                 speed1[0]=SpeedSet/1000+0x30;//設定轉速
  92.                 speed1[1]=SpeedSet/100%10+0x30;
  93.                 speed1[2]=SpeedSet/10%10+0x30;
  94.                 speed1[3]=SpeedSet%10+0x30;  
  95.                
  96.                 speed2[0]=pid_val_mid/100+0x30;
  97.           speed2[1]=pid_val_mid/10%10+0x30;//占空比
  98.                 speed2[2]=pid_val_mid%10+0x30;
  99.                
  100.         
  101.           DispHanzi(0,0,5,"當前轉速:");
  102.                 DispZimu(0,5,4,speed);        
  103.                 DispHanzi(1,0,5,"設定轉速:");
  104.                 DispZimu(1,5,4,speed1);

  105.                 DispHanzi(3,0,4,"占空比:");//占空比        
  106.                 DispZimu(3,4,3,speed2);
  107.                 DispHanzi(3,6,1,"%");//占空比        
  108.                
  109. }



  110. /************************電機控制*************/
  111. void keyKZ()
  112. {
  113.                          if(KeyValue==4)//正轉
  114.                          {
  115.                           P10=1;
  116.                     P12=0;
  117.                                 }
  118.                          if(KeyValue==5)//反轉
  119.                          {
  120.                           P10=0;
  121.                     P12=1;
  122.                                 }
  123.                                 if(KeyValue==6)//停車
  124.                          {
  125.                           P10=0;
  126.                     P12=0;
  127.                                 }
  128.                         
  129.                         if(KeyValue==12)//設定速度加50
  130.                           SpeedSet+=50;
  131.                         if(KeyValue==13)//設定速度減50
  132.                                 SpeedSet-=50;
  133.                         if(KeyValue==14)//設定速度加1
  134.                           SpeedSet+=1;
  135.                         if(KeyValue==15)//設定速度減1
  136.                                 SpeedSet-=1;
  137.         KeyValue=0;
  138.                                 
  139. }


  140. /************************PID控制算法*************/
  141. unsigned int PID()
  142. {  

  143.   int dError=0,Error=0,B;
  144.         
  145.         Error=SpeedSet-CurrentSpeed;//當前誤差
  146.    sumError=Error+sumError;//誤差和
  147.    dError=Error-lastError;//誤差偏差
  148.    lastError=Error;
  149.   B=pid_p*Error+pid_i*sumError+pid_d*dError;
  150.         
  151.         if(B>100) pid_val_mid=100;
  152.    if(B<0) pid_val_mid=0;
  153.         if(B>=0&&B<=100)
  154.    pid_val_mid=B;
  155.          return(0);
  156. }


  157. void Timer0_isr() interrupt 1  //定時器0中斷
  158. {
  159.          AA++;
  160.          TH0=0x4b;
  161.          TL0=0xfe;
  162.          if(AA==20)
  163.          {               
  164.            CurrentSpeed=count*3;//一分鐘的轉速
  165.                                 count=0;
  166.                                 AA=0;
  167.                                 PID();
  168.          }

  169. }


  170. void key_int() interrupt 0         //外部中斷P32口
  171. {
  172.         count++;
  173. }

  174. void Timer1() interrupt 3
  175. {
  176.    static int c=0;
  177.                  TH1=0xfc;
  178.                   TL1=0x66;
  179.                  c++;    //每次定時器溢出加1                  
  180.          
  181.           if(c<=pid_val_mid) PWM=1;
  182.             
  183.           if(c>pid_val_mid)  PWM=0;
  184.             
  185.                 if(c>=100)         c=0;
  186. }
  187.         
  188. void main()
  189. {
  190.                 timer();//定時器初始化
  191.                 InitLCD();//LCD初始化
  192.                 while(1)
  193.                 {
  194.                    KeyDown();        //鍵盤掃描
  195. ……………………

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


所有資料51hei提供下載:
51單片機電機控速.zip (41.03 KB, 下載次數: 1826)



作者: cns371    時間: 2018-5-2 22:05
程序寫的不錯,就是沒有附上電路圖,比較遺憾
作者: 揚我國威    時間: 2018-5-4 04:34
好資料,51黑有你更精彩!!!

作者: 南宮成    時間: 2018-5-4 08:45
很棒,頂一個
作者: WUXINDHIGRS    時間: 2018-5-4 09:27
這個有原理圖嗎?
作者: suph007    時間: 2018-5-6 12:29
學習一下  附上電路就好了
作者: DONGDONG66    時間: 2018-5-6 12:37
只有原理圖和PCB的截圖了,給需要的小伙伴們參考!

原理圖加PCB.docx

89.02 KB, 下載次數: 457, 下載積分: 黑幣 -5


作者: 18075067400    時間: 2018-5-10 10:15
DONGDONG66 發表于 2018-5-6 12:37
只有原理圖和PCB的截圖了,給需要的小伙伴們參考!

圖片清楚嗎
作者: bg4abz    時間: 2018-5-13 11:09
沒看到完整程序,希望有原理圖
作者: yyy1111    時間: 2018-5-14 16:17
好東西
作者: mick32    時間: 2018-5-16 04:50
Nice work
作者: 你是豬嗎    時間: 2018-5-22 12:32
好資料,51黑有你更精彩!!!!
作者: xuying    時間: 2018-5-22 13:03
很有用謝謝
作者: xuying    時間: 2018-5-22 13:03
大神這個電機帶編碼器嗎
作者: hogen408    時間: 2018-6-1 21:07
非常不錯學習一下PID  謝謝覺得51黑論壇不錯準備弄個VIP
作者: yuanzihao    時間: 2018-7-9 13:30
基于51單片機的PWM微型直流電機PID控制,用LCD12864顯示程序
作者: wulingqing    時間: 2018-7-9 17:00
非常不錯學習一下PID  謝謝
作者: 蜘蛛精    時間: 2018-7-19 15:58
有原理圖嗎?

作者: 68775899    時間: 2018-7-19 18:19
感謝大神的無私分享
作者: gdghtje    時間: 2018-8-24 14:17
學習了,支持下

作者: qwercxf    時間: 2018-9-13 14:03
很感謝寫的內容
作者: 18239311863    時間: 2018-9-28 23:43
程序完整嗎
作者: xuzhouyjh    時間: 2018-10-5 23:44
厲害!
作者: hanmingxiu    時間: 2018-10-7 08:51
DONGDONG66 發表于 2018-5-6 12:37
只有原理圖和PCB的截圖了,給需要的小伙伴們參考!

大佬,請問原理圖中的LCD顯示屏用的是什么型號的呀
作者: ouyang975567127    時間: 2018-10-25 19:32
學習一下
作者: sdwxysc    時間: 2018-10-28 08:58
原理圖與PCB截圖不清楚。顯示屏是什么型號沒標清楚。
作者: sdwxysc    時間: 2018-10-28 10:35
電路城的程序打不開
作者: 零點xu    時間: 2018-11-2 23:33
還可以呀,適合初學

作者: 張福喜    時間: 2018-11-3 13:09
謝謝分享
作者: gsjhhh    時間: 2018-11-4 13:08
我看一下,不知道有沒有圖紙
作者: applaud    時間: 2018-11-14 15:02
贊一個
作者: libing1021    時間: 2018-12-12 16:43
很不錯的程序
作者: 鄉下人    時間: 2018-12-19 09:27
好資料,51黑有你更精彩!!!
作者: 鄉下人    時間: 2018-12-19 09:27
好資料,51黑有你更精彩!!!
作者: 秋染丨丶    時間: 2018-12-23 23:46
很好呀
作者: LRX1113100356    時間: 2018-12-25 23:54
好東西,頂你
作者: 閉環直流電機    時間: 2018-12-27 18:38
原理圖帶上就好了
作者: lmq1138425359    時間: 2019-1-9 17:06
很給力
作者: 饅頭好不好    時間: 2019-1-17 23:03
樓主,你好,請問你這個速度穩定嗎?我自己寫了一個pid速度調節,直流電機的速度波動很大,波動范圍都有25%了
作者: gh001    時間: 2019-1-18 08:02
做的不錯,最好給出設計方法的介紹
作者: auqyygtj    時間: 2019-1-21 13:25
很好,謝謝,要是再附上原理圖就更好了
作者: 陳子奇    時間: 2019-1-24 23:09
很不錯的程序,很棒棒
作者: dw0904    時間: 2019-2-20 01:03
謝謝學習了
作者: Persistence7    時間: 2019-4-20 15:08
把原理圖和PCB補充完整..

原理圖和PCB版(word格式).rar

87.61 KB, 下載次數: 27, 下載積分: 黑幣 -5


作者: Persistence7    時間: 2019-4-20 15:25
從別的地方找來的原理圖和PCB,我來補充完整。上一個回復不知道去哪里了..

原理圖和PCB版(word格式).rar

87.61 KB, 下載次數: 45, 下載積分: 黑幣 -5

原理圖


作者: liu0213    時間: 2019-4-20 17:24
不錯呀
作者: oldletter    時間: 2019-4-21 15:07
厲害厲害
作者: 51小萌新z    時間: 2019-4-21 23:25
好資料,頂一手
作者: Persistence7    時間: 2019-4-23 16:56
我用LCD12864B 帶中文字庫的試了一下 好像不行 不知道是什么型號的 。
lcd.c中定義了B_light=2.7 不知道是什么意思 ,矩陣鍵盤不是把P2.0口占用了?怎么還用P2.7
作者: 機智的愚人    時間: 2019-4-30 20:38
這個必須頂
作者: xxyyss    時間: 2019-4-30 22:18
非常感謝,謝謝分享
作者: liu0213    時間: 2019-5-1 22:41
求電路圖
作者: 蝶舞狂雷    時間: 2019-5-5 09:29
怎么做到低轉速呀
作者: 陳必成    時間: 2019-5-7 20:03
屬實不錯哦  感謝分享經驗
作者: peterpank    時間: 2019-5-8 15:52
不錯不錯
作者: arthur_hng    時間: 2019-5-17 11:14
PWM控制板哪里整地呢?
作者: qwerty1245    時間: 2019-5-17 22:18
棒棒棒
作者: 二戰吉大    時間: 2019-6-4 13:13
樓主 請問 在哪看到完整的程序
作者: enplus    時間: 2019-6-4 20:59
很棒,學習一下

作者: 笙笙念    時間: 2019-6-8 10:14
CurrentSpeed=count*3; 求解是如何電機測速的
作者: techi    時間: 2019-7-13 09:13
很棒!
作者: 看清看輕    時間: 2019-7-18 21:32
很給力
作者: 釋你    時間: 2019-7-19 10:23
樓主,PID那三個初值怎么得到的?
作者: baggio84    時間: 2019-7-19 11:31
學習下,大神
作者: 12大風    時間: 2019-7-19 12:03
頂一個
作者: 2390254892    時間: 2019-7-22 15:56
程序看了一下,可以給電路圖么
作者: jiajia86    時間: 2019-7-23 11:52
感謝大神的無私分享
作者: diaobaole    時間: 2019-7-23 17:06
請問p32口的電平信號從哪里獲取,你的那個獲取電平信號的電路圖,我看不懂哎。
作者: 鬼舞幽夢    時間: 2019-8-4 10:07
謝謝樓主分享
作者: 小城故事.    時間: 2019-8-8 11:32
是我打開方式不對嗎,為什么下載了程序總是打不開啊。有沒有人幫助一下
作者: h505459004    時間: 2019-8-8 15:27
樓主太秀了,哈哈哈謝謝樓主
作者: 關外螻蟻    時間: 2019-8-17 17:10
研究了好幾天的PWM,還是沒弄明白,借鑒一下樓主的
作者: 鵬博士PBs    時間: 2019-8-18 09:18
PWM調速主要就是調節高電平的占空比
作者: shenyuqiu    時間: 2019-9-19 08:43
一直對PID算法不是很明白,學習了
作者: zzx1206    時間: 2019-9-19 15:08
好資料
作者: 夕陽殘云    時間: 2019-10-3 13:11
怎么打不開?
作者: 大米861    時間: 2019-10-18 16:02
好資料,謝謝樓主,拿來學習了。
作者: wtjwtj2014    時間: 2019-11-11 14:42
很久詳細,學習一下。
作者: gushoujun    時間: 2019-11-12 23:31
很給力
作者: mail_hxm    時間: 2019-11-22 20:32
thanks for your sharing.
作者: tianyunzhou    時間: 2019-11-22 22:31
感謝大神的無私分享,51黑有你更精彩!!!
作者: iHowieHye    時間: 2019-11-30 16:10
頂一個
作者: 瑞利散射    時間: 2019-12-8 19:02
太強了
作者: simply98    時間: 2019-12-13 17:20
請問測速是怎么測的呢,實物圖看不大清楚
作者: 余溫123    時間: 2019-12-15 18:11
有LCD 顯示屏的這樣的步進電機PID 控制轉速的hex文件嗎,謝謝,急需,感謝樓主
作者: 余溫123    時間: 2019-12-15 18:11
大佬,有LCD顯示屏這樣的步進電機PID 控制轉速的嗎,急需,謝謝啦
作者: pokershen    時間: 2019-12-19 09:02
謝謝大佬
作者: pokershen    時間: 2019-12-19 09:03
謝謝大佬
作者: zkol    時間: 2019-12-21 14:11
有原理圖嗎
作者: kjf    時間: 2019-12-21 16:36
有原理圖沒。。。
作者: tangjiagen    時間: 2019-12-23 20:38
原理圖帶上就好
作者: kssky    時間: 2019-12-24 00:06
好的參考資料,力頂一下
作者: 1171095477    時間: 2019-12-25 15:59
有圖嗎
作者: lin988998    時間: 2020-2-9 12:00
感謝分享
作者: YYZZ052    時間: 2020-2-9 13:30
來看看PID的用法如何
作者: lindeijun1    時間: 2020-2-17 20:50
謝謝樓主分享!!
作者: hj08102    時間: 2020-3-2 14:17
很給力,學習一下,謝謝樓主分享
作者: hj08102    時間: 2020-3-2 15:39
讀了你的這個程序非常有啟發,謝謝樓主分享,不過我試過用外部終端進行統計電機的轉速,傳感器有抖動(并不是理論的波形)我用的是定時器定時讀取判斷的方式。
作者: hqinghua    時間: 2020-3-28 23:12
謝謝分享
作者: 妄妄妄妄網    時間: 2020-4-8 09:45
為什么打不開




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1