Integration des Sempu Sensorlagers in den FC

Diskutiere Integration des Sempu Sensorlagers in den FC im ForumsController Forum im Bereich Controller/Regler, Fahrerinformation, Elektronik; Liebes Forum, nachdem @Hochsitzcola das Sempulager...
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
Liebes Forum,

nachdem @Hochsitzcola das Sempulager:
https://www.pedelecforum.de/forum/index.php?threads/funktionsprinzip-drehmomentsensor-sempu-sp-b3-0.38482/
und 2. Version:
https://www.pedelecforum.de/forum/index.php?threads/erfahrungsbericht-set-aus-sempu-sensor-und-lishui-controller.50186/
hier vorgestellt hat, würde ich es gern anstatt des Thunlagers am FC (2.1) anschliessen.
Leider ist die Beschaltung der Ausgänge etwas anders als beim Thun (eigentlich einfacher für die Auswertelektronik):
Der Drehmomentausgang gibt ohne Belastung 1,5v aus.
Neben dem Drehmomentausgang gibt es den Speedsensorausgang.
Dieser liefert bei Vorwärtsdrehung ein Rechtecksignal 3,3v und bei Rückwärtsdrehung kein Signal.
Die Drehrichtungserkennung kann also entfallen. Jede Umdrehung liefert 32 Impulse.
Hab schon versucht, das Lager mit einigen Änderungen am Code zu Laufen zu bringen, hat aber leider nicht geklappt.
Was müsste ich ändern?
Wenn sich genung Interessenten finden, könnte man ja sogar das Lager in den Configurator integrieren.
Es soll wohl sehr gut funktionieren.

Vielen Dank für Hilfe!

Anbei die zugehörigen Dokumente.

20150416112534_3543.jpg 20150416112843_4011.jpg 20150416112912_0105.jpg 20150416113545_8699.jpg 20150416113605_6980.jpg 20150416113626_8855.jpg 20150416113807_1513.jpg 20150416114012_9013.jpg
 
J

jenkie

Mitglied seit
28.06.2011
Beiträge
1.705
Details E-Antrieb
elfkw HR + Forumscontroller
Beim FC 2.x gibt es zwei Interrupt-Eingänge für den PAS-Sensor. Das Thun-Lager hat zwei phasenverschobene Signale, benutzt also die Funktion pas_change_dual.
Normale PAS-Sensoren mit nur einem Signalausgang und scheinbar auch das Sempu-Lager benutzen hingegen nur einen Pin und werden über die pas_change Funktion ausgewertet.

Je nach dem welche Board-Version und welcher PAS-Sensor konfiguriert sind, werden diese beiden Funktionen den Interrupts der jeweiligen Pins zugewiesen, siehe hier.

Um das Sempu-Lager einzubinden muss also ein neuer Konfigurationsparameter SUPPORT_SEMPU oder so hinzugefügt werden, bei dem der PAS-Interrupt auf die pas_change Funktion gelegt wird. Wenns ein symmetrisches Rechtecksignal ist würde ich die ganz normale PAS-Auswertung so lassen wie sie ist und einfach passende Grenzwerte einstellen (z. B. PAS-Factor min und max auf 0.3 und 0.7 setzen).

Dann kommt noch die Auswertung des Drehmoments. Das kann man vom Thun übernehmen, würde auch bei jeder flanke des Sensors jeweils das Drehmoment messen und über eine Umdrehung mitteln. Ich bin da gerne behilflich und baue das dann in den Konfigurator und die Software ein, bin aber diese Woche viel unterwegs. Versuch doch als erstes mal, ob du die Treterkennung hinbekommst, indem du das Lager wie das Thun-Lager anschließt, aber einen ganz normalen PAS-Sensor konfigurierst. Das PAS-Signal vom Sempu dann an den Pin PAS1, also das wie das blaue Kabel vom Thun.
 
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
Dank der Experise von @Hochsitzcola hab ich die PAS-Erkennung für das Sempu schon hinbekommen, dass die Drehung erkannt wird.
In der config.h muss dann noch die Magnetzahl vom PAS auf 32 geändert werden, damit die Kadenz stimmt.
Folgende Stellen im Code müssen geändert werden. Bestimmt gibt es andere (vielleicht auch einfachere Lösungen), aber die hier funktioniert erstmal.

Integrieren des Sempu in FC >2.0

Speedpin an X.cell rt3 angeschlossen. Geht auch an Pin 2 vom PAS Eingang.

Zeile 726

Code:

if (((millis()-last_pas_event)>pas_timeout)||(pas_failtime>pas_tolerance)) //we are not pedaling anymore, if pas did not change for > 0,5 s
ersetzen durch

Code:

if ((millis()-last_pas_event)>pas_timeout) //we are not pedaling anymore, if pas did not change for > 0,5 s


um das Pedaling true zu setzen, muß du die if -Abfrage in Zeile 1139 raus löschen

Code:

if ((pas_factor>pas_factor_min)&&(pas_factor<pas_factor_max))
{
pedaling=true;
pas_failtime=0;
}
Code:

pedaling=true;
pas_failtime=0;



Zeilen 1058 ff

Code:

#ifdef SUPPORT_PAS
#if defined(SUPPORT_XCELL_RT) || defined(SUPPORT_BBS)
ISR(INT5_vect)
{
pas_change_dual(true);
}

#else //no thun bracket or BBS
ISR(INT5_vect)
{
pas_change();
}
#endif
#endif
#endif

#if HARDWARE_REV >= 20
#if defined(SUPPORT_XCELL_RT) || defined(SUPPORT_BBS)
void pas_change_dual(boolean signal)
{

pedaling=signal;
#ifdef SUPPORT_XCELL_RT
cad=7500/(millis()-last_pas_event); //8 pulses per revolution
#else
cad=2500/(millis()-last_pas_event); //24 pulses per revolution
#endif
last_pas_event = millis();

pedalingbackwards=!pedaling;
#ifdef SUPPORT_XCELL_RT
if (analogRead_in_use)
{
thun_want_calculation = true;
return;
}
read_current_torque();
#endif
}
 
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
So,
nach einer kleinen Testfahrt scheint alles zu funktionieren.
Nur wird aus irgendeinem Grund die Kadenz viel zu hoch gemessen. (um die 250 bis 300 bei einer ungefähren 60ger getreten)
Hab schon mit der Magnetanzahl in der config.h gespielt aber da tut sich gar nichts.
Vielleicht ist die PAS Magnetzahl da gar nicht brücksichtigt. Aber das würde mich wundern, da sie beim Thun ja auf 8 gesetzt wird.
 
Hochsitzcola

Hochsitzcola

Mitglied seit
04.09.2009
Beiträge
2.295
Details E-Antrieb
NC FH154 mit EB306 und EB-Precontroller
Nur wird aus irgendeinem Grund die Kadenz viel zu hoch gemessen
Das ist ja fest im Code implementiert, du hast es oben selbst zitiert ;-).
Code:
#ifdef SUPPORT_XCELL_RT
cad=7500/(millis()-last_pas_event); //8 pulses per revolution
#else
cad=2500/(millis()-last_pas_event); //24 pulses per revolution
#endif
Gruß
hochsitzcola
 
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
Das ist ja fest im Code implementiert, du hast es oben selbst zitiert ;-).
Code:
#ifdef SUPPORT_XCELL_RT
cad=7500/(millis()-last_pas_event); //8 pulses per revolution
#else
cad=2500/(millis()-last_pas_event); //24 pulses per revolution
#endif
Gruß
hochsitzcola
Natürlich.
Hab grad geändert, und es funktioniert.
Also im Code oben ändern nach:

#ifdef SUPPORT_XCELL_RT
cad=1875/(millis()-last_pas_event); //32 pulses per revolution

Dann passt die Kadenz.
 
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
Hab grad noch ne Testfahrt gemacht.
Sehr harmonische Unterstützung.
Viel genauer als das Thun.
Wahrscheinlich kann ich auch das PAS timeout noch runtersetzen, da ja mehr Impulse pro Umdrehunggegeben werden.
Da hatte ich beim Thun immer das Problem, dass bei ganz langsamer Kurbel der Motor stotterte.
Das wäre auch wichtig beim Anfahren, wenn man die FC Funktion "enable torque throttle" zum Anfahren nutzt.
Da müsste man beim Thun immer mit links antreten, da das ja nur einseitig misst.
Aber das muss ich alles noch genauer ausprobieren.
Leider wird bei mir die getretene Leistung noch nicht richtig gemessen.
Müsste man anhand der Daten des Sempu genau berechnen lassen.
 
J

jenkie

Mitglied seit
28.06.2011
Beiträge
1.705
Details E-Antrieb
elfkw HR + Forumscontroller
Um die korrekte Leistungsberechnung kann ich mich gerne kümmern. Schickst du mir deinen Code? Dann mache ich das gleich offiziell. Komme aber erst nächste Woche dazu.
 
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
Komme erst Mittwoch wieder nach Hause.
Dann werde ich es direkt testen.
 
J

jenkie

Mitglied seit
28.06.2011
Beiträge
1.705
Details E-Antrieb
elfkw HR + Forumscontroller
Hier noch die Verkabelung.
Die Auswertung erfolgt so, dass auch das Richtungssignal mit ausgewertet wird. Sobald das Richtungssignal positiv ist (vorwärts) und am Speedsignal des Sensors die Pulse kommen, wird der Motor freigeschaltet.
Die Mittelung des gemessenen Drehmoments erfolgt über jeweils eine halbe Kurbelumdrehung, da das Lager ja beide Seiten auswertet. Beim Thun-Lager mussten wir ja über eine ganze Umdrehung mitteln, um eine gleichmäßige Leistungsabgabe zu erhalten.
 
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
Ich hab grad den Code mit Sempueinstellung getestet.
Habe leider keine Kadenz auf der Anzeige.
Hab alles so verkabelt wie angegeben.
Komisch.(n)
 
J

jenkie

Mitglied seit
28.06.2011
Beiträge
1.705
Details E-Antrieb
elfkw HR + Forumscontroller
Geht denn die Treterkennung und Drehmomentmessung? Wahrscheinlich ist noch was im Code falsch.
 
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
Hab grad nochmal gecheckt.
Drehmomentmessung kann ich grad nciht überprüfen.
Aber der Gasgriff wird nicht freigeschaltet wie er sollte.
Hab nochmal sicherheitshalber an den Pins gemessen.
Impuls an grün und 3,3v an gelb bei Vorwärtsdrehung.
An weiss 1,5v bei Belastung mehr.
Das müsste also alles stimmen.
Die Drehrichtung bleibt übrigens manchmal auf 3,3v auch wenn die Pedale stillstehen.
 
J

jenkie

Mitglied seit
28.06.2011
Beiträge
1.705
Details E-Antrieb
elfkw HR + Forumscontroller
OK ich schau es mir an und teste das "manuell". Schaffe das aber erst morgen abend oder am WE.
 
J

jenkie

Mitglied seit
28.06.2011
Beiträge
1.705
Details E-Antrieb
elfkw HR + Forumscontroller
Also auf Anhieb finde ich keinen Fehler im Code - ich bin aber leider unterwegs und kann nicht an Hardware testen, das muss noch ein paar Tage warten.
Kannst du mal schauen, ob #define SUPPORT_SEMPU und #define SUPPORT_PAS in der config.h steht?
 
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
Also auf Anhieb finde ich keinen Fehler im Code - ich bin aber leider unterwegs und kann nicht an Hardware testen, das muss noch ein paar Tage warten.
Kannst du mal schauen, ob #define SUPPORT_SEMPU und #define SUPPORT_PAS in der config.h steht?
Ja, steht beides drin.
Zeile 73 und 74.
Hab auch nochmal den Code hochgeladen.
Keine Kadenz.
 
J

jenkie

Mitglied seit
28.06.2011
Beiträge
1.705
Details E-Antrieb
elfkw HR + Forumscontroller
So ich habe es mal getestet. Bei mir funktioniert die Kadenzanzeige und Motorfreischaltung.
Zum Test habe ich den mit "BN" beschrifteten Pin auf 5V gezogen (da sollte ja das Richtungssignal dran, was bei Vorwärtsdrehung 3,3V haben sollte - das gilt trotzdem als "an") und auf den mit "BE" beschrifteten Pin die Pulse gegeben.
Kannst du mal schauen, ob diese beiden Kabel bei dir an den richtigen Pins sind?

Du kannst dir den Status des Richtungssignals auch ausgeben lassen mit
serial.println(bitRead(PINE,6));
 
oger

oger

Mitglied seit
10.11.2012
Beiträge
854
Ort
53XXX Bonn
Details E-Antrieb
Puma HR, 36V
So ich habe es mal getestet. Bei mir funktioniert die Kadenzanzeige und Motorfreischaltung.
Zum Test habe ich den mit "BN" beschrifteten Pin auf 5V gezogen (da sollte ja das Richtungssignal dran, was bei Vorwärtsdrehung 3,3V haben sollte - das gilt trotzdem als "an") und auf den mit "BE" beschrifteten Pin die Pulse gegeben.
Kannst du mal schauen, ob diese beiden Kabel bei dir an den richtigen Pins sind?

Du kannst dir den Status des Richtungssignals auch ausgeben lassen mit
serial.println(bitRead(PINE,6));
Ok, werde gleich nochmal alles kontrollieren.
Aber wo hast du die Bezeichnungen BE und BN her?
Hab es genau so angeschlossen wie hier:
https://www.pedelecforum.de/wiki/doku.php?id=elektrotechnik:forumscontroller:peripherie#sempu_drehmomentsensor
 
Thema:

Integration des Sempu Sensorlagers in den FC

Werbepartner

Oben