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

QQ登錄

只需一步,快速開始

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

基于單片機(jī)的直流電機(jī)PWM調(diào)速設(shè)計(jì)

  [復(fù)制鏈接]
ID:79352 發(fā)表于 2015-5-8 20:12 | 顯示全部樓層 |閱讀模式
做的仿真
0.png 0.png

全部資料下載包括仿真文件和源碼: 仿真.rar (67.86 KB, 下載次數(shù): 488)


電機(jī)pwm調(diào)速程序(部分預(yù)覽完整版本請(qǐng)下載附件)
  1. /****************************************************

  2.       =========  直流電機(jī)控制+速度顯示  ==========

  3. ****************************************************/

  4. #include<reg52.h>                                 //頭文件
  5. #define uchar unsigned char                 //宏定義
  6. #define uint unsigned int
  7. #define CYCLE 10                                 //定義PWM的周期T為10ms
  8. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xff,0xc6,0x88};//0-9 R 共陽(yáng)數(shù)碼管段選數(shù)據(jù)
  9. /***************************************************
  10.            端口定義
  11. ***************************************************/
  12. sbit PWM1=P1^4;                                        //PWM輸出口1(電機(jī)正轉(zhuǎn))
  13. sbit PWM2=P1^5;                                        //PWM輸出口2(電機(jī)反轉(zhuǎn))
  14. sbit K1=P1^1;                                        //加速
  15. sbit K2=P1^2;                                        //減速
  16. sbit K3=P1^3;                                        //正反轉(zhuǎn)
  17. sbit K4=P1^0;                                        //啟動(dòng)停止
  18. /***************************************************/
  19. uchar PWM_ON=0;                                        //PWM高電平時(shí)間
  20. uchar count=0;                                          //中斷計(jì)時(shí)
  21. uchar num=0;
  22. uchar num1=0;                           //中斷時(shí)間計(jì)數(shù)
  23. uint num2=0;                                   //外部中斷次數(shù)
  24. uchar flat=0;                                        //正反轉(zhuǎn)標(biāo)示位
  25. uchar flag=0;                           //刷新數(shù)據(jù)標(biāo)示位
  26. sbit w0=P2^0;
  27. sbit w1=P2^1;
  28. sbit w2=P2^2;
  29. sbit w3=P2^3;

  30. /***************************************************
  31.                 函數(shù)名稱:延時(shí)子函數(shù)
  32.             函數(shù)功能:按鍵消抖
  33. ***************************************************/
  34. void delayms(uint xms)
  35. {
  36.         uint i,j;
  37.         for(i=xms;i>0;i--)
  38.                 for(j=110;j>0;j--);
  39. }
  40. /***************************************************
  41.            函數(shù)名稱:按鍵子函數(shù)
  42.            函數(shù)功能:
  43. ***************************************************/
  44. void key()
  45. {
  46.         if(K4==0)                                        //啟動(dòng) 停止
  47.         {
  48.                 delayms(5);
  49.                 if(K4==0)
  50.                 {
  51.                         while(!K4);
  52.                      num=!num;
  53.                 }
  54.         }
  55.         if(K1==0)                                        //加速鍵
  56.         {
  57.                 delayms(5);
  58.                 if(K1==0)
  59.                 {
  60.                         while(!K1);
  61.                         if(num<3)
  62.                         num++;
  63.                 }
  64.         }

  65.         if(K2==0)                                        //減速鍵
  66.         {
  67.                 delayms(5);
  68.                 if(K2==0)
  69.                 {
  70.                         while(!K2);
  71.                         if(num>0)
  72.                         num--;
  73.                 }
  74.         }

  75.         if(K3==0)                                   //電機(jī)正反轉(zhuǎn)按鍵
  76.         {
  77.                 delayms(5);
  78.                 if(K3==0)
  79.                 {
  80.                         while(!K3);
  81.                         flat++;
  82.                         if(flat==2)
  83.                         flat=0;
  84.                 }
  85.         }


  86.         switch(num)
  87.         {
  88.                 case 0: PWM_ON=0;  break;        //占空比為00%
  89.                 case 1: PWM_ON=4;  break;        //占空比為40%

  90.                 case 2: PWM_ON=7;  break;        //占空比為70%

  91.                 case 3: PWM_ON=10;  break;        //占空比為100%
  92.                 default:
  93.                 break;
  94.         }
  95. }
  96. /*******速度數(shù)據(jù)采集*****************************************/
  97. void sudu()
  98. {
  99.         uint shuju;
  100.         if(flag==1)
  101.         {
  102.                 flag=0;
  103.                 shuju=num2*2;                         //電機(jī)一秒轉(zhuǎn)的圈數(shù)               
  104.                 num2=0;
  105.         }
  106.         if(flat==0)
  107.         P0=table[11];                //"C"
  108.         else
  109.         P0=table[12];                //"A"
  110.         w0=1;
  111.         delayms(10);
  112.         w0=0;

  113. //        delayms(3);

  114. //        P2=0xfd;

  115.         P0=table[shuju/100];
  116.          w1=1;
  117.         delayms(10);
  118.         w1=0;
  119. //        delayms(3);

  120. //        P2=0xfb;

  121.         P0=table[shuju%100/10];
  122.            w2=1;
  123.         delayms(10);
  124.         w2=0;
  125. //        delayms(3);

  126. //        P2=0xf7;
  127.         P0=table[shuju%10];
  128. //        delayms(3);
  129.         w3=1;
  130.         delayms(10);
  131.         w3=0;
  132.         P2=0xff;
  133. }
  134. void  init()
  135. {
  136.         PWM1=1;                                 //初始化
  137.         PWM2=1;
  138.         TMOD=0x11;                          //打開定時(shí)器
  139.         TH0=(65536-50000)/256;
  140.         TL0=(65536-50000)%256;
  141.         ET0=1;
  142.         TR0=1;
  143.         EX0=1;
  144.         IT0=1;
  145.         TH1=(65536-1000)/256;
  146.         TL1=(65536-1000)%256;
  147.         EA=1;
  148.         ET1=1;
  149.         TR1=1;

  150. }
  151. /**************************************************
  152.            函數(shù)名稱:主函數(shù)
  153.            函數(shù)功能:
  154. **************************************************/
  155. void main()
  156. {
  157.     init();


  158.         while(1)
  159.         {
  160.                 key();
  161.                 sudu();
  162.         }
  163. }
  164. /**************************************************
  165.            函數(shù)名稱:定時(shí)器/計(jì)數(shù)器0中斷子函數(shù)
  166.            函數(shù)功能:
  167. **************************************************/
  168. void T1_time() interrupt 3
  169. {
  170.         TH1=(65536-1000)/256;
  171.         TL1=(65536-1000)%256;
  172.         count++;
  173.         if(count>CYCLE)
  174.                 count=0;
  175.         if(count<PWM_ON)                 //如果計(jì)時(shí)時(shí)間在不大于高電平時(shí)時(shí)間,電機(jī)轉(zhuǎn)
  176.         {
  177.                 if(flat==0)
  178.                 {
  179.                         PWM1=0;
  180.                         PWM2=1;
  181.                 }
  182.                 if(flat==1)
  183.                 {
  184.                         PWM1=1;
  185.                         PWM2=0;
  186.                 }
  187.         }
  188.         else                                         //如果計(jì)時(shí)時(shí)間大于高電平時(shí)時(shí)間,電機(jī)停
  189.         {
  190.                 PWM1=1;
  191.                 PWM2=1;
  192.         }
  193. }

  194. void T0_time() interrupt 1                 //定時(shí)器0
  195. {
  196.         TH0=(65536-50000)/256;
  197.         TL0=(65536-50000)%256;
  198.         num1++;
  199.         if(num1==10)                                  //每0.5s刷新一次數(shù)據(jù)
  200.         {
  201.                 num1=0;       
  202.                 flag=1;       
  203.         }       
  204. }

  205. void timer() interrupt 0           //外部中斷1
  206. {
  207.          num2++;
  208. }
復(fù)制代碼


評(píng)分

參與人數(shù) 4黑幣 +64 收起 理由
年華何日不離傷 + 5 贊一個(gè)!
shaox1a + 4 贊一個(gè)!
zhangxuewen123 + 5
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:56948 發(fā)表于 2015-5-9 19:54 | 顯示全部樓層

謝謝分享,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:79477 發(fā)表于 2015-5-9 22:37 | 顯示全部樓層
嘿嘿,支持一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:84195 發(fā)表于 2015-6-29 10:33 | 顯示全部樓層
能來個(gè)利用DAC0832的么
回復(fù)

使用道具 舉報(bào)

ID:84195 發(fā)表于 2015-6-29 11:01 | 顯示全部樓層
怎樣打開程序才不亂碼
回復(fù)

使用道具 舉報(bào)

ID:84923 發(fā)表于 2015-7-8 11:27 | 顯示全部樓層
什么程序,是匯編嗎?
回復(fù)

使用道具 舉報(bào)

ID:86017 發(fā)表于 2015-7-18 10:59 | 顯示全部樓層
借鑒借鑒
回復(fù)

使用道具 舉報(bào)

ID:80736 發(fā)表于 2015-10-25 16:45 | 顯示全部樓層
感謝分型
回復(fù)

使用道具 舉報(bào)

ID:102962 發(fā)表于 2016-1-17 15:09 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:90177 發(fā)表于 2016-1-19 20:01 | 顯示全部樓層
是C的還是匯編的
回復(fù)

使用道具 舉報(bào)

ID:117923 發(fā)表于 2016-5-2 12:18 | 顯示全部樓層
樓主好人
回復(fù)

使用道具 舉報(bào)

ID:119368 發(fā)表于 2016-5-8 21:30 | 顯示全部樓層
可以學(xué)習(xí)一下了
回復(fù)

使用道具 舉報(bào)

ID:119633 發(fā)表于 2016-5-9 21:11 | 顯示全部樓層
要學(xué)習(xí)!支持
回復(fù)

使用道具 舉報(bào)

ID:119867 發(fā)表于 2016-5-10 18:54 | 顯示全部樓層
  謝謝分享,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:119867 發(fā)表于 2016-5-10 18:55 | 顯示全部樓層
嘿嘿,支持一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:119905 發(fā)表于 2016-5-10 21:34 | 顯示全部樓層
以后來下載!。
回復(fù)

使用道具 舉報(bào)

ID:125537 發(fā)表于 2016-6-7 22:35 | 顯示全部樓層
贊贊贊贊
回復(fù)

使用道具 舉報(bào)

ID:161014 發(fā)表于 2017-1-11 14:14 | 顯示全部樓層
你好啊我是新手
回復(fù)

使用道具 舉報(bào)

ID:161295 發(fā)表于 2017-1-11 14:32 | 顯示全部樓層
真好,正缺少這個(gè),學(xué)習(xí)了。。。。哈哈。。。。
回復(fù)

使用道具 舉報(bào)

ID:157795 發(fā)表于 2017-3-21 09:35 | 顯示全部樓層
感謝樓主
回復(fù)

使用道具 舉報(bào)

ID:195999 發(fā)表于 2017-5-3 14:19 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:208470 發(fā)表于 2017-6-8 15:48 | 顯示全部樓層
贊一個(gè)!
回復(fù)

使用道具 舉報(bào)

ID:211219 發(fā)表于 2017-6-15 10:40 | 顯示全部樓層
謝謝樓主分享,值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:243192 發(fā)表于 2018-1-1 22:56 | 顯示全部樓層
不錯(cuò)的設(shè)計(jì)啊
回復(fù)

使用道具 舉報(bào)

ID:271370 發(fā)表于 2018-1-4 14:28 | 顯示全部樓層
贊一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:183659 發(fā)表于 2018-1-6 11:19 來自手機(jī) | 顯示全部樓層
謝謝大佬們,正好需要
回復(fù)

使用道具 舉報(bào)

ID:273434 發(fā)表于 2018-1-10 16:52 | 顯示全部樓層
支持你,下載了挺不錯(cuò)的
回復(fù)

使用道具 舉報(bào)

ID:93625 發(fā)表于 2018-9-26 11:10 | 顯示全部樓層
學(xué)習(xí)一下,感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:556311 發(fā)表于 2019-6-6 13:53 | 顯示全部樓層
感謝樓主,很有用
回復(fù)

使用道具 舉報(bào)

ID:817071 發(fā)表于 2020-9-9 17:52 來自手機(jī) | 顯示全部樓層
樓主,能告訴我3.2口接的什么嘛
回復(fù)

使用道具 舉報(bào)

ID:856702 發(fā)表于 2020-12-10 19:28 | 顯示全部樓層

是匯編的
回復(fù)

使用道具 舉報(bào)

ID:849113 發(fā)表于 2020-12-17 18:59 | 顯示全部樓層
厲害,正好在學(xué)習(xí)可以參考一下
回復(fù)

使用道具 舉報(bào)

ID:984432 發(fā)表于 2021-11-24 22:31 | 顯示全部樓層
問問大佬,p3.2口接的是什么
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表