【15系列】SYK-0806-A2S1 工业自动化控制之【10-步进电机加减速】
大家好,我是『芯知识学堂』的SingleYork,前一篇文章给大家介绍了“SYK-0806-A2S1 工业自动化控制之【09-步进电机正反转】”,这一篇中,笔者要给大家介绍如何实现步进电机加减速控制。
很多新手在使用步进电机的时候可能会发现,本来额定转速600RPM的电机,可能只能转到100RPM,
速度一加快,就启动不了了,直接堵转!这是为什么呢?难道电机有问题?
明明参数上写的可以达到600转每分钟的啊?怎么速度就是上不去呢?
实际上,如果厂家没有虚标电机参数的话,那么标称600RPM的电机基本上都是可以达到这个速度的,
但是步进电机的速度是不能直接一下子跳到600RPM,就好比我们开车一样,你一脚油门下去,也不可能速度马上彪到120KM/H,
都是需要一个加速的过程。同样,步进电机停止的时候,也是需要一个减速的过程,
不然,当电机在高速运转的时候,突然停下,由于惯性作用,会出现严重的抖动,
尤其是在带负载比较大的情况下,抖动更为明显,就好比我们一脚急刹车,此时车辆本身由于巨大的惯性,还是会往前冲上一段距离才会停下来。
最简单的加减速应该就是类似下图这种梯形曲线了,如下图所示:
每一个电机都有一个启动频率,低于这个启动频率太多电机也不能启动,高于这个启动频率太多电机同样也不能启动,
所以只有在初始频率接近电机的启动频率时,电机才能正常启动!
在电机启动后,慢慢增加脉冲信号的输出频率,电机便会越来越快,当电机达到最高频率时,速度也就不能再升高了,再高又会堵转了!
当电机需要停止时,也是不能马上关闭输出的,原因已经说过了,同样也是需要一个减速过程,直到速度为零。
当然这个加减速的时间,就是需要好好考虑了,一般都是几百毫秒左右。
本例中,笔者通过timer0来控制电机脉冲的输出,timer2来对加减速时间进行控制。电机的动作逻辑如下:
X00由低电平变成高电平时,电机0以初始1kHz频率顺时针启动,加速时间450ms,然后匀速运行5秒,再减速450ms,最后停止 。
笔者所使用的电机驱动器的输入端硬件如下图所示:
根据上图,笔者为了接线简单直接采用了5V电平来控制(如果使用24V电平的话,此处需要在CLK-/DIR-两根线上各穿一个2K左右的电阻),
直接将COM端接到了5V,CLK-/DIR-分别接到了P30和P31上,程序中GPIO定义如下:
#define M0_PUL P30 //定义电机0脉冲对应的GPIO
#define M0_DIR P31 //定义电机0方向对应的GPIO
#define M0_Start X00 //定义电机0 启动 信号对应的GPIO
另外,为了后续修改方便,还添加了一些跟电机相关的宏定义:
#define M_Run_CW 0 //电机顺时针运行
#define M_Run_CCW 1 //电机逆时针运行
#define M0_Level_Low0 //低电平
#define M0_Level_High 1 //高电平
#define M_State_IDEL0 //电机状态 - 空闲(停止)
#define M_State_Acc 1 //电机状态 - 加速(停止)
#define M_State_Eve 2 //电机状态 - 匀速(停止)
#define M_State_Dec 3 //电机状态 - 减速(停止)
#define M_Min_Fre 1000UL //电机运行最低频率
#define M_Max_Fre 10000UL//电机运行最高频率
同时也将两个定时器的初始频率都设置在了1000Hz:
u32 Timer0_Fre = 1000UL; //timer0频率初值
u32 Timer2_Fre = 500UL; //timer2频率初值
定义了一个变量用于timer2的计时:
u32 Timer2_Cnt = 0;
app_init()函数跟上一讲一样,不需要改动:
void app_init(void)
{
GPIO_Config(); //GPIO配置
Timer0_config(Timer0_Fre); //定时器0配置
Timer2_config(Timer2_Fre); //定时器2配置
TR0= 0; //定时器0停止运行
EA = 1; //开启总中断
}
最大的改动就是在app_run()这个函数里面了,在这个函数里面用了一个switch语句,电机在四种状态下执行不同的动作:
void app_run(void)
{
static bit F_M0_Start= 0;
static u8M_State = 0;//电机状态
static u32 RealTimeFre = 0;//电机实时频率,初始值设定为1000Hz
/**************************************************
X00由低电平变成高电平时,电机0以初始1kHz频率顺时针启动
加速时间450ms,然后匀速运行5秒,再减速450ms,停止
**************************************************/
switch(M_State)
{
case 0://电机状态:空闲/停止
{
if(!F_M0_Start)
{
if(!M0_Start) //X00低电平
{
delay_ms(10); //10ms消抖
if(!M0_Start)
{
F_M0_Start = 1;//X00低电平标志置“1”
}
}
}
else
{
if(M0_Start) //X00高电平
{
delay_ms(10); //10ms消抖
if(M0_Start)
{
F_M0_Start = 0; //X00低电平标志清“0”
TR0 = 1; //定时器0开始运行
Timer2_Cnt = 0; //定时器2计时清零
M0_DIR = M_Run_CW; //电机0运行方向:顺时针
M_State = M_State_Acc;//电机状态切换为加速
RealTimeFre= M_Min_Fre; //将电机当前速度设置为最小速度
M0_PUL = M0_Level_High;//将电机脉冲电平保持为高电平
M0_DIR = M0_Level_High;//将电机方向电平保持为高电平
Timer0_config(RealTimeFre);//定时器0配置
}
}
}
break;
}
case 1://电机状态:加速
{
if(RealTimeFre<M_Max_Fre)
{
if(Timer2_Cnt>=10)
{
RealTimeFre += 200;//每10ms,电机运行频率加200Hz,从1000Hz加到最大值10000Hz,需要450ms
Timer2_Cnt = 0;
Timer0_config(RealTimeFre); //定时器0配置
}
}
else
{
RealTimeFre = M_Max_Fre;//将电机当前速度设置为最大速度
M_State = M_State_Eve;//电机状态切换为匀速
Timer0_config(RealTimeFre); //定时器0配置
}
break;
}
case 2://电机状态:匀速
{
if(Timer2_Cnt>=5000)//匀速运行5000ms,开始减速
{
M_State = M_State_Dec;//电机状态切换为减速
Timer2_Cnt= 0;
}
break;
}
case 3://电机状态:减速->停止
{
if(RealTimeFre>M_Min_Fre)
{
if(Timer2_Cnt>=10)
{
RealTimeFre -= 200;//每10ms,电机运行频率减200Hz,从10000Hz减到最小值1000Hz,需要450ms
Timer2_Cnt = 0;
Timer0_config(RealTimeFre); //定时器0配置
}
}
else
{
M_State = M_State_IDEL; //电机状态切换为空闲(停止)
TR0 = 0; //定时器0停止运行,电机停止
M0_PUL = M0_Level_High;//将电机脉冲电平保持为高电平
M0_DIR = M0_Level_High;//将电机方向电平保持为高电平
}
break;
}
default:break;
}
}
最后就是timer0和timer2的中断函数了,其中timer0是用于产生电机脉冲,timer2用于加减速、匀速一些流程上的计时控制:
/********************* Timer0中断函数************************/
void timer0_int (void) interrupt TIMER0_VECTOR //频率可变
{
M0_PUL = !M0_PUL; //电机脉冲信号P30状态翻转
}
/********************* Timer2中断函数************************/
void timer2_int (void) interrupt TIMER2_VECTOR //1ms
{
Timer2_Cnt ++;
}
程序逻辑很简单,注释也比较全,相信大家都能看懂。当然咯,笔者这里只是讲了一种比较简单的加减速方法,
感兴趣的小伙伴们可以自行去深入学习一下S型曲线加减速算法或者其他的算法,效果肯定要比笔者这个好了。
好了,关于使用本节内容笔者就介绍到这里了,有疑问的小伙伴们可以给笔者留言或者直接参与评论,
下一节笔者将给大家介绍“如何让步进电机运行我们想要的圈数”,详见“SYK-0806-A2S1 工业自动化控制之【11-步进电机转动指定圈数】”,感谢大家的支持!
本章附件:
在工业自动化控制中,步进电机的加减速控制是一个关键的技术环节。本文将从专业角度详细解析步进电机加减速控制的原理、实现方法以及注意事项,帮助读者更好地理解和应用这一技术。
一、步进电机加减速控制的必要性
步进电机作为一种开环控制的电机,其转速和位置控制依赖于脉冲信号的频率和数量。然而,步进电机在启动和停止时,如果直接以最高频率或最低频率运行,往往会出现启动困难、堵转、抖动等问题。这是因为步进电机的转子在高速旋转时具有较大的惯性,突然的加速或减速会导致转子无法及时响应,从而产生上述问题。
因此,步进电机的加减速控制显得尤为重要。通过合理的加减速曲线设计,可以确保电机在启动时平稳加速,在停止时平稳减速,从而避免上述问题的发生。
二、步进电机加减速控制的原理
步进电机的加减速控制主要依赖于脉冲信号的频率变化。具体来说,加减速控制可以分为以下几个阶段:
1. 启动阶段:在电机启动时,初始脉冲频率应接近电机的启动频率。启动频率是指电机能够正常启动的最低频率。如果初始频率过低,电机可能无法启动;如果初始频率过高,电机可能会直接堵转。因此,选择合适的启动频率是确保电机正常启动的关键。
2. 加速阶段:在电机启动后,逐步增加脉冲信号的频率,使电机转速逐渐提高。加速过程应遵循一定的加速度曲线,以确保电机转速的平稳提升。常见的加速度曲线包括梯形曲线、S形曲线等。
3. 匀速阶段:当电机达到目标转速后,保持脉冲信号的频率不变,使电机以恒定速度运行。
4. 减速阶段:在电机需要停止时,逐步降低脉冲信号的频率,使电机转速逐渐降低。减速过程同样应遵循一定的减速度曲线,以确保电机转速的平稳下降。
5. 停止阶段:当电机转速降低到接近零时,停止脉冲信号的输出,使电机完全停止。
三、步进电机加减速控制的实现方法
在实际应用中,步进电机的加减速控制可以通过以下几种方法实现:
1. 硬件控制:通过专用的步进电机驱动器或控制器,实现加减速控制。这些硬件设备通常内置了加减速算法,用户只需设置相关参数即可实现加减速控制。
2. 软件控制:通过编写程序,控制脉冲信号的频率变化,实现加减速控制。这种方法需要用户具备一定的编程能力,但可以实现更灵活的加减速曲线设计。
3. 混合控制:结合硬件和软件控制,实现更复杂的加减速控制。例如,使用硬件设备实现基本的加减速控制,同时通过软件调整加减速曲线的参数,以适应不同的应用场景。
四、步进电机加减速控制的注意事项
在进行步进电机加减速控制时,需要注意以下几点:
1. 选择合适的加减速曲线:不同的应用场景需要不同的加减速曲线。例如,对于需要快速响应的应用,可以选择较陡的加减速曲线;对于需要平稳运行的应用,可以选择较缓的加减速曲线。
2. 合理设置加减速参数:加减速参数包括加速度、减速度、启动频率、目标频率等。这些参数的设置应根据电机的特性和应用需求进行合理调整,以确保电机能够平稳运行。
3. 考虑负载特性:步进电机的加减速控制还需要考虑负载的特性。例如,对于惯性较大的负载,需要设置较大的加速度和减速度,以确保电机能够及时响应。
4. 避免过载运行:在加减速过程中,应避免电机过载运行。过载运行会导致电机发热、堵转等问题,影响电机的使用寿命。
五、总结
步进电机的加减速控制是工业自动化控制中的重要技术环节。通过合理的加减速曲线设计和参数设置,可以确保电机在启动和停止时平稳运行,避免启动困难、堵转、抖动等问题。在实际应用中,用户可以根据具体需求选择合适的加减速控制方法,并注意相关注意事项,以实现最佳的电机控制效果。
希望本文能够帮助读者更好地理解和应用步进电机加减速控制技术,为工业自动化控制提供有力支持。
[本文内容由国芯人工智能辅助生成,仅供参考] 0时,才能完全停止输出脉冲信号。这种加减速控制方式,通常被称为“梯形加减速”或“线性加减速”,是步进电机控制中最基础且常用的方法之一。
步进电机加减速控制的原理
步进电机的运动是通过接收脉冲信号来实现的,每个脉冲信号对应电机的一个步进角度。电机的转速与脉冲信号的频率成正比,频率越高,转速越快。然而,步进电机的启动和停止过程需要遵循一定的物理规律,否则会导致电机失步、堵转或抖动等问题。
1. 启动频率与启动过程
步进电机有一个“启动频率”,即电机能够正常启动的最低脉冲频率。如果初始频率远低于启动频率,电机可能无法启动;如果初始频率远高于启动频率,电机可能会失步或堵转。因此,在启动时,脉冲频率应从接近启动频率的值开始,然后逐步增加,直到达到目标转速。
2. 加速过程
在电机启动后,脉冲频率需要逐步增加,以实现电机的加速。加速过程通常采用线性增加的方式,即脉冲频率随时间均匀增加。这种加速方式可以避免电机因突然加速而失步或堵转。
3. 减速过程
当电机需要停止时,脉冲频率不能立即降为零,而是需要逐步降低,直到频率接近零时再停止输出脉冲。减速过程与加速过程类似,通常采用线性降低的方式。这样可以避免电机因突然停止而产生抖动或失步。
梯形加减速曲线的实现
梯形加减速曲线是步进电机控制中最常用的加减速方式,其特点是加速和减速过程均为线性变化,速度曲线呈梯形形状。具体实现步骤如下:
1. 初始化参数
设置电机的启动频率、目标频率、加速时间、减速时间等参数。
2. 启动阶段
从启动频率开始输出脉冲信号,确保电机能够正常启动。
3. 加速阶段
逐步增加脉冲频率,直到达到目标频率。频率的增加量可以根据加速时间和目标频率计算得出。
4. 匀速阶段
在达到目标频率后,保持脉冲频率不变,使电机以恒定速度运行。
5. 减速阶段
逐步降低脉冲频率,直到频率接近零。频率的减少量可以根据减速时间和目标频率计算得出。
6. 停止阶段
当脉冲频率接近零时,停止输出脉冲信号,电机完全停止。
加减速控制的优化
虽然梯形加减速曲线简单易实现,但在某些应用场景中,可能需要更复杂的加减速控制方式,以提高电机的运动性能。以下是一些常见的优化方法:
1. S形加减速曲线
S形加减速曲线在加速和减速过程中,速度的变化率不是恒定的,而是逐渐增加或减少。这种曲线可以进一步减少电机的抖动和冲击,适用于对运动平稳性要求较高的场景。
2. 分段加减速
分段加减速将加速和减速过程分为多个阶段,每个阶段采用不同的加速度。这种方式可以根据电机的负载和运动需求,灵活调整加减速过程。
3. 自适应加减速
自适应加减速根据电机的实时状态(如负载、温度等)动态调整加减速参数。这种方式可以提高电机的运动效率和可靠性,适用于复杂多变的工业环境。
总结
步进电机的加减速控制是工业自动化中的重要技术,合理的加减速控制可以提高电机的运动性能,避免失步、堵转和抖动等问题。梯形加减速曲线是最基础且常用的控制方式,但在实际应用中,可以根据需求采用更复杂的加减速曲线或优化方法,以满足不同的运动需求。
希望本文对大家理解步进电机加减速控制有所帮助。如果有任何问题或建议,欢迎在评论区留言讨论。感谢大家的阅读,我们下期再见!
——『芯知识学堂』SingleYork
[本文内容由国芯人工智能辅助生成,仅供参考]
页:
[1]