Ich benutze 3 PWM + USB (3 verschiedene TIM), um 3 80khz Rechteckwellen zu generieren und wenn sie anfangen zu arbeiten in der Nähe von sagen 50kHz merke ich, dass die Hauptschleife nicht ausgeführt wird (i habe eine blinkende LED von 1 Sek.). USB hat eine Priorität von 0, während PWMs 1 haben (könnte geändert werden). Dies liegt daran, dass die Zielwellenfrequenz über USB gegeben ist.NVIC_Priority und main() Priorität auf stm32
Im PWM-Callback, da die Wellen beschleunigen oder verlangsamen können, rufe ich eine Funktion auf, die ausrechnet, auf welchen Wert der nächste CCR/ARR zählen soll, um eine sanfte Beschleunigung zu haben.
Mein Verständnis ist, dass die benötigte Rechenleistung zu wachsen beginnt und die Interrupts eine Menge sind, die verfügbaren Steckplätze ausfüllen.
Ich könnte die oben genannte Funktion in der Hauptschleife aufrufen, indem ich eine einfache boolesche Variable verwende, die innerhalb der PWM-Callback-Funktion auf true wechselt, und einmal die Funktion funcion als false bezeichnet.
Ich befürchte, dass dieser Ansatz zu einer nicht so perfekten 70/100khz Rechteckwelle führen könnte (vielleicht 63khz oder 95khz aufgrund der benötigten Rechenzeit).
Also gibt es eine Möglichkeit, dem Haupt eine Art Priorität zu geben? Der Main prüft grundsätzlich, ob zB 5ms/10ms/50ms/1s bestanden haben.
Welche STM32 verwenden Sie? Warum machst du die PWM mit Interrupts? Warum lässt du das Timer-Modul nicht alles für dich arbeiten? Sie können einige der Registerwerte mit dem DMA ändern. Ich habe Sinuswellen mit Timer1 mit dieser Methode erstellt. Ich vermute, ich muss etwas vermissen, aber die Erstellung von 100k-Quadrat-Wellen in Software scheint mir verrückt zu sein. :) – DiBosco
Ich brauche Interrupts, weil ich jeden Rechteckimpuls zählen muss. Außerdem brauche ich die Interrupts, denn wenn ich ein 100kHz Ziel habe, sollte die Welle 10-20-30-40-50-60-70-80-90-100Khz mit einer linear kalibrierbaren "Beschleunigung" machen. Dies bedeutet, dass ich CCR und ARR dynamisch ändern muss – Luigi
Ich bin mir nicht sicher, was Sie mit "zählen" jeder Rechteckwelle meinen.Sagen Sie mir wirklich, dass Sie bei jedem Timer-Interrupt den Pin in der Software umschalten? Wie oft ändern Sie die Frequenz? Ich glaube, mir fehlt noch etwas. – DiBosco