Что значит для step и dir "быть на своих собственных портах"?

На вики-странице совета директоров РЭМБо упоминается:

Контакты шага и направления находятся на их собственных портах для возможности синхронного перемещения

Что это значит и как это влияет на печать? Нужна ли мне специальная прошивка, чтобы воспользоваться этим преимуществом?

, 👍4


1 ответ


Лучший ответ:

4

"Порт" для микроконтроллера AVR представляет собой набор из восьми выводов ввода-вывода, которые управляются вместе на аппаратном уровне. Базовый машинный код может записать целый байт, чтобы установить статус всех 8 контактов одновременно. Таким образом, в принципе, все ступенчатые контакты на плате RAMBO могут быть активированы точно одновременно.

Arduino IDE скрывает это поведение от прошивок, абстрагируя обработку байтов порта как вызов функции для каждого отдельного вывода. Это означает, что программистам нужно знать только номер контакта Arduino, а не то, какой порт и позиция на процессоре используются. И затем современные прошивки, обычно используемые RAMBO, создают дополнительный уровень абстракции, чтобы упростить использование одной и той же прошивки на разных платах, путем изменения назначенных имен контактов в файле конфигурации (обычно pins.h) и не предполагая, что при проектировании платы был сделан какой-либо конкретный выбор порта.

Для прошивки с открытым исходным кодом нет гарантии, что конкретный выбор pin был сделан в аппаратном обеспечении. Многие платы контроллеров 3D-принтеров даже имеют довольно глупые назначения выводов, например, использование аппаратных выводов с поддержкой PWM для шаговых сигналов вместо нагревателей PWM. В этом отношении Marlin и Repetier предпочли гибкость оптимизации производительности. Они в значительной степени позволяют разработчику платы использовать любой контакт для чего угодно. Когда им нужно что-то сделать, например, запустить ШИМ-управление нагревателем или запустить набор ступенчатых импульсов как можно быстрее, они эмулируют это в программном обеспечении, а не используют преимущества специального оборудования, которое не всегда доступно.

В данном конкретном случае на самом деле может быть не так уж много прироста / потери производительности. Запись на выходной контакт происходит довольно быстро. Разница во времени между запуском нескольких ступенчатых импульсов синхронно или их последовательным запуском составляет порядка нескольких микросекунд. Это никак не повлияет на точность движения физических приводных механизмов принтера. Кто-то, кто участвовал в разработке RAMBO, просто подумал, что это может быть полезно, и поместил ссылку на него на вики-странице (в самой первой загрузке!), И с тех пор это никогда не прояснялось и не удалялось с вики-страницы.


,

Правильно, значит, поскольку Марлин записывает пин-коды последовательно, это вообще не имеет никакого значения? Или порты имеют, так сказать, ограниченную "частоту обновления", что, возможно, повышает вероятность одновременного появления записей в быстрой последовательности? Я думаю, что последнее слово о "нескольких миллисекундах" неточно, поскольку частота шагов, как правило, находится в диапазоне 10 кГц., @Tom van der Zanden

Ах да, я имел в виду микросекунды, а не миллисекунды. Я это исправлю., @Ryan Carlyle

Для того чтобы pin-коды могли записываться одновременно из серии последовательных команд в удобочитаемом для человека коде, компилятор должен был бы оптимизировать команды записи pin-кода вместе. Я сомневаюсь, что это так, поскольку Bresenham должен решить, следует ли запускать каждый степпер в определенном тике прерывания ... такое условие на самом деле не поддается оптимизации времени компиляции. Гипотетически, я полагаю, что это возможно, но я сомневаюсь, что Arduino IDE сможет это сделать., @Ryan Carlyle