Как добавить в Marlin собственный драйвер двигателя?
Я изучал код Marlin на GitHub и надеюсь, что кто-нибудь подскажет мне, где добавить собственный драйвер двигателя. Я полагаю, что кто-то здесь уже знаком с кодом, и это сэкономит мне много времени на раскопках.
Я знаю, что кто-то спросит, почему я спрашиваю, как мне добавить свои собственные драйверы...
Чтобы узнать, было ли уже сделано кем-то другим то, что я пытаюсь сделать, или есть что-то близкое, что я мог бы настроить (повторное использование кода).
Я пытаюсь создать абсолютно минимальную плату контроллера, которая будет управлять очень маленькими шаговыми двигателями. Я могу легко управлять шаговыми двигателями напрямую с помощью четырех TTL-выходов (конечно, с некоторой защитой выхода). Я уже экспериментально доказал, что это работает и надежно.
Что еще важнее, я хотел бы попробовать это просто ради опыта. Как говорится, «путешествие – это пункт назначения».
@Tom Cumming, 👍2
Обсуждение2 ответа
Я предлагаю прочитать существующую документацию Marlin, касающуюся драйверов шаговых двигателей или драйверы Trinamic.
Возможно, также желательно ознакомиться с модульными файлами src/module/stepper.h
, <code>src/module/stepper.cpp</code> или из репозитория Voxel8, например, stepper_indirection.h
, поскольку они обрабатывают интерфейс шагового двигателя.
Понимание существующего кода или даже изменение существующего драйвера может помочь в достижении ваших целей.
Кроме того, в зависимости от вашего опыта и требований, вы можете найти вдохновение в нескольких видеороликах на YouTube, таких как D IY Драйвер шагового двигателя с нуля или Учебное пособие по драйверу шагового двигателя EasyDriver A3967 с кодом Arduino.
Я уже прошел через все вышеперечисленное. Документация (в основном о том, как устанавливать #define, а не то, что я ищу), stepper.cpp, похоже, имеет дело в основном с высокоуровневыми вещами, т. е. я вижу много кода для сплайнов Безье и т. д. Возможно, моя проблема в том, что копаться в куче #if и #define, чтобы найти код, который действительно общается с оборудованием, так мучительно., @Tom Cumming
Что касается видео; я пишу такой код уже десятки лет, мне не нужны ответы на тему "как работает шаговый двигатель". Я уже использую Arduino для проверки концепции (как указано в моем вопросе). Мой вопрос касается конкретно того, как и где добавлять драйверы в Marlin., @Tom Cumming
Хотя этот вопрос также уместен на этом сайте, я думаю, что вам будет более удачно задать его на GitHub, используя контекст, который вы только что описали, то есть то, чего вы уже достигли и попробовали., @Bob Ortiz
На самом деле сложно ответить на этот вопрос, поскольку код написан для работы, вероятно, с более чем сотней различных типов оборудования и несколькими типами шагового оборудования.
Вот краткое описание, начиная с того, где на самом деле определяются контакты, и заканчивая кодом, который ими управляет.
Файлы заголовков в src/pins/pins_*.h
определяют фактические контакты, которые взаимодействуют с оборудованием. Например, эти файлы содержат множество директив препроцессора #define
, таких как этот #define
, который определяет, какой вывод на определенном процессоре управляет направлением шагового двигателя Z;
#define Z_DIR_PIN 10
Файл заголовка indirection.h
определяет «более высокий уровень»; #определить. Основываясь на приведенном выше примере, этот макрос определен в indirection.h
и используется для фактической установки направления шагового двигателя.
#define Z_DIR_WRITE(STATE) WRITE(Z_DIR_PIN,INVERT_DIR(Z, STATE))
Наконец, stepper.cpp
будет использовать приведенные выше макросы для фактической записи в оборудование. Как отмечалось выше, основная часть этого кода представляет собой директивы препроцессора #if
/#else
/#define
для поддержки всех многочисленных конфигураций оборудования/процессора. . В Stepper.h
есть макросы еще более высокого уровня, например
#define Z_APPLY_DIR(FWD,Q) do{ \
Z_DIR_WRITE(FWD); Z2_DIR_WRITE(INVERT_DIR(Z2_VS_Z, FWD)); \
Z3_DIR_WRITE(INVERT_DIR(Z3_VS_Z, FWD)); Z4_DIR_WRITE(INVERT_DIR(Z4_VS_Z, FWD)); \
}while(0)
Я подозреваю, что код сильно оптимизирован (некоторые написаны на ассемблере), что приводит к появлению концепций очень высокого уровня, таких как следование кривой Безье, напрямую связанных с записью в реальный шаговый двигатель.
Возможно, я столкнулся с большой проблемой с этим кодом. Тому, кто мало с этим работал, сложно внести простые изменения. Возможно, существует потребность в «простом шаговом двигателе». драйвер, не имеющий огромного количества аппаратных зависимостей, который можно использовать для таких людей, как я, которые просто хотят провести быстрый эксперимент.
Обратите внимание, что в приведенном выше ответе не упоминается, как осуществляется хронометраж., @Tom Cumming
Может быть, вы смотрите на другой код? #define Z_APPLY_DIR... определенно находится в моем stepper.cpp, а не в stepper.h., @Tom Cumming
Привет, Том, похоже, что твой последний комментарий пытается кому-то ответить. Комментарии работают так, что тебе (обычно) нужно обращаться к кому-то, используя символ @. Кроме того, ответный комментарий должен быть под тем же постом, где был сделан комментарий (на который ты отвечаешь). Как новый пользователь, ты можешь прочитать [Как работают комментарии?](https://meta.stackexchange.com/questions/19756/how-do-comments-work). Также, к твоему сведению, имейте в виду, что комментарии по своей природе недолговечны и, как правило, удаляются со временем. Поэтому любая дополнительная информация (которую необходимо сохранить) должна быть отредактирована в вопросе, а не помещена в комментарии., @Greenonline
- Как установить размер буфера G-кода на Marlin?
- Могут ли сценарии G-кода запускаться автоматически при вставке SD-карты при использовании прошивки Marlin?
- Есть ли удобный графический инструмент для настройки параметров Marlin?
- Как работает программное обеспечение/прошивка 3D-принтера
- Откат от Marlin 2.0 к прошивке производителя с закрытым исходным кодом
- Как выполнить команду прошивки из gcode
- Проблемы с прошивкой Marlin
- Попытка удалить autolevel из G-кода - offset from desk не верна
Добро пожаловать, Том. Я не понимаю предложение «Я знаю, что кто-то спросит, почему я спрашиваю, зачем мне добавлять собственные драйверы». Можете ли вы прояснить его, отредактировав свой пост?, @Bob Ortiz
@BobOrtiz - Хм, интересно, если подумать. Лучше сказать "Я знаю, что кто-то спросит, почему я спрашиваю, как я могу добавить свои собственные драйверы...". В текущем виде смысл таков: "Я знаю, что кто-то спросит меня, почему я спрашиваю, почему...", что неверно - хотя *реальный* смысл ясен. OP на самом деле спрашивает "*как* они могут добавить драйвер", ***а не*** "зачем им это нужно". Хороший улов :-), @Greenonline
Я обновил вопрос версией @Greenonline. Мой опыт публикации вопросов в сети показывает, что обычно возникает шквал ответов «зачем вы хотите это сделать?». Я пытался их предупредить., @Tom Cumming
Кроме того, это серьезный вопрос, и пока я получил только вербальные и орфографические правки. Я спрашиваю в правильном форуме? Где-то лучше задать этот вопрос?, @Tom Cumming
Я попытался ответить на ваш основной вопрос, хотя ваш второй подвопрос предполагает, что вы хотите написать драйвер с нуля, а заголовок предполагает, что вы интересуетесь только тем, «как добавить» уже существующий пользовательский драйвер., @Bob Ortiz
Может быть, вы могли бы включить
stepper.h
? Он поддерживает управление шаговым двигателем с помощью H-моста, например L298N. Затем вы могли бы использовать его функциюstep()
из кода Marlin для взаимодействия с библиотекой., @towe