Elektronika frezarki CNC: zasilacz, sterowniki, płyta LPT

Spis treści
W artykule tym przedstawimy opis kompletnego sterownika do frezarki numerycznej do obróbki drewna, tworzyw sztucznych oraz metali miękkich. W naszym zastosowaniu steruje on frezarką 3-osiową, jednak istnieje możliwość bezproblemowej rozbudowy o dodatkową oś. Sterowanie silnikami krokowymi realizują układy Allegro A4989. Całą elektroniką zarządza oprogramowanie LinuxCNC na systemie Debian. Przedstawione w artykule moduły to prototypy i są ciągle modyfikowane.
1. Ogólny opis sterowania
Skrzynka sterująca frezarką składa się z modułów przedstawionych na rysunku 1:
- zasilającego: transformatory i zasilacze,
- płyty głównej,
- elementów wykonawczych wyjściowych,
- sterowników silników krokowych – Powerlolu.
W projekcie wykorzystaliśmy 4 poziomy napięć:
- 230 V do zasilania wyjść oraz transformatorów,
- 5 V do zasilania logiki TTL,
- 12 V do przekaźników oraz przyszłych zastosowań,
- 45 V do zasilania silników krokowych.
Płyta główna zabezpiecza elementy wyjściowe i wejściowe przed uszkodzeniem oraz ustala odpowiednie poziomy napięć za pomocą przerzutników Schmitta. Na płycie wyprowadzone są optoizolowane wejścia oraz wyjścia do podłączenia dowolnych modułów, np. z triakiem lub przekaźnikiem (do sterowania wrzecionem, chłodziwem i dowolnymi innymi akcesoriami do frezarki).
Płytki Powerlolu pozwalają na sterowanie silnikami o prądzie znamionowym do 10 A i wysokich momentach, idealne do dużych obciążeń. Kroki silnika można podzielić maksymalnie na 16 mikrokroków, co pozwoli na precyzyjne dojazdy i płynniejszą pracę. Dokładniejszy opis modułów znajduje się w dalszej części artykułu.

Rysunek 1a. Przykładowe połączenia pomiędzy modułami

Rysunek 1b. Zdjęcie przedstawiające skrzynkę sterowniczą
2. Zasilanie
Maszynę zasilają dwa transformatory toroidalne. Z pierwszego, 12 V/5 A, po wyprostowaniu i odfiltrowaniu kondensatorem 4700 uF/25 V otrzymujemy napięcie stałe o √2 większe, czyli ok. 17 V. Z niego uzyskujemy napięcie stabilizowane 12 VDC za pomocą układu LM7812. Drugi toroid, 32 V/12,5 A, służy do zasilenia silników krokowych bez stabilizacji. Po prostowaniu i filtracji kondensatorem 10 mF/100 V otrzymamy 45 VDC. Przy doborze kondensatorów kierowaliśmy się zasadą 1000 uF na 1 A pobieranego prądu. Im większa pojemność, tym lepiej dla sterowników, ale drożej dla użytkowników :). U nas transformatory nie będą tak bardzo obciążone, więc dobraliśmy pojemności nieco mniejsze od obliczonych.

Rysunek 2. Schemat zasilacza
Dodatkowo w zasilacz wbudowany jest układ opóźniacza z przekaźnikiem, dodający zwłokę czasową załączenia zasilania na silniki krokowe. Na początku napięcie z zasilacza zostanie podane na płytę główną, czerwoną diodę sygnalizacyjną i opóźniacz złożony z kondensatora elektrolitycznego C11 i rezystora R1. Dobierając odpowiednio parametry R i C, można uzyskać żądany czas opóźnienia (im większe parametry, tym czas będzie dłuższy). Opóźniacz po pewnej zwłoce czasowej załącza przekaźnik, który podaje napięcie na silniki krokowe. Lepszym rozwiązaniem byłby opóźniacz na układzie scalonym NE555 lub jakimś mikroprocku, ponieważ w poprzednim przypadku napięcie na cewce przekaźnika narasta stopniowo. Styki przekaźnika są powoli zwierane i rozwierane po odłączeniu napięcia. Przy dużych prądach może to spowodować szybsze ich zużycie lub sklejanie.
3. Płyta główna

Rysunek 3a. Rozpiska sygnałów portu LPT
Maszyna sterowana jest komputerem PC przez port równoległy LPT. Ze specyfikacji widać, że można nim wysterować 8 wyjść i 5 wejść, 4 piny mogą służyć zarówno jako wejście, jak i wyjście, natomiast pozostałe są podłączone do masy. W programie LinuxCNC piny 1, 14, 16, 17 są ustawione jako wyjścia, zatem do dyspozycji mamy łącznie 12 wyjść i tylko 5 wejść. Gdyby to nie zaspokajało naszych potrzeb, istnieje możliwość skonfigurowania dwóch portów LPT, jednak dla prostej maszyny jeden jest wystarczający. Do skonfigurowania 3-osiówki potrzebujemy minimalnie 7 wyjść: po dwa sygnały na każdy silnik (krok i kierunek) oraz sygnał włączenia napięcia. Pozostałe możemy użyć do załączania wrzeciona, chłodziwa, odkurzacza itp. Co do wejść, musimy użyć minimalnie dwóch: jedno rezerwujemy do krańcówek i bazowania osi, czyli znalezienia punktu początkowego maszyny. Drugie wejście musimy zarezerwować dla przycisku awaryjnego zatrzymania ESTOP.
Jak działa bazowanie?
Po wciśnięciu przycisku “bazuj osie” maszyna rozpoczyna przejazd w każdej osi po kolei i szuka jednej z krańcówek. Dla ustawienia domyślnego w programie wjeżdża na nią, a następnie zjeżdża i po rozwarciu styku oznacza w tym miejscu punkt początkowy. Od niego dodaje zadeklarowaną wcześniej w konfiguracji maksymalną długość osi. Jeżeli wszystkie długości podaliśmy poprawnie i maszyna jest odpowiednio skonfigurowana, po przejeździe na przeciwległą krańcówkę program zatrzyma się tuż przed nią, nie załączając jej.
Opis pinów portu LPT:
| Nr pinu (DB25) | Nazwa sygnału | Kierunek LPT | Kierunek LinuxCNC | Przykładowe użycie dla 4 osi |
|---|---|---|---|---|
| 1 | Strobe | In/Out | Out | Krok A |
| 2 | Data0 | Out | Out | Kierunek A |
| 3 | Data1 | Out | Out | Krok Z |
| 4 | Data2 | Out | Out | Kierunek Z |
| 5 | Data3 | Out | Out | Krok Y |
| 6 | Data4 | Out | Out | Kierunek Y |
| 7 | Data5 | Out | Out | Krok X |
| 8 | Data6 | Out | Out | Kierunek X |
| 9 | Data7 | Out | Out | Wolne wyjście 1 |
| 10 | Ack | In | In | Krańcówki i bazujące |
| 11 | Busy | In | In | Wolne wejście 1 |
| 12 | Paper-Out | In | In | Wolne wejście 2 |
| 13 | Select | In | In | Wolne wejście 3 |
| 14 | Linefeed | In/Out | Out | Włączenie napięcia |
| 15 | Error | In | In | ESTOP |
| 16 | Reset | In/Out | Out | Wolne wyjście 2 |
| 17 | Select-Printer | In/Out | Out | Wolne wyjście 3 |
| 18-25 | GND | - | - | - |
Najważniejsza funkcja płyty głównej to izolacja galwaniczna sygnałów wejściowych i wyjściowych oraz stabilizacja sygnałów sterujących silnikiem. Układy scalone, jakie zostały wykorzystane do realizacji tych funkcji, to:
- PC817 – standardowy transoptor,
- 6N137 – transoptor szybki, dla sygnałów sterujących silnikami,
- 74HC14 – przerzutniki Schmitta dla pewniejszego sterowania silnikami.

Rysunek 3b. Ustawienia portu LPT w LinuxCNC
Po co tyle izolacji? Przezorny zawsze ubezpieczony! W pierwszej wersji płyty głównej bez zabezpieczeń udało nam się (z naszej winy) uszkodzić port LPT w dopiero co nabytym komputerze. Jeszcze przed kupieniem drugiego PC-ta nowa płyta główna była już zabezpieczona ze wszystkich stron. :)

Rysunek 3c. Charakterystyki częstotliwościowe PC817
Transoptor PC817 separuje wszystkie 5 wejść oraz wyjście ENABLE (włączenie napięcia silników). Izoluje on sygnały o niskiej częstotliwości zmian w czasie. Z noty katalogowej widać, że przy prądzie kolektora 2 mA, napięciu 5 V i obciążeniu 100 Ω maksymalna przenoszona częstotliwość to typowo 80 kHz. Do prostych przycisków, krańcówek i sygnału włączenia napięcia wystarczy nam zaledwie kilka Hz, także ten transoptor będzie w zupełności wystarczający. Jak to wygląda w przypadku sygnałów sterujących naszymi silnikami krokowymi? Informacji musimy szukać w nocie układu scalonego drivera. W projekcie zastosowaliśmy sterowniki Powerlolu ze scalakiem firmy Allegro A4989. W datasheecie znajdujemy ważne dla nas informacje w sekcji tabeli Control Timing. Najkrótszy czas trwania sygnału kierunku wynosi 1 μs zarówno dla stanu niskiego, jak i wysokiego. Minimalny czas trwania okresu dla sygnału STEP to 2 μs, czyli 500 kHz.

Rysunek 3d. Parametry transoptora PC817
To już stanowczo za dużo dla tego separatora. Konieczne jest zastosowanie transoptorów szybkich, np. 6N137, które, jak można przeczytać w dokumentacji, przenoszą sygnał z prędkością nawet do 10 Mbit/s. Dla przykładu maksymalna szybkość portu równoległego naszego komputera to 2 Mbit/s, czyli powinno wystarczyć. Układ ten, w przeciwieństwie do PC817, wymaga niestety podłączenia zasilania.

Rysunek 3e. Czasy przełączania sygnałów STEP i DIR
Do pewnego odczytu odseparowanych sygnałów STEP i DIRECTION zastosowaliśmy przerzutnik Schmitta 74HC14. Cały schemat płyty głównej znajduje się poniżej.

Rysunek 3f. Schemat elektroniczny płyty głównej

Rysunek 3g. Nasza płyta główna: wyżej projekt w KiCAD, niżej wykonanie w chińskiej płytkarni.
4. Sterownik silnika krokowego – Powerlolu
Sterownik ten jest większym mocowo zamiennikiem dla bardzo popularnego drivera Pololu na scalaku A4988. Oba są dostępne w sieci jako projekty open source, schematy i dokumentację można ściągnąć za darmo. Pololu można znaleźć na wszelkich portalach aukcyjnych i w sklepach z elektroniką. Do tego jest tanie jak barszcz i praktycznie nie opłaca się robić ich na własną rękę. Polecamy zamówić je na Fasttech.com. Są tam za nieco ponad 2 $. Z Powerlolu natomiast jest trochę gorzej. Cena gotowca to poniżej 50 EUR. Koszty oczywiście da się znacznie obniżyć, wykonując je na własną rękę. Nasz silnik krokowy typu 57h76-3008b ma prąd znamionowy 4,2 A. W sieci jest sporo różnych rodzajów sterowników dla takich mocy, my jednak zdecydowaliśmy się przetestować ten mało popularny Powerlolu. Porównajmy jeszcze najważniejsze parametry obu sterowników.
| Parametr | Pololu A4988 | Powerlolu A4989 | Jednostka |
|---|---|---|---|
| Napięcie zasilające silnik | 8-35 | 12-50 | V |
| Napięcie na logikę | 3-5,5 | 3-5,5 | V |
| Maksymalny prąd silników | 2 | 10 | A |
| Podział kroku | 1, 1/2, 1/4, 1/8, 1/16 | 1, 1/2, 1/4, 1/16 | - |

Rysunek 4a. Sterowniki Pololu
Zabieramy się do pracy. Ze strony internetowej http://www.thingiverse.com/thing:40540 pobieramy potrzebne schematy i dokumentację, wszystko zaprojektowane w darmowym oprogramowaniu Eagle. Płytki oczywiście można zmodyfikować do własnych potrzeb, my zmieniliśmy zworki na pinowe, złącza z ARK na szersze EDG i gniazdo sygnałowe na MOLEX. Rezystory i potencjometr pod napięcie referencyjne, którymi regulujemy maksymalny prąd obciążenia, są dobrane standardowo dla zasilania 3,3 V. My jednak wykorzystujemy 5 V, dlatego musieliśmy nieco zmienić konfigurację dzielnika napięcia. Dodatkowo prąd maksymalny zależy od rezystorów podpiętych do wyjść SENSE, no i oczywiście od użytych tranzystorów (te dobrane wytrzymają 17 A przy odpowiednim chłodzeniu), ale tego nie zmieniamy. Nasz silnik może pobierać maksymalnie 4,2 A, prąd musimy więc ograniczyć. W dokumentacji znajdziemy wzór:
ITRIP(MAX)=VREF/(8xRSENSE).
Zakres regulacji napięcia VREF zawiera się w przedziale od 0,8 V do 2 V. Podstawiając do wzoru żądane 5 A przy VREF=2 V, otrzymujemy:
5=2/(8xRSENSE)
RSENSE=1/20=0,05 OHM
W schemacie open source mamy dobrane odpowiednio dwa rezystory po 0,1 ohma połączone równolegle, co daje żądane 0,05 ohma. My zastosowaliśmy takie same wartości. Pozostaje nam jeszcze kwestia doboru dzielnika napięcia. Według datasheetu Vref może przyjąć wartości w przedziale od 0,8 V do 2 V. U nas dobraliśmy rezystor 4,3k + potencjometr 10k oraz rezystor 22k. Cały schemat przedstawiony jest na rysunku 4b. Jeżeli chcielibyśmy ustawić maksymalny prąd na 10 A, ze wzoru powyżej obliczymy, że musimy zastosować dwa rezystory równolegle po 0,05 OHM. Jeżeli logika ma być zasilana z napięcia niższego niż 3,3 V, rezystory będą miały wartości: 10k + potencjometr 20k oraz rezystor 22k.
Liczbę kroków silnika reguluje się za pomocą zworek przy pinach MS1 i MS2. Wygląda to tak jak w tabelce poniżej. Bez zworki pin ma wartość jedynki.
Ustawienie kroków silnika za pomocą zworek:
| MS2 | MS1 | Rozdzielczość mikrokroku |
|---|---|---|
| 0 | 0 | Cały krok |
| 0 | 1 | 1/2 kroku |
| 1 | 0 | 1/4 kroku |
| 1 | 1 | 1/16 kroku |
Dodatkowo zworkami mamy możliwość wyboru trybu kluczowania tranzystorów pinami PFD1 oraz PFD2. Ma to wpływ na gaszenie prądu, a ustawienia są różne w zależności od wybranego wcześniej podziału kroku. W naszym sterowniku wszystkie zworki są rozwarte, wtedy silnik pracuje najpłynniej.
Najdroższym elementem sterownika jest układ scalony, który w TME kosztuje ponad 10 zł. Można oczywiście napisać do firmy Allegro (nie mylić z portalem aukcyjnym) ze studencką prośbą o darmowe próbki. My tak zrobiliśmy i otrzymaliśmy 4 układy A4989 i do tego kilkanaście innych do sterowania silnikami, całkowicie za darmo.

Rysunek 4b. Schemat elektroniczny sterownika Powerlolu
Płytki PCB możemy zrobić sami lub zlecić ich wykonanie firmie. W naszym sterowniku wymagany jest laminat dwustronny, a do tego będzie w nim cała masa przelotek do zrobienia w bardzo wąskich ścieżkach. Pierwsze dwie płytki wykonaliśmy sami metodą termotransferu. Po godzinach wytrawiania, wiercenia i dniach lutowania mogliśmy testować prototypy. Nie były one jednak dokładnie wykonane ani zabezpieczone, dlatego mieliśmy ciągłe problemy z ich użytkowaniem. Do tego z naszej winy wystąpiło kilka zwarć i układy firmy Allegro uległy uszkodzeniu. Zdecydowaliśmy się na wykonanie płytek PCB w Chinach, podobno tanio i z jakością lepszą niż w polskich faktoriach. Skorzystaliśmy z oferty http://www.kikipcb.com/, płytki zamówiliśmy przed samymi świętami Bożego Narodzenia, a po Nowym Roku zostały już wysłane do Polski. Koszt całkowity to 22,90 $ za 10 płytek, w tym jedna testowa gratis. Policzmy zatem: (22,90 × 3,5)/11 wychodzi nieco ponad 7 zł za płytkę o bardzo dobrej jakości, z soldermaską, pocynowanymi padami i porobionymi przelotkami. Wniosek: płytek nie opłaca się robić w domu. Do tego trzeba doliczyć koszt elementów, a płytka łącznie ze scalakiem wychodzi za mniej niż 50 zł, a nie 50 EUR (ceny na rok 2014)!!!

Rysunek 4c. Płytki PCB, po lewej zrobiona metodą domową, po prawej zamówiona w Chinach
Do sterownika musi dochodzić 5 sygnałów od płyty głównej. Dwa to zasilanie 5 V i masa do zasilania scalaka, poza tym:
- ENABLE (EN) – sygnał włączenia napięcia,
- STEP – sygnał kroku silnika,
- DIRECTION (DIR) – sygnał kierunku, w zależności od stanu niskiego lub wysokiego to prawo lub lewo.
Z drugiej strony płytki podłączamy zasilanie maksymalnie 50 VDC oraz odpowiednie cewki silnika bipolarnego. W zależności od połączenia (im mniejsza induktancja i większy prąd) osiągniemy wyższy moment. Powstałe z połączenia dwie fazy podpinamy pod skrajne wejścia PHASE oznaczone 1 i 2. Od tego, jak podłączymy pod nie dwie pary przewodów, silnik będzie się kręcił w lewo lub w prawo.
W silniku musimy dobrać prąd za pomocą rezystorów od Vref oraz rezystorów mocy (opisane wyżej).
Dane znamionowe silnika krokowego:
| Typ połączenia | Kąt kroku (deg) | Napięcie (V) | Prąd na fazę (A) | Rezystancja na fazę (Ω) | Induktancja na fazę (mH) | Moment trzymający (Nm) | Bezwładność rotora (gcm2) | Waga (kg) |
|---|---|---|---|---|---|---|---|---|
| Unipolarny | 1,8 | 2,76 | 3,0 | 0,92 | 2,2 | 1,4 | 480 | 1,0 |
| Bipolarny (szeregowe) | 1,8 | 3,86 | 2,1 | 1,84 | 8,8 | 2,0 | 480 | 1,0 |
| Bipolarny (równoległe) | 1,8 | 1,93 | 4,2 | 0,46 | 2,2 | 2,0 | 480 | 1,0 |

Rysunek 4d. Polutowana przez nas płytka PCB Powerlolu
Film: sterownik silników krokowych Powerlolu w działaniu
5. Elementy wykonawcze
Jako wyjścia w płycie głównej wyprowadzone są piny MOLEX. Do wyjścia można podłączyć dowolny moduł, na przykład:
- transoptor z przekaźnikiem dla załączania napięć stałych,
- optotriak i triak do przełączania napięć zmiennych,
- transoptor z tranzystorem MOSFET do PWM,
- zwykłą diodę sygnalizacyjną,
- dowolny inny moduł wykonawczy.
My u siebie zastosowaliśmy moduły z triakiem, które załączają wrzeciono marki Kress. Wrzeciono uruchamia się automatycznie, o ile w naszym G-kodzie będą dodane odpowiednie funkcje: M03/M04 (obroty prawe/lewe) lub M05 (wyłączenie wrzeciona). Nie musimy podchodzić do wrzeciona i ręcznie wciskać przycisku załączającego. Wrzecionem można sterować też z klawiatury przez LinuxCNC – F9/F10 (obroty prawe/lewe). Do tego modułu można podłączyć np. odkurzacz do wyciągania wiórów lub pompkę z płynem chłodzącym, o ile nie przekraczają maksymalnego obciążenia triaka.

Rysunek 5a. Schemat elektronicznego modułu z triakiem
Element wyjściowy jest sterowany napięciem 5 V i jego prąd musi być ograniczony odpowiednim rezystorem. Elementy są podłączone szeregowo, a obliczenia wykonamy dla optotriaka MOC3041 i żółtej diody sygnalizacyjnej. W dokumentacji MOC3041 mamy podany spadek napięcia przy prądzie 30 mA, jest to max 1,5 V, a spadek napięcia na diodzie żółtej to 2,2 V. Obliczamy:
5V-1,5V-2,2V=1,3V,
1,3V/0,030A≈43,3Ω.
Wartość najbliższego rezystora z szeregu E12 to 47 Ω. Miejsce na rezystor ograniczający znajduje się w module wykonawczym, wyjście na diodę oczywiście można zewrzeć i dać odpowiednio większy rezystor ograniczający prąd triaka. Triak BTA16 wytrzyma ciągłe obciążenie 16 A prądu zmiennego sinusoidalnego przy odpowiednio dobranym radiatorze, czyli ponad 3000 W. Płytka została zaprojektowana tak, aby pasowała do obudowy Z103 na szynę DIN. Obudowę można dostać w sklepach elektronicznych, np. w TME lub Lispol.

Rysunek 5b. Płytka układu wykonawczego. Otwory oraz krawędzie frezowane, ścieżki wykonane metodą termotransferu.
Pliki do pobrania
| Opis | Plik |
|---|---|
| Dokumentacja w PDF | Documentation.pdf |
| Płyta główna | CNCMainboard.zip |
| Zasilacz | CNCPowerSupply.zip |
| Zmodyfikowany Powerlolu | Powerlolu.zip |
| Wykonawczy triak | CNCTriac.zip |
Info
Jeżeli ktoś byłby zainteresowany, pozostało nam sporo płytek PCB zamówionych w płytkarni, a także polutowanych sterowników i części. Więcej info w dziale kontakt.

