In Anlehnung an https://klipper.discourse.group/t/raspberry-pi-pico-adxl345-portable-resonance-measurement/1757
cd ~/klipper
make 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 -j4
dmesg
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:0003
ls -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:gpio13 spi_software_sclk_pin: RP2040:gpio10 spi_software_mosi_pin: RP2040:gpio11 spi_software_miso_pin: RP2040:gpio12 axes_map: x,-z,y | |
BTT ADXL345 V2.0 | gpio9 | gpio8 | gpio11 | gpio10 | cs_pin : RP2040:gpio9 spi_software_sclk_pin: RP2040:gpio10 spi_software_mosi_pin: RP2040:gpio11 spi_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:gpio9 spi_software_sclk_pin: RP2040:gpio10 spi_software_mosi_pin: RP2040:gpio11 spi_software_miso_pin: RP2040:gpio8 axes_map: -y,x,-z | Alternativ spi_bus: spi1a |
BTT EBB SB2209 | gpio1 | gpio3 | gpio0 | gpio2 | cs_pin: EBBCan:gpio1 spi_software_sclk_pin: EBBCan:gpio2 spi_software_mosi_pin: EBBCan:gpio0 spi_software_miso_pin: EBBCan:gpio3 axes_map: z,-y,x | |
Mellow Fly-ADXL345-USB | gpio9 | gpio12 | gpio11 | gpio10 | cs_pin : RP2040:gpio9 spi_software_sclk_pin: RP2040:gpio10 spi_software_mosi_pin: RP2040:gpio11 spi_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.822920
Invalid 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 …