L298N控制直流电机

2019-03-26 19:33发布

  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit ENA=P1^2;
  5. sbit IN1=P1^3;
  6. sbit IN2=P1^4;
  7. sbit ENB=P1^5;
  8. sbit IN3=P1^6;
  9. sbit IN4=P1^7;

  10. uint MA=0;  
  11. uint speedA=50;
  12. int flag=0;

  13. void timeinit()
  14. {
  15.         TMOD=0x01;
  16.         TH0=(65536-10000)/256;
  17.         TL0=(65536-10000)%256;
  18.         EA=1;
  19.         ET0=1;
  20.         TR0=1;
  21. }

  22. void Ques1()
  23. {
  24.         switch(flag/10)
  25.         {
  26.                 case 0:        TR0=0;
  27.                                                 if(MA<speedA)
  28.                                                 {
  29.                                                                 ENA=1;ENB=1;
  30.                                                                 IN1=1;IN2=0;
  31.                                                                 IN3=0;IN4=1;
  32.                                                 }
  33.                                                 else
  34.                                                 {
  35.                                                         if(speedA<=MA<100)
  36.                                                         {
  37.                                                                         ENA=0;
  38.                                                                         ENB=0;
  39.                                                         }
  40.                                                         else       
  41.                                                         {
  42.                                                                         MA=0;       
  43.                                                                         flag++;                                                                                                                                               
  44.                                                         }                                                       
  45.                                                 }
  46.                                                 TR0=1;
  47.                                                 break;
  48.                 case 1: TR0=0;
  49.                                                 if(MA<speedA)
  50.                                                 {
  51.                                                                 ENA=1;ENB=1;
  52.                                                                 IN1=0;IN2=1;
  53.                                                                 IN3=1;IN4=0;
  54.                                                 }
  55.                                                 else
  56.                                                 {
  57.                                                         if(speedA<=MA<100)
  58.                                                         {
  59.                                                                         ENA=0;
  60.                                                                         ENB=0;       
  61.                                                         }
  62.                                                         else
  63.                                                         {
  64.                                                                         MA=0;       
  65.                                                                         flag++;                                                               
  66.                                                         }       
  67.                                                 }
  68.                                           TR0=1;
  69.                                                 break;
  70.                 default : flag=0;
  71.                                                         break;
  72.         }
  73. }

  74. void time0() interrupt 1
  75. {
  76.         TH0=(65536-10000)/256;
  77.         TL0=(65536-10000)%256;
  78.         MA++;       
  79. }

  80. void main()
  81. {       
  82.         timeinit();
  83.         while(1)
  84.         {
  85.                 Ques1();
  86.         }
  87. }
复制代码

我想问下,为什么这个程序无法同时控制电机正反转,现在问题是单片机按着复位键,IN1和IN2控制的电机才会启动,不按复位键不启动,IN3和IN4控制的电机在5s后也会停止转动,这是为什么?我的目的是IN1和IN2控制的电机1正转,同时IN3和IN4控制的电机2反转,过1s之后电机1正转电机2反转。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
ienglgge
1楼-- · 2019-03-27 01:43
 精彩回答 2  元偷偷看……
tianshuihu
2楼-- · 2019-03-27 01:46
好好看看语法规则,不确定的话可以多加几个括号

if(speedA<=MA<100)
等价于
if((0 or 1) <100)
其中 speedA<=MA ? 1: 0

试试
if(speedA<=MA && MA <100)
也就是 if( (speedA<=MA)  && (MA <100)  )
chunyang
3楼-- · 2019-03-27 07:05
根据硬件工作原理自己写程序,IO状态用万用表测。
xiaocaiji
4楼-- · 2019-03-27 11:23
chunyang 发表于 2017-5-6 16:52
根据硬件工作原理自己写程序,IO状态用万用表测。

这个程序就是自己写的,目前不知道哪里出问题
低调的路人
5楼-- · 2019-03-27 15:30
定时器没设置好,参看网上教程,祝好~
Li_Lei
6楼-- · 2019-03-27 18:32
 精彩回答 2  元偷偷看……

一周热门 更多>