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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 43723|回復: 18
收起左側

直流電機的PWM單片機控制實例 L298N模塊ENA與ENB的說明

  [復制鏈接]
ID:140725 發表于 2017-3-22 04:11 | 顯示全部樓層 |閱讀模式
使用直流/步進兩用驅動器可以驅動兩臺直流電機。分別為M1和M2。引腳A,B可用于輸入PWM脈寬調制信號對電機進行調速控制。(如果無須調速可將兩引腳接5V,使電機工作在最高速狀態,既將短接帽短接)實現電機正反轉就更容易了,輸入信號端IN1接高電平輸入端IN2接低電平,電機M1正轉。(如果信號端IN1接低電平, IN2接高電平,電機M1反轉。)控制另一臺電機是同樣的方式,輸入信號端IN3接高電平,輸入端IN4接低電平,電機M2正轉。(反之則反轉),PWM信號端A控制M1調速,PWM信號端B控制M2調速。可參考下圖表:
0.png

輸入部分接線圖
0.png
輸出部分接線圖 0.png
下面是單片機源程序:
  1. #include <reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define CYCLE 20        //周期

  5. sbit IN1 =P1^0;//右
  6. sbit IN2 =P1^1;
  7. sbit IN3 =P1^2;//左
  8. sbit IN4 =P1^3;
  9. sbit ENB =P1^4;
  10. sbit ENA =P1^5;
  11. sbit h1 = P0^0;
  12. sbit h2 = P0^1;
  13. sbit h3 = P0^2;
  14. sbit h4 = P0^3;
  15. sbit h5 = P0^4;

  16. uchar pwm1,pwm2,flag,a;
  17. void delayms(uint xms);

  18. void go();//直走
  19. void hou();
  20. void tl();//左轉
  21. void tr();//右轉
  22. void Init_Timer0(void);//定時器初始化
  23. void hou()
  24. {
  25.         IN1 = 1;//右
  26.         IN2 = 0;
  27.         IN3 = 1;//左
  28.         IN4 = 0;
  29. }
  30. void tlz()
  31. {
  32.         IN1 = 0;//右
  33.         IN2 = 1;
  34.         IN3 = 1;//左
  35.         IN4 = 0;
  36. }
  37. void tl()
  38. {
  39.         IN1 = 0;//右
  40.         IN2 = 1;
  41.         IN3 = 0;//左
  42.         IN4 = 0;
  43. }
  44. void tr()
  45. {
  46.         IN1 = 0;//右
  47.         IN2 = 0;
  48.         IN3 = 0;//左
  49.         IN4 = 1;
  50. }
  51. void go()
  52. {
  53.         IN1 = 0;
  54.         IN2 = 1;
  55.         IN3 = 0;
  56.         IN4 = 1;
  57. }
  58. void suiji()
  59. {
  60.         if(h3==0)
  61.         {
  62.                 pwm1=10;
  63.           pwm2=2;
  64.                 tl();
  65.   }
  66.         else if(h3==0&&h2==0)
  67.         {
  68.                 pwm1=10;
  69.           pwm2=3;
  70.                 tr();
  71.   }
  72.         else if(h1==0||h2==0)
  73.         {
  74.                 pwm1=10;
  75.           pwm2=5;
  76.                 tr();
  77.   }
  78.                 else if(h3==0||h4==0)
  79.         {
  80.                 pwm1=5;
  81.           pwm2=10;
  82.                 tl();
  83.   }
  84.                 else if(h5==0||h4==0)
  85.         {
  86.                 pwm1=3;
  87.           pwm2=10;
  88.                 tl();
  89.   }
  90.         else
  91.         {
  92.                 pwm1=3;
  93.           pwm2=3;
  94.                 go();
  95.   }
  96. }
  97.         

  98. void xunji()
  99. {
  100.         while(h2==1&&h3==1&&h4==1&&h5==1&&h1==1)
  101. {
  102.          pwm1=3;
  103.          pwm2=3;
  104.    go();
  105. }
  106.         
  107.                 //////////////*****************////////////////////////
  108.         
  109.                 if(h2==0||h3==0)
  110.                         {
  111.                                 pwm1=1;
  112.                                 pwm2=10;
  113.                                 tlz();
  114.                         }
  115.                         else if(h4==1&&h5==1&&h2==0&&h3==0&&h1==0)
  116.                         {
  117.                                 pwm1=10;
  118.                                 pwm2=1;
  119.                                 tr();
  120.                         }
  121.                         else if(h4==0&&h5==1)
  122.                         {
  123.                                 pwm1=3;
  124.               pwm2=3;
  125.                                 go();
  126.                         }
  127.                         else if(h5==0)
  128.                         {
  129.                                 pwm1=3;
  130.                                 pwm2=3;
  131.                                 tl();
  132.                         }
  133.                         else
  134.                         {
  135.                                 pwm1=3;
  136.               pwm2=3;
  137.                                 go();
  138.                         }

  139.                 //////////////////*************/////////////////////
  140.         
  141. }
  142. /*******初始化函數********/
  143. void init()
  144. {
  145.         TMOD=0x20;
  146.         TH1=0xfd;
  147.         TL1=0xfd;
  148.         TR1=1;
  149.         REN=1;
  150.         SM0=0;
  151.         SM1=1;
  152.         EA=1;
  153.         ES=1;
  154. }
  155. void main()
  156. {
  157.         //uchar i;
  158.         Init_Timer0();
  159.   init();
  160.         
  161.   a = SBUF;
  162.                         switch(a)
  163.            {

  164.                         case 02:
  165.                                 {
  166.                                         pwm1=5;
  167.                                         pwm2=5;
  168.                                         hou();//后
  169.                                 } break;
  170.                         case 03:
  171.                                 {
  172.                                         pwm1=8;
  173.                                         pwm2=8;
  174.                                         tr();//右
  175.                                 } break;
  176.                         case 04:
  177.                                 {
  178.                                         pwm1=8;
  179.                                         pwm2=8;
  180.                                         tl(); //左
  181.                                 } break;
  182. //                        case 05:
  183. //                        {
  184. //                                xunji();
  185. //      }break;
  186.                         case 06:
  187.                         {
  188.                                 suiji();
  189.       }break;
  190.                         case 07:
  191.                         {
  192.                                 pwm1=5;
  193.               pwm2=5;
  194.                                 go();
  195.       }break;
  196.                         case 0x08:
  197.                         {
  198.                                 IN1 = 0;//
  199.               IN2 = 0;
  200.               IN3 = 0;//
  201.               IN4 = 0;
  202.       }
  203.                         default:break;
  204.            }
  205. }

  206. ////毫秒延時
  207. //void delayms(uint xms)
  208. //{
  209. //uint i, j;
  210. //for(i=xms;i>0;i--)         //xms 毫秒
  211. //        for(j=110;j>0;j--);
  212. //}

  213. /*------------------------------------------------
  214.                     定時器初始化子程序
  215. ------------------------------------------------*/
  216. void Init_Timer0(void)
  217. {
  218. TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                     
  219. //TH0=0x00;              //給定初值
  220. //TL0=0x00;
  221. EA=1;            //總中斷打開
  222. ET0=1;           //定時器中斷打開
  223. TR0=1;           //定時器開關打開
  224. }
  225. /*------------------------------------------------
  226.                  定時器中斷子程序
  227. ------------------------------------------------*/
  228. void Timer0_isr(void) interrupt 1
  229. {
  230. static unsigned char count;
  231. TH0=(65536-2000)/256;                  //重新賦值 2ms
  232. TL0=(65536-2000)%256;

  233.         if (count==pwm1)
  234.                         {
  235.                          ENA = 0;                           
  236.                         }
  237.         if(count==pwm2)
  238.                 {
  239.                                 ENB = 0;  
  240.                 }
  241.                 count++;
  242.         if(count == CYCLE)       //反之低電平時間結束后返回高電平
  243.                         {
  244.                         count=0;
  245.                 if(pwm1!=0)    //如果開啟時間是0 保持原來狀態
  246.                 {
  247.                         ENA = 1;              
  248.                         
  249.                 }
  250.                 if(pwm2!=0)
  251.                 {
  252.                         ENB = 1;
  253.                 }
  254.       }

  255. }
  256. void ser1() interrupt 4
  257. {
  258.         EA=0;
  259.         if(RI==1)
  260.         {
  261.                 a = SBUF;
  262.                 RI=0;
  263.         }
  264.         EA=1;
  265. }
復制代碼

  1. /********************************************************************
  2. 實現功能:直流電機調試程序
  3. 使用芯片:AT89S52 或者 STC89C52
  4. 晶振:11.0592MHZ
  5. 編譯環境:Keil
  6. 【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!     
  7. *********************************************************************/
  8. #include<reg52.h>
  9. #define uchar unsigned char//宏定義無符號字符型
  10. #define uint unsigned int  //宏定義無符號整型
  11. sbit P2_0=P2^0;//M1啟動
  12. sbit P2_1=P2^1;//M1停止
  13. sbit P2_2=P2^2;//M2啟動
  14. sbit P2_3=P2^3;//M2停止
  15. sbit P1_0=P1^0;//M1
  16. sbit P1_1=P1^1;//M1
  17. sbit P1_2=P1^2;//M2
  18. sbit P1_3=P1^3;//M2
  19. /********************************************************************
  20.                             延時函數
  21. *********************************************************************/
  22. void delay(uchar t)//延時程序
  23. {
  24. uchar m,n,s;
  25. for(m=t;m>0;m--)
  26. for(n=20;n>0;n--)
  27. for(s=248;s>0;s--);
  28. }
  29. /********************************************************************
  30.                             主函數
  31. *********************************************************************/
  32. main()
  33. {
  34. while(1)
  35.    {
  36.        if(P2_0==0){delay(3);if(P2_0==0)//M1啟動
  37.          {
  38.                  P1_0=1;                                    
  39.                         P1_1=0;
  40.           }}
  41.        if(P2_1==0){delay(3);if(P2_1==0)//M1停止
  42.          {
  43.                  P1_0=1;
  44.                          P1_1=1;
  45.                   }}
  46.             if(P2_2==0){delay(3);if(P2_2==0)//M2啟動
  47.          {
  48.                  P1_2=1;
  49.                           P1_3=0;
  50.           }}
  51.        if(P2_3==0){delay(3);if(P2_3==0)//M2停止
  52.          {
  53.                  P1_2=1;
  54.                          P1_3=1;
  55.                   }}

  56. …………余下代碼請下載附件…………
復制代碼
問:Ena 和Enb是分別接兩個直流電機么?直流電機的剩下那端接哪兒?

答:
不是直接接連個電機  他兩端是脈寬調制  舉個例子  如果你要實現兩個電機不同的轉速來達到智能小車轉彎的效果你可以這樣
四個輸入端接在單片機的四個管腳   四個輸出端接在兩個直流電機  兩個使能端也接到單片機的兩管腳(就是ENA,ENB)通過寫程序來控制
電機的轉速寫程序的方法有很多的簡單說明一下定義一個變量j  然后讓j++;當j=20ms的時候吧j清0;送給高電平定義一個i  叫i++;讓i=10ms的時候
i=0;送低電平,這就實現了電機轉20ms聽10ms的過程,由于掃描很快就實現了電機的減速,而你必須在你的單片機的使能端管腳送一個低電平
減速機要ENA=0;(讓此管教的電壓小于2.5v)他才能執行電機調速的過程,ENB=1是另一個電機全速運行,哪一個電機減速運行就實現了差速轉彎了
    這只是我自己的理解   也不知道該怎么說希望你能看懂吧。
0.png
下載:
l298驅動直流電機程序和教程.rar (402.08 KB, 下載次數: 358)

評分

參與人數 1黑幣 +8 收起 理由
木木123 + 8 贊一個!

查看全部評分

回復

使用道具 舉報

ID:149167 發表于 2017-3-22 08:31 | 顯示全部樓層
51黑有你真精彩
回復

使用道具 舉報

ID:179657 發表于 2017-3-22 09:52 | 顯示全部樓層
厲害嘍我的歌
回復

使用道具 舉報

ID:179657 發表于 2017-3-22 09:52 | 顯示全部樓層
我也做了一個PWM的控制程序
回復

使用道具 舉報

ID:179661 發表于 2017-3-22 10:00 | 顯示全部樓層
步進電機怎么驅動
回復

使用道具 舉報

ID:1 發表于 2017-3-22 18:09 | 顯示全部樓層

L298N+光耦驅動步進電機測試程序和原理圖:http://www.zg4o1577.cn/bbs/dpj-79475-1.html
回復

使用道具 舉報

ID:151000 發表于 2017-8-11 01:27 | 顯示全部樓層
謝謝樓主分享   
回復

使用道具 舉報

ID:140358 發表于 2017-12-1 09:54 | 顯示全部樓層
贊,不錯,容易學習
回復

使用道具 舉報

ID:305541 發表于 2018-4-20 16:14 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:318181 發表于 2018-4-27 23:34 | 顯示全部樓層
不錯,下來看看
回復

使用道具 舉報

ID:309574 發表于 2018-5-7 17:12 | 顯示全部樓層
謝謝樓主分享‘



回復

使用道具 舉報

ID:213489 發表于 2018-5-9 09:46 | 顯示全部樓層
原理圖接線和程序不一致啊
回復

使用道具 舉報

ID:185372 發表于 2018-5-24 08:18 | 顯示全部樓層
正在使用,不過是stm32,這個來學習下,感謝
回復

使用道具 舉報

ID:381204 發表于 2018-9-27 22:20 來自手機 | 顯示全部樓層
請問誰有完整的程序呀?我不好下載
回復

使用道具 舉報

ID:381204 發表于 2018-9-28 23:09 | 顯示全部樓層
請問程序中的h1,h2,h3,h4,h5是什么呀?
回復

使用道具 舉報

ID:470187 發表于 2019-2-12 13:39 | 顯示全部樓層
感謝樓主。很厲害。我的畢業設計終于可以做出來來哈哈哈哈哈哈哈哈哈哈。
回復

使用道具 舉報

ID:488862 發表于 2019-3-11 21:31 | 顯示全部樓層
學習一下。利用調速來給小車轉彎
回復

使用道具 舉報

ID:556754 發表于 2019-6-6 18:52 | 顯示全部樓層
謝謝樓主
回復

使用道具 舉報

ID:421308 發表于 2019-7-23 09:34 | 顯示全部樓層
太厲害了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 自拍 亚洲 欧美 老师 丝袜 | 久久国产日韩欧美 | 黑人巨大精品欧美一区二区免费 | 亚州精品天堂中文字幕 | 国产精品免费一区二区三区 | 亚洲国产高清高潮精品美女 | 国产精品一区二区在线播放 | 久久精品这里精品 | 欧美一级做性受免费大片免费 | 久久久精品一区二区三区 | 久久国产精品色av免费观看 | 欧美视频在线观看 | 丝袜久久| 日本一二区视频 | 成人av免费| 麻豆一区 | 成人在线精品视频 | 色爱综合网| 日本不卡免费新一二三区 | 我爱操 | 久久综合伊人 | 国产精品高潮呻吟久久 | 国产免费又色又爽又黄在线观看 | 日本免费在线 | 久久精品久久久久久 | 亚洲精品成人免费 | 91人人看| 狠狠入ady亚洲精品经典电影 | 国产精品免费在线 | 国产高清一区二区三区 | www.日韩 | 日韩亚洲视频在线 | 欧美视频在线看 | 国产91视频一区二区 | 国产高清精品网站 | 日韩中文在线视频 | 精品国产成人 | 国产精品久久久久免费 | 精品一区二区久久 | 国产一区二 | 天天拍夜夜爽 |