Controlul motoarelor pas cu pas cu Arduino

Arduino este o platforma de dezvoltare foarte simplu de utilizat dar totusi cu multe aplicabilitati pentru pasionatii de electronica si robotica. Este vorba de o solutie open-source ce include atat un modul hardware cat si interfatarea software cu acesta, anume un IDE proprietar ce foloseste limbajul Wiring, foarte asemanator cu C. Platforma foloseste un microprocesor ATMega328 la 16MHz, dispune de 14 intrari+iesiri TTL (dintre care 6 PWM), 6 intrari analog, memorie flash de 32 KB si SRAM de 2KB. Mai multe detalii pe situl oficial.

In exemplul de mai jos, am folosit un motor pas cu pas unipolar la 12v/1A, rezolutie de 1,8 grade/pas, comandat in modul full-step. Functie de aplicatie, se poate comanda si in modurile microstepping si half-step (detalii aici). Pentru protectia microcontrollerului, am izolat galvanic cele 2 parti ale circuitului, prin optocuploare. Proiectia in Multisim a circuitului electronic de control:

Ca optocuploare, se pot folosi integratele 4n35. Rezistentele se vor ajusta in functie de consumul motorului, pentru a permite “deschiderea” totala a tranzistoarelor Darlington din driverul ULN2003 (Nota: in schema apare integratul ULN2004, care e varianta CMOS a driverului, din motive ce tin de Multisim; se va folosi TTL, ULN2003).

Cuplarea celor 4 pini de intrare ai circuitului (J1 in schema) se face pe pinii 2, 3, 4, 5 ai placii Arduino, iar catodul LED-urilor optocuploarelor (in schema, cel mai de jos pin al J1) se vor lega la masa Arduino (pinul GND). Daca se doreste folosirea altor pini, se modifica cele 4 linii de cod (#define pinX Y). In orice caz, integratul ULN2003 se va incalzi puternic chiar si la lucrul cu motorul in gol, asa ca este nevoie de un radiator pentru disiparea caldurii. Daca stepperul este de putere mare, este necesar ca iesirile ULN2003 sa fie cuplate la baza unor tranzistoare de putere, sau MOSFET, deoarece acest integrat suporta pana la 500mA pentru toate iesirile (ceea ce inseamna destul de putin pentru un motor). Alimentarea motorului – daca e de 12v – se poate face de la o sursa obicnuita de PC, de 350-400W.

//============ Stepper Motor control ==============
#include <Stepper.h>

#define rezolutieMotor 200     //numarul de pasi pentru o rotatie
                               //completa; se modifica in functie
                               //de rezolutia motorului
#define pin1 2
#define pin2 3
#define pin3 4
#define pin4 5

//se foloseste libraria speciala pentru steppere
//din compilatorul Arduino
Stepper Motor(rezolutieMotor, pin1,pin2,pin3,pin4);   

void setup()
{
  //seteaza viteza motorului la 80 RPM
  Motor.setSpeed(80);   
}

void loop()
{
  //deplasare 200 pasi in fata, adica 360 grade
  //pentru un motor cu rezolutia de 200 de pasi
  Motor.step(200);  
  delay(100);

  //deplasare 200 pasi in spate, adica 360 grade
  //pentru un motor cu rezolutia de 200 de pasi
  Motor.step(-200);
  delay(100);
}
//==================================.

 

 

1 comment for “Controlul motoarelor pas cu pas cu Arduino

  1. December 25, 2015 at 12:34

    Great exploration and you’re right. In that last frinzitg diagram, you could connect the motor power to the Vin pin on the Arduino to get the 9 volts. Otherwise, the 5V regulator on the board is already dropping it to 5V. This motor does not need more than 5V to run, but is robust enough to take up to 9 without burning out, so is a good little one to play with.

Leave a Reply