При включении питания с помощью RPi теряется соединение с MCU (Ender 3v2/Klipper/Mainsail)

TL;DR: Когда питание выключено (состояние по умолчанию), Pi питает микроконтроллер Эндера через USB, и все в порядке, но когда я включаю питание через G-код, я получаю

Потеряна связь с MCU 'mcu'

Я совершенно уверен, что я не первый, с кем это произошло, но поиск еще не дал мне ответа, вероятно, из-за того, что поиск сообщения об ошибке дает только несвязанные ответы. Мой Ender 3v2 (материнская плата 4.2.2) настроен таким образом, что мой Raspberry Pi 3 B+ включает питание через реле, управляемое GPIO.

Макрос (который, кажется, работает нормально при переключении):

    # Включает принтер
    [output_pin printer_power]
    pin: rpi:gpio17
    
    # Питание принтера включено
    [gcode_macro POWER_ON]
    gcode:
        SET_PIN PIN=printer_power VALUE=1
    
    # Питание принтера выключено
    [gcode_macro POWER_OFF]
    gcode:
        SET_PIN PIN=printer_power VALUE=0

gpioinfo pin 17:

     line  17:     "GPIO17"    "klipper"  output  active-high [used]

Я использую команды POWER_ON и POWER_OFF в G-коде слайсера, где они либо первые, либо последние. (редактируйте: не выключайте принтер через слайсер, если вы хотите видеть успешные отпечатки в обзоре — практически он работает нормально, но гораздо лучше позволить принтеру автоматически отключаться в режиме ожидания, см. https://github.com/jschuh/klipper-macros например)

Когда я использую слайсер для отправки файла на принтер, он запускается и работает около трех секунд, пока начинается возвращение осей в исходное положение, а затем возникает ошибка

Потеряна связь с MCU 'mcu'

Появляется

, и принтер травмируется от своего замешательства, но когда я использую команды через грот, он работает нормально.

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

, 👍0


1 ответ


1

Исправлено.

Как и ожидалось и вполне разумно, MCU потребовалось некоторое время для пробуждения, поэтому он заработал 6-7 секунд, поэтому в коде ему дали всего 10 секунд. Нашел самый изящный способ сделать это в том же макросе, а также включил приятный небольшой звуковой сигнал, сообщающий мне, что игра идет. Тем временем я также добавил в установку блок питания ATX, так что он включается первым, и я включаю блок питания 24 В только после того, как MCU проснулся, потому что управление перед питанием.

# Переключает блок питания 24 В через логический элемент физического реле 1.
[output_pin 24V_power]
pin: rpi:gpio17

# Переключает блок питания 12 В через физический релейный вентиль 2.
[output_pin 12V_power]
pin: rpi:gpio27

# Включает питание
[gcode_macro POWER_ON]
gcode:
    SET_PIN PIN=12V_power VALUE=1
    G4 P9000 # Give MCU time to wake up
    SET_PIN PIN=24V_power VALUE=1
    G4 P1000 # Give 24V PSU time to wake up
    BEEP_STARTUP

# Выключает питание
[gcode_macro POWER_OFF]
gcode:
    BEEP_POWEROFF
    SET_PIN PIN=24V_power VALUE=0
    SET_PIN PIN=12V_power VALUE=0
    

Включен дополнительный бит, потому что это может помочь незнакомцу, поскольку на исходный вопрос можно просто ответить добавлением:

G4 P10000 # Даем MCU время на пробуждение

непосредственно после включения питания, либо после макроса в слайсере, либо в макросе, как я сделал, и до того, как будет запрошено какое-либо действие со стороны MCU. Обратите внимание, что это время может варьироваться в зависимости от вашего MCU, и я воздержался от дальнейшей настройки, чтобы предотвратить ошибки в дальнейшем.


,