Arduino

스테핑 모터(Stepping Motor) 사용하기 - 28byj-48

작성자 임베디드코리아 작성일25-05-16 00:13 조회497회 댓글0건

첨부파일

기본 동작 동영상 : https://youtu.be/GJ7Dmjefbak
가변저항 동영상 :  https://youtu.be/qvHy1plHItg
<* 스테핑 모터(Stepping Motor) 사용하기 *>
● 스텝모터는 모터의 회전을 잘게 쪼개서 쪼갠 조각(스텝)을 이용해서 제어하는 모터이다.
● 펄스(Puls)에 의해 디지털적으로 제어하기 때문에 정밀한 제어가 가능하다..
● 브러시리스(Brushless)모터이기 때문에 오래 사용할 수 있다.

< 스텝모터의 분류 >
    - 스텝모터는 작동 방식에 따라 크게 유니폴라 (Unipolar)와 바이폴라 (Bipolar)로 구분된다.
● 유니폴라 방식은 권선에 전류를 한쪽 방향으로만 흘리는 방식으로 큰 토크(힘)가 나오지 않지만 탈조 위험이 낮고 고속회전이 가능하다.
    - 주로 SLA7024칩을 이용해서 제어합니다.

● 바이폴라 방식은 권선에 흐르는 전류의 방향을 바꿔서 모터를 구동하는 방식으로 회로구성이 복잡하지만 저속에서 토크 성능이 좋다.
    - 유니폴라 방식에 비해 높은 정밀도를 가진다
    - L297, ULN2003등 H-bridge를 포함한 IC칩을 이용해서 제어한다.

------ < 28byj-48 스텝모터 동작 소스코드 > ---------------------------------------------------
▶ 1024는 180º 이다.
#include <Stepper.h>

#define IN1  12 // IN1
#define IN2  11 // IN2
#define IN3  10 // IN3
#define IN4    9 // IN4

int RPM = 10;
int stepsPerRevolution=2048;

Stepper my28BJY48(stepsPerRevolution, IN4, IN2, IN3, IN1);

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  my28BJY48.setSpeed(RPM);
}

void loop() {
 
  my28BJY48.step(stepsPerRevolution);
  delay(2000);
 
  my28BJY48.step(-stepsPerRevolution);
  delay(2000);

}

------ < 가변저항을 이용해 스텝모터의 회전 각도 제어 소스 코드 > ---------------------------------------------------
#include <Stepper.h>

#define IN1  12 // IN1
#define IN2  11 // IN2
#define IN3  10 // IN3
#define IN4    9 // IN4
#define Potentiometer  A0

int stepsPerRevolution = 1024;
int sensorReading;
int motorSpeed=10;
int PotentiometerValue;

Stepper myStepper(stepsPerRevolution, IN4, IN2, IN3, IN1);

void setup() {
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 pinMode(IN3, OUTPUT);
 pinMode(IN4, OUTPUT);
 pinMode(Potentiometer, INPUT);
 myStepper.setSpeed(motorSpeed);
}

void loop() {
  sensorReading = analogRead(Potentiometer);
  stepsPerRevolution = map(sensorReading, 0, 1023, 0, 2048);
  if (motorSpeed > 0) {
    myStepper.step(stepsPerRevolution);
  }
  delay(2000);
}