Witajcie, dziś krótka ciekawostka - uruchomienie silnika BLDC ze starej stacji dyskietek przy użyciu oryginalnego PCB z tej stacji i Arduino. Zero dodatkowych części, MOSFETów, driverów, zero L293D i innych. Tylko jeszcze kabelki stykowe. Co zatem będzie sterować silnikiem BLDC? Oryginalny układ scalony z płytki - w tym przypadku FAN8422G. Przeczytamy jego notę katalogową i zapewnimy mu odpowiednie sterowanie tak, by silnik znów ożył.
Wnętrze stacji dyskietek
Na początek galeria z rozkręcania takiej stacji; nie ma z tym raczej problemów, wystarczy mały śrubokręt, trzeba też czasem podważyć zaczepy.
Oznaczenie mojej stacji: SFD-321B, 5V 0.7A, Samsung.
Jedno wielkie PCB... nie zawsze tam jest, czasem PCB ze sterownikiem BLDC jest osobno.
FAN8422G. To jest sterownik BLDC który uruchomimy.
SF12021A. Ten układ usuniemy. To jest ten "mądrzejszy" procesor. Nie mam jego noty katalogowej.
Zdemontujmy jeszcze z ciekawości resztę. Uwolnimy mały silniczek krokowy - ale to na inny dzień.
Możemy też podejrzeć cewki od BLDC. Trzeba odkręcić śrubkę, która jest dość nietypowa - odkręca się ją w drugą stronę.
Oto cewki:
Budowę BLDC znajdziecie w wielu miejscach w sieci, więc teraz umieszczę tylko kilka fotek z bliska i przechodzimy do uruchamiania:
FAN8422G nota katalogowa
Umiejętność czytania not katalogowych jest niezbędna w elektronice. Tutaj robimy rozpoznanie, co trzeba podłączyć.
Pinout; tym razem nie jest niezbędny, bo na PCB mamy podpisane pady - 1MHz, NMTO i tak dalej.
Role pinów - interesują nas inputy, ale nie wszystkie. Niektóre są od sensorów co są już na PCB.
Aplikacja - widać, że 1MHz będzie potrzebne, tak jak oczywiste chip enable (na PCB podpisane NMTO - not motor on?)
Schemat aplikacji - tu też widzimy, co podłączamy:
Co ciekawe, ten driver ma wyjście 'index', to pewnie coś przeznaczonego dla samego odczytu dyskietek. Ogólnie, ten układ scalony jest przeznaczony do tego zastosowania, nie jest to raczej sterownik BLDC ogólnego użytku, co wskazuje jego nazwa - "Floppy Disk Drive Spindle Motor Driver".
Uruchomienie z Arduino
Zacząłem od odlutowania drugiego układu scalonego w obudowie TQFP - tak dla zasady, by nam nie zakłócał sterowania, gdyż to do niego idą sygnały takie jak uruchomienie silnika czy tam zegar i mógłby on też przy podaniu zasilania próbować nimi sterować, nie wiem.
Po prostu nałożyłem topnik, potem spoiwo ołowiowe i grzałem z każdej strony. Generalnie to jest słaba metoda dla układów w TQFP (można przegrzać ścieżki, zerwać pady), ale chciałem go po prostu usunąć, więc sobie na to pozwoliłem.
A jednak odlutował się bez uszkadzania PCB.
Potrzebny będzie zegar 1MHz. Można go wygenerować na samym Arduino poprzez PWM. Pin 3. Oto kod:
Kod: C / C++
Szczegóły znajdziecie w nocie katalogowej - ale w skrócie ustawiamy to Timer 2 by generował PWM. Uruchamiamy tryb Fast PWM i ustawiamy, że kiedy silnik osiągnie OCR2A to zaczynamy od 0 a gdy osiągnie 7 to zmieniamy jego stan na niski (wróci na stan wysoki przy 0). Dodatkowo nie ustawiamy żadnego preskalowania zegara (zostaje na 16MHz).
Czyli obrazowo, Arduino liczy: "0, 1, 2, 3 ... " dociera do 7 i wtedy zmienia stan pinu 3 na niski a potem dociera do 15 i zmienia stan pinu na wysoki i od nowa. Czemu akurat do 15? Ano, gdyż taktujemy przez 16MHz.
W ten sposób możemy uzyskać też 2MHz sygnał, 4MHz, dowolnie na ile nam pozwolą liczniki, też o różnych wypełnieniach (np 25%) itd.
Rezultat:
Podłączyłem:
- masę (oczywiście)
- VDD (na 5V)
- 1MHz (omawiane już, na PWM, pin 3)
- RPM (wybór prędkości; do masy)
- NMTO (to uruchamia silnik - na pin 13 od migającej LED dla demonstracji; może być zwane też jako CEN)
I tyle - silnik włącza się w rytm LED:
Oraz stała praca:
Pomiar prędkości obrotowej
Czy rzeczywiście można przełączać między 300 i 360 RPM? Mam narzędzie, które pozwoli to sprawdzić - DT-2234C - Digital Tachometer:
Niezbyt lubię to urządzonko. Ciężko się czyta wyniki z jego wyświetlacza gdy pada na niego światło pod kątem (lub gdy patrzymy pod kątem). A po puszczeniu przycisku on momentalnie gasi wyświetlacz i trzeba patrzeć w pamięci co zmierzył. To jest niewygodne.
Nakleimy odblaskowy fragment paska na obracającym się elemencie i miernik zmierzy jak często odbija on światło lasera.
Hm, 302RPM (widywałem też 299 i 300, pomiar nie jest idealnie dokładny):
Po zmianie trybu... 360.2, nieźle!
Teraz z ciekawości... co jak na wejście 1MHz puścimy 4MHz?
Czy uda się w jakimś stopniu kontrolować prędkość silnika:
894RPM! Rzeczywiście są odczuwalnie szybsze obroty, chociaż silnik pracuje poza warunkami przewidzianymi przez producenta.
Podsumowanie
Silnik BLDC z FAN8422G ze stacji ruszył na zasadniczo samym Arduino - można było mu kontrolować RPM (w zakresie przewidzianym przez producenta - 300 vs 360 RPM) oraz też nieco w zakresie który nie jest przewidziany (poprzez podanie innej częstotliwości na wejście 1MHz; co można by więcej potestować). Nie było wcale możliwości zmiany kierunku obrotów, co jest z pewnością minusem tego rozwiązania, ale należy pamiętać, że opisany tu sterownik BLDC dostajemy całkowicie za darmo z napędem dyskietek, więc czy można narzekać?
Przy okazji udało mi się też pokazać wnętrze takiego napędu.
Czy macie jakieś pomysły jak można by wykorzystać teraz taki silnik/napęd?
PS: nie omówiłem małego silnika krokowego który też w tym napędzie dyskietek był, to będzie innym razem, pamiętam o tym.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
