Einführung: 4wd Ardumower

First:
There is trouble in the setting / motor.
Increase the power max because the message :
Motor Left power is 80 % of the max, value --> 19.31
Power motor left warning

Is not OK if you have no obstacle in front of the mower.
Maybe in console use d and x and show me your setting.

Second
Also check that The mag inside the area is negative and positive outside.
If the console is according to video i really understand nothing :eek:
 
The tracking with two perimeter receivers and the Raindancer Software is very smoth. The only thing is the problem with the high current during the rotation. But this problem isn't a problem of the software. It is a problem of the construction of my 4wd concept. To mitigate the problem, I raised the warning threshold for the overcurrent to 4.5 amps. [motorMaxCurrent = 4.5]

Too bad that the Raindancer software only supports chaotic mowing. Is it possible to use a second receiver in the Azurit software to make the tracking smother with my chassi?
 

Anhänge

  • IMG_8844_x264.mp4
    10,2 MB
In the video the right back motor was not rotating at the end. Normally there should be the overcurrent. Very strange. If you want to mow in straight lines, you should use sunray if it is out of beta. But anyway as I told you because of the design of the car you should use a wiper mode. I think you will destroy your lawn while rotating on it. But if you have trouble to rotate of plain stone, you have more trouble to rotate on lawn.
 
Thanks for your feedback. What exactly do you mean with "wiper mode"?
Is there a possivility to control the Sunray with IOS or Windows?
 
Is it possible to use a second receiver in the Azurit software to make the tracking smother with my chassi?
Ja, das ist bei Azurit möglich und einfach. Ich benutze zwei Empfänger und steuere nur gegen, wenn der Draht nicht mehr zwischen dem rechten und linken Empfänger liegt. Das reduziert die Häufigkeit der Eingriffe. Was ich noch nicht umgesetzt habe, ist das Mitten-Ausrichten nach Signalstärke der Empfänger.
Grundsätzlich habe ich bei 4wd das gleiche Erscheinungsbild. Mit aktiver Lenkung wird es nicht einfacher.
Zur Fehleranalyse: Dein Mäher kann ja auf der Stelle drehen - folglich ist die Motorleistung ausreichend. Das Pendeln kommt entweder aus dem zeitversetzten Gegensteuern ( Regler-I-Anteil) oder durch einen zu großen P-Anteil. Dadurch, daß die Vorderräder die Haftreibung überwinden müssen, kommt es immer zu einem Übersteuern beim Gegenlenken - P muß hoch genug sein um die Haftreibung zu überwinden und ist dann zu hoch für die Gleitreibungsphase, dann schießen die Räder übers Ziel hinaus. Evtl. kannst Du dich mit dem leichten Gezappel abfinden wenn er zuverlässig die Kurve schafft.
Gruß Fürst Ruprecht
 
@Biland
Raindancer is very good and very stable firmware and i don't understand why you don't use it ?
Now for Azuritber you need to reduce the tracking speed I always see your mower run very fast.
Set the transition timeout to 1500 and increase the drive motor power to max possible to avoid detecting obstacle and reverse.
Also activate the Odometry for the test.
 
ich habe gerade dieses Video gesehen

Wenn du den Radabstand verkleinerst, scheint es, dass du wesentlich agiler bist. Oder du bist bereit den Drehradius zu vergrößern. Aber man sieht hier, dass die inneren Räder langsamer drehen und nicht rückwärts.
 
ich habe gerade dieses Video gesehen

Wenn du den Radabstand verkleinerst, scheint es, dass du wesentlich agiler bist. Oder du bist bereit den Drehradius zu vergrößern. Aber man sieht hier, dass die inneren Räder langsamer drehen und nicht rückwärts.
Certainly the main issue is the motor speed (too fast).
The software AZURIT or AZURITBER are write to use a pwm between 150 and 255 (Maybe your firmware is more adjust for low PWM move)
To have a normal speed on Biland platform the pwm need to be near 100 and the torque at this PWM is too low . :(
 
That is a good point. Raindancer uses a closed loop with a PDFF velocity controller to control speed. Azurite uses an open loop.
 
Guten Morgen zusammen, hier nochmal ein Update von meinem Projekt. Der Mower mäht mittlerweile freißig. Das Drehen auf der Wiese klappt erstaunlich gut. Hin und wieder bleibt der Mower jedoch mit "Error Motor right / left" stehen. Da der MC33926 ja je Kanal im Peak ja 5A bringt, habe ich die Variable MotorPowerMax testweise auf 96 angehoben. Auch die motorPowerIgnorreTime habe ich testweise auf 10.000 angehoben. Leider ohne Erfolg.

Gibt es die möglichkeit den Strom mit zu loggen? Ich würde gerne wissen ob es wirklich ein Overcurrent Ereignis gibt.

Irgendwo habe ich auch mal was in Richtung EMF gelesen und das hierfür die Motor-Max-PWM angepasst werden soll. Was hat es hiermit auf sich?
 
Hallo Biland,
ja, die Möglichkeit gibt es. Ich weiß jetzt nicht, ob Du android-app oder esp-webserver benutzt. In der pfod.ccp kannst Du (für eine schnelle Lösung) z.B. anstelle der Perimeter-Parameter die Motorströme eintragen. Dann siehst Du in der grafischen Darstellung die Motorströme.
Man kann auch noch die Abtastzeit tunen - je nach Lösung, denke ich, kann man auf 250ms runter gehen - das müßte man ausprobieren.
Wenn Du mir sagst, was Du derzeit benutzt, kann ich Dir (möglicherweise) weiterhelfen.
Gruß Fürst Ruprecht
Ach ja: schön wäre ein Video vom Mäher bei der Arbeit.
 
Guten Morgen zusammen, hier nochmal ein Update von meinem Projekt. Der Mower mäht mittlerweile freißig. Das Drehen auf der Wiese klappt erstaunlich gut. Hin und wieder bleibt der Mower jedoch mit "Error Motor right / left" stehen. Da der MC33926 ja je Kanal im Peak ja 5A bringt, habe ich die Variable MotorPowerMax testweise auf 96 angehoben. Auch die motorPowerIgnorreTime habe ich testweise auf 10.000 angehoben. Leider ohne Erfolg.

Gibt es die möglichkeit den Strom mit zu loggen? Ich würde gerne wissen ob es wirklich ein Overcurrent Ereignis gibt.

Irgendwo habe ich auch mal was in Richtung EMF gelesen und das hierfür die Motor-Max-PWM angepasst werden soll. Was hat es hiermit auf sich?
If you use AZURITBER, simply connect a raspberry PI and into Piardu plot menu, you can see the motor power each 100 ms or more if you change the code.
Here from my RL1000 the real time plot refresh each 100ms with 200 last value on slide
plot motor.JPG
The menu:
menu.JPGplot_menu.JPG
And when you stop the plot, you can read the CSV file and use excel or other soft
file_result.JPG
 
@bernard: Would you like to write some manual for your AZURITBER firmware (like we have for all other firmwares)? For example, in the Ardumower Wiki? So other users can try out your firmware step by step... :)
 
Hello, today I try to comment out the current control. However I still receive error "motor_right" / "motor_left".
What coud be the root cause for this error?

As I said bevor I comment out all lines with "checkCurrent" by //checkCurrent
in addition to that I comment out the following sections:

The error comes during rolling. Attached you can find two log files.


Code:
// check motor current
void Robot::checkCurrent(){
  if (millis() < nextTimeCheckCurrent) return;
  nextTimeCheckCurrent = millis() + 5000;

  //bb add test MotorCurrent in manual mode and stop immediatly If >Powermax
 /** if (stateCurr == STATE_MANUAL)
  {
    if (motorLeftSense >= motorPowerMax)
    {
       motorLeftSenseCounter++;
             setSensorTriggered(SEN_MOTOR_LEFT);
       setMotorPWM( 0, 0, false );
       addErrorCounter(ERR_MOTOR_LEFT);
       setNextState(STATE_ERROR, 0);
       Console.println("Error: Motor Left current");
    }
    if (motorRightSense >= motorPowerMax)
    {
       motorRightSenseCounter++;
             setSensorTriggered(SEN_MOTOR_RIGHT);
             setMotorPWM( 0, 0, false );
       addErrorCounter(ERR_MOTOR_RIGHT);
       setNextState(STATE_ERROR, 0);
       Console.println("Error: Motor Right current");
    }
  }
**/
  if (motorMowSense >= motorMowPowerMax){
    motorMowSenseCounter++;
        setSensorTriggered(SEN_MOTOR_MOW);
  }
  else{
      errorCounterMax[ERR_MOW_SENSE] = 0;
      motorMowSenseCounter = 0;
      if ( (lastTimeMotorMowStuck != 0) && (millis() >= lastTimeMotorMowStuck + 30000) ) { // wait 30 seconds before switching on again
        errorCounter[ERR_MOW_SENSE] = 0;
        motorMowEnable = true;
                lastTimeMotorMowStuck = 0;
      }
  }


  if (motorMowSenseCounter >= 30){ //ignore motorMowPower for 3 seconds
      motorMowEnable = false;
      Console.println("Error: Motor mow current");
      addErrorCounter(ERR_MOW_SENSE);
      lastTimeMotorMowStuck = millis();
     // if (rollDir == RIGHT) reverseOrBidir(LEFT); // toggle roll dir
     //else reverseOrBidir(RIGHT);
  }       

    
 /** if (motorLeftSense >=motorPowerMax){ 
    // left wheel motor overpowered   
    if (     ((stateCurr == STATE_PERI_FIND)  || (stateCurr == STATE_PERI_TRACK))  / (stateCurr == STATE_FORWARD) || //
          && (millis() > stateStartTime + motorPowerIgnoreTime)){                     
      //beep(1);
   //   motorLeftSenseCounter++;
    //        setSensorTriggered(SEN_MOTOR_LEFT);
      setMotorPWM( 0, 0, false ); 
   //   reverseOrBidir(RIGHT);
    } else if    ((stateCurr == STATE_REVERSE) && (millis() > stateStartTime + motorPowerIgnoreTime)){
      motorLeftSenseCounter++;
            setSensorTriggered(SEN_MOTOR_LEFT);
      setMotorPWM( 0, 0, false ); 
      //   reverseOrBidir(RIGHT);
      setNextState(STATE_ROLL,RIGHT);                         
    } else if ((stateCurr == STATE_ROLL) && (millis() > stateStartTime + motorPowerIgnoreTime)){
      motorLeftSenseCounter++;
            setSensorTriggered(SEN_MOTOR_LEFT);
      setMotorPWM( 0, 0, false ); 
      setNextState(STATE_FORWARD, 0);
    } 
  }**/ 
/**  else if (motorRightSense >= motorPowerMax){       
     // right wheel motor overpowered
     if ( ((stateCurr == STATE_PERI_FIND)) && (millis() > stateStartTime + motorPowerIgnoreTime)){            //(stateCurr == STATE_FORWARD) ||     // 
       //beep(1);
    //   motorRightSenseCounter++;
        //     setSensorTriggered(SEN_MOTOR_RIGHT);
       setMotorPWM( 0, 0, false ); 
    //   reverseOrBidir(RIGHT);
     } else if ((stateCurr == STATE_REVERSE) && (millis() > stateStartTime + motorPowerIgnoreTime)){
       motorRightSenseCounter++;
                setSensorTriggered(SEN_MOTOR_RIGHT);
       setMotorPWM( 0, 0, false ); 
       setNextState(STATE_ROLL,LEFT);                         
     } else if ((stateCurr == STATE_ROLL) && (millis() > stateStartTime + motorPowerIgnoreTime)){
       motorRightSenseCounter++;
             setSensorTriggered(SEN_MOTOR_RIGHT);
       setMotorPWM( 0, 0, false ); 
       setNextState(STATE_FORWARD, 0);
    }
  }**/
}
 

Anhänge

  • 1.txt
    47,8 KB · Aufrufe: 3
  • 2.txt
    23,4 KB · Aufrufe: 2
Good morning. Due to the fact that I comment out the function "check motor current / void Robot::checkCurrent()…." from my Point of view the reason for the "ERR_MOTOR_RIGHT / ERR_MOTOR_LEFT" is the StatusFlag of the MC33926 and the following section of the Code:

Code:
void checkMotorFault(){
#if defined (DRIVER_MC33926)
if (digitalRead(pinMotorLeftFault)==LOW){
    robot.addErrorCounter(ERR_MOTOR_LEFT);
    //Console.println(F("Error: motor left fault"));
    robot.setNextState(STATE_ERROR, 0);
    //digitalWrite(pinMotorEnable, LOW);
    //digitalWrite(pinMotorEnable, HIGH);
  }

  if  (digitalRead(pinMotorRightFault)==LOW){
    robot.addErrorCounter(ERR_MOTOR_RIGHT);
    //Console.println(F("Error: motor right fault"));
    robot.setNextState(STATE_ERROR, 0);
    //digitalWrite(pinMotorEnable, LOW);
    //digitalWrite(pinMotorEnable, HIGH);
  }

  if (digitalRead(pinMotorMowFault)==LOW){
    robot.addErrorCounter(ERR_MOTOR_MOW);
    //Console.println(F("Error: motor mow fault"));
    robot.setNextState(STATE_ERROR, 0);
    //digitalWrite(pinMotorMowEnable, LOW);
    //digitalWrite(pinMotorMowEnable, HIGH);
  }
#endif

}

Is ist possible to measure if the Pin M1SF / M2SF realy is "LOW"?

Based on the techsheet of the MC33926 it could be an over-current (short circuit) or over-temperature event. Due to the fact the mower runs approx. 5minutes very well before the first error message is shown and after an error reset only a few seconds (approx. 30s) it could be that there is really an over-temperature event. If I wait some minutes (cool down?) after the first error was shown the mower runs again a little bit longer approx. 5minutes.
 
Good morning. Due to the fact that I comment out the function "check motor current / void Robot::checkCurrent()…." from my Point of view the reason for the "ERR_MOTOR_RIGHT / ERR_MOTOR_LEFT" is the StatusFlag of the MC33926 and the following section of the Code:

Code:
void checkMotorFault(){
#if defined (DRIVER_MC33926)
if (digitalRead(pinMotorLeftFault)==LOW){
    robot.addErrorCounter(ERR_MOTOR_LEFT);
    //Console.println(F("Error: motor left fault"));
    robot.setNextState(STATE_ERROR, 0);
    //digitalWrite(pinMotorEnable, LOW);
    //digitalWrite(pinMotorEnable, HIGH);
  }

  if  (digitalRead(pinMotorRightFault)==LOW){
    robot.addErrorCounter(ERR_MOTOR_RIGHT);
    //Console.println(F("Error: motor right fault"));
    robot.setNextState(STATE_ERROR, 0);
    //digitalWrite(pinMotorEnable, LOW);
    //digitalWrite(pinMotorEnable, HIGH);
  }

  if (digitalRead(pinMotorMowFault)==LOW){
    robot.addErrorCounter(ERR_MOTOR_MOW);
    //Console.println(F("Error: motor mow fault"));
    robot.setNextState(STATE_ERROR, 0);
    //digitalWrite(pinMotorMowEnable, LOW);
    //digitalWrite(pinMotorMowEnable, HIGH);
  }
#endif

}

Is ist possible to measure if the Pin M1SF / M2SF realy is "LOW"?

Based on the techsheet of the MC33926 it could be an over-current (short circuit) or over-temperature event. Due to the fact the mower runs approx. 5minutes very well before the first error message is shown and after an error reset only a few seconds (approx. 30s) it could be that there is really an over-temperature event. If I wait some minutes (cool down?) after the first error was shown the mower runs again a little bit longer approx. 5minutes.
At the weekend I installed two bigger coolers attached with an fan on the MC33926 an the problem is solved. It seems like that my concept needs a little bit more current that the normal one and due to this the temperature rise up a little bit more.
 

Anhänge

  • cooler.JPG
    cooler.JPG
    1,7 MB · Aufrufe: 23
another Questions...
1) how shoud I calibrate the GY-801? In the wiki there are discribed two methods. I don't want to use the compass I only want use the Gyro.

2) can somebody give me information where I find the section in the code which controls the actions in "auto Mode" after the mower reconized that it crosses the perimeter wire?
 
Oben