METOP Problem

Diskutiere METOP Problem im Controller/Regler, Fahrerinformation, Elektronik Forum im Bereich Diskussionen; Hallo an alle, Erstmal will ich sagen das ich hier neu bin und deswegen entschuldige ich mich gleich mal dafür, falls ich was falsch gemacht habe...

diyebikepower

Dabei seit
23.11.2020
Beiträge
4
Hallo an alle,

Erstmal will ich sagen das ich hier neu bin und deswegen entschuldige ich mich gleich mal dafür, falls ich was falsch gemacht habe beim erstellen dieses Beitrags.

Ich bin in letzter Zeit dabei ein älteres gekauftes E-bike wieder Fit zu machen. Da dieses leider einen Fehler hat und nicht mehr vom Hersteller geupdated (bzw. der Fehler weg gedrückt) wird, habe ich mich entschlossen nur den Controller und den Sensor, in meinen Fall jetzt der anscheinend beliebte E-Rider T9, zu ersetzen und das Fahrrad soweit wie möglich so zu lassen wie es ist. Nachdem ich die ganze Steuerung rausgeschmissen und den Motor (ein älterer ohne Hallsensoren) an einen entsprechenden Kuteng Controller angeschlossen habe, konnte ich mit einem Gasgriff auch den Motor zum drehen bewegen. Durch die Block Kommutierung ist er natürlich etwas lauter, aber damit kann ich erst mal leben.

Bisher hatte ich immer einen normalen PAS Sensor (also mit Magneten), was ok war, aber ich würde gerne sehen ob das ganze Verhalten nicht sanfter ist mit einen Drehmomentsensor. Zuerst habe ich mir deshalb die Open Source Firmware zu dem Kuteng Controller von @Hochsitzcola angeschaut, nur um dann festzustellen, dass ich den falschen Controller habe. Dann bin ich auf das METOP ( Minimal_E-Bike_Torquesensor_Precontroller ) Projekt von @Hochsitzcola gestoßen. Das war genau das was ich gesucht habe. Also Digisparks (rev 3) und alle übrigen Sachen bestellt und dann der Anleitung gefolgt. Da ich öfters mit Microcontrollern nebenbei arbeite, war das absolut kein Problem den Code aufzuspielen. Auf einer Lochrasterplatine noch eben alles zusammen gelötet und dann so verbunden, wie es auf dem Bild zu sehen war. Achso, natürlich habe ich vorher die entsprechenden Werte für die globalen Variablen ermittelt und angepasst. Natürlich hat erst mal nichts funktioniert, aber da ich sowas kenne habe ich jetzt versucht den Code in kleinere Teile zu zerlegen, um zu sehen wo der Fehler liegt. Ich kann mit Sicherheit sagen, dass der ERider komplett in Ordnung ist. Nachdem ich den Original Code so verändert habe, dass wenn ich nur das Torque Signal auslese und dann eine Spannung an den Kuteng als Eingang sende, dann konnte ich mit mehr oder weniger Druck die Geschwindigkeit des Rades steuern.

Mein Problem ist aber jetzt das PAS Signal. Es wird anscheinend irgendwie nicht erkannt. Ich wollte dann wissen ob der Interrupt überhaupt funktioniert und habe so ein minimal Beispiel geschrieben:

C++:
boolean PASFlag = 0;

void setup() {
  pinMode(1, OUTPUT);
  pinMode(2, INPUT_PULLUP);
  attachInterrupt(2, PAS_Puls, CHANGE);
}

void loop() {
   if(PASFlag){
      digitalWrite(1, HIGH);   
   }
}

void PAS_Puls(){
  PASFlag = 1;
}

Damit müsste die Led doch eigentlich Leuchten, wenn ich Ground und P2 des Digisparks verbinde, oder? Also bei mir ist sie immer aus.
Ansonsten kenne ich mich leider nicht so gut in der Registerschreibweise aus, deshalb hier erst mal nur den Teil den ich testen will.

Vlt. hat ja jemand eine Idee, wieso das nicht geht. Ich habs auch schon mit einen anderen Digispark probiert, aber auch kein Glück gehabt. Im Moment schaut es also so aus, als ob der Interrupt nicht funktioniert

Vielen Dank schon mal

diyebikepower
 

Hochsitzcola

Dabei seit
04.09.2009
Beiträge
3.306
Details E-Antrieb
Gazelle mit BionX IGH3 + OpenSource Firmware
attachInterrupt(2, PAS_Puls, CHANGE);
Die Interruptquelle ist falsch, die muss 0 sein, PIN 2 ist die Interruptquelle Int0.

Ich hab es bei github schon korrigiert.

Code:
attachInterrupt(0, PAS_Puls, CHANGE);

Es ist auch empfehlenswert, vor das Poti noch einen Vorwiderstand zu hängen, da die Zenerdiode vom Digisparks bei einem Pegel größer 3,6 V durchschaltet und hier nur ein 66 Ohm Widerstand bremst.

Gruss
hochsitzcola

1606374499191.png
 
Zuletzt bearbeitet:

diyebikepower

Dabei seit
23.11.2020
Beiträge
4
Vielen Dank @Hochsitzcola,

sowohl für das auskorrigieren als auch den Tipp mit dem Vorwiderstand. Da ich noch am zusammenbauen bin, dauert es noch eine Weile bis ich die erste Testfahrt damit machen kann, aber der Motor dreht sich jetzt zumindest wenn ich trete und das Rad als Widerstand am Boden streifen lasse. Ich werde es dann wahrscheinlich noch ein bisschen feinjustieren müssen, im Moment läuft es noch etwas hakelig, wobei man das noch nicht so genau sagen kann, wenn man nicht eine richtige Runde drehen kann. Ich habe noch ein anderes Problem, was ich sicher selbst lösen kann, aber vlt. habt ihr das Problem ja auch und zwar wenn ich den Digispark einschalte (mit Strom versorge) und der Poti nicht auf HIGH steht (also so, das er die kompletten 5v durchlässt), dann kommt der Digispark nicht über das Booten hinaus. Die LED blinkt dann einfach die ganze Zeit, wie er es normalerweise nur beim booten macht. Wenn er aber auf HIGH steht, funktioniert alles so, wie es soll. Jetzt weiß ich natürlich nicht, ob der angesprochene Widerstand das Problem nicht sogar löst, weil ich den noch nicht eingebaut habe.

Sobald ich weiter machen kann und es was neues dazu gibt, berichte ich nochmal.

Bis dahin danke nochmal

diyebikepower
 

diyebikepower

Dabei seit
23.11.2020
Beiträge
4
Hallo nochmal,

Nachdem ich es jetzt nach einiger Zeit geschafft habe, dass Fahrrad ordentlich zusammen zu bauen und erste Testfahrten hinter mich zu bringen, habe ich noch ein Problem, dass ich noch nicht lösen konnte. Eigentlich sollte es simple sein und wenn man den Code zu 100% verstehen würde, ist es das vermutlich auch. Mein Problem besteht in der Skalierung des Signal Ausgangs. Es geht um die Zeile 42, die normalerweise ja so aussieht

Spannung_Ausgang = (analogRead(3) * Torque_kumuliert) / PAS;

und die ich wie folgt geändert habe

Spannung_Ausgang = (Torque_kumuliert / PAS) * 8

Da ich später den Poti eigentlich komplett entfernen möchte und auf einen festen Wert einstellen möchte, habe ich das analogRead(3) entfernt und dann mit mal 8 multipliziert um es zu skalieren. Das Problem ist, dass ich mit dem Fahrrad jetzt immer Vollgas fahre, sobald ich anfange zu treten. Wenn ich die 8 durch eine 7 ersetze, passiert dagegen gar nichts mehr. Skaliere ich an der falschen Stelle? Was sind denn die Grenzen von Torque_kumuliert und PAS? Wenn ich es richtig verstanden habe geht Torque_kumuliert von 0 bis 1024 und PAS von 0 bis 64000. Ist der Unterschied zu groß, sodass die Skalierung quasi den größten Teil ausmacht und es deswegen nicht funktionieren kann. @Hochsitzcola, kannst du mir nochmal helfen oder irgendjemand anderes, der das schonmal gemacht hat?

Bleibt gesund!
diyebikepower
 

Hochsitzcola

Dabei seit
04.09.2009
Beiträge
3.306
Details E-Antrieb
Gazelle mit BionX IGH3 + OpenSource Firmware
Spannung_Ausgang = (Torque_kumuliert / PAS) * 8
Na ja, wenn ich das grob überschlage, kann da ja nur was sehr kleines bei rauskommen. Hast du denn mit Poti eine vernünftig funktionierende Einstellung finden können? Ein Faktor von 8 würde ja bedeuten, daß du das Poti fast komplett zu hast. Im Code habe ich ja schon angemerkt, daß hier wahrscheinlich ein Faktor eingeführt werden muß um in die richtige Größenordnung zu kommen.
Auf jeden Fall solltest du immer erst alles aufmultiplizieren und erst ganz zum Schluß dividieren. Das sind ja Integer, wenn bei (Torque_kumuliert / PAS) etwas kleiner 1 rauskommt (und das wird es fast immer, da PAS ja viel größer ist als Torque) ist das für den Prozessor Null, da kannst du im Anschluß multiplizieren was du willst, das bleibt immer Null.
Also besser:
Code:
Spannung_Ausgang = (Faktor * Torque_kumuliert)/ PAS

Was sind denn die Grenzen von Torque_kumuliert und PAS?
Die Variablen sind als unsigned int definiert, das bedeutet bei Arduino eine 16 bit Zahl. Also Werte von 0 bis 65.535
Was Arduino da im Hintergrund bei einem 8bitter wie dem ATTiny85 draus macht und ob es da zu unerwarteten Überläufen kommen kann, weiß wahrscheinlich nur der liebe Gott....:unsure:


Viel Erfolg
hochsitzcola
 

diyebikepower

Dabei seit
23.11.2020
Beiträge
4
So wie du es gesagt hast, also den Faktor nicht dahinter, sondern davor, habe ich es auch probiert. Ich habe ziemlich lange testen müssen und kann sagen, dass bei 32770 noch gar nichts passiert und bei 32800 gibt er wieder Vollgas. Mit dem Poti hat es auch nicht funktioniert, aber ist das nicht auch logisch, denn dieser kann ja nur bis 1023(?) gehen, aber erst ab 32770 tut sich überhaupt erst was.

Komisch, bei mir kommt bei *8 anscheinend etwas hohes und nicht niedriges raus, denn bei mir gibt er da ja vollgas. :unsure:

Ich bin verwirrt.
 

Hochsitzcola

Dabei seit
04.09.2009
Beiträge
3.306
Details E-Antrieb
Gazelle mit BionX IGH3 + OpenSource Firmware
OK, mal Schritt für Schritt. Torque kumuliert ist der über 32 gemappte Messwerte aufaddierte ADC Wert (das >>5 bedeutet rightshift 5, also eine Division durch 2^5=32). Bei einigermaßen kräftigen Treten nehmen wir für den einzelnen gemappte Messwert mal 200 an.
Dann ist torque kumuliert 32*200=6400.
Bei einer Kadenz von 60 haben wir eine Kurbelumdrehung pro Sekunde. Bei 18 PAS Pulsen pro Umdrehung und einem Interrupt bei steigender und fallender Flanke gibt das 36 PAS Interrupts pro Sekunde. Der Paszähler wird mit 62500Hz inkrementiert. Damit ist PAS=62500/36=1736.
Torque kumuliert / PAS ist also 6400/1736=3.68
Wenn du bei diesem Körpereinsatz maximale Unterstützung haben willst, ist der gesuchte Faktor 255/3.68 also ungefähr 70.

Spannung_Ausgang ist als unsigned long definiert, wird also bei 70*6400 nicht überlaufen. Ich weiß nicht, ob man in Arduino die unsigned ints erst in longs casten muss, wenn man ein Ergebnis in long erwartet. Eigentlich hätte ich gedacht, Arduino ist was für Laien und fängt solche Fehlerquellen auf. Im Zweifel deklariere einfach alle Variablen als unsigned long, Speicherplatz ist bei den drei Zeilen Code ja eh kein Problem....

Gruß
hochsitzcola
 
Zuletzt bearbeitet:
Thema:

METOP Problem

METOP Problem - Ähnliche Themen

Speedlimiter für illegale Umbausets: Es gibt ja nicht nur Bestrebungen, seine Bikes schneller als erlaubt zu machen, es gibt durchaus Mitmenschen, die ihren illegalen Umbausatz legal...
Ersatz des unsäglichen Fischer-Tretlagersensors durch einfachen PAS-Sensor: Nachdem ich mir ein gebrauchtes Fischer ETH1606 Proline mit defektem Tretlagersensor gekauft habe, habe ich zunächst versucht, den Sensor zu...
Defekte T9 Drehmomentsensor-Platine reparieren: Hallo Community, allmählich frage ich mich, gegen welche korrupten Regeln dieses Universums ich verstoßen habe, dass ich diesen Schrott aus China...
FC nur als Konverter von PAS auf PWM möglich?: Guten Tag, erst einmal ein großes, großes Lob für den Forumscontroller. Einfach genial die Idee und die Umsetzung. (y) Folgende Frage/Problem: Ich...
Drehmomentsensor an linker Tretkurbel: Nachdem mich @mechaniker nach meiner Meinung zu solchen Bluetooth-basierten Sensor-Adaptern gefragt hat, habe ich die Idee aufgegriffen um sie...
Oben