找回密码
 立即注册
查看: 77|回复: 2

【15系列】SYK-0806-A2S1 工业自动化控制之【10-步进电机加减速】

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2025-04-21 13:00:02

19

主题

9

回帖

215

积分

中级会员

积分
215
发表于 2025-4-17 14:28:05 | 显示全部楼层 |阅读模式
大家好,我是『芯知识学堂』的SingleYork,前一篇文章给大家介绍了“SYK-0806-A2S1 工业自动化控制之【09-步进电机正反转】”,

这一篇中,笔者要给大家介绍如何实现步进电机加减速控制。

很多新手在使用步进电机的时候可能会发现,本来额定转速600RPM的电机,可能只能转到100RPM,

速度一加快,就启动不了了,直接堵转!这是为什么呢?难道电机有问题?

明明参数上写的可以达到600转每分钟的啊?怎么速度就是上不去呢?

实际上,如果厂家没有虚标电机参数的话,那么标称600RPM的电机基本上都是可以达到这个速度的,

但是步进电机的速度是不能直接一下子跳到600RPM,就好比我们开车一样,你一脚油门下去,也不可能速度马上彪到120KM/H,

都是需要一个加速的过程。同样,步进电机停止的时候,也是需要一个减速的过程,

不然,当电机在高速运转的时候,突然停下,由于惯性作用,会出现严重的抖动,

尤其是在带负载比较大的情况下,抖动更为明显,就好比我们一脚急刹车,此时车辆本身由于巨大的惯性,还是会往前冲上一段距离才会停下来。

最简单的加减速应该就是类似下图这种梯形曲线了,如下图所示:

01.png

每一个电机都有一个启动频率,低于这个启动频率太多电机也不能启动,高于这个启动频率太多电机同样也不能启动,

所以只有在初始频率接近电机的启动频率时,电机才能正常启动!

在电机启动后,慢慢增加脉冲信号的输出频率,电机便会越来越快,当电机达到最高频率时,速度也就不能再升高了,再高又会堵转了!

当电机需要停止时,也是不能马上关闭输出的,原因已经说过了,同样也是需要一个减速过程,直到速度为零。

当然这个加减速的时间,就是需要好好考虑了,一般都是几百毫秒左右。

本例中,笔者通过timer0来控制电机脉冲的输出,timer2来对加减速时间进行控制。电机的动作逻辑如下:

X00由低电平变成高电平时,电机0以初始1kHz频率顺时针启动,加速时间450ms,然后匀速运行5秒,再减速450ms,最后停止 。

笔者所使用的电机驱动器的输入端硬件如下图所示:

02.png

根据上图,笔者为了接线简单直接采用了5V电平来控制(如果使用24V电平的话,此处需要在CLK-/DIR-两根线上各穿一个2K左右的电阻),

直接将COM端接到了5V,CLK-/DIR-分别接到了P30和P31上,程序中GPIO定义如下:

  1. #define M0_PUL       P30      //定义电机0脉冲对应的GPIO
  2. #define M0_DIR       P31      //定义电机0方向对应的GPIO
  3. #define M0_Start     X00      //定义电机0 启动 信号对应的GPIO
复制代码

另外,为了后续修改方便,还添加了一些跟电机相关的宏定义:

  1. #define M_Run_CW      0       //电机顺时针运行
  2. #define M_Run_CCW     1       //电机逆时针运行
  3. #define M0_Level_Low  0       //低电平
  4. #define M0_Level_High 1       //高电平
  5. #define M_State_IDEL  0       //电机状态 - 空闲(停止)
  6. #define M_State_Acc   1       //电机状态 - 加速(停止)
  7. #define M_State_Eve   2       //电机状态 - 匀速(停止)
  8. #define M_State_Dec   3       //电机状态 - 减速(停止)
  9. #define M_Min_Fre     1000UL   //电机运行最低频率
  10. #define M_Max_Fre     10000UL  //电机运行最高频率
复制代码

同时也将两个定时器的初始频率都设置在了1000Hz:

  1. u32 Timer0_Fre = 1000UL;    //timer0频率初值
  2. u32 Timer2_Fre = 500UL;     //timer2频率初值
复制代码

定义了一个变量用于timer2的计时:

  1. u32 Timer2_Cnt = 0;
复制代码


app_init()函数跟上一讲一样,不需要改动:


  1. void app_init(void)
  2. {
  3.         GPIO_Config();      //GPIO配置
  4.    
  5.     Timer0_config(Timer0_Fre);     //定时器0配置
  6.     Timer2_config(Timer2_Fre);     //定时器2配置
  7.    
  8.     TR0= 0;             //定时器0停止运行
  9.     EA = 1;                            //开启总中断
  10. }
复制代码

最大的改动就是在app_run()这个函数里面了,在这个函数里面用了一个switch语句,电机在四种状态下执行不同的动作:

  1. void app_run(void)
  2. {
  3.     static bit F_M0_Start  = 0;
  4.     static u8  M_State     = 0;//电机状态
  5.     static u32 RealTimeFre = 0;//电机实时频率,初始值设定为1000Hz
  6.    
  7.     /**************************************************
  8.    
  9.    X00由低电平变成高电平时,电机0以初始1kHz频率顺时针启动
  10.    
  11.      加速时间450ms,然后匀速运行5秒,再减速450ms,停止  
  12.    
  13.     **************************************************/
  14.    
  15.     switch(M_State)
  16.     {
  17.         case 0://电机状态:空闲/停止
  18.         {
  19.             if(!F_M0_Start)
  20.             {
  21.                 if(!M0_Start)          //X00低电平
  22.                 {
  23.                     delay_ms(10);      //10ms消抖
  24.                     if(!M0_Start)
  25.                     {
  26.                         F_M0_Start = 1;//X00低电平标志置“1”
  27.                     }
  28.                 }
  29.             }
  30.             else
  31.             {
  32.                 if(M0_Start)               //X00高电平
  33.                 {
  34.                     delay_ms(10);          //10ms消抖
  35.                     if(M0_Start)
  36.                     {
  37.                         F_M0_Start = 0;            //X00低电平标志清“0”
  38.                         TR0        = 1;            //定时器0开始运行
  39.                         Timer2_Cnt = 0;            //定时器2计时清零
  40.                         M0_DIR     = M_Run_CW;     //电机0运行方向:顺时针
  41.                         M_State    = M_State_Acc;  //电机状态切换为加速
  42.                         RealTimeFre= M_Min_Fre;    //将电机当前速度设置为最小速度
  43.                         M0_PUL     = M0_Level_High;//将电机脉冲电平保持为高电平
  44.                         M0_DIR     = M0_Level_High;//将电机方向电平保持为高电平
  45.                         Timer0_config(RealTimeFre);//定时器0配置
  46.                     }
  47.                 }
  48.             }
  49.             break;
  50.         }
  51.         case 1://电机状态:加速
  52.         {
  53.             if(RealTimeFre<M_Max_Fre)
  54.             {
  55.                 if(Timer2_Cnt>=10)
  56.                 {
  57.                     RealTimeFre += 200;//每10ms,电机运行频率加200Hz,从1000Hz加到最大值10000Hz,需要450ms
  58.                     Timer2_Cnt   = 0;
  59.                     
  60.                     Timer0_config(RealTimeFre);     //定时器0配置
  61.                 }
  62.             }
  63.             else
  64.             {
  65.                 RealTimeFre = M_Max_Fre;  //将电机当前速度设置为最大速度
  66.                 M_State     = M_State_Eve;//电机状态切换为匀速
  67.                
  68.                 Timer0_config(RealTimeFre);     //定时器0配置
  69.             }
  70.             break;
  71.         }
  72.         case 2://电机状态:匀速
  73.         {
  74.             if(Timer2_Cnt>=5000)//匀速运行5000ms,开始减速
  75.             {
  76.                 M_State     = M_State_Dec;//电机状态切换为减速
  77.                 Timer2_Cnt  = 0;
  78.             }
  79.             break;
  80.         }
  81.         case 3://电机状态:减速->停止
  82.         {
  83.             if(RealTimeFre>M_Min_Fre)
  84.             {
  85.                 if(Timer2_Cnt>=10)
  86.                 {
  87.                     RealTimeFre -= 200;//每10ms,电机运行频率减200Hz,从10000Hz减到最小值1000Hz,需要450ms
  88.                     Timer2_Cnt   = 0;
  89.                     
  90.                     Timer0_config(RealTimeFre);     //定时器0配置
  91.                 }
  92.             }
  93.             else
  94.             {
  95.                 M_State     = M_State_IDEL; //电机状态切换为空闲(停止)
  96.                 TR0         = 0;            //定时器0停止运行,电机停止
  97.                 M0_PUL      = M0_Level_High;//将电机脉冲电平保持为高电平
  98.                 M0_DIR      = M0_Level_High;//将电机方向电平保持为高电平
  99.             }
  100.             break;
  101.         }
  102.         default:break;
  103.     }   
  104. }
复制代码

最后就是timer0和timer2的中断函数了,其中timer0是用于产生电机脉冲,timer2用于加减速、匀速一些流程上的计时控制:

  1. /********************* Timer0中断函数************************/
  2. void timer0_int (void) interrupt TIMER0_VECTOR //频率可变
  3. {
  4.     M0_PUL = !M0_PUL;           //电机脉冲信号P30状态翻转
  5. }
  6. /********************* Timer2中断函数************************/
  7. void timer2_int (void) interrupt TIMER2_VECTOR //1ms
  8. {
  9.     Timer2_Cnt ++;
  10. }
复制代码

程序逻辑很简单,注释也比较全,相信大家都能看懂。当然咯,笔者这里只是讲了一种比较简单的加减速方法,

感兴趣的小伙伴们可以自行去深入学习一下S型曲线加减速算法或者其他的算法,效果肯定要比笔者这个好了。

好了,关于使用本节内容笔者就介绍到这里了,有疑问的小伙伴们可以给笔者留言或者直接参与评论,

下一节笔者将给大家介绍“如何让步进电机运行我们想要的圈数”,详见“SYK-0806-A2S1 工业自动化控制之【11-步进电机转动指定圈数】”,感谢大家的支持!

本章附件:

【STC15系列】SYK-0806-A2S1- 10-步进电机加减速.rar (68.49 KB, 下载次数: 7)




本帖被以下淘专辑推荐:

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-17 14:38:00 | 显示全部楼层
在工业自动化控制中,步进电机的加减速控制是一个关键的技术环节。本文将从专业角度详细解析步进电机加减速控制的原理、实现方法以及注意事项,帮助读者更好地理解和应用这一技术。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

五、总结

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

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

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-17 14:38:00 | 显示全部楼层
0时,才能完全停止输出脉冲信号。这种加减速控制方式,通常被称为“梯形加减速”或“线性加减速”,是步进电机控制中最基础且常用的方法之一。

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

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

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

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

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

梯形加减速曲线的实现

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

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

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

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

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

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

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

加减速控制的优化

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

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

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

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

总结

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

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

——『芯知识学堂』SingleYork

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:15 , Processed in 0.115849 second(s), 63 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表