Dieses Projekt nutzt das https://github.com/rp-rs/rp2040-project-template als Template.
Rust über https://rustup.rs/ installieren und anschließend ausführen:
rustup target install thumbv6m-none-eabi
cargo install flip-link
cargo install --locked elf2uf2-rsEs gibt zwei Möglichkeiten:
-
Den RP2040 mit gedrückter BOOTSEL-Taste per USB verbinden und die Firmware direkt bauen und flashen:
cargo run
-
Eine UF2-Datei bauen, die später manuell auf das RP2040-USB-Laufwerk kopiert werden kann:
cargo build --release elf2uf2-rs target/thumbv6m-none-eabi/release/rp2040-project-template throttle.uf2
Green LED Blinking: Sending CAN throttle command Red LED: Lever Locked
Der verwendete Encoder mit dem 5-poligen Stecker ist ein AS5600 und wird über I2C gelesen:
- Board-Stecker:
SDA,SCL,PWM/OUT,GND,3V3 - Am AS5600:
VCC -> 3V3,GND -> GND,SDA -> SDA,SCL -> SCL DIRhabe ich fest mitVCCverbunden.OUT/PWMwird von der Firmware aktuell nicht benutzt.
Die wichtigsten Parameter stehen am Anfang von src/main.rs:
MAX_CURRENT_A: maximal ausgegebener Strom bei vollständig ausgelenktem Gashebel, aktuell500.0A.DELAY_MS: Zeit zwischen zwei Ausgaben.20ms entsprechen 50 Hz.ENCODER_ZERO_RAW: Raw-Wert des Encoders in der neutralen Hebelposition.ENCODER_FORWARD_MAX_RAW: Raw-Wert bei vollständig nach vorne gedrücktem Gashebel.ENCODER_REVERSE_MAX_RAW: Raw-Wert bei vollständig nach hinten gedrücktem Gashebel.ENCODER_DEADZONE_COUNTS: Totzone von der Neutralstellung aus in jede Richtung.50bedeutet ungefähr 100 Counts Gesamttotzone.PRETEND_HALL_PIN_ON: Beitruewird der Hall-/Kill-Cord-Eingang für Tests als dauerhaft vorhanden behandelt.ENABLE_USB_LOGGING: Aktiviert beitruedie Ausgabe der Encoderwerte über USB-Serial.
Die Encoder-Endwerte dürfen je nach Einbaurichtung des Sensors größer oder kleiner als ENCODER_ZERO_RAW sein. Entscheidend ist, dass die Werte an den tatsächlichen Endpositionen des Hebels eingetragen werden.
Bei aktiviertem ENABLE_USB_LOGGING wird beispielsweise folgende Zeile ausgegeben:
encoder raw: 2237, throttle_milli: 0, can: 00000116#00000000
Die drei Werte bedeuten:
encoder raw: unverarbeiteter 12-Bit-Messwert des AS5600 von0bis4095.throttle_milli: aus Kalibrierung und Totzone berechnete Gasstellung.-1000entspricht dem einen Endanschlag,0der Neutralstellung und+1000dem anderen Endanschlag.can: Vorschau der tatsächlich gesendeten CAN-Nachricht im FormatCAN-ID#Payload.00000116ist dieSetCurrent-Nachricht für VESC-ID 22. Der achtstellige Payload enthält den vorzeichenbehafteten Stromwert als Ampere × 1.000. Im gesperrten Zustand ist dieser Payload immer00000000.
| SetDuty-Version | Aktuelle SetCurrent-Version |
|---|---|
VESC SetDuty, CAN-ID 0x16 |
VESC SetCurrent, CAN-ID 0x116 |
| Payload: vorzeichenbehafteter Duty-Wert von −100.000 bis +100.000 | Payload: vorzeichenbehafteter Stromwert von −500.000 bis +500.000 (Ampere × 1.000) |
| 50 Werte großes Glättungsfenster | Keine Glättung und keine Rampe |
| Vollständige Rampe dauert ca. 1 Sekunde | Ausgang folgt dem Gashebel unmittelbar |
| Ausgabe alle 20 ms / 50 Hz | Ausgabe alle 20 ms / 50 Hz |
| Null und der gesperrte Zustand werden explizit gesendet | Null und der gesperrte Zustand werden explizit gesendet |
| Encoder- und Hall-Auswertung wie in der aktuellen Version | Encoder- und Hall-Auswertung unverändert |