本帖最后由 wo4fisher 于 2015-11-2 16:11 编辑
在实际应用过程中,若步进电机在升降速过程中,脉冲频率的变化不合理,就会使电机失步或者过冲,使系统无法做到精确定位;同时,由于系统快速性的要求,电机需要很快地完成加减速过程。所以必须提供合理加减速运行曲线,在保持定位精度的前提下,提高系统的运行速度。因此有必要了解步进电机加减速的运行规律,对脉冲频率进行合理性研究,找出最佳脉冲输出方案,使步进电机在运行过程中能达到快速定位,运行步数准确。
步进电机加减速控制方法,主要包括以下三种方法:①直线型加减速速度曲线。此种升降速控制方法计算简单,节省资源,但加速、匀速和减速过程不能光滑过渡,这将影响电机的运行质量和机械系统的使用寿命,所以此种升降速控制方法主要适用于控制系统处理速度较慢,而且对升降速过程要求不高的场合;②指数型加减速曲线。此方法符合系统固有规律,升降速过程快速而平稳,适用于控制系统处理速度快且对升降速过程要求高的场合;③S型加减速曲线。其运动过程依次为加加速运动阶段,加速运动阶段,减加速运动阶段,匀速运动阶段,加减速运动阶段,减速运动阶段,减减速运动阶段。主要适用于对于加减速平稳性要求较高的场合。
每个频率下的最大输出力矩可以由电机矩频特性曲线得到,但是一般的矩频特性曲线是整体呈下降趋势的非线性曲线
TM=TM0-af
这种近似的关系要根据电机自身的矩频特性曲线和一定频率范围内曲线的特性来确定。TM0为电机的最大转矩,a为拟和直线的斜率。
步进电机只能够由数字信号控制运行的,当脉冲提供给驱动器时,在过于短的时间里,控制系统发出的脉冲数太多,也就是脉冲频率过高,将导致步进电机堵转。要解决这个问题,必须采用加减速的办法。就是说,在步进电机起步时,要给逐渐升高的脉冲频率,减速时的脉冲频率需要逐渐减低。这就是我们常说的“加减速”方法。 步进电机转速度,是根据输入的脉冲信号的变化来改变的。从理论上讲,给驱动器一个脉冲,步进电机就旋转一个步距角(细分时为一个细分步距角)。实际上,如果脉冲信号变化太快,步进电机由于内部的反向电动势的阻尼作用,转子与定子之间的磁反应将跟随不上电信号的变化,将导致堵转和丢步。
所以步进电机在高速启动时,需要采用脉冲频率升速的方法,在停止时也要有降速过程,以保证实现步进电机精密定位控制。加速和减速的原理是一样的。加速过程,是由基础频率(低于步进电机的直接起动最高频率)与跳变频率(逐渐加快的频率)组成加速曲线(降速过程反之)。跳变频率是指步进电机在基础频率上逐渐提高的频率,此频率不能太大,否则会产生堵转和丢步。
上边的表述均摘自网上,下边是42步进电机的测试视频。
直接满速启动,2ms方波驱动步进电机
直接满速启动,10ms方波驱动步进电机
采用加速启动测试视频
加速启动部分代码:
定时器初始化代码;
void MX_TIM6_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig;
htim6.Instance = TIM6;
htim6.Init.Prescaler = 25;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 1000;
HAL_TIM_Base_Init(&htim6);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig);
}
定时器时钟输入25MHZ,分频25,初始周期1ms
定时中断函数代码
void TIM6_DAC_IRQHandler(void)
{
count++;
switch (period_t/100) {
case 10:
case 9:
case 8:
if(count>=50){
count=0;
period_t-=10;}
break;
case 7:
case 6:
case 5:
if(count>=70){
count=0;
period_t-=10;}
break;
case 4:
case 3:
if(count>=80){
count=0;
period_t-=8;}
break;
case 2:
if(count>=100){
count=0;
period_t-=5;}
break;
case 1:
if(count>=150){
count=0;
period_t-=2;}
break;
case 0:
if(count>=200 && period_t>80 ){
count=0;
period_t-=1;}
break;
default :
count=0;
break;
}
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
htim6.Instance = TIM6;
htim6.Init.Period = period_t;
HAL_TIM_Base_Init(&htim6);
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_7);
/* USER CODE END TIM6_DAC_IRQn 0 */
HAL_TIM_IRQHandler(&htim6);
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
/* USER CODE END TIM6_DAC_IRQn 1 */
}
结论:可见通过阶段性加速,可以有效提高步进电机的转速,并且避免步进电机堵转现象。实际使用还要结合负载情况进行调整,本代码仅供验证
|