首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

小弟我用51和两个L293D驱动四个电机 用7.2V驱动L293D而其使能端小弟我直接接5V 程序没有报错 但电机就是不动

2012-08-11 
我用51和两个L293D驱动四个电机 用7.2V驱动L293D而其使能端我直接接5V 程序没有报错 但电机就是不动#inclu

我用51和两个L293D驱动四个电机 用7.2V驱动L293D而其使能端我直接接5V 程序没有报错 但电机就是不动
#include<reg52.h>
sbit in1=P1^0;
sbit in2=P1^1;
sbit in3=P1^2;
sbit in4=P1^3;
sbit in5=P1^4;
sbit in6=P1^5;
sbit in7=P1^6;
sbit in8=P1^7;
int num1, num2=0;
#define Left_moto_go {in1=1,in2=0,in3=1,in4=0;} //左边两个电机向前走
#define Left_moto_back {in1=0,in2=1,in3=0,in4=1;} //左边两个电机向后转
#define Left_moto_stop {in1=0,in2=0,in3=0,in4=0;} //左边两个电机停转  
#define Right_moto_go {in5=1,in6=0,in7=1,in8=0;}//右边两个电机向前走
#define Right_moto_back {in5=0,in6=1,in7=0,in8=1;}//右边两个电机向前走
#define Right_moto_stop {in5=0,in6=0,in7=0,in8=0;}//右边两个电机停转  

   
/************************************************************************/
//延时函数
  void delay(unsigned int k)
{  
  unsigned int x,y;
for(x=0;x<k;x++) 
for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前进
  void run(void)
{
   
Left_moto_go ; //左电机往前走
Right_moto_go ; //右电机往前走
}

//前速后退
  void backrun(void)
{
   
Left_moto_back ; //左电机往前走
Right_moto_back ; //右电机往前走
}

//左转
  void leftrun(void)
{
   
Left_moto_back ; //左电机往前走
Right_moto_go ; //右电机往前走
}

//右转
  void rightrun(void)
{
   
Left_moto_go ; //左电机往前走
Right_moto_back ; //右电机往前走
}
void stoprun()
{
Left_moto_stop;
Right_moto_stop
}
void route()
{
if(num2==0)run();
if(num2==1)leftrun();
if(num2==2)rightrun();
if(num2=3){stoprun();num2=0;}
}
void init()
{
//stoprun();
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/*********************************************************************/ 
/*--主函数--*/
void main(void)
{



init();  
 while(1)/*无限循环*/

 
route();
 
}
}
void time1() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num1++;
if(num1==100)
{
num1=0;
num2++;
}
}
各位大侠,帮忙看看为什么会这样,我测量电机两端电压几乎为零

[解决办法]
不报错 说明没有语法问题
不动 说明算法问题或者驱动电路问题
这是俩概念 懂不
[解决办法]
原因一时看不出
不过一种强烈修改别人程序的山寨本能还是冒出来了
void route()
{
 if(num2==0) run();
 if(num2==1) leftrun();
 if(num2==2) rightrun();
 if(num2=3) {stoprun();num2=0;} 
}

void route()
{
 if(num2<1) run();
 else if(num2<2) leftrun();
 else if(num2<3) rightrun();
 else if(num2<4) {stoprun();num2=0;} 
}

检查下那几个控制线是不是需要上拉,
如果有条件的话单步仿真,看51的控制口和驱动芯片的输出是不是一致
[解决办法]
moto(1,2,-50,-50);
moto(3,4,50,50);

调试一下这两句

热点排行