Кривая изменения частоты шагового двигателя

Я пишу некоторое программное обеспечение для управления пятифазным шаговым двигателем. Скорость шагового двигателя регулируется частотой импульса, который я посылаю на контроллер двигателя. Моя нынешняя проблема заключается в том, что я хочу облегчить движения. На самом деле я копирую поведение некоторых старых программ, для которых у меня нет исходного кода. У меня есть понимание логики смягчения, и оно ведет себя так:

  1. когда окончание / устойчивая скорость медленная, ускорение медленнее / занимает больше времени
  2. когда окончание / устойчивая скорость высокая, ускорение быстрее / короче

Например… когда устойчивая скорость составляет 693 Гц, длительность замедления составляет 766 миллисекунд. Я измерил эту кривую легкости с помощью логического анализатора Saleae. Вот кривая:

введите здесь описание изображения

Начальная частота 97,77 Гц. Вот ссылка на актуальные данные. Поэтому я пытаюсь понять, как реализовать правильную логику/формулу для этого в коде. Следующий фрагмент кода будет выдавать приращения в Гц, которые относительно близки к приращениям, которые мне нужны, но я не могу понять, как заставить его повторять/удерживать одно и то же 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

Любые идеи? Это логарифм? Грех или потому? Если это не очевидно, я ужасно разбираюсь в математике.


person dongle    schedule 01.06.2016    source источник
comment
У вас или вашего коллеги есть доступ к Graphpad Prism? Это отлично подходит для интерполяции таких серий.   -  person MattDMo    schedule 02.06.2016
comment
Я не знаком с этим ... выглядит интересно   -  person dongle    schedule 02.06.2016
comment
В итоге вы скачали Prism и провели анализ? Я играю с этим сейчас, если вы доступны, просто отправьте мне сообщение в чате Python, и мы сможем обсудить данные.   -  person MattDMo    schedule 02.06.2016
comment
Я сделал, но я совершенно не понимаю, как его использовать :)   -  person dongle    schedule 02.06.2016


Ответы (1)


Если вы пытаетесь распечатать новую частоту несколько раз, просто удалите строку с 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
.
.
.
person TT--    schedule 30.11.2017