Universelle Blinker-Steuerung mit PIC12F508 für E-Scooter/E-Bikes/Mopeds

8 November 2024
52
31
E-Scooter
G2
Hallo,

aufgrund der StVO-Novelle, die quasi fast den gesamten Bestand von E-Scootern in Österreich seit rund 10 Tagen illegal machte, ohne dass es vernünftige fixe Nachrüst-Möglichkeiten gibt, die für den gewöhnlichen Besitzer realistisch umsetzbar sind, ohne dass die Kosten oder der Aufwand dafür unverhältnismässig wären (*)

Nun zur Schaltung, die ich bisher noch nicht wegen Zeitmangels in die Praxis umgesetzt habe, aber das demnächt vorhabe. Sobald der Test OK ist, aktualisiere ich den Beitrag (und den Code)

Wenn jemand ein PICKit und ein Steckbrett zur Hand hat, kann er aber gerne auch für mich schonmal testen ;)

Features:
- Es werden sowohl Momentan-Taster (wie bei Ninebot-Scootern mit Blinkern) als auch Schalter (wie bei Mopeds oder Lime-Leih-Scootern) unterstützt, was über einen Pin konfigurierbar ist.
- Es werden sowohl Active-High (LED in Durchlassrichtung oder P-Kanal-MOSFET) als auch Active-Low Ausgänge (LED entgegen Durchlassrichtung an 5V oder N-Kanal-MOSFET) unterstützt, was über einen Pin konfigurierbar ist
- Warnblinker-Funktion

Bedienung Taster-Variante:
- Kurz L/R drücken: Blinker der jeweiligen Seite an/aus oder Warnblinker aus
- Lang L/R halten: Warnblinker an

Bedienung Schalter-Variante:
- L/R an: Blinker der jeweiligen Seite an
- L+R an: Warnblinker an
- L+R aus: Blinker aus

Wenn man bei der Schalter-Variante auch den Warnblinker haben will, muss man über eine OR-Schaltung sicherstellen, dass der zusätzliche Taster beide Eingänge L und R auf Masse zieht. Dazu kann man es einfach passend verkabeln (z.b. DPST-Switch nehmen oder SPST-Switch mit Dioden/7432-Gatter parallel schalten)

Benötigt werden:
1x PIC12F508 (Code bzw. HEX läuft unmodifiziert auch auf PIC12F509 oder mit Modifikation der Config-Bits auch auf den alten OTP-Varianten PIC12C508(A), PIC12C509(A) die jemand noch aus PS1-Modchip-Zeiten vielleicht herumliegen hat - allerdings muss der Chip natürlich leer sein, da er nur einmal beschreibbar ist, d.h. wenn du keinen Programmer hast und die Chips irgendwo gekauft wurden, geht es nicht)
1x Blinker-Module (die meisten laufen nicht mit 5V)
Beispiel:
2x MOSFET (P-Kanal oder N-Kanal, einstellbar) oder Relay/SSR-Module (gibt es als Low/High-Active)
z.b. bekannter N-Kanal MOSFET AO3400: https://s.click.aliexpress.com/e/_c4BXkg5Z

1x Blinker-Taster oder Blinker-Schalter (einstellbar), z.b. jene vom Ninebot F2 Pro
Beispiel:
Optional bei Blinker-Schaltern: Ein Warnblink-Schalter

+ Spannungsregler-Module um die benötigten Spannungen aus der Akku-Spannung zu erzeugen (5V für den PIC, die Spannung für die LED-Module)

Test-Aufbau (ohne MOSFETs mit positiver Ausgangs-Logik):
- 2 LEDs mit Widerständen in Durchlass-Richtung auf PIC GP2 (DIP/SOIC Gehäuse Pin 5) und PIC GP4 (DIP/SOIC Gehäuse Pin 3) gegen Masse
- 2 Taster auf PIC GP0 (DIP/SOIC Gehäuse Pin 7) und PIC GP1 ((DIP/SOIC Gehäuse Pin 6) gegen Masse
- GP3 (DIP/SOIC Gehäuse Pin 4) gegen Masse, um Momentan-Taster auszuwählen
- GP5 (DIP/SOIC Gehäuse Pin 2) an 5V, um positive Ausgangs-Logik auszuwählen
- VDD (DIP/SOIC Gehäuse Pin 1) an 5V
- VSS (DIP/SOIC Gehäuse Pin 8) an Masse

* von 2 bestellten Aufsteck-Blinkern ist ein Set kaputt, beim anderen, das funktioniert zwar, aber man muss immer dran denken 3 Teile aufzuladen: Fernbedienung, Blinker links, Blinker rechts. Vergisst man das bzw. geht der Akku auf der Fahrt aus, ist das natürlich nicht toll, denn die Blinker sind zwar tagsüber relativ sinnlos, aber Nachts doch besser zu sehen als ein Handzeichen.

Gerhard: Da ich den Beitrag nicht mehr bearbeiten kann - kannst du bitte oben die Anhänge entfernen und folgende einfügen sowie den Passus, dass nicht getestet wurde durchstreichen?
Mode-Edit; done

Der Code wurde jetzt auf einem Steckbrett erfolgreich getestet und ein Bug bzw. des Warnblinkers in der Taster-Variante behoben

Technische Erklärung: Der WDT, der von mir als "Interrupt" missbraucht wird sorgte dafür, dass der PIC resetted, während noch der Taster gehalten wird, was dazu führte, dass je nachdem, wie lange man den Taster hält und in welche Periode man fällt der Warnblinker ausgelöst wird oder nicht.

CLRWDT in der Routine sorgt nun dafür, dass der Reset während auf das Loslassen der Taster gewartet wird nicht ausgelöst wird. Das war kein Problem beim kurzen Drücken, aber wenn man die Taster für die Warnblink-Funktion länger als eine Blink-Periode gedrückt gelassen hat, ist der Fehler mit 50% Wahrscheinlichkeit bzw. je nach Länge des Gedrücktlassens aufgetreten.

Code:
READ_BUTTONS_2:
    COMF    GPIO, W                         ; READ GPIO INVERTED BECAUSE
                                            ; ACTIVE LOW
    ANDLW    (1 << SW_L) | (1 << SW_R)      ; MASK OUT INPUTS SW_L/SW_R
    XORWF    GPIO_SHADOW, W
    CLRWDT
    BTFSC    STATUS, Z                      ; SKIP IF ZERO BIT IS NOT
                                            ; SET (A BIT CHANGED)
    GOTO    READ_BUTTONS_2
    ; AT LEAST ONE ACTIVE LOW INPUT WAS ACTIVE (= INVERTED BIT WAS HIGH)
    GOTO    MAINLOOP


Aus meiner Sicht sollte der Code jetzt soweit passen.

Ebenso kann ich bestätigen, dass der Billig-Programmer K150 den PIC12F508 erfolgreich programmieren kann, da ich damit den Code auf den PIC12F508 geflasht habe. Die alten OTP-Varianten PIC12C508(A)/PIC12C509(A) kann der Programmer angeblich auch, aber die sind kritisch bzgl. VPP. Ich gehe aber stark davon aus, dass die niemand mehr (leer) herumliegen hat. Ich nutze für deren Programmierung einen alten PICstart Plus, ich denke ich habe noch ca. 20-30 Stk auf Lager.

Kann hier jemand Platinen layouten? Ich habe mich noch nicht in KICad eingearbeitet und EAGLECAD habe ich nicht mehr.

Ideal wäre ein Layout mit PIC12F508-I/SO (SMD), 2x AO3400A N-Kanal MOSFETs und evtl. einen AMS1117-5.0 sowie dazugehöriges "Vogelfutter" (Bypass 100nf für PIC, Gate-Widerstand (1k am PIC-Ausgang, 100k gegen GND, Logic-Select fix auf GND wenn N-Kanal MOSFETs genutzt werden, PIC GP3 Lötauge für GND = Taster oder offenlassen = Schalter, PIC hat internen Pull-Up auf GP3)

Würde sehr hilfreich sein.

PICKit-Clones gibt es übrigens günstig auf Aliexpress:

Ebenso wie den PIC K150-Programmer:

Mode-Edit: Thread bearbeitet laut Wunsch des TE.
 

Anhänge

Zuletzt bearbeitet von einem Moderator:
Das MAP-File sagt bei V0.2 des Codes: 155 out of 517 program addresses used, program memory utilization is 29%.
Benutzt werden somit 155 Words ROM und 7 Bytes RAM.

Um einen Blinker zu realisieren, braucht man keinen Cortex-M3 und selbst ein Cortex-M0 oder ATMEGA328P (Arduino) wäre Overkill.

Ohne Wahl des Modus bzgl. normaler oder invertierter Logik und Schalter oder Taster würde auch der kleinste PIC10F200 (256 Words ROM, 16 Bytes RAM) ausreichen - vielleicht stelle ich auch Varianten für diesen Chip fertig, bei denen man sich dann aber für eine von 4 Varianten fix entscheiden muss.

Der PIC10F200 ist kleiner als eine Bleistiftspitze. Mit AO3400A SOT-23 MOSFETs würde die ganze Platine so klein sein, dass man sie sogar ins Dashboard einbauen könnte.

Vermutlich ist der Strombedarf der Schaltung so gering, dass man die 5V direkt vom Dashboard abzapfen kann, zumindest meine Powerbank schaltet sich manchmal ab. Somit wäre nur noch die Thematik offen, wie man aus 42V die 9V für die Blinker-Module bekommt (Spannungsregler-Platine von Aliexpress, die 42V aushält)

Sobald ich Zeit finde und der M365 Pro 2 repariert ist, werde ich ihn damit ausrüsten und es testen - ich warte noch auf die Blinker-Schalter (Taster) aus China.
Ein Kabel vom Akku zum Lenker ist bereits verlegt worden.
 
also was ich mir zu dem thema wünschen würd, wär ein mini dome mit zwei superhellen leds, vorzugsweise bruchsicher (epoxidvergossen?), so ca. 1,5-2 cm zur montage durch den bestehenden lenkergriff, mini und bruchsicher.

die 5v /12v überlegung hab i au scho angestellt, mein pro2 würd sich über ein lenkerusb am blinkerschalter echt freun, wenn er schon einen stepdown konverter managen muss ;) aber das wird wohl kompliziert...

die tatsächlichen blinker sind alle bruchgefährdet. hab schon die ersten zerstörten lenkerstopfen gesehn.

kleiner, massiv & unproblematisch zum montieren solltense sein.
 
Es gäbe diese Blinker samt Bedienelement vom Xiaomi 4 Pro - sind zwar keine Domes, aber das bruchsichere Konzept vom Ninebot G2

Turn Signal Handlebar Left Right Turning Light For Xiaomi 4 Mi4 PRO PLUS MAX Electric Scooter Handle Grips Tail Accessories

Ob die auf die Lenkstange des Xiaomi Pro 2 passen müsste man aber schauen, ebenso welche Spannung verwendet wird (5V, 9V, 12V?). Theoretisch kannst du auch nur die LED Endstücke nutzen

Kompatibel mit der Schaltung sollten sie aber sein

Wenn du einen USB-Wandler nutzt (42V kompatibel) kannst du auch mit einem billigen USB-5V-9V/12V Konverter (zerlegen) die Spannung für die LEDs erzeugen und den PIC vom USB-Wandler direkt versorgen (parallel anlöten)

USB power boost line DC 5V to DC 9V / 12V Step UP Module USB Converter Adapter Cable 2.1x5.5mm Plug
 
Auf einem anderen Foto von Aliexpress sieht man, dass die Lenkstange eine Sichel-Form hat. Wenn der Durchmesser gleich ist sollte es passen
 

Anhänge

  • Screenshot_20260513-111458.AliExpress~3.webp
    Screenshot_20260513-111458.AliExpress~3.webp
    20,3 KB · Aufrufe: 2
  • Hilfreich!
Reaktionen: email.filtering
Falls du zerlegbare Domes findest (die man mit optisch klarem Epoxy ausgiessen kann) poste sie bitte wäre auch interessiert.

BTW: Kannst du den PIC programmieren oder brauchst du Unterstützung? Bin aus Wien.

Später ist auch ein Port auf STC 8051 geplant (die sind per TTL-UART programmierbar und ein Dongle hat fast jeder, der mal Router geflasht hat bzw. müsste man auch jedes Arduino Board dafür verwenden können)
 
1x Blinker-Module (die meisten laufen nicht mit 5V)
Beispiel:

Eine Messung des Stroms für das oben gezeigte Modul hat ergeben < 0.1A @ 5V (die 9V werden via USB 5V->9V Konverter erzeugt) pro Seite.

Somit sind es im Worst-Case 0.2A mit 50% Tastverhältnis. Kann man 0.2A @ 5V am Dashboard bei üblichen E-Scootern wie dem M365 (Pro), G30, ... abzapfen oder gibt es da Probleme? Denn das würde die Installation erheblich vereinfachen, weil man kein Kabel vom Akku zum Dashboard braucht.