L298n驱动模块驱动两相步进电机求助
驱动模块如图。用的是AT89c51控制:程序如下:#include<reg52.h>#defineuintunsignedint#defineucharunsignedc...
驱动模块如图。
用的是AT89c51控制:
程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar counter=0;
uchar table[]={0x01,0x04,0x02,0x08};
sbit enA=P0^0;
sbit in1=P3^0;
sbit in2=P3^1;
sbit in3=P3^2;
sbit in4=P3^3;
sbit enB=P0^5;
void T0_init(); //定时器初始化
void delay(uchar);
void main()
{
enA=1; //使能
enB=1;
T0_init();
while(1)
{};
}
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void T0_init()
{
TMOD=0x01; //定时器0工作于16位计时器模式
TH0=(65535-20000)/256; //赋初值
TL0=(65535-20000)%256;
for(i=0;i<4;i++)
{ P3=table[i];
delay(17);
}
EA=1; //开总中断
ET0=1; //允许定时器0中断
TR0=1; //启动定时器
}
void clock_signal() interrupt 1 //单拍运行,耗电少,精度好,但力矩小,为整步运行
{
counter++;
if(1==counter)
{in1=1;in3=0;in2=0;in4=0;}
else if(2==counter)
{in1=0;in3=1;in2=0;in4=0;}
else if(3==counter)
{in1=0;in3=0;in2=1;in4=0;}
else if(4==counter)
{in1=0;in3=0;in2=0;in4=1;}
else
{counter=0;}
TH0=(65535-3000)/256;
TL0=(65535-3000)%256;
}
/*void clock_signal() interrupt 1 //双拍运行,耗电大,转矩大,为整步运行
{
counter++;
if(1==counter)
{in1=1;in3=1;in2=0;in4=0;}
else if(2==counter)
{in1=0;in3=1;in2=1;in4=0;}
else if(3==counter)
{in1=0;in3=0;in2=1;in4=1;}
else if(4==counter)
{in1=1;in3=0;in2=0;in4=1;}
else
{counter=0;}
TH0=(65535-30000)/256;
TL0=(65535-30000)%256;
}*/连接顺序为out1.2为一组(A,~A),out3,4为一组(B,~B)。
问题是电机转起来一碰就停。。 展开
用的是AT89c51控制:
程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar counter=0;
uchar table[]={0x01,0x04,0x02,0x08};
sbit enA=P0^0;
sbit in1=P3^0;
sbit in2=P3^1;
sbit in3=P3^2;
sbit in4=P3^3;
sbit enB=P0^5;
void T0_init(); //定时器初始化
void delay(uchar);
void main()
{
enA=1; //使能
enB=1;
T0_init();
while(1)
{};
}
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void T0_init()
{
TMOD=0x01; //定时器0工作于16位计时器模式
TH0=(65535-20000)/256; //赋初值
TL0=(65535-20000)%256;
for(i=0;i<4;i++)
{ P3=table[i];
delay(17);
}
EA=1; //开总中断
ET0=1; //允许定时器0中断
TR0=1; //启动定时器
}
void clock_signal() interrupt 1 //单拍运行,耗电少,精度好,但力矩小,为整步运行
{
counter++;
if(1==counter)
{in1=1;in3=0;in2=0;in4=0;}
else if(2==counter)
{in1=0;in3=1;in2=0;in4=0;}
else if(3==counter)
{in1=0;in3=0;in2=1;in4=0;}
else if(4==counter)
{in1=0;in3=0;in2=0;in4=1;}
else
{counter=0;}
TH0=(65535-3000)/256;
TL0=(65535-3000)%256;
}
/*void clock_signal() interrupt 1 //双拍运行,耗电大,转矩大,为整步运行
{
counter++;
if(1==counter)
{in1=1;in3=1;in2=0;in4=0;}
else if(2==counter)
{in1=0;in3=1;in2=1;in4=0;}
else if(3==counter)
{in1=0;in3=0;in2=1;in4=1;}
else if(4==counter)
{in1=1;in3=0;in2=0;in4=1;}
else
{counter=0;}
TH0=(65535-30000)/256;
TL0=(65535-30000)%256;
}*/连接顺序为out1.2为一组(A,~A),out3,4为一组(B,~B)。
问题是电机转起来一碰就停。。 展开
若以下回答无法解决问题,邀请你更新回答
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询