Sunray modding Spielwiese

Habe jetzt meine beiden alten RC Dateien genommen - muss wohl noch an anderer Stelle noch etwas nachbessern...
Bin auf dem Weg - regnet eh in 20 Minuten und der Robbi kommt rein, bis dahin krieg ich's hin :)

D:\Arduino\Sunray-master_follow_SB314i\Sunray-master_follow_working - 314interrupt\Sunray-master\sunray\rcmodel.cpp: In function 'void get_lin_PPM()':
rcmodel.cpp:18:19: error: 'pinRemoteMow' was not declared in this scope; did you mean 'pinRemoteSteer'?
18 | if (digitalRead(pinRemoteMow)==HIGH) PPM_start_lin = micros();
| ^~~~~~~~~~~~
| pinRemoteSteer
D:\Arduino\Sunray-master_follow_SB314i\Sunray-master_follow_working - 314interrupt\Sunray-master\sunray\rcmodel.cpp: In member function 'void RCModel::begin()':
rcmodel.cpp:42:11: error: 'pinRemoteMow' was not declared in this scope; did you mean 'pinRemoteSteer'?
42 | pinMode(pinRemoteMow, INPUT);
| ^~~~~~~~~~~~
| pinRemoteSteer
In file included from D:\Arduino\Sunray-master_follow_SB314i\Sunray-master_follow_working - 314interrupt\Sunray-master\sunray\udpserial.h:14,
from D:\Arduino\Sunray-master_follow_SB314i\Sunray-master_follow_working - 314interrupt\Sunray-master\sunray\config.h:672,
from D:\Arduino\Sunray-master_follow_SB314i\Sunray-master_follow_working - 314interrupt\Sunray-master\sunray\rcmodel.cpp:4:
D:\Arduino\Sunray-master_follow_SB314i\Sunray-master_follow_working - 314interrupt\Sunray-master\sunray\rcmodel.cpp: In member function 'void RCModel::run()':
rcmodel.cpp:64:47: error: 'pinRemoteMow' was not declared in this scope; did you mean 'pinRemoteSteer'?
64 | attachInterrupt(digitalPinToInterrupt(pinRemoteMow), get_lin_PPM, CHANGE);// Interrupt aktivieren
| ^~~~~~~~~~~~
C:\Users\HP745g2\AppData\Local\Arduino15\packages\adafruit\hardware\samd\1.7.5\cores\arduino/Arduino.h:148:38: note: in definition of macro 'digitalPinToInterrupt'
148 | #define digitalPinToInterrupt(P) ( P )
| ^
rcmodel.cpp:71:47: error: 'pinRemoteMow' was not declared in this scope; did you mean 'pinRemoteSteer'?
71 | detachInterrupt(digitalPinToInterrupt(pinRemoteMow)); // Interrupt deaktivieren
| ^~~~~~~~~~~~
 
Also, ich hatte eigentlich die Namen wieder zum Ursprung gebracht.. kann sein, das ich dann eine Version überspringen hatte.. also das Problem ist, das ich Pins für RC umbenannt hatte.. und später feststellte das es doof ist wenn man das teilen will. Ist n kleines Problem... kannst du selbst vergleichen bzw. Zum original vergleichen. Werd das aber nochmal glattbügeln sodass es keine Probleme gibt. Hab zb. Auch ein Relais drinn, das den RC Receiver schaltet und LEDs abschaltet wenn nicht im Charge. Weil ich die Pins für mich umbenannt hatte, kommt es da zu Problemen.. ist aber nur ne Definitionssache.
 
Kannst dir auch die library ziehen, dann geht's... falls du RC nicht nutzt. Ich habe z.b Pin TILT für pwm vom mähwerk dazugenommen. Und da un der config.h Pin mow benannt.
 
Danke - habe jetzt geflasht und lasse ihn jetzt durchgehend an bis übermorgen die Sonne scheint... dann bin ich mal gespannt:)
 
Hallo Mr.Tree, erstmal ein großes Dankeschön für deine Arbeit.

Deine 314 läuft, aber bei mir bleibt immer mal wieder der Mäher kurz stehen und es hört sich auch an als ob der Mähmotor kurz aus geht. Das war bei der 303 noch nicht so. Ich muss mal sehen ob ich die SD-Karte morgen für eine LOG rausnehme und dann mal schaue ob ich was sehe.

Habe mal noch eine Frage wofür stehen die folgenden Parameter genau:

#define BUMPER_DEADTIME 800 // linear motion dead-time (ms) after bumper is allowed to trigger
#define BUMPER_TRIGGER_DELAY 500 // bumper must be active for (ms) to trigger
#define BUMPER_MAX_TRIGGER_TIME 0 // if bumpersensor stays permanent triggered mower will stop with bumper error (time in seconds; 0 = disabled)
 
Zuletzt bearbeitet:
Ja, die Log würde helfen. Bin mir gerade nicht sicher was sowas verursachen könnte.. Die adaptiveSpeed macht ja nur einen Speedfactor...

Hast du RPM drin? Also hast du einen Mow Odometriemotor? Denn momentan ist es nicht getrennt, das heisst die Stromfunktion klappt nur mit Odometrie vom Mowmotor. Die EscapeLawn Sache ist nachwievor nur mit RPM... die löst dann immer aus wenn die RPM unterschritten ist.

Mach den Mower mal an die Konsole und schalte das Mähwerk ein, nach 10sec kommt eine Meldung in der konsole. Was steht da?

Testweise kannst du mal versuchen EscapeLawn auf false zu setzen in der config.h, aber im Fall das du kein RPM hast... wird alles Buggy sein bw. nicht funktionieren.
 
Zuletzt bearbeitet:
Meiner ist seit gestern Abend an.... Leider noch zu nass zum testen, in ein paar Stunden kann es endlich los gehen. Bin gespannt ob er rumzickt oder nicht ;-)
 
Tja...

Leider ist der Mowmotor nicht angelaufen und ich musste einen Stromlos/Restart machen...
Das hatte ich aber mit der Version von Juni auch schon, typischerweise 3 mal hin und herfahren und dann startet der Mowmotor wieder.
Habe den A4931 als Mow und die Original 8308 als Gear.

Jetzt mäht er - erster Eindruck: schneller als vorher und das Tracking ist jetzt anders (kann noch nicht sagen ob besser oder schlechter, evtl. nehme ich wieder meine Werte von Juni).

Das ist das Log als ich den Mow Motor manuell gestartet habe und er nicht angelaufen ist. Wie gesagt - nach power on/off funktioniert es...


7:4:11 ctlDur=0.02 op=Idle(initiatedByOperator 1) freem=229979 sp=200000A0 bat=27.41,-0.003(0.26) chg=0.20,0(0.02) diff=-27.196 tg=-1.16,-4.33 x=9.92 y=-15.76 delta=-3.01 tow=303016600 lon=6.51039285 lat=51.38257895 h=77.4 n=-15.76 e=9.92 d=3.20 sol=2 age=0.60
WARN: PID unmet cycle time Ta=0.31 TaMax=0.20
WARN: PID unmet cycle time Ta=0.33 TaMax=0.20
WARN: PID unmet cycle time Ta=0.34 TaMax=0.20
batTemp=26 cpuTemp=46
7:4:16 ctlDur=0.02 op=Idle(initiatedByOperator 1) freem=229979 sp=2000196C bat=27.40,-0.003(0.28) chg=0.22,0(0.03) diff=-27.192 tg=-1.16,-4.33 x=9.91 y=-15.77 delta=-3.01 tow=303021600 lon=6.51039271 lat=51.38257891 h=77.4 n=-15.77 e=9.91 d=3.21 sol=2 age=0.49
Motor::setMowState 0
 
und das sind meine Einstellungen zum MowMotor in Config.h

Wie gesagt - wenn er läuft, dann läuft er - manchmal funktioniert der 1. Start nicht, ein paarmal hin und herfahren hilft meistens...

#define MOWMOTOR_RPM_OFFSET 110 // compensate small RPM offsets (positive if RPM reading is less then RPM setpoint)
#define MOWMOTOR_PID_KP 0.0024// (0.0024 Mowmotordriver DRV8308) (0.0018 JYQD) this is enough to compensate battery drainage over time and have a slow spinup, there may be a controlleroffset to rpm wich has to be thought of
#define MOWMOTOR_PID_KI 0.002 // (0.04 (Mowmotordriver DRV8308/JYQD))
#define MOWMOTOR_PID_KD 0.00// (0.0000 (Mowmotordriver DRV8308/JYQD))


#define ENABLE_MOW_MOTOR true // Default is true, set false for testing purpose to switch off mow motor permanently
#define MOW_PWM 200 // use this to permanently reduce mowing motor power (255=max)
#define MOW_FAULT_CURRENT 5.0 // mowing motor fault current (amps)
#define MOW_TOO_LOW_CURRENT 0.005 // mowing motor too low 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 // use this if you keep getting 'motor error
 
Also aus dem Log sehe ich lediglich das .Motor::setMowState=0
Daa bedeutet mow würde garnicht aktiviert. Geht das Log noch weiter? Ich sehe nur op ist idle .. also gar kein Befehl für mow.

Wenn bei dir der Mähmoter immer nicht anläuft, scheint es ein anderer Bug spezifisch mit deinem Treiber zu sein. Ein vollständiges Log wäre gut. Normalerweise sollte er einen Motor Error Reset machen. Das macht er auch wenn er nicht losfährt weil die Antriebstreiber "klemmen" bzw. im dauererror sind.
 
Zuletzt bearbeitet:
Ich habe mal geschaut... die Pinnamen sind bei mir jetzt wieder standard. Dann klappt das demnächst mit den originalen RC.cpp und .h
 
Feedback vom 1. mähen: sehr gut, besser als die vorhegende Version. Der Mower ist gefühlt schneller unterwegs (bzw. bremst sich selbst nicht so mehr aus).
Aber 2 mal hatte ich einen Error wegen obstacle welches ich vorher nie hatte (Gras war auch nicht besonders hoch) - da werde ich meine alten Bumper settings (minimal anders) wieder nehmen.

Beim MowMotor hatte ich manuell das Mähwerk eingeschaltet und währenddessen den Laptop an der USB Buchse gehabt und das Log kopiert (habe nicht alles rauskopiert).

Das mit dem Motor Error reset wäre vielleicht eine Idee. Ich habe noch nie (selbst beim "Klemmen" des Antriebs) einen Motor Error in der App gesehen. Vielleicht sollte ich die Config.h nochmal durchgehen. Ansonsten ist es wohl den Treibern geschuldet.

Sind diese PID werte für den A4931 mit Act BL denn richtig? Vielleicht ist das das Problem (aber wenn er einmal läuft, dann läuft er)

#define MOWMOTOR_PID_KP 0.0024// (0.0024 Mowmotordriver DRV8308) (0.0018 JYQD) this is enough to compensate battery drainage over time and have a slow spinup, there may be a controlleroffset to rpm wich has to be thought of
#define MOWMOTOR_PID_KI 0.002 // (0.04 (Mowmotordriver DRV8308/JYQD))
#define MOWMOTOR_PID_KD 0.00// (0.0000 (Mowmotordriver DRV8308/JYQD))

Habe zwar aktuell noch 3xJYQ2021 rumliegen, aber das ist mir aktuell zu aufwendig (vielleicht im Winter) und ich habe mich noch nicht damit beschäftigt ob ich das vorhandene BL Board weiter nutzen kann oder wiederum was gebastelt werden muss.
 
...oder kann es mit dem Startproblem des Mowmotors damit zu tun haben, das ich mein Mow_overload_current aus Sicherheitsgründen auf 2.0A runtergesetzt habe und er beim Anlaufen mehr zieht (aber dann würde er ja nie anlaufen, eine Fehlermeldung kommt auch nicht).

Und wenn ich 3 mal ein paar Meter weiter fahre geht der MowMotor fast immer wieder an....
 
Mir ist eingefallen, sobald du einmal in der App mow selbst aktiviert hast und wieder deaktiviert... wird er den mowmotor nicht mehr automatisch einschalten! Kann aber sein dass das gefixt wurde. Interessant wäre ein komplettes Log, wenn das beim undocking passiert

Bzgl der pid Werte, der Motor sollte zügig anlaufen.. nicht Stöcken und nach einmal überschwingen seine RPM relativ stabil halten. Also bei mir läuft der Motor ca. 4 sek an. Benutzt du denn die RPMset Funktion für mow? Oder pwm? Wenn du es benutzt, kommt nach Ablauf von der mowspinuptime eine Meldung, ob die RPM vom mähwerk auch passen.
 
Ja, mach mal den overload höher! Ich habe den Langpassfilter für den mowmotor verringert damit man besser die reale Stromaufnahme sieht und die Schwelle für Überstrom schneller kommt. Mach mal 4 Ampere.
 
Ich benutze mittlerweile fast nur noch die Cassandra App. Aber guter Punkt...

...und habe die use_mow_rpm_set aktiviert - da muss ich mal im Log drauf achten

und 4A für overload - guter Tipp - werde ich auch mal machen.

Besten Dank :)
 
Der bldc03 hat eine Nennleistung von 60 Watt, das sind schon knapp 3 Ampere. Wenn der Treiber nicht begrenzt kann der Motor beim anlaufen locker das 2fache nehmen.

Eine andere Frage wäre, ob der Treiber überhaupt einen Fehlerausgang hat und wenn ja, ist der auch geklemmt und funktioniert?
 
Zuletzt bearbeitet:
Oben