Open source Panasonic/Flyer eBike/Pedelec Controller

Diskutiere Open source Panasonic/Flyer eBike/Pedelec Controller im Controller/Regler, Fahrerinformation, Elektronik Forum im Bereich Diskussionen; So der 10€ Controller mit Hallsensoren funktioniert einwandfrei: Jetzt wäre schön wenn mir jemand die drei Pins vom Drehmoment Sensor erklären...
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
66
Ort
bayern/thüringen
So der 10€ Controller mit Hallsensoren funktioniert einwandfrei:

Jetzt wäre schön wenn mir jemand die drei Pins vom Drehmoment Sensor erklären mag.

Das Roland und Dankeschön.
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
66
Ort
bayern/thüringen
Tag 2, das Auslesen von dem Drehmomentsensor geht super einfach:
  • Blau an GND vom Arduino Nano
  • Weiß mit 20 kHz Rechteck ****(pin_Pwm,20000);
  • Gelb über Diode an zB 1 uF Kondensator und analogRead(A0);
Kompletter Code:
Code:
#define pin_Pwm 12
#define SUM 100

void setup() {
  pinMode(pin_Pwm, OUTPUT);
  ****(pin_Pwm,20000);
}

void loop()
{
  double fRead = 0;
  unsigned long iSum = 0;
  unsigned long iTimeSum = millis() + 500;
  while (millis() < iTimeSum)
  {
    iSum++;
    fRead += analogRead(A0);
  }
  fRead /= iSum;
  Serial.print(iSum); Serial.print("\t");Serial.println(fRead);
}
Ohne Belastung der Tretkurbel kommt dann dauerhaft:
Code:
3985    170.47
3985    170.45
3983    170.42
3993    170.42
Und wie im Video mit Hand gedrückt:
Code:
3984    172.25
3984    173.71
3992    173.09
3982    176.32
3982    184.17
3988    185.84
3983    186.37
3984    186.42
3982    186.62
3991    186.83
3983    186.95
3982    187.24
3989    187.10
3980    187.44
3981    185.07
3983    174.48
3992    173.07
3985    173.07
3982    173.53
3992    177.52
3983    182.25
3984    183.02
3983    183.84
3993    184.41
3983    184.59
3981    184.73
3981    176.16
3991    173.29
3982    173.04
3984    172.97
3991    172.30
3985    169.94
3984    169.86
3985    169.80
Das reicht mir erstmal völlig :)

Hier der Versuchsaufbau:

Jetzt möchte ich noch die pwm-Ansteuerung der China-Controllers heraus finden. Mit etwas Glück sind das einfach nur die 1000 Hz Servo Pwm aus dem Modellbau. Also analogWrite(pin_Motor,iSpeed);

das Roland
der kleine Physiker
 
RUBLIH

RUBLIH

Mitglied seit
01.08.2015
Beiträge
6.519
Vermutlich " Gleichrichten und etwas glätten.

Dann mit über einen OP mit entsprechendem Offset und Gain jagen ?
 
Zuletzt bearbeitet:
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
66
Ort
bayern/thüringen
traurig dass die Leut heut nicht mehr lesen..

Hier nur die komplette Pedelec Ansteuerung:
Code:
#define pin_Pwm 12
#define pin_Mot 10
#define SUM 100

void setup() {
  Serial.begin(115200);
  pinMode(pin_Pwm, OUTPUT);
  ****(pin_Pwm,20000);
}

float fStop = 0;
int iSpeed = 0;
void loop()
{
  double fRead = 0;
  unsigned long iSum = 0;
  unsigned long iTimeSum = millis() + 500;
  while (millis() < iTimeSum)
  {
    iSum++;
    fRead += analogRead(A0);
  }
  fRead /= iSum;
  if (fStop)
  {
    iSpeed = fRead<(fStop+5) ? 0  : (255.0*(fRead-fStop))/10 ;
    AM
  }
  else if (millis()>5000)    fStop = fRead;

Serial.print(iSum); Serial.print(": ");Serial.print(fRead);Serial.print("\tstop: ");Serial.print(fStop);Serial.print("\tspeed: ");Serial.println(iSpeed);
}
Und hier nochmal der komplette Aufbau:

Morgen kann ich das Rad eigentlich schon wieder zusammenbauen :)
 
Hochsitzcola

Hochsitzcola

Mitglied seit
04.09.2009
Beiträge
2.160
Details E-Antrieb
NC FH154 mit EB306 und EB-Precontroller
Schöne Bastelei :)
Leider im Inhalt und im Titel etwas verwirrend, ich lese lieber einen Schaltplan als Youtube-Videos zu gucken. Ich denke, du wirst schnell feststellen, daß eine Ansteuerung nur über das Drehmomentsignal unbefriedigend ist. Aber mit dem Arduino Board kannst du ja beliebige "Intelligenz" in die Berechnung der Ansteuerspannung stecken.

Ein OP würde dem System auf jeden Fall auch gut tun, du hast ja nur wenige digits Auflösung.

Gruß
hochsitzcola
 
Zuletzt bearbeitet:
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
66
Ort
bayern/thüringen
Heute erste kurze Fahrt :)
Könnte mal mit der Teileliste beginnen..

Die 40 Volt sind zu viel für den LM317 Linearregeler auf dem Motorcontroller. Wird kochend heiß und schaltet dann ab. Hab ihn heute ausgelötet und durch LM2596 Modul ersetzt: https://de.aliexpress.com/item/32611546949.html
Laut Datenblatt kann der maximal 45 Volt.
Eingestellt werden muss er auf 14 Volt.

Sowohl im Motor als im Display am Lenker hab ich einen Arduino Mini Pro verwendet. Ich empfehle die seltene Version bei der die I2C Pins A4 und A5 nicht dämlichst im Inneren liegen sondern an der einen Kopfseite. In der ATM328 Version aktuell hier zu bekommen: https://de.aliexpress.com/item/32978427914.html

Beide Arduinos kann ich bequem von aussen am Motor programmieren. Dazu braucht ihr USB-UART mit DTR pin. Das Ding mit USB Mini Buchse finde ich am bequemsten: https://de.aliexpress.com/item/32971767031.html

Die Verbindung per I2C klappt problemlos! Das Display agiert bei mir als Slave. Anstatt der zwei Pullup-Widerstände hab ich einfach noch ein kleines I2C Module ins Display gepackt. Temperatur und Feuchtigkeit. Im Motor wäre aber vielleicht ein 9-Axis Beschleunigungs/Neigungs/Kompass Modul nett. Wobei der Kompass wohl nicht funktionieren wird..

Diesen Motor Controller hab ich verbaut: https://de.aliexpress.com/item/32728993792.html
Übrigens immer über die Smartphone App einkaufen. Da gibt es immer kräftig Rabatte !

Hier der LM317 auf dem Controller:
Motor Controller LM317 to LM2596 .jpg


Da ich noch meine ganze Elektronik samt Display an die 5V hänge, könnte der kleine Linearregeler neben dem LM317 vielleicht auch zu heiß werden.

Zur Leistungsmessung hab ich einen 20A Hall Sensor in die positive Zuleitung vom Akku gehängt: US $1.79 |20A Bereich Stromsensormodul ACS712 Modul Für Arduino-in Integrierte Schaltungen aus Elektronische Bauelemente und Systeme bei Aliexpress.com | Alibaba Gruppe

Um den Drehmomentsensor auszulesen hab ich eine Diode, einen 0,1 uF Keramikkondensator und ein 220k Ohm Widerstand verwendet.

Für das Backlight vom Display muss ich noch einen smd p-ch Mosfet auf die kleine 6x6 pin lochrasterplatine im Display löten.
Als Display ein SPI 1,8" TFT: https://de.aliexpress.com/item/32418443556.html
Display.jpg

Wobei langsam die ePaper Displays bezahlbar werden: https://de.aliexpress.com/item/33011304701.html

Das original Display ist mit Heißkleber verschlossen. Also einfach das Ding für ein paar Minuten bei 100°C in den Umluftbackofen legen.
Das alte Display lässt sich mit zwei Pins von der alten Platine. Dann den linken Teil mit feiner Metallsäge absägen, so daß man alle 5 Tasten noch an den Arduino Mini hängen kann (todo).

Auf meinem Display oben zu sehen:

t = Drehmoment, s= Null-Drehmment
V= Spannung (noch zu eichen), A = Strom
i= pwm Controller, k = Geschwindigkeit in km/h
o= Motor An/Aus

Als Verbindungsstecker für die Arduio-Lochrasterplatine im Motor empfehle ich JSD 2,54mm Stecker: US $0.75 |JST XH2.54 XH 2,54mm Draht Kabel Anschluss 2/3/4/5/6/7/ 8/9/10/11/12/13 Pin Pitch Männlich Weiblich Steckdose 30 cm Draht länge 26AWG-in Steckverbinder aus Licht & Beleuchtung bei Aliexpress.com | Alibaba Gruppe
Es braucht für die vielen Kabel zwei 5 pin Stecker und zwei 6 Pin Stecker. Am Besten auch für die UART auf dem Arduino Mini..

Die 3pin Steckerbuchse für den Drehmomentsensor kann man aus der alten Platine auslöten.
Die andern alten Buchsen haben so 2mm Rasterabstand, die taugen für Lochrasterplatine nicht.

Wobei ich eigentlich keinem Empfehlen kann, die Platine selbst zu verdrahten..
Da sollten wir eher kleine Kickstarter Kampagne machen und dort ein Bastelkit mit fertigen Platinen für Motor und Display, sowie Stecker-Satz anbieten.

Wenn ich den Motor das nächste Mal aufmache, drehe ich wieder Video für Euch.

das Roland
Ideen immer zu mir :)
Ausreden woanders hin :-(
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
66
Ort
bayern/thüringen
So ich bin wieder für ein bis zwei Monate weg. Bin aber ja eigentlich schon fertig und werde bei nächster Gelegenheit den Arduino code auf meinen GitHub account hochladen.

Das Roland und

Bin mir nicht mehr sicher ob sich eine eigene Lösung wirklich lohnt. Vielleicht besser einen Arduino mini nur nehmen um den Drehmomentsensor in ein an/aus für billigen E-Bike Controller zu übersetzen? Der muss dann halt irgendwo aussen dran.

Oder dieser interne Controller ist gar kompatibel ? US $47.48 29%OFF | TSDZ-2 Mid drive Motor Inner Controller Replacement Electric bicycle controller 250W/350W 500W motor conversion kit

Hab noch ein günstiges LCD Display entdeckt:
US $3.73 8%OFF | ShengYang 1pcs Lcd12864 12864-06D, 12864, LCD module, COG, with Chinese font, dot matrix screen, SPI interface
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
66
Ort
bayern/thüringen
So hab mal wieder eine Woche an dem Flyer programmiert.
Die I2C Wire library der Arduino IDE hat ja keine timeouts enthalten (wie kann man nur so blöd sein..), drum musste die twi.c und twi.h aus
Arduino\hardware\arduino\avr\libraries\Wire\src geändert werden.

Totzdem hängt sich der Arduino im Motorgehäuse immer noch ab und an auf. Was sehr übel ist wenn der Motor gerade an ist.
Zum Glück schaltet der BLDC Controller bei Überlast ab wenn man die Bremsen anzieht. Aber so sind mir ja schon mal zwei Mosfets durchgebrannt.

Meine China Klone haben noch alten bootloader bei welchem der watchdog nicht funktioniert (dauerreset wenn einmal ausgelöst) und ich hatte keine Lust die Gehäuse zu öffnen um dann per spi neuen bootloader zu installieren. Hab drum erstmal watchdog-callback-funktion welche dann mit "jmp 0" einen software reset auslöst.
Das passiert sogar manchmal.

Es passiert aber immer noch, dass der Arduino im Motorblock abschmiert.
Scheint mit Überlastung des BLDC controllers zusammen zu hängen.
Da greife ich 11 Volt ab, die ich dann ja zusätzlich noch mit step-down modul auf so 6 Volt herunter setze, bevor die beiden Arduino Mini sie zur Verfügung gestellt bekommen.
Deren Eingangsspannung sollte also eigentlich genug geglättet sein.
Könnte sein dass ich GND für die Arduinos hinter dem Shunt-Widerstand des BLDC Controllers abgreife, so dass bei Überlast GND um die Shuntspannung springt.
Denke aber nicht dass das das Problem ist.

Dann wäre natürlich noch möglich, dass heftige Störstrahlung im Gehäuse den Arduino aufhängt. Der Arduino am Lenker läuft ja weiter.
Wenn so was passiert muss man den Akku heraus nehmen und wieder einsetzen um das System neu zu starten.

Nicht gut. Hab die Reglung verfeinert um solche Überlast-Szenarien möglichst auszuschließen.
Problem ist halt, dass mit nur einem Magnet in der Speiche ich erst nach frühstens einer Sekunde das Rad als stehend definieren kann.
Dann braucht es zum neu anfahren ein kräftigeres (6 mal so viel) Drehmoment als wenn man dann rollt.
So vermeide ich nun dass jemand ängstlich die Bremsen anzieht und dann mit Fuß auf der Pedale an der Kreuzung steht..

Vielleicht wäre es sinnvoll, statt den analogen Hall Sensor für Strommessung einen INA226 zu nehmen. Den würde man einfach an den Shunt vom BLDC Controller hängen und hätte dann digital per I2C Strom und Spannung. Und man könnte den Alert-Pin des INA226 programmieren, bei Überstrom sofort den BLDC-Controller zu deaktivieren. Der Alert-Pin ist open-drain. Bei Überstrom könnte er also den BLDC-enable pin auf Masse ziehen. Diesen enable pin mit Kondensator puffern und natürlich ein Widerstand zum Arduino. So Könnte der INA226 den BLDC-Conroller für so eine Sekunde ausschalten.

Der INA226 geht aber nur für 24 Volt. Bei 36 Volt müsste man einen INA219 nehmen und die Spannung wie gehabt mit Poti direkt zum Arduino messen.

Hab neue display library genommen und nun schöne große Fonts auf dem Display.

Wenn ich den Motor mal wieder aufmache (bootloader..) werde ich auch den Pin des Speichenmagnet auf 2 oder 3 wechseln um ihn dann per Interrupt abzufragen. So passiert es bei 25 kmh doch immer wieder dass eine Umdrehung übersehen wird. Hab das im aktuellen Code halbwegs gut hingebogen:

RoboDurden/openPanasonicBike

das Roland
Ideen immer zu mir.
 
P

PsychoMantis

Mitglied seit
02.05.2013
Beiträge
213
Sehr interessantes Thema.
Du baust also an einem voll programmierbarem Arduino-Controller.
Es gab hier schon so ein Thema und es sah auch vielversprechend aus, doch leider nicht zu Ende gemacht.
Frage noch zu zu dem Controller: steuert er den Motor mit Sinus an oder ist es eher Blockkommutierung?
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
66
Ort
bayern/thüringen
Also mein Flyer fährt.. schon recht zuverlässig :-/
Bei Überlast hängt sich manchmal noch der Arduino im Metallgehäuse auf.
Kann noch nicht sagen warum. Vielleicht doch die Störfrequenzen des bldc-controllers.
Da nehme ich ja einfach einen billigen 10 euro bldc-hall-controller aus china. Und der macht als Vollbrücke sicher nur block-kommutierung.
Die Geräuschentwicklung kommt bei diesen Panasonic Motoren aber wohl eh durch das Getriebe.

Einen Nachbau kann ich nur bedingt empfehlen. Wenn dann doch vielleicht den Arduino ausserhalb vom Gehäuse. Dann wäre nur der bldc-controller eingebaut und es wäre drinne aufgeräumter. Wenn der Arduino draussen ist, kann man auch gleich einen esp32 mit bluetooth nehmen.
Dann vielleicht auch gleich an den lenker und mit i2c runter zur batterie um per i2c strom und spannung zu messen (4x adc ..)
 
Thema:

Open source Panasonic/Flyer eBike/Pedelec Controller

Werbepartner

Oben