步进电机加速控制

步进电机直接给很高的频率,电机容易堵转,这是因为高频率下启动,磁力的变化非常快,步进电机是靠磁力的步进移动,从而带动转子的角位移,但是转子有一定惯性,因此,步进电机转子在磁力的作用下还未移动,就被下一个反方向的磁力扯回来了,这就发生了堵转。但我们想让步进电机高速转,怎么办?

 

既然一步不能到位,那就多步,一点点加速。

 

代码如下:

 

 

#include

#define uint unsigned int
sbit motor = P1^0;//位定义电机脉冲信号端口
sbit block = P1^1;  //位定义接收光电开关遮挡信号的端口
sbit dir = P1^2;//位定义步进电机方向控制端口
sbit WE = P2^7;
sbit DU = P2^6;
sbit beep = P2^3;
uint i,pp,m;

void InitTimer0(void)
{
	TMOD=0x01;		 //模式设置,00000001,采用的是定时器0,工作与模式1(M1=0,M0=1)。
	TR0=1;			 //打开定时器
	TH0=0Xff;		 //定时器设置,每隔100微秒发起一次中断。
	TL0=0X48;		  // 0Xa4
	ET0=1;			 //开定时器0中断
	EA=1;			 //开总中断
}

void time0() interrupt 1	   //每隔100微秒发起一次中断
{	TH0=0Xff;
	TL0=0Xa4;				 //    TH0 = 0x0FF;	  TL0=0Xa4;
    
	pp++;
}

void main()
{

	InitTimer0();	  //定时器0初始化
	while(1)
	{
	WE = 1;	  //打开位选锁存器
	P0 = 0xfe;	 //选中第一位数码管1111 1110
	WE = 0;  //	  锁存位选数据
	m = 10000;
    i = m;    

	while(i--)
	{
	 	
		if(pp<1)	
	    	motor = 1;  
		else
	    	motor = 0;
		if(pp==9)
			pp=0;
	}
	i = m;	
	while(i--)
	{
	 	
		if(pp<1)	
	    	motor = 1;  
		else
	    	motor = 0;
		if(pp==8)
			pp=0;
	}	
	i = m;	
	while(i--)
	{
	 	
		if(pp<1)	//占空比0.2
	    	motor = 1;  
		else
	    	motor = 0;
		if(pp==7)
			pp=0;
	}
	i = m;	
	while(i--)
	{
	 	
		if(pp<1)	
	    	motor = 1;  
		else
	    	motor = 0;
		if(pp==6)
			pp=0;
	}	
	i = m;	
	while(i--)
	{
	 	
		if(pp<1)	//占空比0.2
	    	motor = 1;  
		else
	    	motor = 0;
		if(pp==5)
			pp=0;
	}		
	i = m;	
	while(i--)
	{
	 	
		if(pp<1)	
	    	motor = 1;  
		else
	    	motor = 0;
		if(pp==4)
			pp=0;
	}		
	i = m;	
	while(i--)
	{
	 	
		if(pp<1)	
	    	motor = 1;  
		else
	    	motor = 0;
		if(pp==3)
			pp=0;
	}
	while(1)
	{
	 	
		if(pp<1)	
	    	motor = 1;  
		else
	    	motor = 0;
		if(pp==3)
			pp=0;
	}		
  }

}			 			 

 

代码中,步进电机转速是慢慢升高的,最终在高速档位旋转。反之亦然,你也可以慢慢减速。

事实上这个思想非常的简单,不需要高深的知识,我们仅仅需要知道,量变引起质变,可以用缓慢的叠加得到我们想要的结果。

 

你可能感兴趣的:(单片机,嵌入式)