【STM32篇】步进电机之S型曲线

文章详细阐述了步进电机使用S曲线算法进行加减速控制的原理和代码实现,包括S型加速、匀速和减速三个阶段。通过动态调整最大频率,以匹配预期时间和实际时间,减少误差。同时,提供了针对不同工作频率和范围的计算方法,确保电机平稳运行并提高使用寿命。

使用步进电机的S曲线算法的目的是为了使电机缓慢加速到目标转速或从高转速减速到0。防止电机在高转速时立即停止而对电机造成损伤,减少电机的使用寿命。

本文主要讲述S型算法的使用,对于具体的原理,可通过其他博主的文章学习。

图1.S算法加减速图

如图1所示,使用S算法的步进电机运转主要包含S型加速、匀速、S型减速3个阶段。

图中v表示电机转速,t为时间。

S型算法代码如下:

/*
*   period: 指向保存计时器周期值的数组
*   len: 数组长度
*   fre_max: 最大速度,频率值。
*   fre_min: 最小速度,频率值。
*   flexible:  灵活值。调整S曲线
*/
void CalculateSModelLine(uint16_t * period, uint32_t len, uint16_t fre_max, uint16_t fre_min, float flexible)
{
    int32_t i;
    float deno ;
    float melo ;
    float fre ;
    float Fdelt = fre_max-fre_min;
    if(len>MAX_ACC_PULSE) len=MAX_ACC_PULSE;
    for(i=0; i<len; i++){
        melo = flexible * (2.0*i/len-1) ;
        deno = 1.0 / (1 + expf(-melo)); 
        fre = Fdelt * deno + fre_min;
        period[i] = (uint16_t)(TIM_CLOCK/fre);//TIM_CLOCK为定时器频率
    }
}

该函数的速度(频率)为一个脉冲的频率。例如:定时器计数一次为1us,PWM波的脉宽为1000,即一个脉冲时间为1000us=0.001s,频率f=1/t=1000Hz;

根据该函数,我对S型算法的理解与图1有所不同。如下图

图2.步进电机S曲线脉冲图

这里我将X轴看作脉冲数,Y轴看作一个脉冲所需的时间(或频率)。

电机按指定频率运行

如图2所示,①为加速阶段,x越小即一个脉冲的时间越短,转动一个角度的速度越快。②为匀速阶段,速度达到最大值,③为减速阶段。①③对称。

直接使用void CalculateSModelLine(...)函数,可控制电机在一定角度上按S曲线运转,但不可直接控制电机在该角度上运行时间。

拿电机控制云台振动来说,1/16步进模式下,给电机1600个脉冲使云台向上10cm,再给电机1600个脉冲使它往下10cm,反复切换方向,减少脉冲时间,便可增大云台振动频率。

计算过程:

如图2.设电机运行范围为range,频率为frequency,即控制电机的脉冲数为range,总时间为1/frequency。求出最大速度。

设匀速运行阶段一个脉冲的定时器计数值为TIM_min,加速和减速阶段平均计数值为2TIM_min(当然觉得误差大也可改为(TIM_max+TIM_min)/2),不会影响后面的计算。设定S型曲线脉冲数为一定值NUM。

所以有:

(1/frequency)/(1/TIM_CLOCK) = (range -2* MUX)*TIM_min + 2*NUM * 2TIM_min;

TIM_min = TIM_CLOCK / (frequency * (range +2* NUM) );

TIM_min为计数值,1/frequency 为总时间,(1/frequency)/(1/TIM_CLOCK)为总计数值

TIM_min * 1/TIM_CLOCK便是一个脉冲周期,

倒数即为脉冲频率:TIM_CLOCK/TIM_min = frequency * (range +2* MUX);

所以匀速运行时的脉冲频率为frequency * (range +2* NUM)

代码如下:(运行范围小于2*NUM属于没有匀速阶段,只有加速和减速)

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值