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

MAB72

МЕСТНЫЙ
ПРОВЕРЕННЫЙ
Регистрация
13.01.2025
Сообщения
41
Реакции
14
Баллы
18
Город
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% от занимаемого буфером места?
 
для движения по 4 осям, достаточно 4 пары бит, т.е. 1 байт. Для чего будут использоваться остальные 3 байта, т.е. 75% от занимаемого буфером места?
регистр в который DMA будет запихивать данные 32х битный, причем старшие 16 сбрасывают соответствующий пин в 0, а младшие устанавливают соответствующий пин в 1.
 
Сверху Снизу
Обнаружен блокировщик рекламы AdBlock

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

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

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

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