Stepper Motor



Basic Structure and Operating Principle of Stepper Motors(uTube)
(if not available)  (2 min)

Stepper Motor - How It Works(4:42)(YouTube)
How does a Stepper Motor work ?(5:52)(YouTube)
Stepper Motors and how to use them(6:46)(YouTube)
Working principles of several stepper motors (bipolar, unipolar, reluctance and can-stack)  (if not available)(37min)

How a Stepper Motor works(uTube)  (if not available) (6min)

How the Stepper motors are made and how they operate - Part 1(uTube)
(if not available) (5min)

How the Stepper motors are made and how they operate - Part 2 (uTube)
 (if not available) (7 min)









2048 steps per shaft revolution



28BYJ-48 Stepper Motor Disassembly(uTube) (if not available)(9 min)




svg





ULN2003A





svg






svg













pdf      svg




#define in1  5
#define in2  6
#define in3  7
#define in4  8
int dt=5;//delay time

void setup() {
  pinMode( in1 , OUTPUT);
  pinMode( in2 , OUTPUT);
  pinMode( in3 , OUTPUT);
  pinMode( in4 , OUTPUT);
}

void loop() {
  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  digitalWrite(in3,LOW);
  digitalWrite(in4,LOW);
  delay(dt);

  digitalWrite(in1,LOW);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,LOW);
  digitalWrite(in4,LOW);
  delay(dt);

  digitalWrite(in1,LOW);
  digitalWrite(in2,LOW);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);
  delay(dt);

  digitalWrite(in1,LOW);
  digitalWrite(in2,LOW);
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);
  delay(dt);
}


// 進階寫法
int pin[4]={5,6,7,8};
int out[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
int dt=5 ;//delay time
void setup() {
  for(int i=0;i<4;i++)
  pinMode( pin[i] , OUTPUT);
}

void loop() {
for (int i=0;i<4;i++)
 {
     for(int j=0;j<4;j++)  //四支腳分別送一次
     {
        digitalWrite(pin[j],out[i][j]);
      }
      delay(dt);
 }
}




svg






#define in1  5
#define in2  6
#define in3  7
#define in4  8
int dt=5;//delay time

void setup() {
  pinMode( in1 , OUTPUT);
  pinMode( in2 , OUTPUT);
  pinMode( in3 , OUTPUT);
  pinMode( in4 , OUTPUT);
}

void loop() {
  digitalWrite(in1,HIGH);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,LOW);
  digitalWrite(in4,LOW);
  delay(dt);

  digitalWrite(in1,LOW);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);
  delay(dt);

  digitalWrite(in1,LOW);
  digitalWrite(in2,LOW);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,HIGH);
  delay(dt);

  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);
  delay(dt);
}


// 進階寫法
int pin[4]={5,6,7,8};
int out[4][4]={{1,1,0,0},{0,1,1,0},{0,0,1,1},{1,0,0,1}};
int dt=5;//delay time
void setup() {
  for(int i=0;i<4;i++)
  pinMode( pin[i] , OUTPUT);
}

void loop() {
for (int i=0;i<4;i++)
 {
     for(int j=0;j<4;j++)
     {
      digitalWrite(pin[j],out[i][j]);
      }
      delay(dt);
 }
}


// 轉一圈
#define in1  5
#define in2  6
#define in3  7
#define in4  8
int dt=5;//delay time

void setup() {
  pinMode( in1 , OUTPUT);
  pinMode( in2 , OUTPUT);
  pinMode( in3 , OUTPUT);
  pinMode( in4 , OUTPUT);
  for (int k=0;k<512;k++)
   {
      digitalWrite(in1,HIGH);
      digitalWrite(in2,HIGH);
      digitalWrite(in3,LOW);
      digitalWrite(in4,LOW);
      delay(dt);

      digitalWrite(in1,LOW);
      digitalWrite(in2,HIGH);
      digitalWrite(in3,HIGH);
      digitalWrite(in4,LOW);
      delay(dt);

      digitalWrite(in1,LOW);
      digitalWrite(in2,LOW);
      digitalWrite(in3,HIGH);
      digitalWrite(in4,HIGH);
      delay(dt);

      digitalWrite(in1,HIGH);
      digitalWrite(in2,LOW);
      digitalWrite(in3,LOW);
      digitalWrite(in4,HIGH);
      delay(dt);


    }
}

void loop() {
 
}




// 轉一圈  進階寫法
int pin[4]={5,6,7,8};
int out[4][4]={{1,1,0,0},{0,1,1,0},{0,0,1,1},{1,0,0,1}};
int dt=5;//delay time
void setup()
{
  for(int i=0;i<4;i++)
  pinMode( pin[i] , OUTPUT);
 
  for(int k=0;k<512;k++)
  {
    for (int i=0;i<4;i++)
    {
       for(int j=0;j<4;j++)
        {
          digitalWrite(pin[j],out[i][j]);
         }
       delay(dt);
    }
  }
}

void loop() {

}



// 轉一圈  進階寫法  函式
int pin[4]={5,6,7,8};
int out[4][4]={{1,1,0,0},{0,1,1,0},{0,0,1,1},{1,0,0,1}};
void stepM(int steps,int dt)
{
 for(int k=0;k<steps;k++)
  {
    for (int i=0;i<4;i++)
    {
       for(int j=0;j<4;j++)
        {
          digitalWrite(pin[j],out[i][j]);
         }
       delay(dt);
    }
  }
}

void setup()
{
  for(int i=0;i<4;i++)
  pinMode( pin[i] , OUTPUT);
 
  stepM(512,5); //one turn 2048/4=512
 
}

void loop() {

}



三相激磁 是否更有力?


偵錯 : 步進馬達不轉
拿掉一條線
兩條線互換



如何找出 共接線?


如何 將程式改為 for 迴圈?






紅外線遙控器 控制步進馬達




紅外線遙控器解碼板



svg



int irin;
int pin[4]={5,6,7,8};
int out[4][4]={{1,1,0,0},{0,1,1,0},{0,0,1,1},{1,0,0,1}};
void stepM(int steps,int dt)
{
 for(int k=0;k<steps;k++)
  {
    for (int i=0;i<4;i++)
    {
       for(int j=0;j<4;j++)
        {
          digitalWrite(pin[j],out[i][j]);
         }
       delay(dt);
    }
  }
}



void setup()
{
  Serial.begin(2400);
  for(int i=0;i<4;i++)
  pinMode( pin[i] , OUTPUT);
}

void loop()
{
  if (Serial.available() > 0) {
     irin = Serial.read();
     if (irin==0x11)  stepM(512,5); //one turn 2048/4=512
     if (irin==0x21)  stepM(128,5); //1/4turn
   }
}



// 增加LED指示
int irin;
int pin[4]={5,6,7,8};
int out[4][4]={{1,1,0,0},{0,1,1,0},{0,0,1,1},{1,0,0,1}};
void stepM(int steps,int dt)
{
digitalWrite(A5,HIGH);
for(int k=0;k<steps;k++)
  {
    for (int i=0;i<4;i++)
    {
       for(int j=0;j<4;j++)
        {
          digitalWrite(pin[j],out[i][j]);
         }
       delay(dt);
    }
  }
digitalWrite(A5,LOW);
}



void setup()
{
  Serial.begin(2400);
  for(int i=0;i<4;i++)
  pinMode( pin[i] , OUTPUT);
  pinMode(A5,OUTPUT);
}

void loop()
{
  if (Serial.available() > 0) {
     irin = Serial.read();
     if (irin==0x11)  stepM(512,5); //one turn 2048/4=512
     if (irin==0x21)  stepM(128,5); //1/4turn
   }
}




車道柵欄






int irin;
int pin[4]={5,6,7,8};
int out[4][4]={{1,1,0,0},{0,1,1,0},{0,0,1,1},{1,0,0,1}};
void stepM(int steps,int dt)
{
 for(int k=0;k<steps;k++)
  {
    for (int i=0;i<4;i++)
    {
       for(int j=0;j<4;j++)
        {
          digitalWrite(pin[j],out[i][j]);
         }
       delay(dt);
    }
  }
}

void stepMrev(int steps,int dt)
{
 for(int k=0;k<steps;k++)
  {
    for (int i=3;i>=0;i--)
    {
       for(int j=0;j<4;j++)
        {
          digitalWrite(pin[j],out[i][j]);
         }
       delay(dt);
    }
  }
}


void setup()
{
  Serial.begin(2400);
  for(int i=0;i<4;i++)
  pinMode( pin[i] , OUTPUT);
}

void loop()
{
  if (Serial.available() > 0) {
     irin = Serial.read();
     if (irin==0x11)  stepM(512,5); //one turn 2048/4=512
     if (irin==0x21)  stepMrev(512,5); //rev
   }
}


紅外線感應



藍芽遙控


ESP8266 + Arduino 遙控


Shift register74595(.pdf) (ref)