jenkie / Arduino-Pedelec-Controller

Software for the Pedelec/E-Bike controller based on Arduino hardware, see www.pedelecforum.de "ForumsController"
http://www.pedelecforum.de/forum/showthread.php?14653-ForumsController
81 stars 44 forks source link

Codereview #21

Closed pillepalle127 closed 12 years ago

pillepalle127 commented 12 years ago

Das ist kein Issue, sondern ein Review Feedback/eine Frage. Mir ist aufgefallen, dass im Code merfach ungefilterte Werte verwendet werden, insbesondere in zetkritischen Funktionen. Das halte ich fuer Problematisch -> Vorschlag: wir sollten idealerweise zwei Filterstufen haben (langsam/schnell statt einer), um in folgenden Funktionen mehr Sicherheit zu haben> -First run check auf geladene Batterie (237) -Leistungsberechnung (232) -Voltage cut-off (311) -Voltage emergency cut-off (378) -History (394/395) -EE Variablen (380)

Im Zweifelsfall muss die Zeitkonstante des Filters abgewartet werden, um ein einschwingen des Wertes sicher zu stellen. Diese liegt aber nach belieben tief.

pillepalle127 commented 12 years ago

P.s. alle findings in Datei Arduino_Pedelec_Controller.ino

Viele Gruesse

jenkie commented 12 years ago

Was genau meinst du mit Filterstufen? Hardware-Filterstufen? Software-Filterstufen? Wo siehst du denn das Problem? Fehlmessungen der Arduino-ADCs?

pillepalle127 commented 12 years ago

Ja, ich meine die Sw Filterstufen. HW Filter bietet der 328 nicht. Hier hast du volles Rauschen und Jitter. Besonders der erste Messwert nach POR fuer die +2v Abfrage kommt mir mutig vor. Aber wenn das zuverlaessig funktioniert ist es kein grosses Problem.

jenkie commented 12 years ago

Die erste Abfrage (2V Spannungsunterschied) wird erst einige Sekunden nach dem Anstecken der Batterie ausgeführt, weil zuerst der Arduino booten muss, dann das Display und die Pins vorbereitet werden, und erst dann die Hauptschleife ausgeführt wird. In jedem Fall bleibt so genug Zeit, dass sich die Spannung auf ihren Endwert stabilisiert. Mit Fehlmessungen von den ADCs hatte ich noch nie Probleme. Vielleicht meldet sich aber jemand? :D

pillepalle127 commented 12 years ago

Hi, ich komme grundsaetzlich aus der AVR C-Ecke und tue mich mom. mit der Arduino Sketcherei noch ziemlich schwer. Sie mag den Einstieg erleichtern, verschleiert und verwaessert aber die Moglichkeiten und Performance der HW-nahen Programmierung doch sehr. Ich bin mir noch nicht 100% im Klare darueber, ob ich mich daran gewoehnen / mich damit abfinden moechte. Zu deinem Punkt mit dem ADC: mit der Strommessung habe ich ernste Probleme. Ich finde die PWM der H-Bruecken 1:1 in den ADC Werten in Form starken Rauschens in kHz Bereich wieder (ich teste gerade mit dem Crazyman 3-Stufen Controller). Dies hat mit die Leistungsberechnung (aus den ungefiterten Werten) komplett zunichte gemacht. Von einer stabilen Regelung konnte keine Rede sein. Ich konnte die Situation durch einen RC Tiefpass in HW etwas entschaerfen.

Ich werdezusaetzlich in SW auf zwei Filterstufen filtern. Eine schnelle fuer die internen Eingangswerte und eine langsame fuer das LCD. Der mom. Umfang an Float Variabeln und Berechnungen ist ziemlich hoch. Dies sollte man moeglichst vermeiden, da extrem Ressourcesfressend. Meine Firterstufen wuerden eher wie folgt aussehen: current_slow = current_slow - (current_slow >> 3) + (current >> 3); // 12,5% voltage_slow = voltage_slow - (voltage_slow >> 3) + (voltage >> 3); //12,5% current_fast = current_fast - (current_fast >> 2) + (current >> 2); // 25% voltage_fast = voltage_fast - (voltage_fast >> 2) + (voltage >> 2); // 25%

Desweiteren wuerde ich den Filter in der ADC ISR laufen lassen (Laufzeittechnisch im Gegensatz zu den floatingpoint Operationen durchaus denkbar), um eine zuverlaessige Zeitkonstante zu erreichen. Die Syntax bei Arduino muss ich mir aber erst nochmals zugute fuehren. Zur Not eben ganz 'normal' ueber die AVR ADC Konfigurationsregister einstellen.

jenkie commented 12 years ago

Zu deinem Punkt mit dem ADC: mit der Strommessung habe ich ernste Probleme. Ich finde die PWM der H-Bruecken 1:1 in den ADC Werten in Form starken Rauschens in kHz Bereich wieder (ich teste gerade mit dem Crazyman 3-Stufen Controller). Dies hat mit die Leistungsberechnung (aus den ungefiterten Werten) komplett zunichte gemacht. Von einer stabilen Regelung konnte keine Rede sein. Ich konnte die Situation durch einen RC Tiefpass in HW etwas entschaerfen.

Auf dem FC ist ein Tiefpass mit einer 3dB-Frequenz von 16 Hz (10 kOhm, 1 µF). Wie schafft deine PWM-Frequenz im mutmaßlichen KHz-Bereich, da drüber zu kommen? Der Tiefpass könnte sogar noch viel langsamer ausgelegt werden - wahrscheinlich reicht 1 Hz. In der Praxis gibts eigentlich keine mir bekannten Probleme, die vom PWM in der Strommessung herrühren.

pillepalle127 commented 12 years ago

Bitte? 'Mutmaßlicher' kHz Bereich? Was denkst du in welchem Bereich die H-Bruecken choppen? Was denkst du wie ich die Stoerung gemessen habe? Wie erwaehnt verwende ich nicht den FC, sondern baue mir den Arduino nackt in den Controller. Ein RC TP war auch mein erste Gedanke und laut meines Oszis reicht bereits fc=32Hz aus das Gezappel zu beruhigen. Du schreibst, du haettest noch nie Probleme mit dem ADC gehabt. Wieso baust du dann ueberhaupt einen TP ein? *g However, Feedback scheint mir hier nicht erwuenscht. Ich habe eh schon die Nase voll von dem Arduino Geraffel (am schlimmsten ist die IDE - Schmerz pur). Als Eva-Board ganz brauchbar, aber sonst?

jenkie commented 12 years ago

Hey, ganz langsam, ich glaube du hast was in den falschen Hals bekommen. Feedback ist sicherlich erwünscht! Als ich mutmaßlich geschrieben habe, hatte ich überlesen, dass du schon kHz-Bereich geschrieben hattest - sorry. Und nein, ich habe keine Ahnung, wie die H-Brücken choppen, aber mir schwebte was im kHz-Bereich vor, was du ja schon geschrieben hattest. Und wegen dem Tiefpass am ADC: Ich hatte noch nie Probleme MIT Tiefpass am ADC - ohne Tiefpass gibt das tatsächlich nur Schmarrn. Mit einem 32Hz-Tiefpass sind die Probleme doch aber komplett weg, oder? Und es zwingt dich übrigens niemand, einen Arduino zu benutzen - wenn du die Fähigkeit hast, AVR direkt zu programmieren, ist das sicher eine feine Sache. Ich kanns nicht :D