Wpis z mikrobloga

Hej Mirki, próbuję zbudować sobie ESC do sterowania silniczkiem BLDC i próbowałem wykorzystać do tego stm32. Mam płytkę prototypową ( F103RB Nucleo ), ale mam kłopot ze sterowaniem GPIO. Muszę je przełączać co 20 us minimum (current chopping), niestety, kiedy używam (w przerwaniu) funkcji HALGPIOTOGGLE to zajmuje co najmniej 100 us (próbowałem też wpisywać wartości bezpośrednio do rejestru i efekt był ten sam), natomiast pin od kanału timera bez problemu utrzymuje 20 us (a nawet jest w stanie przełączać się szybciej).
Zna ktoś jakiś sposób żeby przyspieszyć piny, czy trzeba zmienić mikrokontroler? Może tutaj Atmega byłaby lepsza (wiem, że w takich sklepowych ESC używa się albo Silabsa albo Atmegę)?

Przebiegi wyglądają tak jak na obrazku, niebieski to pin sterowany programowo a żółty to pin z timera.

#elektronika , #diy #stm32 #arduino
KiloEchoSierra - Hej Mirki, próbuję zbudować sobie ESC do sterowania silniczkiem BLDC...

źródło: comment_1614524159MYSqH7OgIYpg5wzU9OQVBl.jpg

Pobierz
  • 6
@KiloEchoSierra:

kiedy używam (w przerwaniu) funkcji HALGPIOTOGGLE to zajmuje co najmniej 100 us (próbowałem też wpisywać wartości bezpośrednio do rejestru i efekt był ten sam), natomiast pin od kanału timera bez problemu utrzymuje 20 us (a nawet jest w stanie przełączać się szybciej).


Rozumiem ze uzywasz GPT do odmierzania czasu i ustawiajac rejestry tak by stan pinu GPT zmienial sie automatycznie wszystko dziala ale jak w obsludze przerwania uzywasz funkcji z
via Wykop Mobilny (Android)
  • 0
Rozumiem ze uzywasz GPT do odmierzania czasu i ustawiajac rejestry tak by stan pinu GPT zmienial sie automatycznie wszystko dziala ale jak w obsludze przerwania uzywasz funkcji z biblioteki GPIO to jest ona za wolna tak?

Zasadniczo tak. Przejrzałem reference design od STMicro gdzie jest pokazany podobny układ do mojego i wychodzi na to, że jedyny sposób, żeby GPIO wyrobiło to użycie timera w trybie PWM.

Niestety spaliłem stabilizator na płytce i
@KiloEchoSierra:
A w jakim trybie do tej pory uzywales GPT?

Teraz zastanawia mnie bardziej jak ludziom się udaje to zrobić na prostszej Atmedze...


Ostatnio robilem cos na szybko z Texas Instruments i tam 25kHz nie bylo najmniejszym problemem przy uzyciu ich biblioteki. Jestes pewien ze gdzies nie wkradl sie jakis maly bug?
@JohnReese: Co do sterowania: jedyne sensowne rozwiązanie to użycie timerów. Nawet sami spece os ST zalecają komplementarny PWM (w sensie, po to jest ten ficzer, żeby go używać przy silnikach).

Znalazłem za to błąd na mojej płytce (za wolne transoptory), więc teraz muszę wszystko przerobić, ale wydaje mi się, że już rozwiązałem problem.

Dzięki za odpowiedzi Mirku.
via Wykop Mobilny (Android)
  • 0
@morsisko: jeżeli chodzi ci o parametr GPIO output speed to tak, dałem na high, ale to nie ten parametr odpowiada za przełączanie w programie. Po prostu stosując HAL chyba nie da się tego zrobić tak jakbym chciał (przełączanie w programie). Ale już rozwiązałem mój problem za pomocą complementary PWM.