STM32 - ESC: Problem z moim BEMF
Robię ESC dla mojego silnika BLDC. Użyłem STM32 (do wygenerowania mojego PWM), 3 sterowniki mosfet IR2101 (https://www.infineon.com/dgdl/ir2101.pdf?fileId=5546d462533600a4015355c7a755166c) i 6 mosfetów do sterowania różnymi fazami silnika.
Mój schemat:
Generuję moją fazę z PWM po stronie High i GPO po stronie le Low.
WYSOKA strona mojego PWM (faza A, B i C)
FAZA A (poniżej 0 V!)
Sygnał wydaje się poprawny, ale kiedy podłączam silnik, widzimy, że BEMF jest wsteczny w porównaniu z dobrym BEMF.
FAZA ABC
BEMF ABC
Próbuję zmienić częstotliwość PWM, zmienić cykl pracy lub opóźnienie między każdą fazą, ale nic się nie zmienia (a czasem jest gorzej ...). Masz pomysł, dlaczego?
Mój STM działa z częstotliwością 8 MHz. Częstotliwość PWM: 900 Hz przy cyklu pracy 5%. Podczas tego testu mój silnik zużywa 12 V / 0,8 A.
EDYTOWAĆ
Nie wiem, dlaczego moja BEMF jest odwrócona w porównaniu z dobrą.
Poniżej możesz zobaczyć moją fazę C (żółta), wirtualną masę mojego silnika (jasnoniebieski), operację matematyczną Faza C - Wirtualna masa (ciemnoniebieska) i wyjście mojego LM339 (różowy).
Widziałem wiele tematów dotyczących tego problemu na giełdzie stosów, ale za każdym razem odpowiedź nie jest jasna. ( wprowadź opis linku tutaj ).
Myślę, że moje PWM i BEMF nie są „w fazie” .. Potrzebuję kilku wyjaśnień.
Odpowiedzi
Witamy w StackExchange! Dobra robota, pierwszy post.
Masz rację, twoje napięcie wymuszające jest poza fazą z twoim silnikiem.
Wygląda na to, że próbkujesz w niewłaściwym miejscu podczas cyklu PWM. Upewnij się, że próbka ADC występuje w środku cyklu PWM, gdy cykl PWM jest wysoki. Aby uzyskać odpowiednią próbkę, może być wymagany minimalny cykl pracy, ale może tak nie być, ponieważ 900 Hz to dość niska częstotliwość.
Trudno jest domyślić się na podstawie zrzutów ekranu z zakresu, ale wydaje się, że faza jest ujemna i przechodzi po dolnej stronie PWM, a dodatnia przebiega po górnej stronie PWM ... więc twój kod prawdopodobnie robi dokładnie to, co ty każą temu zrobić, ale w niewłaściwym miejscu w cyklu.
Lubię sprawdzać czas przerwania (z grubsza), ustawiając pin, który włącza się, gdy rozpoczyna się przerwanie ADC i wyłącza się, gdy kończy się przerwanie ADC. Zwykle mogę z tego uzyskać dobre informacje.
Jeśli zweryfikujesz / naprawisz czas próbkowania ADC, a problem będzie się powtarzał, opublikuj zrzut ekranu jednej fazy, gdy rośnie, osi Y w pełnej skali.
Trzymać się tego! Problemy rozwiązuje się, kładąc głowę w dół i pracując nad tym. Ale pamiętaj, aby odejść i się przespać. Rano problemy wyglądają zupełnie inaczej!
edytowane, aby dodać
Opierając się na twoich komentarzach, mam wrażenie, że mogą istnieć pewne podstawowe nieporozumienia (mogę się mylić).
Obliczanie napięcia neutralnego
Po pierwsze, nie musisz mierzyć napięcia neutralnego. To zmarnowany moduł ADC. Można obliczyć swój neutralny napięcia: neutral = (phaseA + phaseB + phaseC) / 3;. Zalecam przekonwertowanie tego na notację stałoprzecinkową dla prędkości, ale matematyka jest poprawna. Teraz to o jeden ADC mniej niż potrzebujesz!
Twój neutralny wygląda prawie poprawnie. Jeśli zrobisz w myślach matematykę, którą właśnie opisałem, zobaczysz, że napięcie neutralne jest rzeczywiście średnią (lub bardzo bliską) wartością napięć fazowych.
Skonfiguruj rejestry do wykonania pracy
Następnie, jeśli skonfigurujesz swoje rejestry TIM1 i ADC12 w sposób wyśrodkowany i wyzwolony w trybie szczytu licznika, wówczas żadne obliczenia nie są potrzebne do prawidłowego próbkowania.
Kiedy dojeżdżać
W swoim komentarzu napisałeś
jeśli faza pływająca - wirtualna masa = 0. Jeśli to prawda, to teoretycznie znam czas oczekiwania przed przełączeniem kolejnej fazy na wysoką
Jest to prawdą tylko w połowie przypadków i chcę to wyrazić jasno. Należy zauważyć, że faza BEMF przebiega naprzemiennie między wznoszeniem się w jednej fazie a opadaniem w drugiej.
if(phaseIsRising){
if(phaseVoltage > neutral)
commutate();
}else{
if(phaseVoltage < neutral)
commutate();
}
Jeśli poprawnie zaimplementujesz powyższy kod, będziesz mógł obsługiwać silnik, ale 30 stopni dalej. Uwierz mi, będzie wyglądać znacznie lepiej niż na twoich zrzutach ekranu.
Dalsza praca
Jeśli zajdziesz tak daleko, pozostawię ci decyzję, jak przesunąć zdarzenie komutacji o 30 stopni.