Generieren Sie eine feste Anzahl von Impulsen auf dem STM32F4 PWM

Ich versuche, einen Servomotor zu steuern ( Link ). Es ist ein bürstenloser Gleichstrommotor mit einer Schnittstelle ähnlich einem Schrittmotor.

Der Motor dreht sich um eine definierte Strecke, basierend auf der Anzahl der Impulse, die er vom erhält PWM. PWMDie Geschwindigkeit wird wie bei einem Schrittmotor durch die Pulsfrequenz des .

Zur Steuerung dieses Motors verwende ich einen Mikrocontroller STM32F407ZET6. Ich kann die Frequenz und den Arbeitszyklus von PWM leicht ändern, aber meine Frage ist folgende:

Wie erzeuge ich eine feste Anzahl von Impulsen in der PWM? Ich möchte zum Beispiel, dass die PWM zu einem bestimmten Zeitpunkt 1000 Impulse mit einer Frequenz von 20 kHz und einem Tastverhältnis von 50 % sendet. 20kHz und 50% Duty Cycle sind einfach zu definieren, aber ich kann nicht bestimmen, wie ich die 1000 festen Impulse erzeugen soll.

Eine der von mir versuchten Lösungen bestand darin, die PWM wieder an einen Timer im Zählermodus anzuschließen und die PWM zu stoppen, wenn die erforderliche Anzahl von Impulsen erzeugt wurde. Die Anzahl der Impulse ist jedoch nicht immer festgelegt und reicht manchmal von 998 bis 1005 (z. B.).

Ist dies ohne Feedback möglich?

Wenn Sie eine bestimmte Anzahl von Impulsen wünschen, müssen Sie Ihre PWM möglicherweise mit einem Timer und nicht mit dem eingebauten PWM-Generator bit-bangen.
Setzen Sie einen Zähler in die kürzestmögliche Interrupt-Routine?
Wenn die Impulszahl bekannt ist, wissen Sie, wie lange es dauert, sie zu senden, und Sie können einen anderen Timer verwenden, um die PWM zu deaktivieren.
@RonBeyer schlechtestmögliche Lösung

Antworten (1)

Aktivieren Sie den Capture-Compare-Interrupt, indem Sie das CCxIE-Bit im TIMx_DIER-Register setzen (füllen Sie x mit Ihrem Timer und cc-Kanal). dies ermöglicht eine Unterbrechung, die immer dann verarbeitet wird, wenn ein Impuls abgeschlossen ist. In Ihrem isr können Sie das TIMx_CNT-Register überprüfen, um es noch einmal zu überprüfen.

Aktivieren Sie pwm, beginnen Sie mit dem Zählen Ihrer Impulse in isr, wenn Sie die gewünschte Anzahl von Impulsen erreichen, deaktivieren Sie pwm.