Working To Add Automatic Printer Calibration
Our new branch of the RepRap Marlin firmware (MatterPrint3D) is starting to take shape! First added feature: auto bed leveling.
Hey RepRappers, we wanted to show off a little of the work we are doing on the firmware(1) for our Mendel90.
We have been working on getting our printer to do auto-bed-leveling. The project is based off of similar work that Nophead did for his HydraRaptor's auto leveling. The basic idea being to eliminate that oh-so-tedious step of getting the extruder height and bed level exactly right.
Nophead seemed to do his actual bed level solution on the gcode(2) before sending it to the printer, we wanted to put it in the firmware so that the printer could calibrate itself automatically before each print with the simple addition of a single gcode command (G29 in this case).
Here's what we did:
-- Branched the Marlin firmware, so that we could make a ton of changes to the code without stepping on anyone's toes. We hope that any changes people like in our branch, will get ported back to Marlin.
-- Created a bed level mount to hold the x-min limit switch, printed it, and mounted it on the machine.
-- Wrote the code for very simple vector and matrix classes, implementing only the features needed to get the bed leveling math working.
-- Using the new classes, we measure the height of the bed and calculate the transform required.
-- As we debugged our new code we found that we needed to be very careful to make sure the printer knew how to move in and out of having a leveling matrix set. When setting the leveling matrix we correct the position the printer thinks it's currently in. When homing any axis we re-set the leveling matrix to identity, turning off bed leveling. (Sorry for the programmer speak - basically it means we can turn on and off this feature)
If you do not run the bed leveling (G29) than the printer behaves exactly like a standard RepRap.
Our next big push will be mostly mechanical - setting up a limit switch mount similar to Nophead's, modifying the x-carriage to hold the new switch, and then writing up a procedure to get the correct offset from the print head to the bed switch.
We are still just getting this working, but we wanted to show our progress so far.
We'll share more updates as we get the rest of it together. Please let us know if you have any questions or comments.
Have fun printing!
(1) Firmware is the code that runs on the actual printer hardware.
(2) gcode are the instructions that are sent to a printer that tell it what to do, heat up, move, extrude plastic, etc...
Mendel90 Calibration for Auto-Leveling