
51单片机控制步进电机正反转、加减速
我本来想实现步进电机自由调速的,可现在的程序如果先加速就不能减速了,如果先减速就不能加速了并且减几下就变得很慢了(经测试上下限都是可以正常速度运转的)求各位路过的大侠指点...
我本来想实现步进电机自由调速的,可现在的程序如果先加速就不能减速了,如果先减速就不能加速了并且减几下就变得很慢了 (经测试上下限都是可以正常速度运转的) 求各位路过的大侠指点
#include<reg51.h>
sbit k1=P1^1; //启动
sbit k2=P1^0; //正反转
sbit k3=P1^2; //加速
sbit k4=P1^3; //减速
unsigned int x=50000;
unsigned char i=0;
unsigned char code table[6]={0x01,0x03,0x02,0x06,0x04,0x05};//单双六拍
void motor();
void main()
{
TMOD=0x01;
TH0=-x>>8; //
TL0=-x%256; //
TCON=0x10;
IE=0x82;
while(1);
}
void time_0 () interrupt 1
{
EA=0;TR0=0;
motor();
if(x<65000&&x>36000) //上下限
{if(!k3) x=x-2000; //加速
else if(!k4) x=x+2000;} //减速
TH0=-x>>8;TL0=-x%256;
TR0=1;EA=1;
}
void motor()
{
if(!k1)
{ if(!k2) //正反转
{i+=1;
if(i>5) i=0;}
else
{i-=1;
if(i>5) i=5;}
P2=table;
}
else P2=0;
} 展开
#include<reg51.h>
sbit k1=P1^1; //启动
sbit k2=P1^0; //正反转
sbit k3=P1^2; //加速
sbit k4=P1^3; //减速
unsigned int x=50000;
unsigned char i=0;
unsigned char code table[6]={0x01,0x03,0x02,0x06,0x04,0x05};//单双六拍
void motor();
void main()
{
TMOD=0x01;
TH0=-x>>8; //
TL0=-x%256; //
TCON=0x10;
IE=0x82;
while(1);
}
void time_0 () interrupt 1
{
EA=0;TR0=0;
motor();
if(x<65000&&x>36000) //上下限
{if(!k3) x=x-2000; //加速
else if(!k4) x=x+2000;} //减速
TH0=-x>>8;TL0=-x%256;
TR0=1;EA=1;
}
void motor()
{
if(!k1)
{ if(!k2) //正反转
{i+=1;
if(i>5) i=0;}
else
{i-=1;
if(i>5) i=5;}
P2=table;
}
else P2=0;
} 展开
若以下回答无法解决问题,邀请你更新回答
2个回答
展开全部
你是通过if语句判断管脚的电平高低的,如果是的话,你需要一个延时程序来消除管脚电平的抖动。
纠错的方法,是x影响转速吧?你观察一下那个x变量的值的变化,看看你的程序到底是如何操作的。
纠错的方法,是x影响转速吧?你观察一下那个x变量的值的变化,看看你的程序到底是如何操作的。
追问
延时后干脆加减速都没用了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不太懂 觉得是不是因为把电机放在中断服务程序里的原因呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询