Leider habe ich die Art der Messwerterfassung nicht deutlich erläutert.Die für mich einfachste Möglichkeit war es, die Messwerte innerhalb der ISR für den externen Interrupt aufzunehmen. Sprich: die Aufnahme der Messwerte orientiert sich an den Weglängen.... Was ich allerdings nicht so richtig nachvollziehen kann, ist das 'Raster' mit dem alle Kurven, außer "(ncx0 = lncgs0) * 10", versehen sind ...
Damit verbunden ist die Möglichkeit, die Messwerterfassung ab einer vorher bestimmbaren Weglänge zu starten. Dazu wird in der extINT-ISR ein counter von x, z.B. 1999 runtergezählt und bei 1000 wird ncx0 - der Pointer auf das aktuelle Messwertfeld - von 200 auf 0 gesetzt. Die Messwerterfassung prüft diesen Pointer auf <100. Ist dies der Fall, wird ncx0 eins raufgesetzt und die Messwerte in das entsprechende Feldelement geschrieben. Ist der Messwertpointer auf 200 wirkt er deswegen als negierendes Flag für die Messwertaufnahme.
Nachteil: Wenn der Motorencoder schneller Interrupts erzeugt als die Regelung läuft, wird der Regelungsstatus mehrfach erfasst. Dies ist bei schneller Fahrt der Fall. Dumm gelaufen - und leider sieht das auch schrecklich aus.
So ist für mich aber die zeitliche Zuordnung der einzelnen Werte einfach durchzuführen. Andernfalls müsste ich zusammen mit den Regelungsparametern noch die entsprechende Zeit notieren, bei der die Parameter erfasst würden. Systematisch an sich kein Problem. Da ich das SRAM des m328 mit der aktuellen Datenerfassung schon zu rund 95% ausgefüllt habe, wäre dafür ein aktuell präsentierter Messwert zu streichen. Diesen Nachteil sehe ich gravierender als den derzeit bestehenden Zustand.
Ich hoffe, dass die Datenerfassung bzw. -präsentation jetzt nachvollzeibar(er) ist.
Nachtrag :
Das Schema der Timer und der Regelung ist weiter oben in diesem Thread schon mal präsentiert worden.
Lesezeichen