uefvanscheld / Rudis_Tor

Arduino based control for 2 garage doors
0 stars 0 forks source link

Positionbestimmung der Tore #21

Open uefvanscheld opened 5 years ago

uefvanscheld commented 5 years ago

EInige Funktionen der Steuerung hängt (ggf.) von der Position eines Tores ab (z.B. zeitversetztes Schließen, hohe/niedrige Geschwindigkeit oder auch die Reaktion auf einen Stromanstieg (s. #20 https://app.gitkraken.com/glo/board/W-6H0tbmZwAaeaqf/card/XA1isuVFfAAut3fE)).

Die ausschließliche Verwendung der seit dem Start aus einer Endposition vergangenen Zeit birgt das Problem, dass ggf. mit unterschiedlichen Geschwindigkeiten gefahren wird, was die Positionsbestimmung verfälscht.

Analog zum normalen Ansatz, dass die Strecke das Produkt aus Zeit x Geschwindigkeit bzw. dem Integral dV über dT ist, daher der Vorschlag, laufend in festen(!) Zeitabständen (z.B. 10 msec; kein Problem bei den aktuellen Loop-Durchlaufzeiten) die Motorgeschwindigkeit auszulesen und aufzusummieren (analog Integral). Aus dem Vergleich des Integralwerts mit den Ergebnissen von Messfahrten (Zeit für Öffnen/Schließen mit voller Geschwindigkeit) kann die Position eines Tores innerhalb des ca. 90° Schwenkbereiches errechnet werden.

Als Ersatz für die reale Motorgeschwindigkeit bieten sich folgende Werte an:

Um dabei sich aufsummierende Fehler (z.B. Laufzeitschwankungen durch Temperaturänderungen) zu vermeiden, könnte die Steuerung bei Erreichen einer Endposition den jeweiligen Integralwert (oder einen aus den letzten x Fahrten gemittelten Wert) als neuen Vergleichswert zur Positionsberechnung übernehmen.

Bei Erreichen einer Endposition (Auf oder Zu) sollte die Torposition fest auf den entsprechenden Zielwert (z.B. 0% oder 100%) gesetzt werden und die Differenz zum "realen" Wert als Korrekturfaktor (EEPROM ?) gespeichert werden