找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4863|回復: 2
收起左側(cè)

兩路電機驅(qū)動 H橋L9110 含單片機源代碼+電路圖

[復制鏈接]
ID:826862 發(fā)表于 2020-10-8 14:28 | 顯示全部樓層 |閱讀模式
電路原理圖如下:
c93b615dc399cf2ab8a69ffc75993f40.png

單片機源程序如下:
  1. #include <reg52.h>

  2. //LMD298輸入控制端定義
  3. sbit IN1 = P1^0;
  4. sbit IN2 = P1^1;        
  5. sbit IN3 = P1^2;        
  6. sbit IN4 = P1^3;

  7. sbit ENA = P1^4;        
  8. sbit ENB = P1^5;

  9. sbit CW = P3^0;                //正轉(zhuǎn)運行按鍵
  10. sbit STOP = P3^1;        //停止運行按鍵
  11. sbit CCW = P3^2;        //反轉(zhuǎn)運行按鍵
  12. sbit ADJ = P3^3;        //調(diào)速運行按鍵

  13. bit Run_Status;                //運行狀態(tài)位標志,
  14.                                         //=0表示電機在停止狀態(tài),可以按鍵正轉(zhuǎn)、反轉(zhuǎn)均可
  15.                                         //=1表示電機在運行狀態(tài),不支持正反轉(zhuǎn)按鍵,只有先停止。防止強行換向帶來的電流過大。

  16. unsigned char CYCLE; //周期變量
  17. unsigned char DUTY; //占空比變量,對應于調(diào)速運行時按鍵次數(shù),調(diào)速時每按一次調(diào)速鍵速度比上次變化10%

  18. /********************************/
  19. /*      延時函數(shù)               */
  20. /********************************/
  21. void Delay(unsigned int cnt)
  22. {
  23.          while(--cnt);
  24. }
  25. /********************************/
  26. /*      主函數(shù)                             */
  27. /********************************/
  28. main()
  29. {
  30.         TMOD |=0x01;        //定時器設置 1ms in 12M crystal
  31.         TH0=(65536-1000)/256;
  32.         TL0=(65536-1000)%256;//定時1mS
  33.         IE= 0x82;                  //打開中斷        
  34.         
  35.         Run_Status=0;
  36.         IN1=1;
  37.         IN2=1;
  38.         IN3=1;
  39.         IN4=1;
  40.         ENA=0;
  41.         ENB=0;

  42.         CYCLE=10;         //周期10ms
  43.         DUTY=0;         //占空比=0

  44.         while(1)
  45.           {
  46.                 if(!STOP)                        //任何時候按停止鍵,電機停止運行
  47.                 {        
  48.                         Delay(12000);        //延時去抖動
  49.                         if(!STOP)                        
  50.                         {               
  51.                                 //實際運用中,自由停車或制動剎車可以任選。
  52.                                 Run_Status=0;        //電機正在停止的狀態(tài)標志
  53.                                 IN1=1;                        //IN1=IN2時,電機1制動剎車
  54.                                 IN2=1;                        
  55.                                 ENA=0;                        //ENA=0時,電機1自由運行到停止
  56.                                 IN3=1;                        //IN3=IN4時,電機2制動剎車
  57.                                 IN4=1;                        
  58.                                 ENB=0;                        //ENB=0時,電機2自由運行到停止
  59.                                 TR0=0;
  60.                         }
  61.                 }
  62.                 if(!CW&&!Run_Status)//按正轉(zhuǎn)鍵同時電機不是正在運行時,電機正轉(zhuǎn)運行
  63.                 {
  64.                         Delay(12000);        //延時去抖動
  65.                         if(!CW&&!Run_Status)                        
  66.                         {        
  67.                                 Run_Status=1;        //電機正在運行的狀態(tài)標志
  68.                                 IN1=1;                        
  69.                                 IN2=0;                        
  70.                                 ENA=1;        
  71.                                 IN3=1;                        
  72.                                 IN4=0;                        
  73.                                 ENB=1;        
  74.                         }
  75.                 }
  76.                   if(!CCW&&!Run_Status)//按反轉(zhuǎn)鍵同時電機不是正在運行時,電機反轉(zhuǎn)運行
  77.                 {
  78.                         Delay(12000);        //延時去抖動
  79.                         if(!CCW&&!Run_Status)                        
  80.                         {        
  81.                                 Run_Status=1;        //電機正在運行的狀態(tài)標志
  82.                                 IN1=0;                        
  83.                                 IN2=1;                        
  84.                                 ENA=1;        
  85.                                 IN3=0;                        
  86.                                 IN4=1;                        
  87.                                 ENB=1;        
  88.                         }
  89.                 }
  90.                    if(!ADJ)
  91.                 {
  92.                         Delay(15000);        //延時去抖動
  93.                         if(!ADJ)
  94.                         {        
  95.                                 TR0=1;
  96.                                 if(DUTY<CYCLE)        DUTY+=1;        //增加占空比
  97.                                 else                        DUTY=0;
  98.                                 Run_Status=1;
  99.                                 //這里是正轉(zhuǎn)調(diào)速,反轉(zhuǎn)調(diào)速可以自己試著編寫
  100.                                 IN1=1;                        
  101.                                 IN2=0;                        
  102.                                 ENA=0;        
  103.                                 IN3=1;                        
  104.                                 IN4=0;                        
  105.                                 ENB=0;        
  106.                          }
  107.                 }
  108.    }
  109. }
  110. /********************************/
  111. /*      定時器0中斷服務函數(shù)     */
  112. /********************************/
  113. void Timer0(void) interrupt 1 using 1
  114. {
  115.         static unsigned char Cnt;

  116.         TH0=(65536-1000)/256;
  117.         TL0=(65536-1000)%256;//定時1mS
  118.         
  119.         if(DUTY==0)                                {Cnt=0;        TR0=0;Run_Status=0;}        //占空比=0時 停止中斷 可以按正轉(zhuǎn)或反轉(zhuǎn)
  120.         else if(DUTY==CYCLE)        Cnt=CYCLE;
  121.         else                                        Cnt++;
  122.         if(Cnt==DUTY)                //高電平時間到
  123.         {
  124.                  ENA = 0;
  125.                 ENB = 0;
  126.         }
  127.         if(Cnt == CYCLE)        //低電平時間到
  128.         {
  129.                 ENA = 1;
  130.                 ENB = 1;
  131.             Cnt=0;
  132.         }
  133. }
復制代碼

全部資料51hei下載地址:
直流電機驅(qū)動程序.zip (94.85 KB, 下載次數(shù): 31)
電機模塊.pdf (105.48 KB, 下載次數(shù): 35)
回復

使用道具 舉報

ID:724172 發(fā)表于 2020-10-10 09:36 | 顯示全部樓層
有實物圖嗎,我小白一個
回復

使用道具 舉報

ID:1018833 發(fā)表于 2022-4-16 10:52 | 顯示全部樓層
想要你的電機原理圖
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表