SingleYork 发表于 2025-4-17 14:28:05

【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-步进电机转动指定圈数】”,感谢大家的支持!

本章附件:






国芯人工智能 发表于 2025-4-17 14:38:00

在工业自动化控制中,步进电机的加减速控制是一个关键的技术环节。本文将从专业角度详细解析步进电机加减速控制的原理、实现方法以及注意事项,帮助读者更好地理解和应用这一技术。

一、步进电机加减速控制的必要性

步进电机作为一种开环控制的电机,其转速和位置控制依赖于脉冲信号的频率和数量。然而,步进电机在启动和停止时,如果直接以最高频率或最低频率运行,往往会出现启动困难、堵转、抖动等问题。这是因为步进电机的转子在高速旋转时具有较大的惯性,突然的加速或减速会导致转子无法及时响应,从而产生上述问题。

因此,步进电机的加减速控制显得尤为重要。通过合理的加减速曲线设计,可以确保电机在启动时平稳加速,在停止时平稳减速,从而避免上述问题的发生。

二、步进电机加减速控制的原理

步进电机的加减速控制主要依赖于脉冲信号的频率变化。具体来说,加减速控制可以分为以下几个阶段:

1. 启动阶段:在电机启动时,初始脉冲频率应接近电机的启动频率。启动频率是指电机能够正常启动的最低频率。如果初始频率过低,电机可能无法启动;如果初始频率过高,电机可能会直接堵转。因此,选择合适的启动频率是确保电机正常启动的关键。

2. 加速阶段:在电机启动后,逐步增加脉冲信号的频率,使电机转速逐渐提高。加速过程应遵循一定的加速度曲线,以确保电机转速的平稳提升。常见的加速度曲线包括梯形曲线、S形曲线等。

3. 匀速阶段:当电机达到目标转速后,保持脉冲信号的频率不变,使电机以恒定速度运行。

4. 减速阶段:在电机需要停止时,逐步降低脉冲信号的频率,使电机转速逐渐降低。减速过程同样应遵循一定的减速度曲线,以确保电机转速的平稳下降。

5. 停止阶段:当电机转速降低到接近零时,停止脉冲信号的输出,使电机完全停止。

三、步进电机加减速控制的实现方法

在实际应用中,步进电机的加减速控制可以通过以下几种方法实现:

1. 硬件控制:通过专用的步进电机驱动器或控制器,实现加减速控制。这些硬件设备通常内置了加减速算法,用户只需设置相关参数即可实现加减速控制。

2. 软件控制:通过编写程序,控制脉冲信号的频率变化,实现加减速控制。这种方法需要用户具备一定的编程能力,但可以实现更灵活的加减速曲线设计。

3. 混合控制:结合硬件和软件控制,实现更复杂的加减速控制。例如,使用硬件设备实现基本的加减速控制,同时通过软件调整加减速曲线的参数,以适应不同的应用场景。

四、步进电机加减速控制的注意事项

在进行步进电机加减速控制时,需要注意以下几点:

1. 选择合适的加减速曲线:不同的应用场景需要不同的加减速曲线。例如,对于需要快速响应的应用,可以选择较陡的加减速曲线;对于需要平稳运行的应用,可以选择较缓的加减速曲线。

2. 合理设置加减速参数:加减速参数包括加速度、减速度、启动频率、目标频率等。这些参数的设置应根据电机的特性和应用需求进行合理调整,以确保电机能够平稳运行。

3. 考虑负载特性:步进电机的加减速控制还需要考虑负载的特性。例如,对于惯性较大的负载,需要设置较大的加速度和减速度,以确保电机能够及时响应。

4. 避免过载运行:在加减速过程中,应避免电机过载运行。过载运行会导致电机发热、堵转等问题,影响电机的使用寿命。

五、总结

步进电机的加减速控制是工业自动化控制中的重要技术环节。通过合理的加减速曲线设计和参数设置,可以确保电机在启动和停止时平稳运行,避免启动困难、堵转、抖动等问题。在实际应用中,用户可以根据具体需求选择合适的加减速控制方法,并注意相关注意事项,以实现最佳的电机控制效果。

希望本文能够帮助读者更好地理解和应用步进电机加减速控制技术,为工业自动化控制提供有力支持。

[本文内容由国芯人工智能辅助生成,仅供参考]

国芯人工智能 发表于 2025-4-17 14:38:00

0时,才能完全停止输出脉冲信号。这种加减速控制方式,通常被称为“梯形加减速”或“线性加减速”,是步进电机控制中最基础且常用的方法之一。

步进电机加减速控制的原理

步进电机的运动是通过接收脉冲信号来实现的,每个脉冲信号对应电机的一个步进角度。电机的转速与脉冲信号的频率成正比,频率越高,转速越快。然而,步进电机的启动和停止过程需要遵循一定的物理规律,否则会导致电机失步、堵转或抖动等问题。

1. 启动频率与启动过程
步进电机有一个“启动频率”,即电机能够正常启动的最低脉冲频率。如果初始频率远低于启动频率,电机可能无法启动;如果初始频率远高于启动频率,电机可能会失步或堵转。因此,在启动时,脉冲频率应从接近启动频率的值开始,然后逐步增加,直到达到目标转速。

2. 加速过程
在电机启动后,脉冲频率需要逐步增加,以实现电机的加速。加速过程通常采用线性增加的方式,即脉冲频率随时间均匀增加。这种加速方式可以避免电机因突然加速而失步或堵转。

3. 减速过程
当电机需要停止时,脉冲频率不能立即降为零,而是需要逐步降低,直到频率接近零时再停止输出脉冲。减速过程与加速过程类似,通常采用线性降低的方式。这样可以避免电机因突然停止而产生抖动或失步。

梯形加减速曲线的实现

梯形加减速曲线是步进电机控制中最常用的加减速方式,其特点是加速和减速过程均为线性变化,速度曲线呈梯形形状。具体实现步骤如下:

1. 初始化参数
   设置电机的启动频率、目标频率、加速时间、减速时间等参数。

2. 启动阶段
   从启动频率开始输出脉冲信号,确保电机能够正常启动。

3. 加速阶段
   逐步增加脉冲频率,直到达到目标频率。频率的增加量可以根据加速时间和目标频率计算得出。

4. 匀速阶段
   在达到目标频率后,保持脉冲频率不变,使电机以恒定速度运行。

5. 减速阶段
   逐步降低脉冲频率,直到频率接近零。频率的减少量可以根据减速时间和目标频率计算得出。

6. 停止阶段
   当脉冲频率接近零时,停止输出脉冲信号,电机完全停止。

加减速控制的优化

虽然梯形加减速曲线简单易实现,但在某些应用场景中,可能需要更复杂的加减速控制方式,以提高电机的运动性能。以下是一些常见的优化方法:

1. S形加减速曲线
   S形加减速曲线在加速和减速过程中,速度的变化率不是恒定的,而是逐渐增加或减少。这种曲线可以进一步减少电机的抖动和冲击,适用于对运动平稳性要求较高的场景。

2. 分段加减速
   分段加减速将加速和减速过程分为多个阶段,每个阶段采用不同的加速度。这种方式可以根据电机的负载和运动需求,灵活调整加减速过程。

3. 自适应加减速
   自适应加减速根据电机的实时状态(如负载、温度等)动态调整加减速参数。这种方式可以提高电机的运动效率和可靠性,适用于复杂多变的工业环境。

总结

步进电机的加减速控制是工业自动化中的重要技术,合理的加减速控制可以提高电机的运动性能,避免失步、堵转和抖动等问题。梯形加减速曲线是最基础且常用的控制方式,但在实际应用中,可以根据需求采用更复杂的加减速曲线或优化方法,以满足不同的运动需求。

希望本文对大家理解步进电机加减速控制有所帮助。如果有任何问题或建议,欢迎在评论区留言讨论。感谢大家的阅读,我们下期再见!

——『芯知识学堂』SingleYork

[本文内容由国芯人工智能辅助生成,仅供参考]
页: [1]
查看完整版本: 【15系列】SYK-0806-A2S1 工业自动化控制之【10-步进电机加减速】