Po dotažení mechanické konstrukce nastal čas na oživení stroje pomocí elektroniky.
Na každou osu je třeba jeden motor pro pohon závitové tyče. Do krokových motorů se mi nechtělo investovat. Krokové motory s přijatelnou silou totiž nejsou úplně levné a cenu ještě zvyšuje cena driveru. Kromě toho se mi moc nelíbí jejich řízení pomocí otevřené regulační smyčky. Při větší zátěži může dojít ke ztrátě kroku a chybu zjistíme až podle nepřesného tvaru řezu.
Postupem času se mi v dílně nashromáždily 2 slušné DC motory na 12 V a jeden o něco menší, který na 12 V běhal s menším výkonem, ale stále přijatelně. Rozhodl jsem se zkusit použít tyto motory tak, že k nim dodělám optické enkodéry a tím vytvořím primitivní podobu servopohonu.
Drivery pro motory
Prvním krokem byl návrh driverů motorů. Ty musí umět na základě vstupu z 5V logiky roztočit motor jedním nebo opačným směrem nebo jej nechat v klidu. Je tedy třeba použít plný H můstek. Pro jednoduchost zapojení a vzhledem k nízkému odběru motorů (okolo 2 A) jsem se rozhodl použít bipolární tranzistory i za cenu horších vlastností oproti MOSFETům. Konkrétní zapojení je na následujícím obrázku. Značka indukčnosti zde představuje samotný motor. Hodnoty součástek nejsou uvedeny, protože už si je nepamatuji. Pokud si je nezvládnete dopočítat sami, doporučuji radši koupit hotový driver.
Při zapojení podle tohoto schématu je třeba dát pozor, aby nedošlo k sepnutí obou částí mostu najednou (hodnoty na vstupech AB = 11). Došlo by k sepnutí všech 4 tranzistorů a výsledkem by byl zkrat s doprovodnými kouřovými efekty. Platnými stavy vstupů AB jsou kombinace 00 – motor stojí, 01 – točí se jedním směrem a 10 – točí se opačným směrem.
Rotační enkodéry
Nyní jsem tedy schopen pohybovat všemi osami v obou směrech jen pomocí přepínání úrovní na vstupu driveru. Pro CNC je však třeba umět pohnout osou o přesně danou vzdálenost. V případě krokových motorů je toho dosaženo tím, že úroveň na prvním vstupu driveru určuje směr a každý impuls na druhém vstupu provede otočení motoru o jeden krok v daném směru. Počet kroků potom udává vzdálenost. DC motory samy o sobě neví, kolik provedly otáček a je třeba je doplnit o „počítadlo kroků“ – rotační enkodér. Podle něj pak lze určit, kdy motor vypnout, aby došlo k posunu o danou vzdálenost. Výstupem enkodéru po zpracování je informace „právě proběhl jeden krok po směru hodin“ nebo „právě proběhl jeden krok proti směru hodin“. Konkrétní principy inkrementálního enkodéru zde nebudu rozepisovat a odkážu například na tento článek nebo na wiki .
Zvolil jsem realizaci na principu světelné závory s IR diodami a fototranzistory. Počet zubů na kotoučích enkodérů je podle stoupání šroubů zvolen tak, aby vycházelo 48 kroků na 1 mm. Bohužel docházelo k zákmitům při přechodu mezi kroky. Výstup z fototranzistoru tedy bylo třeba ještě upravit pomocí schmittova klopného vytvořeného pomocí 3 hradel obvodu 7404. Rezistor R1 určuje pracovní bod fototranzistoru a R2 míru hystereze. Hodnoty obou je třeba určit experimentálně podle konkrétní aplikace.
Řídicí logika
Chceme dosáhnout kompatibility s krokovými motory. Řídící počítač tedy bude dodávat instrukce pomocí dvou linek SMĚR a KROK. Směr otáčení motoru již umíme ovládat pomocí dvou vstupů driveru a enkodér nám řekne o jaký počet kroků se hřídel motoru již otočila. Stačí tedy pomocí odpovídající logiky dát tyto věci dohromady.
Pohon všech tří os je řízen mikrokontrolérem ATmega8. Použitý princip je poměrně jednoduchý. Pro každou osu existuje znaménková proměnná. Pokud PC vydá pokyn k provedení kroku po směru hodin dojde k inkrementaci, proti směru hodin k dekrementaci. Pokud enkodér detekuje krok po směru hodin dojde naopak k dekrementaci a proti směru k inkrementaci. Podle hodnoty proměnné se pak řídí otáčení motoru. Pokud je kladná je motor spuštěn po směru hodin, pokud je záporná dochází k otáčení proti směru hodin a pokud je nulová je motor v klidu. Absolutní hodnota proměnné pak udává odchylku od ideální dráhy, tato hodnota je důležitá pro správné nastavení parametrů obrábění v ovládacím software.
Oddělení paralelního portu
Paralelní port počítače je poměrně choulostivým rozhraním a nedá se použít k ovládání vnějších zařízení přímo. Ideálním řešením je oddělení pomocí optočlenů. Potom ani případný zkrat na straně zařízení nepovede k poškození portu. Já zvolil jednodušší, ale méně bezpečné řešení pomocí dvou obvodů 74244. Na paralelním portu je totiž dostupných 12 výstupů + 5 vstupů a obvod 74244 obsahuje jen 8 hradel.
Napájecí zdroj
Použité motory, zvlášť v kombinaci s popisovanými budiči, nemají příliš velký odběr. Pro napájení frézky jsem zvolil starý PC AT zdroj se zatížitelností 8 A na 12 V větvi. Výhodou použití PC zdroje je, že kromě 12 V pro motory poskytuje také 5 V potřebných pro řídící elektroniku.