Hi, danke für deine Antwort. Ich glaube wir reden bei der "Frage nach der Synchronität" aneinander vorbei - oder ich verstehe nicht richtig was du meinst. Es ist ja so: Mein Motortreiber stellt eine neue Motordrehzahl ein nachdem er erfasst hat wie lange der PWM Pin auf High war (125 bis 250 µs). Die aktuelle Drehgeschwindigkeit des Copters (erfasst mit einem Gyroskop) soll dabei so kurz wie möglich vor der Reaktion des Motortreibers gemessen werden. Bei vielen Regelungen ist ja nicht die Regelfrequenz an sich ein kritischer Faktor, sondern die Zeitspanne zwischen "Fehler messen" und "etwas gegen den Fehler unternehmen". So können Copter auch mit 50 Hz Regelfrequenz fliegen, aber nur zufriedenstellend wenn der Fehler direkt vor der Ausgabe des PWM High Pulses erfasst wird. Ansonsten ergibt sich eine zu große Verzögerung. Ich habe nun extra Motortreiber herausgesucht die nur einen sehr kurzen PWM High Puls brauchen. Denn je länger dieser Puls ist, desto älter sind die Sensorinformationen bevor darauf reagiert wird (denn der Motortreiber kann ja erst reagieren nachdem die komplette Länge des High Pulses vermessen wurde).Der minimale Zeitversatz ist erreicht, wenn die Berechnung synchron zur PWM ist. Ich spring jetzt mal. Der Zeitpunkt ist unerheblich, der Wert nachdem sich der Motor richtet, kann nur alle 2ms geändert werden. Feiner löst dein System nicht auf. Und wann du die Berechnung startest ist auch egal, sie muß nur zum nächsten 2ms Takt fertig sein.
Machst du jetzt in der Mainloop etwas, das möglicherweise nichts mit dem Regler zu tun hat, aber länger als 1ms dauert, ist dein System geplatzt, und du verpasst die nächste PWM Phase.(@Besserwessi: einmal gehts noch gut)
Ja, das stimmt. Ich werde aber nichts machen. Ich würde es ja gerne auch mal nur im Interrupt probieren, weiß aber nicht so recht wie und wo ich so einen Interrupt erzeugen / auswerten / ansprechen kann.
Viele Grüße, William
-> http://william.thielicke.org/
Es ist auch möglich, daß ich dein System nicht richtig verstehe. Ich versuche mal, dein 50Hz Beispiel nachzuvollziehen:
alle 20ms wird die Drehzahl korrigiert. Der Servopuls fängt, sagen wir mal, bei ms 0 an, endet bei ms 2, dann ist bis ms 20 Ruhe. Du sagst, wichtig ist nur der Fehler bei ms 2 oder möglichst kurz davor. Der Fehler in der übrigen Zeit ist unerheblich?
Ich bin davon ausgegangen, daß du deine Pulse mit HW, z.B. einem Timer erzeugst. Der kann doch sicher auch einen Interrupt erzeugen.Ich würde es ja gerne auch mal nur im Interrupt probieren, weiß aber nicht so recht wie und wo ich so einen Interrupt erzeugen / auswerten / ansprechen kann.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Lesezeichen