Dergute W. schrieb:
> Also guck', dass dein 200kS/s System irgendwie
> runtergebremst wird auf 16kS/s.
Ein System wird nicht besser, wenn es runtergebremst wird, weil dadurch
die Latenz steigt. Die Sollwertvorgabe muss so schnell wie möglich
geschehen, idealerweise am Ende des Zyklus, um rasch einen neuen Starten
zu können.
Wenn der Ausgabezyklus fest auf einer Frequenz ist, könnte man diese
erhöhen, um Raum für das Hin- und Her der Daten zu schaffen und die
16kHz zu halten.
Ganz generell brauchst Du mindestens einen Sollwert je Ausgabewert.
Echtzeitfähig bist Du dann, wenn Du das ohne zusätzliche Verzögerung
schaffst. Die erhöhte Abtastrate in Deinem Fall nutzt man gerne zu
Filterung. Am einfachsten mit einem resamling Filter, das die Raten
übersetzt. Dieses wird einfacher, wenn die Frequenzen ganzzahlig sind.
Du könntest Z.B. auf 20kHz steigern, damit es zu den 200kHz passt, oder
Du machst den Schreibprozess asynchron, dass er wartet, bis der
Ausgabeprozess beendet ist und sich damit auf den Ausgang
synchronisiert. Wichtig ist, dass es eine deterministische
Zeitverzögerung gibt, die man mit in der Berechnung berücksichtigen
kann, weil sich die "Welt" ja weiterdreht und man immer hinten dran ist.
Was Weka im Bezug auf das Ausgucken von Assembler und dessen timing
vorschlägt, ist meines Erachtens Schnee von 1970. Inzwischen gibt es
Echtzeitsysteme und Synchronisationsmechanismen für Prozesse.
Die gängige Methode ist, einen Wert zu messen, die Rechnung auszuführen,
den neuen Wert zu stellen und dann das Ergebnis abzuwarten und dann
wieder zu messen. Damit sind zyklische Systeme von einander entkoppelt
und es wird immer mit einem Wert hinterher gemessen und gerechnet. Das
bedeutet einen Zeitversatz von einem Zyklus zwischen Schreiber / Rechner
und Ausführer.
Der Ausführer ist also mit dem alten Wert unterwegs, während am
aktuellen gerechnet wird. Es gibt also ein Delay von 2 Zyklen zwischen
Zentrum des Messens und des Rechnens. Die Lösung des Dilemmas ist die
Verwendung der doppelten Abtastrate für das Reglerintervall gegenüber
dem, was man bei einer reinen Steuerung hätte. Wenn Du mit 16kHz +
200kHz arbeitest, kommst Du auf etwa 14kHz oder landest eben bei 8kHz
wenn Du wechselst und einen Sollwert vorgibst.