Марлин: Сделать любой вывод GPIO HIGH в течение определенного времени

Существует ли какой-либо способ, которым прошивка Marlin поддерживает G-код, который может сделать контакт "высоким" и удерживать его в этом состоянии в течение указанного периода времени?

Я сделал машину, которая работает на прошивке Marlin, то есть инструмент для формования пресс-форм, который превращал пресс-форму в порошок, затем другой инструмент подходил к этой пресс-форме и выдавал в нее немного жидкости. У меня есть пользовательский графический интерфейс для перемещения инструментов по заданным координатам, нажатия на форму, размещения второго инструмента над формой.

Для дозирования жидкости я подумываю о покупке мембранного клапана. Я скачал руководство пользователя для него. Согласно документации, когда сжатый воздух подается в клапан, он поднимает диафрагму и начинает выдачу. Количество выдаваемой жидкости зависит от того, как долго открыт клапан. Поэтому я подумываю об использовании реле для включения и выключения электромагнитного клапана для подачи воздуха к клапану. Чтобы включить реле, мне нужно сделать определенный вывод GPIO "высоким". Есть ли какой-нибудь способ сделать это в прошивке Marlin?

, 👍3


1 ответ


3

Как объяснил в комментариях Том, вы можете установить любой порт непосредственно из G-кода, используя команду M42. Чтобы установить pin-код 22 "высокий", вам нужно позвонить по номеру M42 P22 S255. В команде нет параметра для добавления времени, поэтому вам нужно добавить его самостоятельно с помощью G4 (задержка или пауза), чтобы указать, как долго принтер должен ждать следующей инструкции, например:

M42 P22 S255 ; Активировать соленоид/реле
G4 P2000 ; Задержка/пауза в течение 2000 миллисекунд (2 секунды)
M42 P22 S0 ; Отключить соленоид/реле

В качестве альтернативы вы можете использовать существующий вентилятор, если он не используется на вашем компьютере (или добавить "дополнительный вентилятор" в встроенное ПО и отправить значение 255 этому вентилятору). Чтобы использовать существующий вентилятор:

M106 S255 ; Активировать соленоид/реле
G4 P2000 ; Задержка/пауза в течение 2000 миллисекунд (2 секунды)
M107 ; Отключить соленоид/реле

Как вы добавляете дополнительный вентилятор, уже описано (для конкретной платы RAMPS) в этом ответе. Однако ответ справедлив и для других плат, если у вас есть открытые контакты, к которым у вас есть доступ (или если вы можете припаять непосредственно к открытым контактам), вы можете использовать описанную технику.

G-код для активации "дополнительного вентилятора" (соленоида) - M106 P1 S255, отключение-M107 P1. Обратите внимание, что есть опция/параметр для добавления времени (время вспышки Bnnn - вентилятор будет работать с полной ШИМ в течение этого количества секунд при запуске с остановки) в команду M106, но это реализовано только в программе RepRapFirmware. Альтернативой является использование G4 (задержка или пауза), чтобы указать, сколько времени принтеру необходимо ждать, пока будет проанализирована следующая инструкция (M107), например:

M106 P1 S255 ; Активировать соленоид/реле
G4 P2000 ; Задержка/пауза в течение 2000 миллисекунд (2 секунды)
M107 P1 ; Отключить соленоид/реле

,

Вы также можете использовать "M42", который позволяет переключать любой вывод, даже если это не вентилятор или что-то еще., @Tom van der Zanden

@0scar Я пытался понять pins.h из марлина. В своем ответе вы указываете контакт "22". Обратившись к " pins_arduino.h` для mega, этот вывод соответствует цифровому выводу 22 Arduino Mega. я прав?? Если нет, есть ли какая-либо доступная документация, которая сопоставляет контакт, используемый в Marlin, с контактом Arduino или MCU. Также установите задержку с помощью команды "M4". основан ли он на внутреннем модуле таймера/счетчика MCU. Мне нужно, чтобы это было точно, @Athul

@Athul Контакт 22 используется в качестве примера, пожалуйста, посмотрите, какой вы можете использовать (возможно, D4, D6, D11). Некоторые контакты цифрового выхода можно использовать в качестве ШИМ-выхода, но вам нужно только включить/выключить. В качестве альтернативы, если вы не хотите полагаться на тактовые циклы MEGA, для точного определения времени вы можете отправить импульс на внешний контроллер таймера и позволить ему управлять соленоидом., @0scar

@0scar Контроллер таймера Extreranl. У вас есть любая ссылка на подходящее устройство. Я думаю, что синхронизировать внешний таймер с движением машины было бы сложно. Машина не должна двигаться при раздаче. Я искал несколько контроллеров для дозирования жидкости. Есть несколько контроллеров, которые выдают жидкость при получении импульса. Пользователь может установить продолжительность в этом контроллере, и когда он завершится, он вернет сигнал. Я знаю, что marlin не предназначен для этого, но можно ли заставить Marlin установить высокий штифт, чтобы указать НАЧАЛО дозирования, дождаться получения обратного сигнала и перейти в следующую позицию, @Athul

Возможно, можно установить " M0 " и подключить обратный импульс от контроллера дозирования к контакту ЖК-переключателя, @Athul