User Tools

Site Tools


klipper_faq:rp2040_input_shaper_hardware

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
klipper_faq:rp2040_input_shaper_hardware [2024/02/22 19:32] – removed - external edit (Unknown date) 127.0.0.1klipper_faq:rp2040_input_shaper_hardware [2024/02/22 19:41] (current) – [Unterschiede] dominik
Line 1: Line 1:
 +====== RP2040 Input Shaper Hardware ======
 +
 +In Anlehnung an https://klipper.discourse.group/t/raspberry-pi-pico-adxl345-portable-resonance-measurement/1757
 +===== YouTube Video #92 =====
 +{{youtube>kQLxwlsdaKs?half}}
 +
 +\\ 
 +===== Kommerziell =====
 +  * Fysetc \\ https://github.com/FYSETC/FYSETC-PortableInputShaper \\ https://de.aliexpress.com/item/1005006079473058.html direkt an Nozzle
 +  * BTT \\ https://github.com/bigtreetech/ADXL345 \\ https://github.com/bigtreetech/LIS2DW
 +  * Mellow 3D \\ https://mellow-3d.github.io/fly_adxl345_usb_general.html
 +  * Provok3d Nozzle Adxl (STM32 !) \\ https://provok3d.com/product/nozzle-adxl-board/?v=0a10a0b3e53b
 +  * Fly3d Drucker CNC V6 Düsen Halter \\ https://de.aliexpress.com/item/1005006425869823.html
 +
 +
 +===== DIY =====
 +  * RP2040 + ADXL Sensor
 +  * https://www.printables.com/de/model/586008-nozzle-bracket-for-adxl345-accelerometer
 +
 +
 +
 +
 +
 +
 +
 +==== Kabel ====
 +  * mit kurzen Kabeln (~ 20cm) initial testen um Verbindungsprobleme zu vermeiden
 +  * Im nächsten Schritt dann mit längeren Kabeln testen. 
 +    * Die Kabel sollten mindestens gedrillt sein. 
 +    * Einige nutzen auch geschirmtes CAT 6a Kabel 
 +  * Grundsätzlich sollte das Kabel so kurz wie eben möglich sein, um Verluste und Störungen gering zu halten. 
 +==== Spannungsregler ====
 +  * Der ADXL345 Chip braucht für den Betrieb 3,3V. Er ist nicht 5V kompatibel!
 +  * Durch den Spannungsregler (meist ein IC mit 5 Pins) kann das Board mit 5V versorgt werden. Der ADXL wird dann mit den 3,3V des Spannungsreglers betrieben. 
 +  * :!: Boards ohne Spannungsregler dürfen nicht mit 5V betrieben werden, da sonst der ADXL zerstört wird. 
 +  * Boards mit Spannungsregler funktionieren in der Regel auch, wenn sie mit 3,3V an VCC betrieben werden. Am ADXL liegen dann eher 2,8-3,0V an, was aber kein Problem darstellt. 
 +  * **Faustregel** Boards immer erst mit 3,3V testen!
 +==== Level Shifter ====
 +  * Der ADXL ist so designed das er normalerweise mit 3,3V Signalen arbeitet. 
 +  * Auch die STM32, RP2040, Raspberry Pi, ... arbeiten im Normalfall mit diesen Spannungen. 
 +  * Es gibt aber Controller wie mit 5,0 oder gar geringeren Spannungen wie 1,8V arbeiten. Und hier kommen dann Levelshifter zum Einsatz, die ein Signal in beide Richtungen umformen können. 
 +  * Im Bereich des 3D Druck sind ADXL Boards mit Level Shifter in der Regel unnötig. Sollte man doch ein Board mit Levelshifter haben, sollten beide Spannungsversorgungen mit 3,3V belegt werden. 
 +  * :!: Wird ein Levelshifter mit 5V betrieben kann dies einen Controller zerstören, der nur mit 3,3V arbeitet!
 +  * Levelshifter sind in der Regel zu erkennen an zwei kleinen 3 Pin Mosfets nahe den Signalleitungen. 
 +
 +
 +==== I2C ====
 +   * Einige ADXL Boards werden mit I2C anstatt SPI ausgeliefert. I2C ist aber (ohne 400kbit/s fast mode) zu langsam um die 3200 Samples/s für die Resonanz Messung zu liefern. 
 +   * Diese Boards verfügen oft über zusätzliche Pullup Widerstände an den Signalleitungen (SDA, SCL). Es ist möglich die Boards umzulöten. (Siehe Klipper Github Issue #3637) \\ {{:klipper_faq:pasted:20240221-142733.png}}
 +   * Grundsätzlich sollte man aber darauf achten eine SPI Version zu kaufen. 
 +==== Sensoren Beispiele ====
 +  * **Kein** Spannungsregler, **kein** Levelshifter \\ {{:klipper_faq:pasted:20240220-200224.png}} \\ https://www.sparkfun.com/datasheets/Sensors/Accelerometer/ADXL345-BreakoutBoard-v13.pdf
 +  * Spannungsregler, **kein** Levelshifter \\ {{:klipper_faq:pasted:20240220-200424.png}} \\ https://www.roboter-bausatz.de/media/image/c1/f0/e2/GY-291-Schaltplan.jpg
 +  * Spannungsregler, Levelshifter \\ {{:klipper_faq:pasted:20240220-201141.png}} \\ https://learn.adafruit.com/adxl345-digital-accelerometer/downloads
 +
 +===== Klipper flashen =====
 +  * ''cd ~/klipper''
 +  * ''make menuconfig'' \\ <code>
 +[*] 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
 +</code>
 +    * Mit ''Q'' und dann ''Y'' beenden
 +  * ''make clean && make -j4''
 +  * Die Boot Taste **gedrückt halten (!)** und den USB-C Stecker anschließen.
 +    * Meistens haben die Boards eh nur eine Taste. Sollten es zwei Tasten sein, muss man schauen was Boot und was Reset ist. 
 +  * ''dmesg'' im Terminal eingeben \\ <code>[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
 +</code> Es muss sowas am Ende stehen ... **Product: RP2 Boot**, **Manufacturer: Raspberry Pi**
 +    * :!: Wird kein Board gefunden, dann kann der Speichertyp (Flash Chip) falsch sein. In dem Fall welchseln auf GENERIC: \\ <code>
 +( ) W25Q080 with CLKDIV 2
 +(X) GENERIC_03H with CLKDIV 4
 +</code>
 +  * Das Board mit Klipper flashen \\ ''make flash FLASH_DEVICE=2e8a:0003''
 +  * Das Board sollte sich dann schon mit Klipper melden ... \\ ''ls -lR /dev/ | grep -v '\%%->%%\s../tty' | grep -e 'tty%%[[:%%alpha%%:]]%%' -e serial'' \\ <code>
 +/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</code>
 +    * Wenn nicht einfach mal USB raus und wieder rein und fertig ;-)
 +
 +===== kurzer Test =====
 +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 ''<color #22b14c>**connected**</color>'' am Anfang des Textes seht, ist das Board richtig geflasht. \\ {{:klipper_faq:flash_guide:stm32g0b1:pasted:20231111-152555.png}}
 +
 +===== RP2040 SPI Ports =====
 +{{:klipper_faq:pasted:20240221-153651.png?800}}
 +==== Hardware SPI ====
 +
 +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              | <color #408CD9>gpio1</color>   | <color #24CB34>gpio0</color>  | <color #CAC852>gpio3</color>  | <color #EF6100>gpio2</color>  | <color #22b14c>OK</color>  | ''cs_pin          : RP2040:gpio1'' \\ ''spi_bus        : spi0a''   |
 +^ spi0b              | gpio5                          | gpio4                         | gpio7                         | gpio6                         | <color #22b14c>OK</color>  | ''cs_pin          : RP2040:gpio5'' \\ ''spi_bus        : spi0b''   |
 +^ spi0c              | gpio17                         | gpio16                        | gpio19                        | gpio18                        | <color #22b14c>OK</color>  | ''cs_pin          : RP2040:gpio17'' \\ ''spi_bus        : spi0c''  |
 +^ spi0d              | <color #ff7f27>gpio ?</color>  | gpio20                        | gpio23                        | gpio22                        |                            |                                                                    |
 +^ spi1a              | gpio9                          | gpio8                         | gpio11                        | gpio10                        | <color #22b14c>OK</color>  | ''cs_pin          : RP2040:gpio9'' \\ ''spi_bus        : spi1a''   |
 +^ spi1b              | gpio13                         | gpio12                        | gpio15                        | gpio14                        | <color #22b14c>OK</color>  | ''cs_pin          : RP2040:gpio12'' \\ ''spi_bus        : spi1b''  |
 +^ spi1c              | <color #ff7f27>gpio ?</color>  | gpio24                        | gpio27                        | gpio26                        |                            |                                                                    |
 +==== Software SPI ====
 +^ 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!
 +===== Konfiguration =====
 +  * Eigene Konfigurations-Datei für den ADXL anlegen \\ <code | adxl345.cfg>
 +[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,      # 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
 +</code>
 +  * folgende Anpassungen sind nötig: 
 +    * seriellen Port eintragen 
 +    * Den Chip Typ ''accel_chip'' anpassen
 +    * Die Bettmitte bei ''probe_points'' ggf. ändern
 +    * Evtl. die ''axes_map'' anpassen 
 +    * Den Bus korrekt konfigurieren mit ''cs_pin'' und ''spi_bus'' (bzw. ''spi_software_...'')
 +
 +
 +===== Dual ADXL =====
 +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 \\ <code >
 +[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
 +</code>
 +===== Test =====
 +  * in der MainSail Konsole mittels \\ ''ACCELEROMETER_QUERY'' \\ Als Ergebnis sollte in etwa sowas kommen: \\ ''accelerometer values (x, y, z): -1110.308913, 1184.329507, 11414.822920''
 +  * Sollte der Test folgenden Fehler bringen ist die Verkabelung oder die Konfiguration falsch! \\ ''Invalid adxl345 id (got 0 vs e5)''
 +
 +===== Auswertung =====
 +https://www.klipper3d.org/Measuring_Resonances.html#installation-instructions
 +
 +
 +===== Einbauposition =====
 +Grundsätzlich sollte der ADXL345 so nah wie möglich an der Nozzle platziert werden. Am besten direkt an der Nozzle montiert ...
 +
 +===== Links =====
 +  * Klipper Dokumentation \\ https://www.klipper3d.org/Measuring_Resonances.html
 +  * Klipper with ADXL345 + Raspberry Pi clone (RP2040 zero) \\ https://travis90x.altervista.org/klipper-adxl345-raspberry-pi-rp2040-zero/?doing_wp_cron=1708409012.1427578926086425781250
 +  * Connect your ADXL345 to your host Raspberry Pi via a RP2040-Zero \\ https://github.com/bassamanator/rp2040-zero-adxl345-klipper
 +  * ADXL Nozzle Mount \\ https://www.teamfdm.com/files/file/720-adxl345-nozzle-mount/
 +  * Fysetc Input Shaper \\ https://github.com/FYSETC/FYSETC-PortableInputShaper/tree/main
 +  * Discourse \\ https://klipper.discourse.group/t/raspberry-pi-pico-adxl345-portable-resonance-measurement/1757
 +  * Beschleunigungssensor ADXL345 hinzufügen \\ https://de.ifixit.com/Anleitung/Beschleunigungssensor+ADXL345+hinzuf%C3%BCgen/147745
 +  * Vergleich der Position \\ https://www.youtube.com/watch?v=ufmUmeDnr0Y
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki