Hallo,
ich bin momentan dabei meinen "Shrediquette" Multicopter Code etwas aufzuräumen. Ich möchte gerne meinen Main Loop mit der Hardware PWM synchronisieren. Ich erkläre mal wie mein Code momentan noch aufgebaut ist, und was ich daran ändern möchte:


  • Im Moment habe ich einen main loop der frei läuft (mit ca. 800-900Hz). Dieser Loop fragt z.B. die Sensoren und die Fernsteuerung ab, macht ein paar PID Berechnungen und am Ende kommen immer neue Sollwerte für die Motoren heraus
  • Im Hintergrund läuft die ganze Zeit das Hardware PWM mit 500 Hz. Dieses benutzt die letzten Werte aus dem Main Loop und sendet sie per PWM die Motoren. Die Motorregler (zugekauft) haben eine Firmware die einen High Puls zwischen 125 und 250 µs verarbeiten, das nennt sich "OneShot125")


Das ist natürlich nicht optimal... Am besten wäre wohl, wenn alles mit 500 Hz laufen würde: Die ganzen Berechnungen aus dem Main Loop werden ausgeführt, und sofort danach gehen die Pins für die Motorregler auf High und bleiben dort (je nach Sollwert) für 125 bis 250 µs. Am allerbesten wäre es natürlich wenn die Pins schon 125 µs vor dem Ende der Berechnungen auf High gehen.

Hat jemand von euch vielleicht eine Idee wie so etwas normalerweise realisiert wird...? Ich habe noch einen 16bit Timer über... Könnte ich den mit 500 Hz laufen lassen und damit die Berechnungen im Main Loop starten? Dann am Ende der Berechnungen das PWM "resetten" (geht das überhaupt?), welches dann den entsprechen Puls erzeugt...?

Ich würde mich über eure Anregungen und Denkanstöße freuen!