Skocz do zawartości

[C] [STM32] PWM z przesunięciem faz


ArczerMX

Pomocna odpowiedź

Cześć,
Zacznę od tego że używam płytki STM32F103 Nucleo i bibliotek HAL'a.

Przechodząc do tematu, chce wygenerować sygnał PWM na kilku kanałach jednego timera. Problem w tym że sygnal na kolejnych kanałach ma być przesunięty względem poprzedniego kanału.

Obrazek poglądowy, wypełnienie PWM ma wynosić 1/3.

W jaki sposób uzyskać taki sygnał?

Z góry dzięki za odpowiedź

Link do komentarza
Share on other sites

Jeden timer to jeden licznik → komparatory poszczególnych wyjść korzystają z tej samej wartości inkrementowanej co cykl → faza wyjść PWM jest ta sama.

Przy niewielkich częstotliwościach mógłbyś to robić przez każdorazowe zlecanie zmian pinów przy kolejnych komparacjach (funkcja output compare), ale musiałbyś przeładowywać rejestr(y) TIMx_CCRx po każdej zmianie każdego wyjścia. To wymaga trochę zabawy przerwaniami, ale jest jak najbardziej możliwe do zrobienia.

Tak myślę, że gdybyś ustawił poprawnie rejestr okresu TIMx_ARRx tak żeby okres zliczania timera był równy okresowi jednego PWMa, to do przeładowywania rejestrów CCRx mógłbyś zaprzęgnąć DMA. Wtedy każdy kanał wyjściowy czerpałby nowe momenty przełączeń z przygotowanej w RAMie tablicy obejmującej jeden okres i obeszłoby się w ogóle bez ingerencji programowej.

Napisz do czego to Ci jest potrzebne, może znajdzie się inne rozwiązanie?

Link do komentarza
Share on other sites

Dzieki za odpowiedź

Docelowo ma to być kontroler do silników bezszczotkowych.

Chcę sterować sześcioma mosfet'ami z częstotliwością 1KHz. Każdy tranzystor na osobnym kanale, a "przesunięcie" między kolejnymi kanałami to 1/6 ARR.

Zastanawiałem się nad wykorzystaniem dead time'a lub trybu "center aligned", ale nigdy wcześniej nie używałem ich i nie jestem pewien jak one działają.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...