Začneme tím nejjednodušším, tedy řízením rychlosti otáčení krokového motoru potenciometrem.
Ve zkušebním zapojení bylo použito zcela standardní Arduino UNO, doplněné Connector shieldem, driver SMCB10 s obvodem A3982 a běžný krokový motor velikosti NEMA 17.
Doporučené vybavení:
- Arduino UNO, doplněné Connector shieldem
- driver SMCB10 s obvodem A3982
- krokový motor velikosti NEMA 17
- knihovna AccelStepper
Program bude samozřejmě fungovat i s libovolným jiným driverem, řízeným signály STEP a DIR a jakýmkoli bipolárním krokovým motorem.
Blokové schéma:
Pokud nemá váš driver k dispozici výstup pro napájení externích zařízení s napětím 5 V, je nutno zjistit samostatné napájení Arduina napětím velikosti 7 až 12 V nebo ho trvale napájet z USB portu.
Názorný obrázek zapojení:
Program:
Program je určen pro spolupráci s drivery řízenými signály STEP a DIR.
Nepřehlédněte, že program používá knihovnu AccelStepper a pokud potřebujete motor připojit jiným způsobem, prostudujte nejprve příručku.
Potenciometr je možno připojit na kterýkoli z analogových vstupů Arduina, ale v programu je třeba patřičně upravit tuto definici:
SPEED_PIN 5
Maximální rychlost otáčení motoru určena konstantou:
MAX_SPEED 2000 (kroky za sekundu)
a minimální rychlost konstantou:
MIN_SPEED 0 (kroky za sekundu)
/* StepperPotControl.ino Jednosměrné řízení rychlosti otáčení krokového motoru potenciometrem Driver STEP / DIR (SMCB10), motor MEMA 17 generic JeDe robot s.r.o., říjen 2019 www.edurobot.cz www.robodoupe.cz */ #include <AccelStepper.h> // Knihovna AccelStepper AccelStepper stepper1(AccelStepper::DRIVER, 2, 3); // STEP (2), DIR (3) // Nastavení druhu řídícího rozhraní a přiřazení pracovních pinů // Viz příručka knihovny AccelStepper // přiřazení pinů #define SPEED_PIN 5 // Potenciometr (1-10k) je připojen na vstup A5 // konstanty #define MAX_SPEED 2000 #define MIN_SPEED 0 // Nastavení maxima a minima rychlosti otáčení motoru v krocích za sekundu // proměnné float current_speed = 0.0; // Okamžitá rychlost otáčení motoru v krocích za sekundu int analog_value = 0; // Okamžitá hodnota napětí na analogovém vstup A5 // určuje rychlost otáčení motoru. // ZAČÁTEK PROGRAMU void setup() { // Knihovně AccelStepper předáme maximální rychlost otáčení motoru stepper1.setMaxSpeed(MAX_SPEED); } void loop() { analog_value = analogRead(SPEED_PIN); // Přečteme hodnotu z pinu A5 (0 až 1023)… current_speed = (((analog_value/1023.0) * (MAX_SPEED - MIN_SPEED)) + MIN_SPEED); // … a přepočteme ji na rychlost otáčení motoru stepper1.setSpeed(current_speed); // Nastavíme novou rychlost otáčení… stepper1.runSpeed(); // … a předáme driveru }