Základem jakéhokoliv programu řídícího elektroniku krokových motorů je Bresenhamův algoritmus. Tento algoritmus propočítává, jak provést přesun z jedné souřadnice do druhé v diskrétních krocích. Typickým případem užití tohoto algoritmu je kreslení přímky na obrazovce monitoru.

Vzhledem k tomu, že vykreslování na monitoru se skládá z jednotlivých bodů, je při kreslení přímky nutné spočítat, po kolika krocích v ose X se provede jeden krok v ose Y. Výpočet přitom probíhá tak, že jednotlivé úseky nemusí mít stejný počet kroků - u tohoto příkladu to je 5 - 5 - 6 - 5 - 5.
Naprogramovat tento algoritmus v rovině (řídíme-li dva motory) není složité, poněkud složitější to je, pokud ho programujeme pro čtyři motory při řezání lichoběžníkového křídla.
Dalším oblastí s problémy k řešení je elektronika a její připojení k PC. Profesionální programy s profesionální elektronikou mají Bresenhamův algoritmus naprogramován v elektronice a ta pak od PC dostává pouze souřadnice bodu, kam se mají motory pohybovat. Amatérské programy propočítávají posuny v PC a do elektroniky jdou pouze příkazy k jednotlivým krokům - pro jeden motor to jsou příkazy Clk a Dir (krok a směr). Tento programátorsky jednodušší postup ale limituje maximální rychlost posunu motorů.
Připojení k PC
Paralelní port
Naprostá většina konstrukcí publikovaných na webu připojuje elektroniku pro mechanickou část řezačky nebo frézy přes paralelní port. Je to dáno jednoduchostí konstukce elektroniky. Celá elektronika se tak skládá ze čtyř identických relativně jednoduchých modulů pro každý motor.
Vyšší operační systémy (Win XP a NT) neumožňují přímý přístup na paralelní port, pouze před ovladače nebo výjimečně pomocí speciálně napsaných knihoven, což užití tohoto portu v současnosti dosti omezuje.
Seriový port
Při připojení elektroniky přes seriový port při použití rozhraní UART je nutné použít speciální obvod, který data přijatá v seriovém formátu převádí do paralelní podoby. Optimální je užít některý z četných mikrokontrolérů, které mají toto rozhraní zabudováno - já jsem užil PIC 16F88.
USB port
Regulace rychlosti otáček motorů
Rychlost otáček motoru je u amatérských programů regulována čekací smyčkou, která je vkládána mezi jednotlivé kroky motoru. Tu lze realizovat různě sofistikovaně, obecně lze říci, že intervaly v rozsahu mikrosekund nezávislé na rychlosti procesoru je nutné programovat poněkud složitěji. Jedním z problémů Windows je velké množství událostí, které Windows jako systém ošetřují - stisky kláves, posun myši, posun okna na obrazovce atd. Tyto události mohou vést k tomu, že plynulý chod motoru řízeného čekací smyčkou se změní v nepravidelný, pokud budeme myší na obrazovce tahat okno. Tyto problémy lze vyřešit:
Mně se nelíbilo ani jedno řešení, tak jsem u programu tahání okna znemožnil. Cukání motorů je ale patrné při chaotickém nastavování teploty řezacího drátu sliderem, kdy se mezi data pro posun motorů vmezeřují data pro nastavení PWM modulace. Pro regulaci teploty drátu za chodu jsou proto vytvořena tlačítka, která přidávají nebo ubírají teplotu jednotlivými stisky.
Maximální otáčky motoru
Maximální otáčky motoru jsou dány rychlostí portu. Program POLY umožňuje rychlost portu otestovat, je to nutnost pro počáteční nastavení maximální rychlosti rotace (tedy minimální prodlevy mezi kroky). U Windows je ale problém v tom, že systém je schopen řadit příkazy do fronty a vykonávat je postupně. Pokud je příkazů, které čekají na vykonání, ve frontě příliš, systém se zhroutí. Z toho důvodu je maximální rychlost v programu omezena - pokud se příkazy řadí do prodlužující se fronty, program se zastaví. U systému s frekvencí kolem 2 GHz trvá u tohoto programu provedení jednoho kroku kolem 2 milisekund, tento v zásadě velmi dlouhý čas je dán způsobem volání portu, nikoli systémem. Na druhou stranu tento interval obvykle odpovídá maximálním otáčkách krokového motoru řízeného celými kroky. V reálu lze tedy dosáhnout s užitím motoru, který má 200 kroků na otáčku, maximální rychlosti rotace kolem 1 otáčky za sekundu, což je při užití trapezové závitové tyče se stoupáním 3 mm na otáčku 3 mm posunu řezacího drátu na sekundu. Při použití dvojnásobného kroutícího momentu (spínání dvou cívek současně místo jedné) je použitelná rychlost posunu asi 5 mm za sekundu, pak už příliš klesá kroutivý moment motoru. (Tyto rychlosti jsou dány motorem, nikoli PC, ale limit PC není o moc vyšší.)
Výrazně rychleji se mohou točit čtyřdrátové motory při použití speciálního řídícího obvodu, pak už ale nejde o amatérskou stavbu, protože Bresenhamův algoritmus musí být implementován v elektronice.
Software mikrokontroléru elektroniky
Software výkonové části
PIC 16F88 funguje v zapojení elektroniky jako převodník dvou signálů Clk a Dir na čtyři výstupy - spínání čtyř výkonových tranzistorů. Vzhledem k počtu portů tohoto mikrokontroléru je možné řídit vždy dva motory jedním čipem. Díky tomu, že spínání cívek motorů je realizováno programovatelnou součástkou, umožňuje toto řešení realizovat snadno některé další funkce. V tomto případě to je PWM modulace na jednom z výstupů, která je určena pro regulaci žhavení řezacího drátu nebo jiného zařízení.
Program pro PIC je napsán tak, že mezi pulzy pro řízení motoru je schopen rozeznat řídící příkazy, které mohou modifikovat některé vnitřní funkce. V tomto případě to jsou
-
nastavení PWM x spínač
-
spínač nebo PWM zapnout x vypnout
-
nastavení střídy PWM modulu
-
nastavení bitů rotovaných na výstupu (změna počtu spínaných cívek)