Hi, I have defined (PF6) GPIO pins to set at micro-controller startup.
This pin is used to control the source using the PS-ON connector.
The problem occurs with M112 or EMERGENCY STOP.
The output [mcu] PF6 goes from log “H” to “L” and the relay on the MKS PWC board turns off the 230V supply to the source.
Is it possible to exclude the PF6 pin from the “EMERGENCY STOP” so that it remains always at the “H” level?
Because during EMERGENCY STOP, the heater fans switch from log L to H,
so I think that leaving the PS_ON pin in the “H” state will not have such an effect on “milliseconds”.
Generally people power the Pi separately from their board as there is little sense in turning the Pi off every time you turn the board off. It keeps the Pi in control of everything and prevents you from having to wait for the Pi to reboot every time. Plus the wear and tear on the SD Card.
Easiest way is to have a separate “always on” 5V supply connected to your power outlet. A common one is
There’s also a 3 amp version for a few dollars cheaper but I didn’t trust that to keep up in all power draw situations.
Then you use a Pi GPIO to trigger the relay/SSR (SSR is safer in this regard, if you want to use a relay you’ll need to ensure the board has protection so the inductive kickback doesn’t kill your Pi/GPIO).
Just make sure your GPIO is setup as an output in Linux and configure it in Moonraker in the guide I listed above.
I’ve found that the Pi GPIOs can’t reliably drive the input of an SSR/Relay so I used a small level shifter/buffer. You can just as easily make a quick BJT/Mosfet switch, optocoupler circuit, Single buffer gate, etc.
Then you can power on your printer and everything else via the Pi and your mcus wont interfere with it.
2nd option is use the Pi and configure the GPIO to be high at startup using a boot overlay as described here. Then if you restart things you’ll know that GPIO is High.
Name: gpio-poweroff
Info: Drives a GPIO high or low on poweroff (including halt). Using this
overlay interferes with the normal power-down sequence, preventing the
kernel from resetting the SoC (a necessary step in a normal power-off
or reboot). This also disables the ability to trigger a boot by driving
GPIO3 low.
The GPIO starts in an inactive state. At poweroff time it is driven
active for 100ms, then inactive for 100ms, then active again. It is
safe to remove the power at any point after the initial activation of
the GPIO.
Users of this overlay are required to provide an external mechanism to
switch off the power supply when signalled - failure to do so results
in a kernel BUG, increased power consumption and undefined behaviour.
Load: dtoverlay=gpio-poweroff,<param>=<val>
Params: gpiopin GPIO for signalling (default 26)
active_low Set if the power control device requires a
high->low transition to trigger a power-down.
Note that this will require the support of a
custom dt-blob.bin to prevent a power-down
during the boot process, and that a reboot
will also cause the pin to go low.
input Set if the gpio pin should be configured as
an input.
export Set to export the configured pin to sysfs
active_delay_ms Initial GPIO active period (default 100)
inactive_delay_ms Subsequent GPIO inactive period (default 100)
timeout_ms Specify (in ms) how long the kernel waits for
power-down before issuing a WARN (default 3000).
# RPi as a secondary MCU
# https://www.klipper3d.org/RPi_microcontroller.html
[mcu host]
serial: /tmp/klipper_host_mcu
# Set GPIO23 to be an output set to 1
# ... boot/config.txt add this line
# gpio=23=op,dh
#--------------------------------------------------------
# configuration for MKS PWC V3.0 module
[output_pin PW_OFF]
pin: host:gpio23
value: 1
It should, My only question would be how are you going to turn it ON?
You use the power switch on your printer every time?
Nothing wrong with that per say, the first option I described above just works around that for those of us who are lazy.
For example, I have a separate 5v supply (what I linked above) that is “always on” and powers my Pi. I have my Pi connected to an SSR which then can turn on my 24V PSU that runs everything else.
That way Mainsail is always “running” just not active, and the Mainsail interface has the power button built in that I click to turn the printer on from my PC/Phone/Laptop whatever.
I turn on the printer with the main switch and the MKS-PWC module control button. I print about 4-6 hours a day. Sometimes the printing takes a while, but I can’t stay longer. That’s why there’s that MKS-PWC module for automatic shutdown using gcode_macro from Klipper.
Yes, it’s not bad, but for safety reasons I don’t leave the printer under voltage when it finishes printing. Sometimes it happens that I don’t print for a week.
The PS_ON setting as I have it now (i.e. via GPIO on the MCU of the printer) suits me. Unfortunately, it is unpleasant when you are tuning the printer and an EMERGENCY STOP occurs. And inventing a switch there, when it could be solved at the level of FW Klipper
… if it is possible to turn on the “heater fan” why wouldn’t it be possible to leave the “PS_ON” pin at the “H” level ?