Ich möchte eine PWM mit 100 kHz erstellen , die 1000 Schritte haben kann. zB wenn ich CCR1 auf 0% setze, ist die PWM ausgeschaltet und wenn ich CCR1 auf 499 setze, sollte es 50% sein und offensichtlich bei CCR1 = 999 sollte es ein voller Arbeitszyklus von 100% sein.
Der CPU_CLK ist 80 MHz ... aber ich kann das nicht erreichen. hier mein bisheriger Code:
htim1.Instance = TIM1;
htim1.Init.Prescaler = 0;
htim1.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED2;
htim1.Init.Period = 1000-1;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.RepetitionCounter = 0;
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
Dies gibt mir eine PWM mit einer Frequenz von 40 kHz ... weit unter 100 kHz ... die Prescalare ist bereits auf dem Minimum ... ist dies unmöglich zu erreichen?
Der Chip ist STM32L476.
Die kurze Antwort ist, dass es mit einem Takt von 80 MHz nicht trivial ist, es sei denn, Sie wenden einige Dithering-Techniken an (siehe unten).
In Ihrem Fall sind die erforderlichen Schritte 10 Bit ... daher benötigen Sie mindestens einen Haupttakt von 100 MHz.
Das Dokument, das ich in meinem Kommentar verlinkt habe, zeigt einige komplexe Möglichkeiten, dies mit niedrigeren Taktraten zu erreichen, indem mehr Timer gedithert und kombiniert werden (es ist ziemlich komplex). Hier ist das Dokument von STM selbst.
Offensichtlich wäre eine andere Lösung die Verwendung einer anderen MCU aus derselben Familie mit höheren Taktraten, wenn Ihre Anwendung/Ihr Budget dies zulässt.
WasRoughBeast
Sean87
Autistisch
Tony Stewart EE75
Ahorn
DEKKER
Ahorn