In Anlehnung an https://klipper.discourse.group/t/raspberry-pi-pico-adxl345-portable-resonance-measurement/1757
cd ~/klippermake menuconfig [*] Enable extra low-level configuration options
Micro-controller Architecture (Raspberry Pi RP2040) --->
Bootloader offset (No bootloader) --->
Flash chip (W25Q080 with CLKDIV 2) --->
Communication interface (USB) --->
USB ids --->
() GPIO pins to set at micro-controller startup
Q und dann Y beendenmake clean && make -j4dmesg im Terminal eingeben [126509.556147] usb 1-1.4: new full-speed USB device number 13 using dwc_otg [126509.688730] usb 1-1.4: New USB device found, idVendor=2e8a, idProduct=0003, bcdDevice= 1.00 [126509.688767] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [126509.688783] usb 1-1.4: Product: RP2 Boot [126509.688795] usb 1-1.4: Manufacturer: Raspberry Pi [126509.688807] usb 1-1.4: SerialNumber: E0C9125B0D9B [126509.689785] usb-storage 1-1.4:1.0: USB Mass Storage device detected [126509.690375] scsi host0: usb-storage 1-1.4:1.0 [126510.727183] scsi 0:0:0:0: Direct-Access RPI RP2 3 PQ: 0 ANSI: 2 [126510.727877] sd 0:0:0:0: Attached scsi generic sg0 type 0 [126510.728901] sd 0:0:0:0: [sda] 262144 512-byte logical blocks: (134 MB/128 MiB) [126510.729746] sd 0:0:0:0: [sda] Write Protect is off [126510.729766] sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00 [126510.730619] sd 0:0:0:0: [sda] No Caching mode page found [126510.730636] sd 0:0:0:0: [sda] Assuming drive cache: write through [126510.744971] sda: sda1 [126510.746027] sd 0:0:0:0: [sda] Attached SCSI removable disk
Es muss sowas am Ende stehen … Product: RP2 Boot, Manufacturer: Raspberry Pi
( ) W25Q080 with CLKDIV 2 (X) GENERIC_03H with CLKDIV 4
make flash FLASH_DEVICE=2e8a:0003ls -lR /dev/ | grep -v '\->\s../tty' | grep -e 'tty[[:alpha:]]' -e serial /dev/serial: /dev/serial/by-id: lrwxrwxrwx 1 root root 13 Jan 22 20:26 usb-Klipper_rp2040_E66138935F3C6B28-if00 -> ../../ttyACM0 /dev/serial/by-path: lrwxrwxrwx 1 root root 13 Jan 22 20:26 platform-3f980000.usb-usb-0:1.4:1.0 -> ../../ttyACM0
Ob das Board korrekt mit Klipper läuft, lässt sich mit folgendem Befehl schnell testen:
~/klippy-env/bin/python ~/klipper/klippy/console.py /dev/serial/by-id/usb-Klipper_rp2040_E6625C05E7A17228-if00
Der Pfad am Ende muss natürlich mit dem übereinstimmen was ihr im vorherigen Schritt ermittelt habt!
Wenn ihr ein connected am Anfang des Textes seht, ist das Board richtig geflasht.
Der RP2040 verfügt theoretisch über 7 nutzbare SPI Ports. Dafür sind aber meistens nicht alle Pins rausgeführt, oder Pins haben eine unglückliche Doppelbelegung.
spi0d und spi1c sind nur eingeschränkt verfügbar / nutzbar!
| SPI Bus | CS | SDO (MISO) | SDA (MOSI) | SCL (CLK) | getestet | Konfiguration |
|---|---|---|---|---|---|---|
| RPi Pico pin Name | CSn | SPI RX | SPI TX | SPI SCK | ||
| spi0a | gpio1 | gpio0 | gpio3 | gpio2 | OK | cs_pin : RP2040:gpio1 spi_bus : spi0a |
| spi0b | gpio5 | gpio4 | gpio7 | gpio6 | OK | cs_pin : RP2040:gpio5 spi_bus : spi0b |
| spi0c | gpio17 | gpio16 | gpio19 | gpio18 | OK | cs_pin : RP2040:gpio17 spi_bus : spi0c |
| spi0d | gpio ? | gpio20 | gpio23 | gpio22 | ||
| spi1a | gpio9 | gpio8 | gpio11 | gpio10 | OK | cs_pin : RP2040:gpio9 spi_bus : spi1a |
| spi1b | gpio13 | gpio12 | gpio15 | gpio14 | OK | cs_pin : RP2040:gpio12 spi_bus : spi1b |
| spi1c | gpio ? | gpio24 | gpio27 | gpio26 |
| SPI Bus | CS | SDO (MISO) | SDA (MOSI) | SCL (CLK) | Konfiguration | Notes |
|---|---|---|---|---|---|---|
| Fysetc Portable Input Shaper | gpio13 | gpio12 | gpio11 | gpio10 | cs_pin : RP2040:gpio13spi_software_sclk_pin: RP2040:gpio10spi_software_mosi_pin: RP2040:gpio11spi_software_miso_pin: RP2040:gpio12 axes_map: x,-z,y | |
| BTT ADXL345 V2.0 | gpio9 | gpio8 | gpio11 | gpio10 | cs_pin : RP2040:gpio9spi_software_sclk_pin: RP2040:gpio10spi_software_mosi_pin: RP2040:gpio11spi_software_miso_pin: RP2040:gpio8 axes_map: -x,-y,-z | Alternativ spi_bus: spi1a |
| BTT LIS2DW V1.0 | gpio9 | gpio8 | gpio11 | gpio10 | cs_pin : RP2040:gpio9spi_software_sclk_pin: RP2040:gpio10spi_software_mosi_pin: RP2040:gpio11spi_software_miso_pin: RP2040:gpio8 axes_map: -y,x,-z | Alternativ spi_bus: spi1a |
| BTT EBB SB2209 | gpio1 | gpio3 | gpio0 | gpio2 | cs_pin: EBBCan:gpio1spi_software_sclk_pin: EBBCan:gpio2spi_software_mosi_pin: EBBCan:gpio0spi_software_miso_pin: EBBCan:gpio3axes_map: z,-y,x | |
| Mellow Fly-ADXL345-USB | gpio9 | gpio12 | gpio11 | gpio10 | cs_pin : RP2040:gpio9spi_software_sclk_pin: RP2040:gpio10spi_software_mosi_pin: RP2040:gpio11spi_software_miso_pin: RP2040:gpio12 |
Hinweis
Wenn Software SPI verwendet wird, können beliebige gpio Pins verwendet werden!
Bei den Kaufversionen sind die Pins allerdings fest vorgegeben!
[mcu RP2040] serial : /dev/serial/by-id/usb-Klipper_rp2040_E66138935F717729-if00 baud : 250000 restart_method : command [resonance_tester] accel_chip : adxl345 # adxl345 / lis2dw probe_points : 150, 150, 20 # an example of the center of the bed, check yours [adxl345] # [lis2dw] axes_map : x,y,z # Default # axes_map : x,z,y # Installed with vertical ADXL # axes_map : x,-z,y # Fysetc Portable Input Shaper # axes_map : -y,x,-z # BTT LIS2DW V1.0 cs_pin : RP2040:gpio1 # Hardware SPI Bus spi_bus : spi0a # Software SPI Bus # spi_software_sclk_pin: RP2040:gpio10 # spi_software_mosi_pin: RP2040:gpio11 # spi_software_miso_pin: RP2040:gpio12
accel_chip anpassenprobe_points ggf. ändernaxes_map anpassen cs_pin und spi_bus (bzw. spi_software_…)
Es ist möglich, mehrere ADXL an einem Controller zu betreiben, z.B. für Drucker mit beweglichem Bett. In dem Fall werden die Achsen über unterschiedliche ADXL vermessen.
https://www.klipper3d.org/Measuring_Resonances.html#bed-slinger-printers
Eine Konfiguration dafür könnte so aussehen
[mcu RP2040] serial : /dev/serial/by-id/usb-Klipper_rp2040_E66138935F717729-if00 baud : 115200 # 250000 restart_method : command [resonance_tester] accel_chip_x : adxl345 hotend accel_chip_y : adxl345 bed probe_points : 150, 150, 20 [adxl345 hotend] cs_pin : RP2040:gpio1 spi_bus : spi0a [adxl345 bed] cs_pin : RP2040:gpio5 spi_bus : spi0b
ACCELEROMETER_QUERY accelerometer values (x, y, z): -1110.308913, 1184.329507, 11414.822920Invalid adxl345 id (got 0 vs e5)Grundsätzlich sollte der ADXL345 so nah wie möglich an der Nozzle platziert werden. Am besten direkt an der Nozzle montiert …