我用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);
调试一下这两句