|
Servomotor regeln
Auf den ersten Blick würde ich sagen, das könnte so klappen.
Aber natürlich habe ich ein paar Ideen zur Verbesserung:
Wieso misst Du die Pulsweite? Wäre es nicht besser die Frequenz oder die Periodendauer zu messen? Ich vermute, dass damit bessere Ergebnisse herauskämen, insbes. falls der Motor unruhig läuft. Wenn Du nur die High-Zeiten betrachtest, berücksichtigst Du ja nur die Hälfte des Signals.
Ich würde hier keine zwei parallelen Schleifen verwenden, sondern eine. In dieser wird dann pro Durchlauf ein kompletter Regelzyklus durchgeführt (also Input - Berechnung - Output). Dann kannst Du Dir die lokalen Variablen sparen, was deutlich saubereren LV-Code ergibt.
Falls Du unbedingt die zwei Schleifen beibehalten willst, dann pack wenigstens ein Timing in die Schreib-Schleife. In der aktuellen Form lastet die einen CPU-Kern zu 100% aus. Ich glaube nicht dass Du das möchtest.
Was ich noch garnicht verstehe ist, was Du mit den ineinander verschachtelten Schleifen erreichen willst.
In der aktuellen Fassung gibt es hier zwei "Modi":
Motor = TRUE: Die Tasks werden initialisiert und es wird dauerhaft immer wieder gelesen und geschrieben.
Motor = FALSE: Die Tasks werden initialisiert, es wird je einmal gelesen und geschrieben, dann werden die Tasks sofort wieder gelöscht, um anschließend sofort wieder initialisiert zu werden.
Vermutlich ist auch das nicht ganz das gewünschte Verhalten.
Evtl. fehlt Dir nur noch eine Case-Struktur, die auf "Motor" reagiert zu Deinem Glück?
|