6、实现多段运动【51单片机控制步进电机-TB6600系列】

摘要:本节介绍用控制步进电机三个主要参数角度、速度、方向,实现简单的步进电机多段控制

一、目标功能
输入多个目标角度,以及每个角度对应的速度,实现步进电机的多段多速度转动

二、计算过程
2.1 简化C与n函数关系
根据上一节内容,定时器初值与速度函数关系为:
在这里插入图片描述
硬件系统确定后,angle、Xtal、X均为定值,为降低计算量,将公式中可以提前计算好的地方直接计算出来
6、实现多段运动【51单片机控制步进电机-TB6600系列】_第1张图片
根据硬件设置情况,step=1.8,Xtal=12000000,X=2,计算K值
6、实现多段运动【51单片机控制步进电机-TB6600系列】_第2张图片
2.2 计算步数(step_num)与角度(angle)函数关系
6、实现多段运动【51单片机控制步进电机-TB6600系列】_第3张图片
三、程序代码

//定义步进电机转动段数及运动参数
#define para 5 
unsigned int angle[5]={90,360,720,180,0};  //电机目标转角
unsigned int v[5]={20,60,120,60,20}; //电机速度

void main()
{	
//计算step_num与c
	step_num=10*angle[0]/9;
	c=65536-150000/v[0];//计算V[0]对应的定时器初值
		
	while(1)
	{
		
	}
}

//定时器0中断程序
void time0_int() interrupt 1
{
	TH0=c/256;//重装定时寄存器初值
	TL0=c%256;
	
	//低电平切换到高电平,产生一个脉冲
	PUL=1;
	_nop_();_nop_();nop_();nop_();
	PUL=0;
	
	DIR==1?n++:n--;//根据方向,判断步数加或减
	
	if(n==step_num)//当前阶段完成判断
	{
		i++;
		if(i==para)//整个运动阶段走完
		{
			TR0=0;//电机停止
		}
		else   //计算下一阶段参数
		{
			//刷新步数与速度值
			step_num=10*angle[i]/9;
			c=65536-150000/v[i];
			
			//判断方向
			if(angle[i]>angle[i-1])
				DIR=1;
			else 
				DIR=0;
		}
	}
}

四、总结
此种方式利用定时器精确定时能力,从而控制电机转速,同时实现步进电机的多段运动,至此实现了步进电机三个主要参数角度、速度、方向的简单协同操作

五、附件
完整代码工程文件请见微信小程序:
6、实现多段运动【51单片机控制步进电机-TB6600系列】_第4张图片

你可能感兴趣的:(皮皮黄步进电机系列教程)