如何实现简单的步进电机多段控制呢?

电子说

1.3w人已加入

描述

一、目标功能

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

二、计算过程

**2.1 **简化C与n函数关系

根据上一节内容,定时器初值与速度函数关系为

寄存器

硬件系统确定后,angle、Xtal、X均为定值,为降低计算量,将公式中可以提前计算好的地方直接计算出来

寄存器

根据硬件设置情况,step=1.8,Xtal=12000000,X=2,计算K值

寄存器

2.2计算步数(step_num)与角度(angle)函数关系

寄存器

三、程序代码

//定义步进电机转动段数及运动参数
#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;
 }
 }
}

四、总结

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分