Klipper + ADXL345 Input Shaper guide: Difference between revisions

From munkjensen.net/wiki
mNo edit summary
Line 53: Line 53:
=== You are now ready to run the actual tests on the two axis. ===
=== You are now ready to run the actual tests on the two axis. ===


<h2 style="margin:10px; background:#dd0; font-size:100%; font-weight:normal; border:0px solid #fff; text-align:left; color:#000; padding:0.2em 0.4em;"><b>NOTE:</b></br>If you are here to do the test/calibration again after say a relocation of your printer REMEMBER TO DISABLE EXSISTING Input Shaper calibration configuration in printer.cfg BEFORE yor run the test... ;-)</h2>
<h3 style="margin:10px; background:#dd0; font-size:100%; font-weight:normal; border:0px solid #fff; text-align:left; color:#000; padding:0.2em 0.4em;"><b>NOTE:</b></br>If you are here to do the test/calibration again after say a relocation of your printer REMEMBER TO DISABLE EXSISTING Input Shaper calibration configuration in printer.cfg BEFORE yor run the test... ;-)</h2>


# Issue the "G28 X0 Y0 Z0" command in your klipper terminal window - I use OctoPrint for this.
# Issue the "G28 X0 Y0 Z0" command in your klipper terminal window - I use OctoPrint for this.

Revision as of 15:13, 13 August 2023

Guide

  1. Aquire an ADXL345
  2. Solder 6 wires on to the ADXL345.
  3. Mount the ADXL to you Extruder. If you got a moving printbed as X you need to move the ADXL345 halfway into the calibration guide. Watch NEROs Youtube video!
  4. Connect the 6 wires to your Raspberry Pi - Do it correct please or you COULD risk frying either your ADXL345, Your Raspberry Pi... or both ;-)
  5. Install the software - if you havent done so already.
  6. Update your Raspberry Pi:
  7. sudo apt update -y

  8. sudo apt upgrade -y

  9. Install "numpy" - Note: this will take quite some time - NERO says 20 minutes. It was faster on my Raspberry Pi 4 but still...
  10. ~/klippy-env/bin/pip install -v numpy

  11. Install additional dependencies
  12. sudo apt install python-numpy python-matplotlib

  13. Configure your Raspberry Pi as a secondary MCU - Note: I got this working together with screen on my Creality Ender 5 Plus :-)
  14. sudo cp ~/klipper/scripts/klipper-mcu-start.sh /etc/init.d/klipper_mcu

  15. sudo update-rc.d klipper_mcu defaults

  16. Rebuild the microcontroller code:
  17. cd ~/klipper/

  18. make menuconfig

  19. Select "Micro-controller Architecture (Linux process)"
  20. Select "(X) Linux process" - make sure the X is set.
  21. Press Q
  22. Respond Yes to save changes.
  23. Stop the klipper service:
  24. sudo service klipper stop

  25. Build and flash the new code to the microcontroller.
  26. make flash

  27. Start the klipper service again.
  28. sudo service klipper start

  29. Make sure the Linux SPI driver is enabled:
  30. sudo raspi-config

  31. Select "3 Interface Options"
  32. Select "P4 SPI"
  33. Respond Yes to the question "Would you like the SPI interface to be enabled?"
  34. Respond Ok to the information that "The SPI interface is enabled"
  35. Press TAB twice to mark the "Finish" button.
  36. Press Enter.
  37. Open your klipper configuration file in your favorite linux text-editor. I use nano.
  38. nano ~/printer.cfg

  39. copy the Additional lines below.
  40. paste the Additional lines into your klipper configuration file above the [mcu] section.
  41. In the [printer] section set max_accel: to 10000
  42. In the [printer] section set max_accel_to_decel: to 10000
  43. Save the changes in the klipper configuration file.
  44. Exit the texteditor.
  45. Issue the "restart" command in your klipper terminal window - I use OctoPrint for this.
  46. Software is now fully installed and configured.
  47. Test if the ADXL345 is recognised and talking with Klipper.
  48. Issue the "ACCELEROMETER_QUERY" command in your klipper terminal window - I use OctoPrint for this.
  49. You should get a resonse that looks like this:
  50. Recv: // adxl345 values (x, y, z): 611.934960, 305.967480, 11473.780500

You are now ready to run the actual tests on the two axis.

NOTE:
If you are here to do the test/calibration again after say a relocation of your printer REMEMBER TO DISABLE EXSISTING Input Shaper calibration configuration in printer.cfg BEFORE yor run the test... ;-)

  1. Issue the "G28 X0 Y0 Z0" command in your klipper terminal window - I use OctoPrint for this.
  2. Run the test on X axis:
  3. Issue the "TEST_RESONANCES AXIS=X" command in your klipper terminal window - I use OctoPrint for this.
  4. Run the test on Y axis:
  5. Issue the "TEST_RESONANCES AXIS=Y" command in your klipper terminal window - I use OctoPrint for this.
  6. Now you can convert the X and Y .CSV files to actual readable charts:
  7. ~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png

  8. ~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_x.png

  9. You can copy the two files to your computer using some kind of file-transfer software - WinSCP is great.
  10. I guess that the calibrate_shaper.py script have been updated since NERO made the great video. Because the recomendations have changed a lot. And I find that really great. I don't yous the png images anymore - I just go with the recomendation that the script result lists. See the example output below.
  11. Open your klipper configuration file in your favorite linux text-editor. I use nano.
  12. nano ~/printer.cfg

  13. I want to use the MZV recomendation from the exampel below and write them into a new section called [input_shaper]
  14. Remember to change the max_accel and max_accel_to_decel as per the MZV recomendation too.
  15. Issue the "restart" command in your klipper terminal window - I use OctoPrint for this.

Your printer is now running Klipper including Input Shaper calibration - enjoy!

Additional lines

[mcu rpi]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: rpi:None

[resonance_tester]
accel_chip: adxl345
probe_points:
    150,150,20  # This is where the extruder will be positioned during the resonance test.

Example output

pi@octopi:~ $ ./klipper/scripts/calibrate_shaper.py /tmp/resonances_x_20211127_095450.csv -o /tmp/shaper_calibrate_x.png
Fitted shaper 'zv' frequency = 41.4 Hz (vibrations = 2.7%, smoothing ~= 0.094)
To avoid too much smoothing with 'zv', suggested max_accel <= 6700 mm/sec^2
Fitted shaper 'mzv' frequency = 40.4 Hz (vibrations = 0.0%, smoothing ~= 0.125)
To avoid too much smoothing with 'mzv', suggested max_accel <= 4800 mm/sec^2
Fitted shaper 'ei' frequency = 48.2 Hz (vibrations = 0.0%, smoothing ~= 0.139)
To avoid too much smoothing with 'ei', suggested max_accel <= 4300 mm/sec^2
Fitted shaper '2hump_ei' frequency = 60.0 Hz (vibrations = 0.0%, smoothing ~= 0.150)
To avoid too much smoothing with '2hump_ei', suggested max_accel <= 4000 mm/sec^2
Fitted shaper '3hump_ei' frequency = 72.2 Hz (vibrations = 0.0%, smoothing ~= 0.157)
To avoid too much smoothing with '3hump_ei', suggested max_accel <= 3800 mm/sec^2
Recommended shaper is mzv @ 40.4 Hz
pi@octopi:~ $ ~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_x.png
Fitted shaper 'zv' frequency = 31.6 Hz (vibrations = 6.6%, smoothing ~= 0.154)
To avoid too much smoothing with 'zv', suggested max_accel <= 3700 mm/sec^2
Fitted shaper 'mzv' frequency = 32.4 Hz (vibrations = 0.0%, smoothing ~= 0.194)
To avoid too much smoothing with 'mzv', suggested max_accel <= 3100 mm/sec^2
Fitted shaper 'ei' frequency = 38.6 Hz (vibrations = 0.0%, smoothing ~= 0.216)
To avoid too much smoothing with 'ei', suggested max_accel <= 2800 mm/sec^2
Fitted shaper '2hump_ei' frequency = 48.2 Hz (vibrations = 0.0%, smoothing ~= 0.232)
To avoid too much smoothing with '2hump_ei', suggested max_accel <= 2500 mm/sec^2
Fitted shaper '3hump_ei' frequency = 58.0 Hz (vibrations = 0.0%, smoothing ~= 0.244)
To avoid too much smoothing with '3hump_ei', suggested max_accel <= 2400 mm/sec^2
Recommended shaper is mzv @ 32.4 Hz
pi@octopi:~ $

Credits

I wrote this guide using NERO 3Ds Youtube video as inspiration, so I had the commands needed handy to cut'n paste into my Raspberry Pi when ever I want to rerun the calibration.