Ich hatte heute wieder meinen kleinen Studiernachmittag (Sturm über Niedersachsen!) und will es nun nochmal ganz genau wissen. Wer erbarmt sich freundlicherweise meiner und erweitert meinen Mangel an Fachwissen und Logik?
1) Schleifensender V2 (PCB V1): Verwendung der Potis
Laut aktuellem Schaltplan (Azurit 1.0.a4, Github) liegt Poti 1 an Nano A3, Poti 2 an Nano A7. Das finde ich auf dem Sender-PBC mit Poti RV1 an Nano A3, Poti RV2 an Nano A7 auch bestätigt. Im aktuellem Code Sender V2 azurit 1.0.a4 (Github) findet sich in Zeile 50-53 lediglich der Verweis auf Poti 1:
// ---- sender current control (via potentiometer) ----
// sender modulates signal (PWM), based on duty-cycle set via this potentiometer
#define USE_POT 0 // use potentiometer for current control? (set to '0' if not connected!)
#define pinPot A3 // 100k potentiometer (current control)
In den Codezeilen 324-327 findet die Auswertung der Potistellung für den Fall statt, dass USE-POT auf 1 gesetzt wurde.
if (USE_POT){
// read potentiometer
duty = max(0.01, ((float)map(analogRead(pinPot), 0,1023, 0,1000)) /1000.0 );
}
D. h. das Poti dient primär der Einstellung des Prozentwertes für den duty-cycle. Indirekt ergibt sich bei höherem duty-cycle auch ein höherer Schleifenstrom.
USE_POT ist defaultmäßig auf 0 gesetzt. Dutycycle ist dann 255.
Mit USE_POT auf 1 ergibt sich abhängig von Widerstand und Betriebsspannung der Schleife (die am Poti des DC-DC-Wandlers eingestellt wurde) der Wert für den Schleifenstrom.
Im Betrieb erhalte ich bei Minimalstellung des Potis einen duty-cycle Wert von 0,01 (dutyPWM = 2), der bei Aufdrehen des Potis um ca. ¼ Umdrehung auf 1 (dutyPWM=255) ansteigt.
Der restliche Verstellweg des Potis (½ Umdrehung) wird quasi nicht genutzt und die Einstellbarkeit ist dementsprechend wenig feinfühlig. Durch Parallelschaltung eines Festwiderstandes anpassen zum besseren Ausnutzen des Verstellbereiches.
Fazit und Fragen zu 1)
Fakt: nur ein Poti verwendet (für duty-cycle Schleife 1).
Vermutung: Das andere frei für duty-cycle Schleife 2, jedoch codemäßig noch nicht umgesetzt?)
Frage: durch welche Anpassung bekomme ich den Potiweg voll ausgenutzt? Im Prinzip sind doch die Potis als Spannungsteiler zw. GND und +5V eingesetzt, so dass der Schleiferabgriff über den gesamten Regelweg von 0 auf 5V gehen müßte. Warum erscheint mir dass denn jetzt so, dass nur 1/3 des Regelweges von 0 auf 5V (Potiwert: 1023) führt und die restlichen 2/3 zu keiner Werteänderung führen?
2) Messung des Schleifenstroms und Anzeige in der seriellen Konsole
Zur Schleifendiagnose (Schleife geschlossen und damit intakt) wird der Schleifenstrom über den
Motortreiber auf Nano A0 gemessen. Ab einem Strom von 0,03 A wird die Schleife als intakt gemeldet und die LED an Nano D13, bezeichnet als 'Mower in Ladestation', leuchtet permanent.
// motor driver feedback pin (=perimeter open/close detection, used for status LED)
#define USE_PERI_CURRENT 1 // use pinFeedback for perimeter current measurements? (set to '0' if not connected!)
#define pinFeedback A0 // M1_FB
#define PERI_CURRENT_MIN 0.03 // minimum Ampere for perimeter-is-closed detection
Fazit und Fragen zu 2)
Funktion ist nachvollziehbar gegeben, allein die Stromwerte sind mir nicht plausibel:
Das Ergebnis dieser Strommessung vermute ich in der Anzeige periCurrent: bei einem Wert von z.B. 0,05 erhalte ich aber per Schleifenstrommessung direkt über Multimeter in der Schleife 129 mA, bei Anzeige 0,28 gemessen 0,57. Stimmt da eine Meßwertkorrektur nicht oder kann ich den effektiven Strom so per Multimeter nicht genau messen, weil er vom PWM-Signal herrührt?
Bezeichnung der LED auf dem Schaltplan besser 'Perimeter_Status':
zur Erinnerung:
aus: Schleife unterbrochen oder Strom unter 0,03 A (evtl. auch Spannung zu gering)
an: Schleife in Betrieb oder Strom > 0,03A
langsames Blinken: Ladestation in Betrieb mit Ladestrom >0,08A
schnelles Blinken: Motrotreiber überlastet (wo genau sollte der Grenzstrom liegen?)
3) Messung des Ladestroms und Anzeige in der seriellen Konsole
Die Zeilen 55-59 im Sendercode beziehen sich auf die Messung der Ladestromstärke per INA169 über Nano A2.
// ---- sender automatic standby (via current sensor for charger) ----
// sender detects robot via a charging current through the charging pins
#define USE_CHG_CURRENT 0 // use charging current sensor for robot detection? (set to '0' if not connected!)
#define pinChargeCurrent A2 // ACS712-05 current sensor OUT
#define CHG_CURRENT_MIN 0.008 // minimum Ampere for charging detection
Setze ich USE_CHG_CURRENT auf 1, sehe ich Stromwerte für den Ladestrom zwischen 0 und 7 mA, wenn der Mäher NICHT in der Ladestation ist, sondern nur die Schleife in Betrieb ist.
Mit einem 16 Ohm Widerstand am Ladeausgang Leerlaufspannung 29,7 V erwarte ich ca. 1,85 A Ladestrom: in der seriellen Konsole zeigt chgCurrent 1,1. Per Multimeter keine vernünftige Stromanzeige! Gleiche Begründung wie beim Schleifenstrom???
Mit USE_CHG_CURRENT = 1 wechselt der Status isCharging auf 1, sobald der Ladeausgang nennenswert belastet wird (Strom >0,008 A. Die LED 'Mower in Ladestation' blinkt langsam und die Erkennung zur Abschaltung der Schleife funktioniert im gleichen Moment ebenfalls wie erwartet.
4) Anzeige Motortreiberfehler
Im Code Zeile 45-48 setze ich USE_PERI_FAULT auf 1 (default ist 0).
// motor driver fault pin
#define pinFault 4 // M1_nSF
#define USE_PERI_FAULT 1 // use pinFault for driver fault detection? (set to '0' if not connected!)
Drehe ich nun Poti 1 langsam auf, beginnt ab ca. 0,9 A Schleifenstrom (maxWert / serielle Konsole) die Status-LED schnell zu blinken. Ich hätte gedacht, der Schleifenstrom wäre durch den
Motortreiber erst oberhalb 1,5 A begrenzt.
Kann mich dazu Jemand aufschlauen?
Vielen Dank und einen schönen Abend!!!
Nach dem Eingraben von 270 m Begrenzungsdraht habe ich die Zeit am Rechner heute mal wieder ganz anders schätzen gelernt