Witam,
Zdecydowałem się napisać na forum z prośbą o pomoc, ponieważ już nie mam pomysłu jak rozwiązać mój problem. Ogólnie chodzi o sygnał BEMF i prawidłowe wykrycie punktów ZC. Nie wiem dokładnie, czy jest to wina software'u czy hardware'u. Sama procedura startu silnika działa. Problem pojawia się przy obciążeniu, ale to chyba jest do rozwiązania poprzez wolniejszą komutację. Na początek dodam schemat układu, a później opiszę dokładnie problem i dziwne (przynajmniej dla mnie) zachowania sterownika.
Chciałbym zwrócić szczególną uwagę na moduł "Driver MOSFET". Służy on do sterowania napięciem. Problem z tym modułem jest taki, że przy zerowym wypełnieniu PWM tranzystor P-MOSFET jest "trochę" otwarty. Na tyle otwarty, że na drenie pojawia się napięcie około 3V. Szpilki PWM można od razu wykluczyć, ponieważ przy zwykłym podaniu 0 z uC problem również występuje. Na bazie tranzystora P-MOSFET pojawia się napięcie o około 1-2V mniejsze niż na źródle. Nie wiem dlaczego tak się dzieje i czy to może mieć to wpływ na błędne wykrywanie ZC?
Teraz przejdźmy do testów jakie wykonałem, aby sprawdzić jak zachowuje się sygnał BEMF i sterownik. W całym teście w przerwaniu, które wykrywa ZC zmieniałem stan diody na przeciwny.
1. Na początku odłączyłem silnik od sterownika oraz wyłączyłem procedurę startu silnika (sterownik nie robi nic). Włączyłem przerwania i obserwowałem co się dzieje. Dioda mrugała. Nie wiem czy tak powinno być, ale postanowiłem temu zaradzić i dodałem kondensator 100nF (C5 na schemacie) między "zsumowane fazy", a masę. Po tym zabiegu przerwania nie występowały. Następnie podłączyłem silnik i obracałem ręką wirnik, co powodowało powstawanie przerwań - czyli chyba dobrze.
2. Następnie, przy odłączonym silniku, ale przy włączonej procedurze startu zrobiłem taki sam test. W tym teście dioda znowu zaczęła mrugać, ale udało mi się znaleźć przyczynę. Mianowicie przy każdej komutacji pojawiało się przerwanie (kilka lub kilkaset nawet). Tymczasowo rozwiązałem ten problem w taki sposób, że przed dokonaniem komutacji wyłączałem przerwanie z komparatora i po jakimś czasie je z powrotem włączałem.
3. Przyszedł czas na test ze silnikiem. Po wystartowaniu silnika czekam, aż pojawi się odpowiednia ilość przerwań i włączam sterowanie silnikiem za pomocą właśnie tych przerwań. Działa, ale tylko dla PWM 100% i przy usunięcia rozwiązania z punktu 3. Z rozwiązaniem z puntku 3 w ogóle nie pojawiają się przerwania. Ponadto nie jestem przekonany co do szybkości tego silnika, bo mam wrażenie, że mogę go rozpędzić na "ślepo" szybciej niż przy pomocy przerwań. Dla PWM mniejszym niż 100% sterowanie w ogóle nie działa. Stąd też moje pytanie - czy częstotliwość i tryb PWM może powodować takie zachowanie? Nie sprawdziłem tego jeszcze, ale to zrobię. Obecnie częstotliwość PWM wynosi około 2 kHz, zatem mało.
Na koniec jeszcze kilka dodatkowych pytań.
a) Czy kondensatory elektrolityczne między zasilaniem a masą pomogą? Na razie mam 100uF, ponieważ skończyły się większe i czekam na dostawę.
b) Czy istnieją jakieś tajemnice sterowania, o których nie wiem? Czytałem gdzieś, że komutacja powinna następować chwilę (nie przypadkową chwilę) po wykryciu ZC, a po samej komutacji powinno się wyłączyć wykrywanie ZC. Dodatkowo szukanie tych punktów powinno odbywać się tylko jak sygnał PWM jest w stanie wysokim/niskim. Z testu nr 3 wynika, że wyłączanie szukania punktów ZC po komutacji nie działa dobrze, ponieważ wtedy w ogóle się nie pojawiają przerwania, ale przyczyną tego może być zupełnie co innego, np. częstotliwość PWM lub hardware.
Proszę o kilka wskazówek gdzie może leżeć błąd. Czy to bardziej hardware, czy software. Nie wiem już gdzie szukać błędów.
Pozdrawiam,
Patryk