步进电机频率缓入曲线

时间:2016-06-01 23:40:46

标签: python logarithm easing sin motordriver

我正在编写一些软件来控制五相步进电机。步进电机的速度由我发送到电机控制器的脉冲频率控制。我目前面临的挑战是,我想要放松和放松动作。我实际上复制了一些我没有源代码的旧软件的行为。我理解了缓和的逻辑,它表现得如此:

  1. 当结束/持续速度慢时,缓入更慢/需要更长时间
  2. 当结束/持续速度快时,缓入更快/更短
  3. 例如......当持续速度为693 Hz时,缓入为766毫秒。我使用Saleae逻辑分析仪对这个轻松曲线进行了采样。这是曲线:

    enter image description here

    起始频率为97.77 Hz。 Here is a link to the actual data。所以我试图找出如何在代码中实现适当的逻辑/公式。下面的代码将吐出相对接近我需要的增量的Hz增量,但我无法弄清楚的是如何让它重复/保持相同的current_freq越来越长持续时间 - 这实质上是创建您在图表中看到的曲线。我的乘数创建增量也是关闭的,但它相对接近......

    **编辑 - 我认为下面的理论工作就是增加一个增加时间的维度以保持加速current_freq,但我的实现有问题...它只是做每个频率一次

    current_freq = 97.
    end_freq = 1134
    
    t = 4 
    # number of times to send the current freqency
    
    print current_freq
    
    while current_freq < end_freq:
        i = 1
        t = t+t * .1673
        print i
        while i <= t:
            print current_freq
            i = i+1
            break
        current_freq = current_freq + current_freq * .1673
    

    有什么想法吗?这是对数吗?罪还是cos?如果它没有明显的明显,我在数学上很可怕。

1 个答案:

答案 0 :(得分:0)

如果您尝试多次打印新频率,只需删除break行。

此代码生成后面的输出。

current_freq = 97.
end_freq = 1134

# number of times to send the current freqency
t = 4

while current_freq < end_freq:
    i = 1
    t = t + t * .1673
    print("t=%10f" % (t))
    while i <= t:
        print("i=", i, end=' ')
        print("  freq %.2f" % current_freq)
        i = i + 1
        #break
    current_freq = current_freq + current_freq * .1673

输出(截断)

t=  4.669200
i= 1   freq 97.00
i= 2   freq 97.00
i= 3   freq 97.00
i= 4   freq 97.00
t=  5.450357
i= 1   freq 113.23
i= 2   freq 113.23
i= 3   freq 113.23
i= 4   freq 113.23
i= 5   freq 113.23
t=  6.362202
i= 1   freq 132.17
i= 2   freq 132.17
i= 3   freq 132.17
i= 4   freq 132.17
i= 5   freq 132.17
i= 6   freq 132.17
t=  7.426598
i= 1   freq 154.28
i= 2   freq 154.28
i= 3   freq 154.28
i= 4   freq 154.28
i= 5   freq 154.28
i= 6   freq 154.28
i= 7   freq 154.28
t=  8.669068
i= 1   freq 180.10
i= 2   freq 180.10
i= 3   freq 180.10
i= 4   freq 180.10
i= 5   freq 180.10
i= 6   freq 180.10
i= 7   freq 180.10
i= 8   freq 180.10
t= 10.119403
i= 1   freq 210.22
i= 2   freq 210.22
i= 3   freq 210.22
i= 4   freq 210.22
i= 5   freq 210.22
i= 6   freq 210.22
i= 7   freq 210.22
i= 8   freq 210.22
i= 9   freq 210.22
i= 10   freq 210.22
t= 11.812379
i= 1   freq 245.40
i= 2   freq 245.40
i= 3   freq 245.40
i= 4   freq 245.40
i= 5   freq 245.40
i= 6   freq 245.40
i= 7   freq 245.40
i= 8   freq 245.40
i= 9   freq 245.40
i= 10   freq 245.40
i= 11   freq 245.40
.
.
.