After upgrading to zero-backlash magnetic ball links I found that occasional print crashes were now a major problem. With the old fixed ball links the printer would generally crash and keep printing in the air just above the object. When a magnetic ball lets go the end-effector is hanging limp and continues to be dragged through the print and across the heated bed. This can cause some serious damage.
A friend of mine suggested using a small IMU chip to detect a sudden rotational (GYRO) change. I dug through my junk box and found an old NanoWii Multirotor Flight Controller. I modified the Arduino code and added a status LED with arming button. I was able to use the 5V, GND and a GPIO pin to provide an identical interface to the printer as a normal endstop. It was then simple to modify the printer configuration to perform a pause/suspend when the signal wire pulsed high. The arming button allows the sensor to be easily disabled for maintenance or enabled after a crash. An added bonus of using only the gyroscope is that the NanoWii can be positioned in any convenient orientation on the end-effector - we are only looking at spikes in rotation.
Test mounting position
New mounting position
This video shows me first arming the NanoWii then triggering a "crash". I have some “on pause” G-Code to lift up the end-effector and turn off the heaters.
With this system, I am able to resume most prints that have a crash, provided that the stepper motors didn’t skip steps. Due to the magnetic balls, it is more likely that they let go before steps are skipped, resulting in a high recovery rate. As of writing, Smoothieware only allows jogging and filament change while in the suspended state. If a home command is issued to fix any skipped steps, the print cannot be resumed.
I am really happy with how effective this solution is. There are no mechanical parts required and
the IMU only needs a spare endstop input to function.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.