ИЩУ РЕШЕНИЕ Логика работы автономного контроллера?

MAB72

МЕСТНЫЙ
ПРОВЕРЕННЫЙ
Регистрация
13.01.2025
Сообщения
40
Реакции
14
Баллы
8
Город
Khabarovsk
Имя
Anton
Подскажите пожалуста, где почитать про отправку команд из контроллера на драйверы. Задумал соорудить свой контроллер (на stm32g4 or stm32h7 пока не решил). В cad/cam нарисовал чаво хочу и получил g-code. Теперь возник вопрос, как перевести этот g-cod в движение по осям. Для начала самое простое типа прямолинейное движение без ускорений и разгонов. Заранее спасибо.
 
Нет никаких проблем повесить все это на один МК. Буфер, о котором Вы говорите, это буфер инструкций таймеров (по другому, буфер импульсов). Буфер имеет следующую структуру.

Ноль - если не требуется изменение периода таймера (движение с постоянной скоростью).
Или новый период таймера (движение с ускорением/замедлением).

Когда таймеры не генерирует импульсы, планировщик предрасчитывает движения и складывает результаты расчетов в буфер, очищая буфер от уже выполненных инструкций. При этом также делается контроль состояния буфера: если буфер близок к заполнению - расчеты ставятся на паузу до тех пор, пока в буфере не появится свободное место.

Такой алгоритм генерации импульсов ЩД не требует большого буфера. Из-за того, что он своевременно заполняется/очищается. А своевременное заполнение происходит из-за того, что расчеты производятся намного быстрее, чем движения осей.
Прочитал, не дошло. Ушел думать, переваривать.
 
vvv1234 написал(а):
Нет никаких проблем повесить все это на один МК. Буфер, о котором Вы говорите, это буфер инструкций таймеров (по другому, буфер импульсов). Буфер имеет следующую структуру.

Ноль - если не требуется изменение периода таймера (движение с постоянной скоростью).
Или новый период таймера (движение с ускорением/замедлением).

Когда таймеры не генерирует импульсы, планировщик предрасчитывает движения и складывает результаты расчетов в буфер, очищая буфер от уже выполненных инструкций. При этом также делается контроль состояния буфера: если буфер близок к заполнению - расчеты ставятся на паузу до тех пор, пока в буфере не появится свободное место.

Такой алгоритм генерации импульсов ЩД не требует большого буфера. Из-за того, что он своевременно заполняется/очищается. А своевременное заполнение происходит из-за того, что расчеты производятся намного быстрее, чем движения осей.
Я наверно неправильно сформулировал вопрос. До буфера еще добраться надо. Вот считываю с накопителя строчку g-code. К примеру "G91 G0 X170 Y15". Разгон/торможение пофиг(пока не учитываю). По X надо ехать много, по Y мало. Точные расчеты в сторону, чисто для примера. По X надо 270000 импульсов с частотой 100kHz и по Y 24000 импульсов соответственно частота примерно 9kHz. Вот с этого момента кудой чаво? Каким способом это превратить в step/dir да на двух каналах?
 
До буфера еще добраться надо.
С него нужно начинать. Перво-наперво, формируем FIFO буфер. Наполняем его тестовыми значениями, сформированными из циклических паттернов процедурой-заглушкой, затем выводим буфер в порты. Смотрим, как крутятся моторы с разной скоростью. И только после этого начинаем думать о том, как и чем этот буфер наполнять. На этом этапе не нужны координаты, не нужны g-code. Не нужно так далеко забегать вперед.
 
Ну вот начинает доходить, значит схема следующая: в памяти формируем буфер и из него DMA(по запросу от таймера) выкидывает данные в GPIO->BSRR. Тогда в буфере надо хранить 32х битные значения и по мере его опустошения наполнять по новой или завести два буфера из одного читаем, второй наполняем, меняем местами итд.
А кто/что будет контролировать заполнение/опустошение? По прерываниям?
 
А кто/что будет контролировать заполнение/опустошение? По прерываниям?
Таймер генерирует импульс. Затем делает сдвиг буфера влево на одну позицию. Планировщик перед очередным вычислением делает проверку заполненности буфера. Если есть место - помещает в конце буфера очередную инструкцию. Если нет - приостанавливает расчеты до появления места в буфере.
 
32х битные значения

для движения по 4 осям, достаточно 4 пары бит, т.е. 1 байт. Для чего будут использоваться остальные 3 байта, т.е. 75% от занимаемого буфером места?
 
Сверху Снизу
Обнаружен блокировщик рекламы AdBlock

МЫ ДОГАДЫВАЕМСЯ, ЧТО РЕКЛАМА ВАС РАЗДРАЖАЕТ!

Конечно, Ваше программное обеспечение для блокировки рекламы отлично справляется с блокировкой рекламы на нашем сайте, но оно также блокирует полезные функции. Мы стараемся для Вас и не обязываем Вас донатить и скидывать денег на наши кошельки, чтобы пользоваться форумом, но реклама это единственное, что позволяет поддерживать проект и развивать его.

Спасибо за Ваше понимание!

Я отключил свой AdBlock    Нет, я не буду ничего отключать