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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4412|回復: 0
打印 上一主題 下一主題
收起左側

L298直流電機的PWM速度控制單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
分享~


單片機源程序如下:
  1. /*-----------------------------------------------
  2.   名稱:        直流電機控制
  3.   工作室:        翼嵌電子工作室
  4.   編寫:        Bin.Lee
  5.   日期:        2018.6.10
  6.   版本:        0.1
  7.   內容:        直流電機的PWM速度控制程序
  8.   端口:        IN_1 = P2^0;
  9.                         IN_2 = P2^1;
  10.                         IN_3 = P2^2;
  11.                         IN_4 = P2^3;
  12.                         EN_A = P2^4;
  13.                         EN_B = P2^5;
  14. ------------------------------------------------*/
  15. /* 電機控制函數 index-電機號(1,2); speed-電機速度(-100—100) direction-正反轉(1,0)*/


  16. #include "Motor.h"

  17. sbit IN_1 = P2^0; /* L298的IN_1 */
  18. sbit IN_2 = P2^1; /* L298的IN_2 */
  19. sbit IN_3 = P2^2; /* L298的IN_3 */
  20. sbit IN_4 = P2^3; /* L298的IN_4 */
  21. sbit EN_A = P2^4; /* L298的EN_A */
  22. sbit EN_B = P2^5; /* L298的EN_B */

  23. /**********電機驅動****************/   
  24. uchar count        = 0; /* 中斷計數器 */
  25. uchar Speed_1 = 0, Speed_2 = 0; /* 電機1/2速度值 */
  26. uchar Speed_Now_1 = 0, Speed_Now_2 = 0; /* 電機1/2當前速度值 */

  27. void Motor_Delay_ms(unsigned int time)
  28. {
  29. uchar i,j;
  30. for(i=time;i>0;i++)
  31.    for(j=112;j>0;j--)
  32.    {;}
  33. }
  34. void Motor(uchar index, char speed,uchar direction)
  35. {
  36.         if(index == 1) /* 電機1的處理 */
  37.         {
  38.                 if(direction == 1)
  39.                 {
  40.                          Speed_1 = speed;
  41.                         IN_1 = 1;
  42.                         IN_2 = 0;
  43.                 }
  44.                 else
  45.                 {
  46.                     Speed_1 = speed;  
  47.                         IN_1 = 0;
  48.                         IN_2 = 1;
  49.                 }
  50.         }
  51.         if(index == 2) /* 電機2的處理 */
  52.         {
  53.                 if(direction == 1)
  54.                 {
  55.                           Speed_2 = speed;
  56.                         IN_3 = 1;
  57.                         IN_4 = 0;
  58.                 }
  59.                 else
  60.                 {
  61.                         Speed_2 = speed; /* 電機2的速度控制 */
  62.                         IN_3 = 0;
  63.                         IN_4 = 1;
  64.                 }
  65.         }
  66. }
  67. void Motor_Control_1(char speed, uchar direction)/* 電機1的控制 */
  68. {
  69.         Motor(1, speed, direction);
  70. }
  71. void Motor_Control_2(char speed, uchar direction)/* 電機2的控制 */
  72. {
  73.         Motor(2, speed, direction);
  74. }
  75. void Motor_Init(void)
  76. {               
  77.         IN_1 = 1;
  78.         IN_2 = 1;
  79.         IN_3 = 1;
  80.         IN_4 = 1;
  81.         TMOD = 0x02; /* 設定T0的工作模式為2 */
  82.         TH0 = 0xa3; /* 裝入定時器的初值 */
  83.         TL0 = 0xa3; //0.1ms
  84.         EA = 1; /* 開中斷 */
  85.         ET0 = 1; /* 定時器0允許中斷 */
  86.         TR0 = 1; /* 啟動定時器0 */
  87. }
  88. /*********************行駛狀態**************************/
  89. void Motor_Run(void)
  90. {
  91.          TR0 = 1; /* 啟動定時器0 */
  92.          Motor_Delay_ms(2);
  93.          Motor_Control_1(13, 1);
  94.          Motor_Control_2(13, 0);
  95. }

  96. void Motor_Back(void)
  97. {
  98.            TR0 = 1; /* 啟動定時器0 */
  99.            Motor_Delay_ms(2);
  100.            Motor_Control_1(30, 0);
  101.            Motor_Control_2(30, 1);
  102. }

  103. void Motor_Stop(void)
  104. {
  105.          Motor_Delay_ms(2);
  106.           TR0 = 0; /* 關閉定時器0 */
  107.           EN_A = 0;
  108.           EN_B = 0;
  109.           IN_1 = 0;
  110.         IN_2 = 0;
  111.         IN_3 = 0;
  112.         IN_4 = 0;
  113. }
  114. void Motor_TurnRight(void)         //右轉
  115. {
  116.          TR0 = 1;
  117.          Motor_Delay_ms(2);
  118.          Motor_Control_1(15, 1);                    
  119.          Motor_Control_2(10, 1);         
  120. }
  121. void Motor_TurnLeft(void)          //左轉
  122. {
  123.           TR0 = 1;
  124.          Motor_Delay_ms(2);
  125.          Motor_Control_1(10, 0);
  126.          Motor_Control_2(15, 0);
  127. }

  128. void Motor_Around(void)                  //打轉
  129. {
  130.          TR0 = 1; /* 啟動定時器0 */
  131.            Motor_Delay_ms(2);
  132.            Motor_Control_1(10, 1);
  133.            Motor_Control_1(10, 1);
  134. }

  135. void TIME_0(void) interrupt 1 /* T0中斷服務程序 */
  136. {
  137.         if(count == 0) /* 1個PWM周期完成后才會接受新數值 */
  138.         {        
  139.                 Speed_Now_1 = Speed_1;
  140.                 Speed_Now_2 = Speed_1;
  141.         }
  142.         /* 產生電機1的PWM信號 */
  143.         if(count < Speed_1) EN_A = 1;
  144.         else EN_A = 0;  
  145.         /* 產生電機2的PWM信號 */
  146.         if(count < Speed_2) EN_B = 1;
  147.         else EN_B = 0;
  148.         count++;
  149.         if(count >= 100) count = 0; /* 1個PWM信號由100次中斷產 */
  150. }

復制代碼

所有資料51hei提供下載:
L298電機驅動程序.rar (36.61 KB, 下載次數: 63)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看涩涩视频 | 国产精品免费在线 | 国家一级黄色片 | 亚洲91视频 | 久久宗合色 | 国内精品久久影院 | 亚洲精品第一页 | 亚洲欧美日韩高清 | 亚洲一二视频 | 日韩网站在线观看 | 91久久电影 | 日韩精品中文字幕在线 | 91一区二区三区在线观看 | 日本视频一区二区 | 国产二区av | 久久久久亚洲视频 | 日本电影一区二区 | 日韩精品一区二区久久 | 久久蜜桃av | 天天干天天操天天射 | av在线播放网站 | www.天天干.com | 91久久国产精品 | 久久天堂 | 超碰最新在线 | 欧美成人激情 | 欧美一级毛片久久99精品蜜桃 | 国产一区二区三区在线看 | 一级片免费视频 | 国产一级在线 | 操操日 | 午夜免费小视频 | 国产精品久久久久久久久久久久久久 | 免费一级片 | 久草热播 | 成人精品鲁一区一区二区 | 91新视频| 99精品国产一区二区三区 | 波多野结衣一区二区三区 | 日韩成人影院 | 亚洲精品v |