Mähmotor Stop/Fehler wird nicht erkannt

eRacoon

Active member
Moin,
bin aktuell mit 2x JYQD als Antrieb + neuem Treiber A4931 am Mähmotor am erste Gehversuche machen.
Das läuft auch soweit alles prima, aber hab an manchen Stellen wo das Graß SEHR dicht ist das Problem dass der Mähmotor abgewürgt wird.

Wenn er dann komplett zum Stillstand kommt wird der (vermutlich) abgeschaltet.
Das Problem... scheinbar erkennt der Roboter das nicht und fährt dann einfach weiter und Motor bleibt ausgeschaltet.

Einschalten lässt der Mähmotor sich dann erst wieder über -> Mow Off/On
Selbst ein Stop/Start hilft nicht, auch dann fährt er einfach weiter ohne Mähmotor.

Meine Config sieht so aus.
Ist das ein Bug oder hab ich was vergessen?
Die RPM Fault Detection hatte ich am Anfang an, hier wirft der Roboter aber meist direkt am Anfang Fehler.

Aber müsste er mit den Settings nicht wenigstens einen Error werfen?
In der App sehe ich das auch sofort, fahren + mähen braucht irgendwas zwischen 0,7 - 1,2A
Nur fahren droppt dann <0.5A.

Dynamischer Mähmotor Speed hatte ich auch schon an, gleiches Verhalten.


Code:
#define MOTOR_DRIVER_BRUSHLESS   1
#define MOTOR_DRIVER_BRUSHLESS_MOW_A4931  1
#define MOTOR_DRIVER_BRUSHLESS_GEARS_JYQD 1


// ----- mowing motor --------------------------------------

#define MOW_FAULT_CURRENT 8.0       // mowing motor fault current (amps)
#define MOW_OVERLOAD_CURRENT 2.0    // mowing motor overload current (amps)

// should the direction of mowing motor toggle each start? (yes: true, no: false)
#define MOW_TOGGLE_DIR       true
//#define MOW_TOGGLE_DIR       false

// should the error on motor overload detection be enabled?
#define ENABLE_OVERLOAD_DETECTION  true    // robot will stop on overload
//#define ENABLE_OVERLOAD_DETECTION  false    // robot will slow down on overload

// should the motor fault (error) detection be enabled?
#define ENABLE_FAULT_DETECTION  true
//#define ENABLE_FAULT_DETECTION  false     

//#define ENABLE_RPM_FAULT_DETECTION  true   
#define ENABLE_RPM_FAULT_DETECTION  false   

#define ENABLE_FAULT_OBSTACLE_AVOIDANCE true


// ----------- dynamic mowingm motor RPM --------------
#define ENABLE_DYNAMIC_MOWMOTOR false // set true to activate, set false to deactivate
#define DYNAMIC_MOWMOTOR_ALGORITHM 2 // 1 - linear; 2 - root-Function; 3 - square-Function
#define MIN_MOW_RPM 170   //minimum value of mow RPM
#define MAX_MOW_RPM 255   // maximum value is 255
 

Anhänge

  • 1.jpg
    1.jpg
    710,7 KB · Aufrufe: 7
  • 2.jpg
    2.jpg
    207 KB · Aufrufe: 7
  • config.txt
    33 KB · Aufrufe: 2
Zuletzt bearbeitet:
Welche Firmware verwendest Du?

Wenn du folgendes aktivierst, wird anhand der Drehzahl erkannt ob der Mähmotor läuft oder nicht und der Mäher hält an und versucht ein Mähmotor recovery.

#define ENABLE_RPM_FAULT_DETECTION true
//#define ENABLE_RPM_FAULT_DETECTION false
 
Hab Sunray-1.0.276 drauf.
Hm muss ich Morgen nochmal testen mit RPM enable, bei mir ist der aber recht schnell in einen RPM Fault gelaufen, selbst auf Plaster ohne Rasen.

Frage mich nur wozu ist das Setting?

Code:
#define ENABLE_FAULT_DETECTION  true

Das mit RPM ist ja neu? Oder kann der neue Treiber nur noch Fault via RPM?
 
Das mit RPM ist ja neu? Oder kann der neue Treiber nur noch Fault via RPM?
Die Frage ist auch, ob der Treiber das Odometrie Signal unterstützt. Wenn Du das Odometrie-Signal vom Adapterboard auf P4 angeschlossen hast (siehe schwarze Leitung auf dem Bild), sollte die Drehzahl auch erfasst werden, wenn der Treiber dieses unterstützt.
DBF5E671-C84C-414F-8509-9343C6B0F692.jpeg

Mit dem Pullrequest #81 kannst Du bei dem dort beschriebenen Mähmotortest über den Serial monitor kontrollieren, ob die Drehzahl erfasst wird. Also, ob bei "RpmCurr" und "RpmCurrLp" Werte angezeigt werden.

Gruß Sven
 
Der JYQD Treiber und der Treiber A4931 zeigen die RPM über Odometrie an, wenn das Kabel angeschlossen ist.
 
Ich denke du solltest mit deinem Oberload Current Grenze runter, dein Motor wird vor dem Overload Fehler abgewürgt. Wenn mein Mower ins hohe Gras reinfährt, wird der Mow Motor abgeschaltet und dabei hält der Mower an, danach fährt er kurz los und der Mow Motor wird angeworfen
 
Ich kenne den A4931 nicht, aber der JYQD kann die Ansteuerung von alleine abwerfen, wenn keine Drehung erkannt wird, danach muss der JYQD stromlos gemacht werden, damit der normal weiter läuft, somit ist die rechtzeitige Abschaltung über Overload für den JYQD essentiell
 
Wenn mein Mower ins hohe Gras reinfährt, wird der Mow Motor abgeschaltet und dabei hält der Mower an, danach fährt er kurz los und der Mow Motor wird angeworfen

Genau den Effekt hätte ich gerne, aber meinen Roboter stört das gar nicht, der wird auch nicht merklich langsamer.
Das Mähmesser wird immer langsamer bis worst case zum Stillstand, Roboter fährt aber davon uninteressiert weiter.

In der App sehe ich auch das die Last hoch geht, mehr als 1.5A Gesamtlast habe ich da aber noch nie gesehen.
Denke nicht mal dass er in den Overload geht, weil dann müsste der Roboter ja sofort stoppen und das auch anzeigen/loggen?

Angeschlossen ist das alles mit den "original" Flachbandkabeln.
Treiberboard 1.1 ohne irgendwelche Pullup Wiederstände.

Odemetry Test der JYQD habe ich gemacht, das war alles top.
Schaue mir aber nochmal den Mähmotor Test an.

Danke schon mal euch!

PS: Die Overload / Fault Werte sind unverändert mit den 2A / 8A, die stehen so in der aktuellen Beispiel Config drin.
Könnte aber auch den Overload Fault runtersetzen auf 1A z.B. dann könnte er das eventuell passend erkennen...
 
Wenn er bei hohem Gras langsamer fahren soll, solltest du folgendes aktivieren:

1657470093842.png

ENABLE_DYNAMIC_MOWER_SPEED true
 
Die Strommessung in der App muss natürlich ungefähr mit realen Strom übereinstimmen. Evtl. die Werte in der AmRobotDriver.cpp anpassen.
 
Wenn er bei hohem Gras langsamer fahren soll, solltest du folgendes aktivieren:

Stimmt das wollte ich auch noch aktivieren, hatte ich zum einstellen der JYQD erstmal deaktiviert gelassen, wird Morgen auch nochmal getestet.

Erklärt für mich aber immer noch nicht so ganz warum mein Roboter so vollkommen unbeeindruckt davon ist wenn der Mähmotor ausfällt.
 
Am besten auch noch das hier aktivieren, dann dreht der Mähmotor nicht immer Vollgas, sondern nur, wenn viel Gras kommt:

// ----------- dynamic mowingm motor RPM --------------
#define ENABLE_DYNAMIC_MOWMOTOR false // set true to activate, set false to deactivate
 
Heute nochmal einiges getestet... bin aber noch nicht 100% dahinter gestiegen was genau passiert.

Also zum einen musste ich die Overload Protection der Antriebe erhöhen, hier kam es gerade auf leichtem Hang schon direkt zum anhalten.
Dabei wird dann auch immer der Mower gestoppt.
Hatte das schon von 0.8A auf 1.1A erhöht aber das war für den JYQD Treiber wohl zu wenig.
Bin jetzt mal auf 2.5A gegangen... wenn er wirklich stecken bleibt greift eh die No Motion Abschaltung.
Jetzt kann er auch bei Hanglage die Bremse halten ohne abzuschalten.

Code:
#define MOTOR_OVERLOAD_CURRENT 2.5

Dann hab ich die RPM Fault Detection angeschaltet, das hilft gegen Mähscheibe bleibt stecken.
Dann hält er korrekt an und startet erst das Messer wieder, genau so sollte es sein.

Code:
#define ENABLE_RPM_FAULT_DETECTION  true

Das hat aber dann an anderen Ecken zu mehrfachem Abschalten wegen Mow Error geführt... ohne Grund.
An der Stelle war nichts, auch keine hohe Last. Bild vom Output im Anhang wie das aussieht wenn er sich selbst wieder fängt.
3m später ist er dann wieder stehen geblieben, piept dann 3min rum und dann in der App mit Mow motor fault ende.
Ich hab aber die Vermutung dass das Abschalten der JYQD Treiber wegen obigen Problem das ausgelöst haben könnten, denn der Fehler kam immer am Ende der Bahn, nie mitten drin. Hatte den Wert danach erst erhöht... Teste ich Morgen nochmal auf langer Strecke.


Drittes Problem und da bin ich noch komplett am raten... der Roboter schaltet am Ende von sehr kurzen Bahnen extrem häufig ab.
Also bleibt stehen und macht Mower kurz aus.
In der Statistik wird dann jedes mal "Obstacle Discovered" hochgezählt... natürlich fälschlicher weise denn da war nie was.
Dachte erst das kommt vom Mow Motor aber folgender Wert im Mow Motor Codepart bringt keine Besserung.

Code:
#define ENABLE_FAULT_OBSTACLE_AVOIDANCE false


Hab mir eben nochmal die komplette Config angeschaut und gerade das hier in Verdacht.
Vor allem weil das deutlich häufiger bei ganz leichtem Hang passiert.
Eventuell macht der IMU da was falsch, also Morgen mal damit auf false testen.

Code:
#define OBSTACLE_DETECTION_ROTATION true // detect robot rotation stuck (requires IMU)
//#define OBSTACLE_DETECTION_ROTATION false   // NOTE: recommended to turn this off for slope environment

Sonst hab ich keine Idee warum der Roboter ein Obstacle erkennen will bei komplett freier Wiese und immer am Ende der Bahn wenn er sich drehen will.
Sonar ist zwar aktiviert aber da ist die Obstacle Erkennung deaktiviert, aber es wäre auch nichts hohes in der Nähe gewesen.
 

Anhänge

  • 1.png
    1.png
    78,5 KB · Aufrufe: 10
Sag mal nutzt du JYQD Triber bei Gear Motoren bei einem Grundstück mit einer Neigung? Rollt der Mäher an diesen Stellen nicht weiter, wenn er eigentlich stehen bleiben möchte?
 
Ich hatte massiv Probleme mit nachrollen bei Neigungen, da hat der Mower sehr oft Obstacle ausgelöst. Ich weiß nicht an welcher Stelle das passiert, aber 2 mögliche Trigger gäbe es, Odo kommt, obwohl Sollwert 0 ist oder IMU misst Bewegung obwohl der Mower stehen soll
 
Ja genau hab die JYQD und wenn er dann das Obstacle triggert dann rollt der mäher ungebremst den Hang runter.
Wenn das nicht passiert, dann hält er aber auch an steilen Stellen problemlos die Bremse nachdem ich den Overload deutlich erhöht habe.
Werde das gleich mal mit deaktivierter IMU Erkennung testen.
 
Der IMU Rotation Trigger war der Übeltäter!
Hab ich jetzt deaktiviert und seitdem 2h ohne eine einzige Auslösung gemäht.
Konnte auch nicht feststellen dass er auf Hang Probleme macht, solange es zu keiner Abschaltung kommt geht der nicht in den Freilauf bei mir.
Kann in 3-4h nochmal berichten, dann müsste er das komplette Stück mit leichtem Hang gemäht haben.

Die Mower Errors machen mir aber immer noch Kopfzerbrechen...

Wenn ich die normale Fault Detection aktiviert habe und er dann hängen bleibt dann stoppt das Messer, der Roboter stoppt, piept 2-3x alle 3sek und fährt dann ohne Mähwerk weiter.
Code:
#define ENABLE_FAULT_DETECTION  true
//#define ENABLE_FAULT_DETECTION  false

//#define ENABLE_RPM_FAULT_DETECTION  true     // use mow rpm signal to detect a motor fault (requires mowing motor with rpm output!)
#define ENABLE_RPM_FAULT_DETECTION  false

Wenn ich zusätzlich die RPM Detection nutze, dann passiert das gleiche nur dass er nicht weiter fährt sondern dann fröhlich alle 3sek piept.
Im serial monitor sieht man dann die rpm errors.
Code:
#define ENABLE_FAULT_DETECTION  true
//#define ENABLE_FAULT_DETECTION  false       // use this if you keep getting 'motor error'

#define ENABLE_RPM_FAULT_DETECTION  true     // use mow rpm signal to detect a motor fault (requires mowing motor with rpm output!)
//#define ENABLE_RPM_FAULT_DETECTION  false


Wenn ich dann aber in die App gehe und während er piept Mow off/on klicke dann springt der Mower direkt an und es geht weiter.
Das ist doch ein Software Bug oder?
Es scheint so als würde er gar kein Mower Recovery versuchen?
Eventuell weiß @AlexanderG hier Abhilfe?

So ist das aktuell kaum nutzbar weil man alle 20min kontrollieren muss ob der Mower läuft oder der Roboter grad entweder stillsteht oder ohne RPM check dann sinnlos durch die Gegend fährt. 😅
Hab mittlerweile auch schon fast alle Kombinationen durchprobiert mit Dynamic Speed, Fix etc...
Wenn er wegen GPS Float stehen bleibt ist alles super, da springt der Mower jedes mal wieder an.

Verwende Sunray-1.0.276 + A4931 Treiber + den aktuell BL Motor aus dem Shop.

Hab jetzt als Workaround mal die Schnitthöhe erhöht, das läuft jetzt flüssiger aber ist ja auch keine komplette Lösung, er kann ja trotzdem mal irgendwo stecken bleiben.
 

Anhänge

  • config.txt
    33 KB · Aufrufe: 1
Oben