Articles

Jak ovládat krokový motor s A4988 driver a Arduino

Tento článek obsahuje vše, co potřebujete vědět o ovládání krokového motoru s A4988 stepper motor driver a Arduino. Zahrnul jsem schéma zapojení, návod, jak nastavit aktuální limit a mnoho příkladů kódů.

i když můžete použít tento ovladač bez Arduino knihovna, vřele doporučujeme se také podívat na příklad kódu pro knihovny AccelStepper na konci tohoto tutoriálu. Tato knihovna je poměrně snadno použitelná a může výrazně zlepšit výkon vašeho hardwaru.

Po každém příklad, jsem rozebrat a vysvětlit, jak kód funguje, takže byste měli mít žádné problémy s úpravou, aby vyhovoval vašim potřebám.

Pokud se chcete dozvědět více o jiných krokových motorech, mohou být užitečné níže uvedené články:

  • How to control a stepper motor with DRV8825 driver and Arduino
  • 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino Tutorial
  • How to control a Stepper Motor with Arduino Motor Shield Rev3
  • TB6600 Stepper Motor Driver with Arduino Tutorial

Supplies

Hardware components

A4988 stepper motor driver × 1 Amazon
AliExpress
NEMA 17 stepper motor × 1 Amazon
Arduino Uno Rev3 × 1 Amazon
Power supply (8-35 V) × 1 Amazon
AliExpress
Breadboard × 1 Amazon
Capacitor (100 µF) × 1 Amazon
Jumper wires ~ 10 Amazon
AliExpress
USB cable type A/B × 1 pro Amazon

mám rád tento ovladač použít v kombinaci s CNC-shield nebo rozšiřující deska. Takový štít již obsahuje kondenzátory a nabízí snadný způsob, jak vybrat rozlišení mikroprocesu. To dělá zapojení mnohem jednodušší a je skvělou volbou, pokud potřebujete trvalejší řešení než prkénko.

Tools

Small screwdriver Amazon
Multimeter Amazon
Alligator test leads (optional) Amazon

Software

Arduino IDE

Makerguides.com je účastníkem Amazon Services LLC Associates Program, pobočka reklamní program navržen tak, aby prostředky pro stránky, jak vydělat reklamní poplatky, reklamu a propojení na produkty na Amazon.com.

ovladač

V srdci A4988 driver najdete čip vyroben Allegro MicroSystems: A4988 DMOS Microstepping Ovladač s Překladatel a Nadproudovou Ochranu. Tento integrovaný ovladač motoru usnadňuje propojení s mikrokontrolérem, protože pro ovládání rychlosti i směru krokového motoru potřebujete pouze dva kolíky.

řidič má maximální výstupní kapacitu 35 V a ± 2 A, což je skvělé pro řízení malých a středních krokových motorů, jako je bipolární krokový motor NEMA 17.

Pokud potřebujete ovládat větší krokové motory, jako je NEMA 23, podívejte se na ovladač krokového motoru TB6600. Tento ovladač lze použít se stejným kódem jako A4988 a má aktuální hodnocení 3.5 A.

  • TB6600 Stepper Motor Driver s Arduino Tutoriálu

A4988 driver čip má několik bezpečnostních funkcí vestavěných, jako nadproudové, zkratu, pod-výluka napětí, a přes-teplotní ochrany. Další specifikace naleznete v následující tabulce.

A4988 Specifications

Minimum operating voltage 8 V
Maximum operating voltage 35 V
Continuous current per phase 1 A
Maximum current per phase 2 A
Minimum logic voltage 3 V
Maximum logic voltage 5.5 V
Microstep resolution full, 1/2, 1/4, 1/8 and 1/16
Reverse voltage protection? Ne
Rozměry 15.5 × 20,5 mm (0.6″ × 0.8″)
Cena Zkontrolujte, zda cena

Pro více informací, můžete se podívat na datasheet zde.

Rozdíly mezi A4988 a DRV8825

DRV8825 je docela podobný A4988 ale tam jsou některé klíčové rozdíly:

  • DRV8825 nabízí 1/32 microstepping, vzhledem k tomu, že A4988 pouze klesne na 1/16-step. Vyšší microstepping má za následek plynulejší a tišší provoz, ale není vždy potřeba.
  • potenciometr proudu je na jiném místě
  • vztah mezi referenčním napětím a limitem proudu je odlišný.
  • DRV8825 vyžaduje minimální trvání krokového pulsu 1,9 µs; A4988 vyžaduje minimum 1µs.
  • DRV8825 lze použít s napájecím zdrojem motoru s vyšším napětím (45 v proti 35 V). To znamená, že je méně náchylný k poškození špičkami napětí LC.
  • DRV8825 může dodávat o něco více proudu než A4988 bez dalšího chlazení.

Všimněte si, že pinout DRV8825 je přesně stejný jako u A4988, takže jej lze použít jako drop-in náhradu!

A4899 (vlevo) vs DRV8825 (vpravo)

Microstep nastavení

Krokové motory mají obvykle velikost kroku 1,8° nebo 200 kroků na otáčku, to se odkazuje na plné kroky. Mikrokrokový ovladač, jako je A4988, umožňuje vyšší rozlišení tím, že umožňuje umístění mezilehlých kroků. Toho je dosaženo napájením cívek s mezilehlými úrovněmi proudu.

například řízení motoru v režimu čtvrt kroku dá motoru 200 kroků za otáčku 800 mikrostopů za otáčku pomocí čtyř různých úrovní proudu.

A4988 pinout

tabulka níže.

MS1 MS2 MS3 Microstep resolution
Low Low Low Full step
High Low Low 1/2 step
Low High Low 1/4 step
High High Low 1/8 step
High High High 1/16 step

Všechny tři vstupy mají vnitřní 100 kΩ pull-down rezistory, takže tři microstep výběr piny odpojeny výsledky v plném rozsahu-krokem režimu.

v kombinaci s těmito ovladači často používám CNC štít nebo rozšiřující desku. Rozšiřující deska má 3 DIP přepínače pro nastavení MS1-MS3 vysoké nebo nízké a na CNC štít můžete instalovat propojky. Pokud používáte ovladač s prkénkem, stačí použít propojovací vodiče pro připojení volicích kolíků na 5 V (tj.

Kabeláž – Spojovací A4988 pro Arduino a krokový motor

schéma Zapojení/schéma pro A4988 stepper motor driver s Arduino a krokový motor.

schéma zapojení/schéma výše ukazuje, jak propojit A4899 driver pro krokový motor a Arduino.

připojení jsou také uvedena v následující tabulce:

A4988 Connections

A4988 Connection
VMOT 8-35V
GND Motor ground
SLP RESET
RST SLP
VDD 5V
GND Logic ground
STP Pin 3
DIR Pin 2
1A, 1B, 2A, 2B Stepper motor
  • napájení motoru je připojen k GND a VMOT (vpravo nahoře).
  • obě cívky krokového motoru jsou připojeny k 1A, 1B a 2A ,2B (viz níže).
  • GND pin (vpravo) je připojen na zem pin mikrokontroléru a VDD je připojen k 5V.
  • STP (krok) a DIR (směr) pin jsou připojeny na digitální pin 3 a 2, resp. Můžete si vybrat jiný digitální pin, pokud chcete, ale to jsou ty, které jsem použil pro tento tutoriál a příkladový kód.
  • SLP pin je aktivní nízký vstup. To znamená, že zatažením za tento kolík se ovladač přepne do režimu spánku, čímž se minimalizuje spotřeba energie. RST je také aktivní nízký vstup. Při nízkém tahu jsou všechny vstupy kroků ignorovány, dokud je nevytáhnete vysoko. Pokud pin nepoužíváte, můžete jej připojit k sousednímu SLP / SLEEP pin, aby byl vysoký a aktivoval ovladač.
  • pin EN (enable) může být ponechán odpojený, ve výchozím nastavení je stažen nízko. Pokud je tento pin nastaven vysoko, ovladač je deaktivován.

ve zbytku tohoto tutoriálu jsem nechal MS1, MS2 a MS3 odpojeny, takže ovladač pracuje v režimu full-step. Díky tomu je vysvětlení kódu o něco snazší. Normálně bych použil 1/8 nebo 1/16 microstepping a připojil příslušné kolíky k 5V (viz tabulka v úvodu).

Varování

A4988 nosné desky používá low-ESR keramických kondenzátorů, které je citlivé na destruktivní LC výkyvy napětí, zejména při použití síly vede déle než pár centimetrů.

pro ochranu ovladače můžete připojit elektrolytický kondenzátor mezi VMOT a GND. Pololu navrhuje kondenzátor 47 µF nebo více (použil jsem kondenzátor 100 µF). Líbí se mi tyto sortimentní krabice od Amazonu, takže mám vždy po ruce nějaké kondenzátory správné velikosti.

jak zjistit správné zapojení krokového motoru?

Pokud nemůžete najít datový list krokového motoru, může být obtížné zjistit, jak správně zapojit motor. K určení, jak připojit bipolární krokové motory 4, používám následující trik:

jediná věc, kterou musíte identifikovat, jsou dva páry vodičů, které jsou připojeny ke dvěma cívkám motoru. Vodiče z jedné cívky se připojí k 1A a 1B a druhé k 2A a 2B, na polaritě nezáleží.

Chcete-li najít dva vodiče z jedné cívky, proveďte následující kroky s odpojeným motorem:

  1. zkuste ručně otáčet hřídelí krokového motoru a všimněte si, jak těžké je otáčet.
  2. nyní vyberte náhodný pár vodičů z motoru a dotkněte se holých konců dohromady.
  3. dále zkuste znovu roztočit hřídel krokového motoru.

Pokud máte pocit velkého odporu, našli jste pár vodičů ze stejné cívky. Pokud můžete hřídel volně otáčet, zkuste jiný pár vodičů. Nyní připojte obě cívky ke kolíkům znázorněným na schématu zapojení výše.

(Pokud je stále nejasné, prosím, zanechat komentář níže, více informací lze nalézt také na RepRap.org wiki)

Jak nastavit proudové omezení?

než začnete programovat Arduino a začnete používat ovladač, musíte udělat jednu velmi důležitou věc, na kterou mnoho lidí zapomene: nastavte aktuální limit!

tento krok není příliš komplikovaný, ale naprosto nezbytný pro ochranu krokového motoru a řidiče. Pokud nenastavíte vhodný proudový limit, váš motor může čerpat více proudu, než dokáže váš řidič, což pravděpodobně poškodí jeden nebo oba.

Chcete-li nastavit limit proudu, musíte změřit referenční napětí a odpovídajícím způsobem upravit palubní potenciometr. K měření referenčního napětí budete potřebovat malý šroubovák, multimetr a testovací vodiče aligátorů (volitelné, ale velmi užitečné).

schéma zapojení proudového limitu pro ovladač A4988.

pro měření referenčního napětí musí být ovladač napájen. A4988 potřebuje pouze napájení přes VDD (5V) a musíte připojit RST a SLP dohromady, jinak se ovladač nezapne. Nejlepší je odpojit krokový motor, když to děláte.

Pokud jste již zapojili ovladač, můžete nechat připojeno vše kromě krokového motoru. Napájení můžete použít přes USB port Arduino.

A4988 Connection
VDD 5V
RST SLP
SLP RESET
GND Ground
Required connections to set the current limit

Current limit formula

The next step is to calculate the current limit with the following vzorec:

proudový Limit = VREF ÷ (8 × Rcs)

RCS je proudový smyslový odpor. Pokud jste si koupili ovladač A4988 od společnosti Pololu před lednem 2017, bude Rcs 0,050 Ω. Ovladače prodávané poté mají proudové odpory 0.068 Ω.

to znamená, že pro proudový limit 1A pro desku s proudovými odpory 0.068 Ω by měl být Vref 540 mV.

Aktuální smysl rezistor místech. Obrázek: www.pololu.com

Chcete-li vybrat správný proudový limit, podívejte se na katalogový list vašeho krokového motoru. Pokud nemůžete najít aktuální hodnocení vašeho motoru, já doporučuji začít s aktuální limit 1A. Vždy se můžete zvýšit později, pokud váš motor/driver chybí kroků.

Bonus info: Při použití ovladače v režimu full-step je proud přes každou cívku omezen na přibližně 70% nastaveného limitu proudu. To znamená, že budete muset nastavit aktuální limit o 40% vyšší nebo 1.4 A v režimu full-step. Při použití mikrostepingu platí výše uvedený vzorec.

mějte na paměti, že pokud změníte napájecí napětí motoru, musíte znovu kalibrovat aktuální limit. Pokud váš motor vydává hodně hluku, zkuste snížit aktuální limit. Nejlepší je nastavit aktuální limit dostatečně vysoko, aby motor nezmeškal kroky.

Měření Vref

Nyní budete muset změřit referenční napětí (Vref) mezi dvěma body označené na obrázku níže (GND a potenciometr) a nastavte ji na hodnotu, kterou vypočítá.

body sondy Vref (GND a potenciometr).

pro nastavení aktuálního limitu doporučuji použít testovací vodiče aligátora upnuté k šroubováku. To vám umožní nastavit potenciometr a měřit referenční napětí současně.

Poznámka: existuje jiný způsob, jak měřit proudový limit, a to přímo měřit Odběr proudu krokového motoru. Osobně považuji výše uvedenou metodu za mnohem jednodušší.

Pololu uvádí na svých webových stránkách následující:

Poznámka: proud cívky může být velmi odlišné od napájení proudem, takže byste neměli používat aktuální naměřené na napájení nastavit proudové omezení. Vhodné místo pro umístění aktuálního měřiče je v sérii s jednou z vašich krokových cívek motoru.

Pololu

Aktuální limit FAQ

musím mít krokový motor připojen, nebo ne?
ne, při nastavování aktuálního limitu není nutné připojovat krokový motor k ovladači. Chcete-li být na bezpečné straně, odpojte motor, někdy narušuje měření napětí Vref.

musím otočit motor spuštěním náčrtu motoru Arduino?
ne, viz otázka výše.

musím otočit hodiny potenciometru – nebo proti směru hodinových ručiček, abych zvýšil Vref?
To závisí na výrobci ovladače. Pokud máte originální polulu breakout board DRV8825 nebo A4988 otočíte potenciometrem ve směru hodinových ručiček, abyste zvýšili Vref a proti směru hodinových ručiček jej snížili.

chlazení ovladače

ovladač A4988 IC má maximální proud 2 A na cívku, ale bez chladiče může dodávat pouze asi 1 A na cívku, než se začne přehřívat.

řidič obvykle přichází s malým chladičem s lepidlem, který doporučuji nainstalovat hned. Můžete si také koupit spoustu malých chladičů od Amazonu za opravdu levné.

Základní Arduino ukázkový kód pro ovládání krokového motoru

Nyní, že máte připojený ovladač a nastavit omezení proudu, je na čase se připojit Arduino k počítači a nahrát nějaký kód. Následující příkladový kód můžete nahrát do svého Arduina pomocí Arduino IDE. Pro tento konkrétní příklad nemusíte instalovat žádné knihovny.

tento náčrt řídí jak rychlost, počet otáček, tak směr otáčení krokového motoru.

kód můžete zkopírovat kliknutím na tlačítko v pravém horním rohu pole Kód.

jak kód funguje:

skica začíná definováním krokových a směrových kolíků. Připojil jsem je k Arduino pin 3 a 2.

příkaz #define se používá k pojmenování konstantní hodnoty. Kompilátor nahradí všechny odkazy na tuto konstantu definovanou hodnotou při kompilaci programu. Takže všude, kde zmíníte dirPin, kompilátor jej při kompilaci programu nahradí hodnotou 2.

také jsem definovalstepsPerRevolution konstantu. Protože jsem nastavil ovladač do režimu plného kroku, nastavil jsem jej na 200 kroků za otáčku. Pokud je vaše nastavení jiné, změňte tuto hodnotu.

// Define stepper motor connections and steps per revolution:#define dirPin 2#define stepPin 3#define stepsPerRevolution 200

V setup() část kódu, všechny motorické ovládání kolíky jsou deklarovány jako digitální VÝSTUP s funkcí pinMode().

void setup() { // Declare pins as output: pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT);}

V loop() část kódu, nechat motor točit jednu otáčku pomalu ve směru CW a jednu otáčku rychle v proti směru hodinových ručiček. Dále necháme motor otáčet 5 otáček v každém směru vysokou rychlostí. Jak tedy ovládáte rychlost, směr otáčení a počet otáček?

řízení směru odstřeďování:

pro ovládání směru odstřeďování krokového motoru nastavíme kolík DIR (směr) buď vysoko nebo nízko. K tomu používáme funkci digitalWrite(). V závislosti na tom, jak jste připojili krokový motor, Nastavení kolíku DIR vysoko umožní motoru otočit CW nebo CCW.

kontrolní počet kroků nebo otáček:

v tomto příkladu náčrtu smyčky pro řídí počet kroků, které krokový motor provede. Kód ve smyčce for vede k 1 kroku krokového motoru. Protože kód ve smyčce je proveden 200krát (krokyperrevoluce), výsledkem je 1 revoluce. V posledních dvou smyčkách je Kód ve smyčce for proveden 1000krát, což vede k 1000 krokům nebo 5 otáčkám.

Všimněte si, že druhý člen ve smyčce for můžete změnit na libovolný počet kroků, které chcete. for(int i = 0; i < 100; i++) by mělo za následek 100 kroků nebo půl otáčky.

rychlost řízení:

rychlost krokového motoru je určena frekvencí impulzů, které posíláme na krokový kolík. Čím vyšší je frekvence, tím rychleji běží motor. Frekvenci pulzů můžete ovládat změnou delayMicroseconds() v kódu. Čím kratší je zpoždění, tím vyšší je frekvence, tím rychleji běží motor.

AccelStepper knihovna tutorial

Knihovna AccelStepper napsal Mike McCauley je úžasné knihovna použít pro váš projekt. Jednou z výhod je, že podporuje zrychlení a zpomalení, ale má také spoustu dalších pěkných funkcí.

nejnovější verzi této knihovny si můžete stáhnout zde nebo kliknout na tlačítko níže.

knihovnu můžete nainstalovat tak, že přejdete do náčrtu > zahrnout knihovnu > přidat .ZIP knihovna … v Arduino IDE.

Další možností je přejít na Nástroje > Správa knihoven … nebo zadejte Ctrl + Shift + I na Windows. Správce knihoven otevře a aktualizuje seznam nainstalovaných knihoven.

můžete hledat pro ‚accelstepper‘ a podívejte se na knihovnu Mike McCauley. Vyberte nejnovější verzi a klepněte na tlačítko Instalovat.

Kontinuální rotace příklad kódu

následující skicu, může být použit ke spuštění jedné nebo více krokových motorů plynule konstantní rychlostí. (Nepoužívá se žádné zrychlení ani zpomalení).

jak kód funguje:

prvním krokem je zahrnutí knihovny s #include <AccelStepper.h>.

// Include the AccelStepper library:#include <AccelStepper.h>

dalším krokem je definovat připojení A4988 k Arduino a typ rozhraní motoru. Při použití krokového a směrového ovladače musí být Typ rozhraní motoru nastaven na hodnotu 1. Další typy rozhraní najdete zde.

příkaz #define se používá k pojmenování konstantní hodnoty. Kompilátor nahradí všechny odkazy na tuto konstantu definovanou hodnotou při kompilaci programu. Takže všude, kde zmíníte dirPin, kompilátor jej při kompilaci programu nahradí hodnotou 2.

// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:#define dirPin 2#define stepPin 3#define motorInterfaceType 1

Dále musíte vytvořit novou instanci třídy AccelStepper s příslušným typem rozhraní motoru a připojením.

v tomto případě jsem nazval krokový motor „stepper“, ale můžete použít i jiná jména, například „z_motor“ nebo „liftmotor“ atd. AccelStepper liftmotor = AccelStepper(motorInterfaceType, stepPin, dirPin);. Název, který dáte krokovému motoru, bude použit později k nastavení rychlosti, polohy a zrychlení pro tento konkrétní motor. Můžete vytvořit více instancí třídy AccelStepper s různými názvy a piny. To vám umožní snadno ovládat 2 nebo více krokových motorů současně.

// Create a new instance of the AccelStepper class:AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

V setup() část kódu definujeme maximální rychlost v krocích za sekundu. Rychlosti více než 1000 kroků za sekundu mohou být nespolehlivé, takže jsem to nastavil jako maximum. Všimněte si, že jsem zadat název krokový motor (‚stepper‘), pro který chci definovat maximální rychlost. Pokud máte více krokové motory připojení, můžete určit jinou rychlost pro každý motor:

void setup() { // Set the maximum speed in steps per second: stepper.setMaxSpeed(1000); stepper2.setMaxSpeed(500);}

V loop() jsme se poprvé nastavit rychlost, že chceme, aby motor běžet. K tomu používáme funkci setSpeed(). (můžete také umístit to v sekci nastavení kódu).

stepper.runSpeed() volí motor a když je krok splatný, provede 1 krok. To závisí na nastavené rychlosti a době od posledního kroku. Pokud chcete změnit směr motoru, můžete nastavit zápornou rychlost: stepper.setSpeed(-400); otočí motor opačným směrem.

Příklad kódu ovládání počet kroků, nebo počet otáček

nechat motor otočit o určitý počet kroků, dávám přednost použití while v kombinaci s stepper.currentPosition(). Můžete použít následující příklad kód, nechat motor běžet tam a zpět.

vysvětlení kódu:

první část kódu až do sekce loop() je přesně stejná jako v předchozím příkladu.

ve smyčce používám while smyčku v kombinaci s funkcí currentPosition(). Nejprve jsem nastavil aktuální polohu krokového motoru na nulu pomocí stepper.setCurrentPosition(0).

 // Set the current position to 0: stepper.setCurrentPosition(0);

dále využijeme smyčku while. Zatímco smyčka bude smyčka nepřetržitě a nekonečně, dokud se výraz uvnitř závorky () nestane falešným. V tomto případě tedy zkontroluji, zda aktuální poloha krokového motoru není rovna 400 krokům (!= znamená: Není rovno). I když tomu tak není, spustíme krokový motor konstantní rychlostí nastavenou setSpeed().

ve zbytku smyčky děláme přesně to samé, jen s jinou rychlostí a cílovou polohou.

zrychlení a zpomalení příklad kód

pomocí následujícího náčrtu můžete přidat zrychlení a zpomalení k pohybům krokového motoru bez složitého kódování. V následujícím příkladu, bude motor běžet tam a zpět s rychlostí 200 kroků za sekundu a zrychlení 30 kroků za sekundu.

kód vysvětlení:

v nastavení (), kromě maximální rychlosti, musíme definovat zrychlení/zpomalení. K tomu používáme funkci setAcceleration().

void setup() { // Set the maximum speed and acceleration: stepper.setMaxSpeed(200); stepper.setAcceleration(30);}

v části smyčky kódu jsem použil jiný způsob, jak nechat motor otáčet předdefinovaný počet kroků. Pro nastavení cílové polohy slouží funkce stepper.moveTo(). Funkce stepper.runToPostion() přesune motor (se zrychlením/zpomalením) do cílové polohy a blokuje, dokud není v cílové poloze. Protože tato funkce blokuje, neměli byste ji používat, když potřebujete ovládat jiné věci současně.

závěr

v tomto článku jsem vám ukázal, jak ovládat krokový motor pomocí ovladače krokového motoru A4988 a Arduino. Doufám, že vám to připadalo užitečné a informativní. Pokud jste to udělali, Prosím, podělte se o to s přítelem, který má také rád elektroniku a dělat věci!

osobně jsem použil tento ovladač hodně pro spoustu 3D tiskáren a dalších projektů souvisejících s CNC, ale rád bych věděl, jaké projekty plánujete stavět (nebo jste již postavili) s tímto ovladačem. Máte – li jakékoli dotazy, návrhy nebo si myslíte, že v tomto tutoriálu chybí věci, zanechte prosím komentář níže.