找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12431|回复: 10
收起左侧

STC单片机+2个L298N模块+3个直流电机(演示一个电机的PWM调速过程)

  [复制链接]
ID:179677 发表于 2017-5-17 15:22 | 显示全部楼层 |阅读模式
STC12单片机+2个L298N模块+3个直流电机(演示其中一个电机的PWM调速过程)

0.png

L298模块电路原理图如下:
0.png
L298N电机驱动模块pdf资料:
0.png

L298模块

L298模块




stc单片机源程序如下:
  1. //周期为7毫秒,100微秒一调,脉宽范围是0~70
  2. //当脉宽小于15,电机不转(不知道是不是跟电机有关,电压达不到最低要求)
  3. //用的STC10F08,外接两个L298模块,控制3个直流电机
  4. #include <STC10.h>  
  5. #include <math.h>
  6. #include <intrins.h>       
  7. #define uchar unsigned char  
  8. #define uint unsigned int  
  9. sbit en1=P0^0;  /* L298Enable A */  
  10. sbit en2=P0^3;  /* L298Enable B */
  11. sbit en3=P0^6;


  12. sbit s1=P0^1;  /* L298Input 1 */  
  13. sbit s2=P0^2;  /* L298Input 2 */  
  14. sbit s3=P0^4;  /* L298Input 3 */  
  15. sbit s4=P0^5;  /* L298Input 4 */
  16. sbit s5=P2^0;  /* L298-2Input 1 */  
  17. sbit s6=P2^1;  /* L298-2Input 2 */


  18. sbit k1=P2^2;     //演示3个电机正转
  19. sbit k2=P2^3;     //演示反转
  20. sbit k3=P2^4;     //通过按键次数,电机速度加快
  21. sbit k4=P2^5;     //自转
  22. sbit k5=P2^6;     //stop

  23. bit  fangx=0;//0正转,1反转
  24. uchar keynum=0;   //按键次数


  25. uchar idata t=0;   /* 中断计数 */  
  26. uchar idata mk1=0;   /* 电机1速度对应脉宽 */  
  27. uchar idata mk2=0;   /* 电机2速度*/  
  28. uchar idata mk3=0;   /* 电机3速度*/

  29. uchar idata tmp1,tmp2,tmp3; /* 电机当前速度 */  



  30. ////////////////
  31. void delay1ms()                //@22.1184MHz
  32. {
  33.         unsigned char i, j;

  34.         _nop_();
  35.         i = 4;
  36.         j = 146;
  37.         do
  38.         {
  39.                 while (--j);
  40.         } while (--i);
  41. }
  42. ////////////////
  43. void delay50ms()                //@22.1184MHz
  44. {
  45.         unsigned char i, j, k;

  46.         i = 5;
  47.         j = 52;
  48.         k = 195;
  49.         do
  50.         {
  51.                 do
  52.                 {
  53.                         while (--k);
  54.                 } while (--j);
  55.         } while (--i);
  56. }


  57. /////////////////////////////////////////
  58. /*  index-电机号(1,2,3); 脉宽(0~70) ,方向 0=正转*/  
  59. void motor(uchar index, char speed,bit a)  
  60. {
  61.        
  62. fangx=a;
  63.        
  64. if(a==0)     //正转
  65. {  
  66.         switch(index)
  67.          {
  68.    case 1 :        s1=1; s2=0;mk1=speed;break;               
  69.    case 2 : s3=1; s4=0;mk2=speed;break;
  70.    case 3 : s5=1; s6=0;mk3=speed;break;
  71.                 default: break;
  72.    }
  73. }         
  74. else         //反转
  75.    {  
  76.         switch(index)
  77.          {
  78.    case 1 :        s1=0;s2=1;   mk1=speed;break;               
  79.    case 2 : s3=0; s4=1 ; mk2=speed;break;
  80.    case 3 : s5=0; s6=1 ; mk3=speed;break;
  81.                 default: break;
  82.    }       
  83.   }
  84. }
  85. /////////////////////////////
  86. /*  index-电机号(1,2,3);*/  
  87. void motorstop(uchar index )  
  88. {   
  89.         switch(index)
  90.          {
  91.    case 1 :s1=0;s2=0; mk1=0;break;
  92.    case 2 :s3=0;s4=0; mk2=0;break;
  93.    case 3 :s5=0;s6=0; mk3=0;break;
  94.                 default: break;
  95.    }

  96. }  
  97. ///////////////
  98. void Timer0Init(void)                //100US,22.1184MHz
  99. {
  100.         AUXR |= 0x80;                //1T
  101.         TMOD &= 0xF0;               
  102.         TMOD |= 0x01;                //16位工作方式1
  103.         TL0 = 0x5C;               
  104.         TH0 = 0xF7;       
  105.         TF0 = 0;               
  106.         TR0 = 1;       
  107.         EA=1;   
  108.         ET0=1;
  109. }



  110. ///////////////////////////
  111. void main()  
  112. {  
  113.         uchar i;
  114.        
  115.   P0=P1=P2=P3=0XFF;
  116.        
  117.         Timer0Init();

  118.   while(1) /* 电机控制演示 */  
  119.    {
  120.         /////////////////
  121.    if(k1==0)           //3个电机正转
  122.             {
  123.        motor(1,50,0);
  124.                    motor(2,30,0);
  125.                    motor(3,10,0);  
  126.        }
  127.          //////////////////////
  128.          else if(k2==0)      //3个电机反转
  129.             {  
  130.         motor(1,20,1);
  131.                           motor(2,40,1);
  132.                     motor(3,60,1);
  133.       }
  134.          ////////////////////
  135.   else  if(k3==0)
  136.          {
  137.                  delay1ms();
  138.                  while(!k3); //等待按键放开
  139.                  if(keynum>=70)
  140.                  {keynum=0;}
  141.                         keynum++;            //加速                               
  142.                         motor(1,keynum,fangx);                                      
  143.          }
  144.    
  145.         /////////////////////
  146.   else  if(k4==0)
  147.          {
  148.                   delay1ms();
  149.                  while(!k4);     //等待按键放开
  150.                  for(i=0;i<=70;i++)
  151.                  {  
  152.                         motor(1,i,fangx);
  153.                          delay50ms();
  154.                          delay50ms();
  155.                          delay50ms();
  156.                          delay50ms();
  157.                          delay50ms();
  158.                          delay50ms();
  159.                          delay50ms();
  160.                          delay50ms();
  161.                          delay50ms();  //延时,通过示波器可以看见脉宽的变化
  162.                  }         
  163.                   
  164.          }
  165.         /////////////////////
  166.         else  if(k5==0)
  167.                 {
  168. ……………………

  169. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

0.png

所有资料51hei提供下载:
pwm l298.rar (277.29 KB, 下载次数: 190)

评分

参与人数 3黑币 +65 收起 理由
莫德尔 + 10 赞一个!
LQL-LQL + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2017-5-17 19:13 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:252511 发表于 2017-11-22 23:40 | 显示全部楼层
不错的资料,正在学习这方面。
回复

使用道具 举报

ID:336657 发表于 2018-6-5 22:38 | 显示全部楼层
好东西 支持
回复

使用道具 举报

ID:350637 发表于 2018-6-12 21:01 | 显示全部楼层
可以,正是我需要的
回复

使用道具 举报

ID:354749 发表于 2018-6-19 23:03 | 显示全部楼层
正是需要的   怎么样才能下载啊!!!啊啊啊
回复

使用道具 举报

ID:342294 发表于 2018-8-21 14:25 | 显示全部楼层
这个我看你用的是STC10 这个没有用过   不过程序确实写的不错
回复

使用道具 举报

ID:252511 发表于 2018-12-18 00:40 | 显示全部楼层
不错的资料,正需要!
回复

使用道具 举报

ID:593054 发表于 2019-8-5 19:38 | 显示全部楼层
l298n怎么接线
回复

使用道具 举报

ID:421536 发表于 2019-8-14 12:08 | 显示全部楼层
好资料,帮忙顶
回复

使用道具 举报

ID:585455 发表于 2020-9-2 09:09 | 显示全部楼层
你的資料很完整,正需要L298N控制碼,太好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表