Умножитель частоты шагов на STM32
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Продолжаю тесты с аппаратным выводом шагов на больших частотах. С помощью не очевидных ухищрений с DMA, удалось получить точный вывод нужного кол-ва шагов на частоте 3.2 МГц (ядро пашет на 72 МГц). Вся сложность в том, чтобы вовремя остановить генерацию. На частотах выше 3.2 МГц аппаратная часть всё-таки успевает сгенерировать лишнего. Например, вместо 10 шагов на выходе будет 11. И это, несмотря на то, что генератор останавливается аппаратно (DMA). Если останавливать программно, то уже после 500 КГц могут проскакивать лишние шаги.
Надо провести еще пару тестов и можно добавлять этот способ вывода в умножитель. Ну и чуть позже, буду использовать этот способ в новом проекте генератора шагов.
Надо провести еще пару тестов и можно добавлять этот способ вывода в умножитель. Ну и чуть позже, буду использовать этот способ в новом проекте генератора шагов.
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Предлагаю поменять стратегию умножения)
1.Нужно ввести понятие типа "накопление данных" допустим 1мс (сервоцикл и прочее).
2.Далее нужно считать сколько импульсов попало в этот промежуток.
3.Выдавать эти импульсы в след участок времени (условно +1мс). и параллельно считать новые импульсы.
1.Нужно ввести понятие типа "накопление данных" допустим 1мс (сервоцикл и прочее).
2.Далее нужно считать сколько импульсов попало в этот промежуток.
3.Выдавать эти импульсы в след участок времени (условно +1мс). и параллельно считать новые импульсы.
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Я не против, в одном из начальных вариантов такое даже было. Есть пара нюансов, которые делают этот способ не таким простым. Во-первых, обработка и вывод сигнала DIR. Во-вторых, обработка шагов, между которыми период больше, чем 1 мс. В-третьих, 1 мс это довольно большой линейный кусок, который сделает вывод ускорений на больших частотах не таким плавным. К примеру, 100 мкс вместо 1 мс дадут более плавный вывод.Bender писал(а):Предлагаю поменять стратегию умножения)
1.Нужно ввести понятие типа "накопление данных" допустим 1мс (сервоцикл и прочее).
2.Далее нужно считать сколько импульсов попало в этот промежуток.
3.Выдавать эти импульсы в след участок времени (условно +1мс). и параллельно считать новые импульсы.
Да и чтобы сделать вывод действительно плавным, нужно "копить данные" больше чем 1 мс. Например, наблюдать за входом 40-50 мс, периодически (раз в 100мкс) складывая в буфер частоту входных шагов. После наблюдения надо подравнять собранные частоты относительно друг друга, чтобы не было резких скачков. А затем можно подавать собранные шаги на выход, меняя частоту вывода раз в 100мкс. Но обработка сигнала DIR тут тоже подпортит картину.
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
1. Надо подумать. Есть несколько мыслей.MX_Master писал(а):Во-первых, обработка и вывод сигнала DIR. Во-вторых, обработка шагов, между которыми период больше, чем 1 мс. В-третьих, 1 мс это довольно большой линейный кусок, который сделает вывод ускорений на больших частотах не таким плавным. К примеру, 100 мкс вместо 1 мс дадут более плавный вывод.
2. Если попал один импульс то реакция на него должна быть выдана в след сервоцикл. Иначе у нас будет сильно инерционная система. (это равносильно увеличению сервоцикла)
3. На сильно высоких частотах в основном работают сервы, а у них PID всё сгладит.
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Меня посетила ещё одна мысль.... что если ...
ШД при малых перемещениях лучше работают с делением шага, а при больших на целом шаге. Что если в определённый момент включать умножитель шагов и делитель на контроллере. Тогда у нас сохраниться высокий момент на большой скорости и не будет жужжания на низких. Так сказать "Адаптивное деление шага".
ШД при малых перемещениях лучше работают с делением шага, а при больших на целом шаге. Что если в определённый момент включать умножитель шагов и делитель на контроллере. Тогда у нас сохраниться высокий момент на большой скорости и не будет жужжания на низких. Так сказать "Адаптивное деление шага".
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Ты только что изобрел морфингBender писал(а):Меня посетила ещё одна мысль.... что если ...
ШД при малых перемещениях лучше работают с делением шага, а при больших на целом шаге. Что если в определённый момент включать умножитель шагов и делитель на контроллере. Тогда у нас сохраниться высокий момент на большой скорости и не будет жужжания на низких. Так сказать "Адаптивное деление шага".
На самом деле, идея имеет смысл, но ее можно использовать только с драйверами, имеющими входы оперативного переключения дробления, да еще, чтобы при этом не терялась позиция.
Чудес не бывает. Бывают фокусы.
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель частоты шагов на STM32
А ты представь, что шаги на входе идут с периодом 50 мс. В реальности бывает и медленней. Как будет выглядеть умноженный вывод, если сервоцикл всего 1мс? Это ж будут отдельные кучки умноженных шагов, разнесённые друг от друга на 48-49 мс.Bender писал(а):2. Если попал один импульс то реакция на него должна быть выдана в след сервоцикл. Иначе у нас будет сильно инерционная система. (это равносильно увеличению сервоцикла)
Как только ты начнёшь проверять на новой идее все возможные случаи входных периодов, то сразу станет ясно, что реализация будет не из лёгких. Если не задумываться о мелочах, то можно и синхронизацию выходных шагов на основе входных придумать. И всякие фильтры, и замену кривых разгона/торможения, и много чего интересного.
Этим должен заниматься отдельный цифровой драйвер ШД. Также он должен бороться с резонансом и прочими нюансами управления ЩД. А контроллер с умножителем должны чётко и в срок выполнять свою задачу.Bender писал(а):Так сказать "Адаптивное деление шага".
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Да кучки, но! на минимальной частоте...MX_Master писал(а):Это ж будут отдельные кучки умноженных шагов, разнесённые друг от друга на 48-49 мс.
Всё равно нужен предел минимальной частоты который будет определяться сервоциклом.
А если 1имп/час то что тогда? в любом случаем от кучек не деться...
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель частоты шагов на STM32
умножитель, который будет выдавать такой рваный STEP сигнал, к сожалению, никому не пригодитсяBender писал(а):Да кучки, но! на минимальной частоте...MX_Master писал(а):Это ж будут отдельные кучки умноженных шагов, разнесённые друг от друга на 48-49 мс.
Всё равно нужен предел минимальной частоты который будет определяться сервоциклом.
А если 1имп/час то что тогда? в любом случаем от кучек не деться...
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Если не будет минимальной частоты шага, то у тебя при шаге 1 имп/час (x4) будет сформировано 4 импульса с периодом 15 мин?MX_Master писал(а): умножитель, который будет выдавать такой рваный STEP сигнал, к сожалению, никому не пригодится
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Так вот тоже у тебя будет рваный шаг:
MX_Master писал(а):Умножение происходит между двумя шагами. Но у меня есть максимальное время ожидания второго шага, на тот случай, если был только 1 шаг.
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Максимальное время ожидания второго шага = 65 мс в текущей версии в связи с текущим способом аппаратного вывода. И это плохо. Но 65 мс это, всё-таки, не 1 мс. В новом способе вывода (в процессе) можно выдавать шаги с частотой 1 Гц и ниже. Т.е. период может быть 1000мс и выше.
Я ж не против. Попробуй сделать так как советуешь, с сервоциклом в 1 мс. И stm'ка у тебя есть для тестов. Осциллограмму с анализатора обязательно выложи. Если люди посмотрят и решат, что так будет приемлемо, то твой способ имеет место быть. Я всеми руками и ногами за новые способы.
Я ж не против. Попробуй сделать так как советуешь, с сервоциклом в 1 мс. И stm'ка у тебя есть для тестов. Осциллограмму с анализатора обязательно выложи. Если люди посмотрят и решат, что так будет приемлемо, то твой способ имеет место быть. Я всеми руками и ногами за новые способы.
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
понятно, везде есть + и -.
интересно а, у stepmastera куда (на какой вход) приходят сигналы step и dir?
интересно а, у stepmastera куда (на какой вход) приходят сигналы step и dir?
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
пока ещё точно не знаю как лучше)))MX_Master писал(а):Я ж не против. Попробуй сделать так как советуешь, с сервоциклом в 1 мс. И stm'ка у тебя есть для тестов. Осциллограмму с анализатора обязательно выложи. Если люди посмотрят и решат, что так будет приемлемо, то твой способ имеет место быть. Я всеми руками и ногами за новые способы.
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Михаил, когда разрабатывал Степмастер, первоначально делал только фильтр, без умножения частоты. Идея ввести умножение появилась позже. Может и здесь есть смысл начать с фильтрации? То есть проектировать не абстрактный алгоритм умножения частоты, а учесть, что это частота будет управлять механическим, достаточно инерционным устройством, которое не может мгновенно изменить скорость.
Чудес не бывает. Бывают фокусы.
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Умножитель начинался с моих нулевых знаний по работе с МК (: Поэтому софт менялся согласно уровню знаний, а не тому "как будет лучше в итоге". Это теперь, когда я съел собаку по работе с переферией МК, можно сделать что-то получше. Для начала я хочу доделать мини библиотеку по аппаратной генерации шагов. Помимо генерации с постоянной частотой, я сделаю функции генерации с ускорениями - линейным, s-образным, u-образным, по формуле. После этого такое понятие как фильтр уже не понадобится. Мы будем наблюдать за входом некоторое время, и на основе наблюдений прикажем генератору сделать соответствующий вывод. А уж генератор позаботится о том, чтобы вывод был плавным и равномерным.Сергей Саныч писал(а):Михаил, когда разрабатывал Степмастер, первоначально делал только фильтр, без умножения частоты. Идея ввести умножение появилась позже. Может и здесь есть смысл начать с фильтрации? То есть проектировать не абстрактный алгоритм умножения частоты, а учесть, что это частота будет управлять механическим, достаточно инерционным устройством, которое не может мгновенно изменить скорость.
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Вроде кое что придумал...Bender писал(а): пока ещё точно не знаю как лучше)))
1. Все входные сигналы нужно загонять в таймера чтобы они считались аппаратно (как энкодерный вход AB (нужно поставить доп. логику)) и ничего не пропадало.
мы сразу учитываем направление.
2. Далее обрабатываем значение счётчика (я так сделал у себя в WLMotion / энкодерный вход) ч/з определённый промежуток времени.Для вычисления его
приращения.
Счётчик никогда не сбрасываем, чтобы непропадали шаги!!! (определяем наименьший путь приращения и берём его за истинный, надеюсь поняли)))
3. Вычислив преращения счётчика энкодера умножаем его (сдвигом). и пребавляем в наш счётчик рассогласования.
4. Обрабатываем наше рассогласование....
дальше пока непридумал)))
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель частоты шагов на STM32
А шо такое "рассогласование"?
- wldev
- Мастер
- Сообщения: 1643
- Зарегистрирован: 24 янв 2012, 16:04
- Репутация: 510
- Настоящее имя: Сергей Бочаров
- Откуда: Новосибирск
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Ах да....MX_Master писал(а):А шо такое "рассогласование"?
Это накопительный счётчик с которого мы будем списывать импульсы в процессе генерации.
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Умножитель частоты шагов на STM32
Осталось дело за малым - сделать тестовый образец прошивкиBender писал(а):Ах да....MX_Master писал(а):А шо такое "рассогласование"?
Это накопительный счётчик с которого мы будем списывать импульсы в процессе генерации.