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)。
问题是电机转起来一碰就停。。
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
范兴茂king
2014-08-14 · TA获得超过139个赞
知道答主
回答量:19
采纳率:100%
帮助的人:8.5万
展开全部
51的驱动能力不行,建议外接74HC245芯片,或者加三极管。你懂的。具体的可以再问望采纳
追问
原来是芯片的问题?程序没错哇...
追答
看着是没啥问题,你可以试试51每个脚输出的电流不宜超过10mA这样的电流驱动L298n显得吃力。建议接245之后再接L298n。或者加三极管。最后万不得已可以把两块298BN串起来用(最好不要这样搞)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式