Rutschen den Hang runter, warum bremst der Mower nicht

EinEinfach

Well-known member
Hallo zusammen,

mein Mower rollt den Hang ohne zu bremsen runter.

Kann mir jemand sagen, wie ich dieses Verhalten korrigieren kann. Hier kleines Video um das Problem zu verstehen:

Passen meine PID Parameter nicht? Der Mower sollte doch mit den Gear Motoren durch rückwärtsdrehen oder ähnlichem gegensteuern. Wie macht das der Ardumower?
 
Ich hänge mal hier die Unterhaltung mit Alexander im Skype mit ein
1655406393138.png
1655406437477.png
1655406493790.png

Sieht so aus als ob das Projekt erstmal Pause machen wird. Oh mann das lief richtig gut :(
 
Klar:
Code:
// motor speed control (PID coefficients) - these values are tuned for Ardumower motors
// general information about PID controllers: https://wiki.ardumower.de/index.php?title=PID_control
#define MOTOR_PID_KP     0.5    // do not change 2.0 (for non-Ardumower motors or if the motor speed control is too fast you may try: KP=1.0, KI=0, KD=0)
#define MOTOR_PID_KI     0.03   // do not change 0.03
#define MOTOR_PID_KD     0.04   // do not change 0.03
 
Zur Vervollständigung hier ein Video mit manueller Steuerung und jeweiligen Stops in unterschiedlichen Hanglagen/Ausrichtungen, aber andere Treiber:


FW .230, BLDC-8015A Treiber. Wenn die Mählinien parallel zum Hang liegen, mit Drehung jeweils oben und unten sollte es hoffentlich gehen.

Jemand ein Feedback hierzu?

VD & LG
 
So, ich schon wieder,
habe mein Problem erstmal in den Griff bekommen. Ich habe die JYQD Treiber (lt. Internetrecherche sollen es wohl Versionen aus 2017 sein) aus dem Shop erstmal ausgebaut und für den Einsatz bei mir für ungeeignet befunden. Es gibt aber JYQD Treiber aus 2021. Diese haben den gleichen Chip JY01 verbaut, vermutlich in der anderen Version. Aktuell über Bucht zu beziehen, sehen so aus:
JYQD2021.jpg
Diese haben Brake-Eingang der über 5V ausgelöst wird. Leider bietet der BL-Adapter oder die Software keinen separaten Pin zum Auslösen der Brake Funktionalität. Hierfür habe ich 2 Remote Pins missbraucht. Also PinRemoteSwitch mit Brake Eingang des linken Motors und PinRemoteSpeed mit Brake Eingang des rechten Moors verbunden.
1655968065110.png
Wie man sieht sind diese bereits Levelgeshifted, so dass diese direkt für den Treiber einsetzbar sind.
Dann noch einige Zeilen in der AmRobotDriver.cpp ändern:
Code:
....
// left wheel motor
  pinMode(pinMotorEnable, OUTPUT);
  digitalWrite(pinMotorEnable, gearsDriverChip.enableActive);
  pinMode(pinMotorLeftPWM, OUTPUT);
  pinMode(pinMotorLeftDir, OUTPUT);
  pinMode(pinMotorLeftSense, INPUT);
  pinMode(pinMotorLeftFault, INPUT);
  pinMode(pinRemoteSwitch, OUTPUT); //Brake für JYQD 2021 bei 0% PWM

  // right wheel motor
  pinMode(pinMotorRightPWM, OUTPUT);
  pinMode(pinMotorRightDir, OUTPUT);
  pinMode(pinMotorRightSense, INPUT);
  pinMode(pinMotorRightFault, INPUT);
  pinMode(pinRemoteSpeed, OUTPUT); //Brake für JYQD 2021 bei 0% PWM
  ....
  void AmMotorDriver::setMotorPwm(int leftPwm, int rightPwm, int mowPwm){ 
  // remember speed sign during zero-transition
  if (leftPwm < 0) leftSpeedSign = -1;
  if (leftPwm > 0) leftSpeedSign = 1;
  if (rightPwm < 0) rightSpeedSign = -1;
  if (rightPwm > 0) rightSpeedSign = 1;
  if (mowPwm < 0) mowSpeedSign = -1;
  if (mowPwm > 0) mowSpeedSign = 1;   
 
  // limit pwm to ramp if required
  if (gearsDriverChip.usePwmRamp){
    int deltaLeftPwm = leftPwm-lastLeftPwm;
    leftPwm = leftPwm + min(1, max(-1, deltaLeftPwm));   
    int deltaRightPwm = rightPwm-lastRightPwm;
    rightPwm = rightPwm + min(1, max(-1, deltaRightPwm));   
  }
  if (mowDriverChip.usePwmRamp){
    int deltaMowPwm = mowPwm-lastMowPwm;
    mowPwm = mowPwm + min(1, max(-1, deltaMowPwm));     
  } 

  // remember last PWM values
  lastLeftPwm = leftPwm; 
  lastRightPwm = rightPwm;
  lastMowPwm = mowPwm;

  // apply motor PWMs
  setMotorDriver(pinMotorLeftDir, pinMotorLeftPWM, leftPwm, gearsDriverChip, leftSpeedSign);
  setMotorDriver(pinMotorRightDir, pinMotorRightPWM, rightPwm, gearsDriverChip, rightSpeedSign);
  setMotorDriver(pinMotorMowDir, pinMotorMowPWM, mowPwm, mowDriverChip, mowSpeedSign);
 
  // disable driver at zero speed (brake function)   
  bool enableGears = gearsDriverChip.enableActive;
  bool enableMow = mowDriverChip.enableActive; 
  if (gearsDriverChip.disableAtPwmZeroSpeed){ 
    if ((leftPwm == 0) && (rightPwm == 0)){
      enableGears = !gearsDriverChip.enableActive;               
    }
    digitalWrite(pinMotorEnable, enableGears);
  }
  if (mowDriverChip.disableAtPwmZeroSpeed){
    if (mowPwm == 0) {
      if (mowDriverChip.disableAtPwmZeroSpeed){
        enableMow = !mowDriverChip.enableActive;
      }
    }     
    digitalWrite(pinMotorMowEnable, enableMow);
  }
  //Brake über RC Buchse für die JYQD 2021
  if (leftPwm == 0) digitalWrite(pinRemoteSwitch, HIGH);
    else digitalWrite(pinRemoteSwitch, LOW);
  if (rightPwm == 0) digitalWrite(pinRemoteSpeed, HIGH);
    else digitalWrite(pinRemoteSpeed, LOW);
  //ENDE
}

Das war's, und hier ist das Ergebnis:
 
Hi Alex,

das ist ja mal sehr geil, supi. Könntest Du noch ein Video machen, wo Du den Mower mal händisch an den Hang fährst und dort anhälst?

Denke, ich werde das dann auch so für meine BLDC-8015A übernehmen, die ja auch einen BRK-Eingang haben. Und herzallerliebst wäre es natürlich, wenn das als wählbare Option mit in die Sourcen/config.h könnte... :)

Danke!
 
Hallo Carsten,
bitte schön ein Video mit manueller Steuerung (Mit der linken Hand gestuert, mit der rechten aufgenommen, deswegen sieht etwas unrund aus)
Das mit der config.h kann ich was machen, aber ich denke nicht dass die Änderung in das offizielle Release es schafft.
 
Eine Frage teribt mich allerdings noch rum. Mir ist es aufgefallen, dass die Pins pinMotorEnable und pinMotorMowEnable nicht wirklich genutzt werden. Meine Recherchen haben gezeigt, dass die Pins immer den Enable Zustand annehmen (egal ob mow, charge, error). Ist es geplannt diese in Zukunft zu nutzen? Sonst wäre mein Antrag diese für die Brake-Funktion in der BL-Konfiguration für die Treiber die das brauchen zu nutzen und den Enable einfach auf dem BL-Treiber auf den richtigen Pegel zu brücken.

Übersehe ich etwas, hat es schon eine gesehen, dass die Enable-Pins den Zustand wechseln?

P.S. Kaum fertig geschrieben und dann doch im Code eine Stelle gefunden:
Code:
void AmMotorDriver::resetMotorFaults(){ 
  if (digitalRead(pinMotorLeftFault) == gearsDriverChip.faultActive) {
    if (gearsDriverChip.resetFaultByToggleEnable){
      digitalWrite(pinMotorEnable, !gearsDriverChip.enableActive);
      digitalWrite(pinMotorEnable, gearsDriverChip.enableActive);

Allerdings sollte Fault Funktion bei den aktuellen Treibern nicht genutzt werden, evtl bei dem neuen kommenden Treiber?
 
Lies mal diesen Blog durch 14 Januar und abwärts.
https://forum.roboteers.org/index.php?user-post-list/1175-lars/

Was ich besonders interessant finde, er schreibt, dass der Treiber aus 2021 mit dem JY01 Chip in der Version 4 hat folgendes Feature, Zitat:
UND DANN DER HAMMER: Es gibt sogar eine eingebaute und bei Bedarf zuschaltbare Bremse, welche bei höheren Drehzahlen vollautomatisch als "getaktete Stotterbremse" arbeitet, ohne das sich der Anwender um die nötige Drehzahlermittlung und Berechnung der Brems-PWM kümmern muss! Die dabei erreichte Dynamik ist absolut akzeptabel und natürlich bleibt das Rad im Stillstand vollständig blockiert - wie das bei einem Bot sein sollte.
Und noch das, was ich auf jedenfall noch ausprobieren möchte:
Was ich allerdings mal versuchen werde sowie es die Zeit zulässt: Auf den Eingang "BRAKE" ein 50Hz-PWM-Signal auflegen und zwar invertiert zum PWM-Signal "Speed-Control". Wenn nicht beschleunigt wird, wird gebremst, wobei beim Auftouren das nicht hinderlich ist - eher im Gegenteil - da der Strom in der Motorwicklung ohnehin noch eine Zeit lang über die Body-Dioden der L-FETs weiterfließen würde.

Ich kann nicht sagen ob das funktioniert (hängt vom Motor-Controller JY01 ab), aber mit der richtigen Frequenzabstimmung (in Bezug auf die Induktivität des Motors) lässt sich der Motor noch direkter ansteuern, fast schon wie ein Schrittmotor, aber mit vollem Drehmoment! Es müsste dann auch nicht mehr separat gebremst werden, bei Gas = 0 bleibt der Motor SOFORT stehen, bleibt im Stillstand gebremst und wird bergab auch nicht mehr schneller ...
Ein Inverter Chip ist bei reichelt bestellt und gestern schon sogar geliefert wurde :)
 
Lies mal diesen Blog durch 14 Januar und abwärts.
https://forum.roboteers.org/index.php?user-post-list/1175-lars/

Was ich besonders interessant finde, er schreibt, dass der Treiber aus 2021 mit dem JY01 Chip in der Version 4 hat folgendes Feature, Zitat:

Und noch das, was ich auf jedenfall noch ausprobieren möchte:

Ein Inverter Chip ist bei reichelt bestellt und gestern schon sogar geliefert wurde :)
mh diese Treiber hab ich mir jetzt mal bestellt, das sieht ja echt interessant aus 🤗
 
mh diese Treiber hab ich mir jetzt mal bestellt, das sieht ja echt interessant aus
Was ich noch vergessen habe zu sagen, im Vergleich zu den Treibern aus dem Shop haben diese keinen Softstart. Was ein deutliches Pluspunkt ist, da man die komplette Regelung den PID-Parametern aus der Sunray überlässt.
 
Was ich noch vergessen habe zu sagen, im Vergleich zu den Treibern aus dem Shop haben diese keinen Softstart. Was ein deutliches Pluspunkt ist, da man die komplette Regelung den PID-Parametern aus der Sunray überlässt.
das war auch mein Gedanke (wenn Du auch die JYQD meinst), da ich hier mein Problem vermute
 
Es gibt aber JYQD Treiber aus 2021.

Jemand eine gute Bezugquelle?
Kann nur zu mindestens vom Bild gleichen Treiber bei Ali finden.
Wo hast du deine damals gekauft?


Meine JQYD (die blauen) tun es zwar grundsätzlich für erste Testläufe und 90% des Grundstückes.
Aber für die letzten 10% brauche ich Treiber mit Brake sonst kann ich den Mäher da nicht sicher fahren lassen.
Da sich bei den offiziellen Treibern irgendwie nichts tut würde ich denke deine Idee mal testen. :)
 
Ah sehr gut, dann werde ich mir da mal 2-3 ordern, danke!

Aber noch paar Verständnis Fragen dazu.

Wie ist die Verkabelung vom BL Board zu den Treibern.
Vom BL Board komme ich ja mit EL, ODO, GND, Direction, PWM.

Der Treiber hat unten ja eine Leiste mit "G S V P Q".
Zusätzlich an der rechten Seite Rotation, Brake, Enable??? .

Hab das unten mal im Bild dargestellt, bitte mal prüfen ob ich das so richtig interpretiere? :)


Du nutzt ja die RC Remote Pins für die Brake.
Die scheinen ja in folgender Reihenfolge von oben nach unten auf dem PCB Port zu verlaufen.
Sprich du nutzt den vorletzten Pin "Speed" für den rechten Treiber und den letzten Pin "Switch" für den linken Motor korrekt?

P13R/C remote control5V, GND, mow, steer, speed, switch

Wie sind die verkabelt genau? Geht da nur ein einzelner Draht von Remote Speed/Switch auf den jeweiligen Treiber auf den Brake Port?
Muss ich noch irgendwo 5V/GND zusätzlich anlegen/brücken?
Reicht das so wie im Bild? Natürlich pro Treiber nur den jeweiligen passenden Pin drauf.
 
Oben