Eines de l'usuari

Eines del lloc


Barra lateral

tutorials:arduino:05_arduino_motors:15_stepper

Stepper motors

Per practicar amb l'Arduino i el motors pas a pas utilitzarem el més petit de tots, funciona amb els 5 volts del arduino(no cal alimentació externa) encara que poc precís, ni tampoc un parell molt gran, tot i que te reductor.

Es un motor pas a pas, te només 32 passos per volta(64 mitjos passos). (El normal del motors pas a pas mes industrials es de 200 passos per volta). Però com te un reductor de 1/64 i normalment funciona a mitjos passos tinguem en total tinguem 64*64=4096 passos per volta.

Altre avantatge es que el circuit de potencia pot ser un senzill ULN2003(array de darlingtons). Perquès es un motor unipolar(5 cables), el normals son el bipolars(4 cables) que aprofiten tota la bobina, tenen mes força i rendiment però el circuit es més complex.(8 transistor en front de 4).

A mitjos passos te mes parell, però moviment menys suau:

El esquema de la placa de potència amb el transistors al xip ULN2003 es el següent:

Programa per a passos complets:

full_step.ino
    int Pin0 = 4; 
    int Pin1 = 5; 
    int Pin2 = 6; 
    int Pin3 = 7; 
    int step = 0; 
    boolean dir = true;// gre
    void setup() 
    { 
     pinMode(Pin0, OUTPUT);  
     pinMode(Pin1, OUTPUT);  
     pinMode(Pin2, OUTPUT);  
     pinMode(Pin3, OUTPUT);  
    } 
     void loop() 
    { 
   if (step==0){ 
         digitalWrite(Pin0, LOW);  
         digitalWrite(Pin1, LOW); 
         digitalWrite(Pin2, HIGH); 
         digitalWrite(Pin3, HIGH); 
   } 
  if (step==1){ 
         digitalWrite(Pin0, HIGH);  
         digitalWrite(Pin1, LOW); 
         digitalWrite(Pin2, LOW); 
         digitalWrite(Pin3, HIGH); 
 }  
  if (step==2){ 
         digitalWrite(Pin0, HIGH);  
         digitalWrite(Pin1, HIGH); 
         digitalWrite(Pin2, LOW); 
         digitalWrite(Pin3, LOW);
      } 
  if (step==3){ 
         digitalWrite(Pin0, LOW);  
         digitalWrite(Pin1, HIGH); 
         digitalWrite(Pin2, HIGH); 
         digitalWrite(Pin3, LOW); 
      }
  if(dir){ 
       step=step+1; 
     }else{ 
       step=step-1; 
     } 
     if(step>4){ 
       step=0; 
     } 
     if(step<0){ 
       step=4; 
     } 
     delay(20); 
    }

Programa per mitjos passos:

half_step.ino
    int Pin0 = 8; 
    int Pin1 = 9; 
    int Pin2 = 10; 
    int Pin3 = 11; 
    int _step = 0; 
    boolean dir = false;// gre
    void setup() 
    { 
     pinMode(Pin0, OUTPUT);  
     pinMode(Pin1, OUTPUT);  
     pinMode(Pin2, OUTPUT);  
     pinMode(Pin3, OUTPUT);  
    } 
     void loop() 
    { 
     switch(_step){ 
       case 0: 
         digitalWrite(Pin0, LOW);  
         digitalWrite(Pin1, LOW); 
         digitalWrite(Pin2, LOW); 
         digitalWrite(Pin3, HIGH); 
       break;  
       case 1: 
         digitalWrite(Pin0, LOW);  
         digitalWrite(Pin1, LOW); 
         digitalWrite(Pin2, HIGH); 
         digitalWrite(Pin3, HIGH); 
       break;  
       case 2: 
         digitalWrite(Pin0, LOW);  
         digitalWrite(Pin1, LOW); 
         digitalWrite(Pin2, HIGH); 
         digitalWrite(Pin3, LOW); 
       break;  
       case 3: 
         digitalWrite(Pin0, LOW);  
         digitalWrite(Pin1, HIGH); 
         digitalWrite(Pin2, HIGH); 
         digitalWrite(Pin3, LOW); 
       break;  
       case 4: 
         digitalWrite(Pin0, LOW);  
         digitalWrite(Pin1, HIGH); 
         digitalWrite(Pin2, LOW); 
         digitalWrite(Pin3, LOW); 
       break;  
       case 5: 
         digitalWrite(Pin0, HIGH);  
         digitalWrite(Pin1, HIGH); 
         digitalWrite(Pin2, LOW); 
         digitalWrite(Pin3, LOW); 
       break;  
         case 6: 
         digitalWrite(Pin0, HIGH);  
         digitalWrite(Pin1, LOW); 
         digitalWrite(Pin2, LOW); 
         digitalWrite(Pin3, LOW); 
       break;  
       case 7: 
         digitalWrite(Pin0, HIGH);  
         digitalWrite(Pin1, LOW); 
         digitalWrite(Pin2, LOW); 
         digitalWrite(Pin3, HIGH); 
       break;  
       default: 
         digitalWrite(Pin0, LOW);  
         digitalWrite(Pin1, LOW); 
         digitalWrite(Pin2, LOW); 
         digitalWrite(Pin3, LOW); 
       break;  
     } 
     if(dir){ 
       _step++; 
     }else{ 
       _step--; 
     } 
     if(_step>7){ 
       _step=0; 
     } 
     if(_step<0){ 
       _step=7; 
     } 
     delay(2); 
    }

http://makecourse.weebly.com/week8segment2.html# A aquest curs maker de la d'una Universitat de Florida utilitzen aquest motor i han fet una llibreria. Pot ser el pròxim pas sigui fer funcions, llibreries…etc,

tutorials/arduino/05_arduino_motors/15_stepper.txt · Darrera modificació: 2019/01/28 18:50 per crevert