-
아두이노 | 바이폴라 스텝모터 드라이버 A4988 모듈 마이크로 스테핑Technology/Arduino 2024. 11. 9. 01:34
1. 마이크로 스테핑
스텝모터는 하드웨어 설계에 따라 최소 회전 단위가 결정되어 있다. 앞서 다루었던 바이폴라 스텝모터의 경우, 최소 회전 단위가 1.8도로 정해져있다. 하드웨어로 최소 회전 단위가 결정되어있더라도 전자석을 적절하게 제어하면 최소 회전 단위를 줄일 수 있는데, 이를 마이크로 스테핑(microstepping)이라고 한다. 마이크로 스테핑을 이용하면 하드웨어로 인한 최소 회전 단위가 1.8도인 바이폴라 스텝모터가 0.9도 이하로 회전할 수 있게 되며, 기존 제어 방식보다 부드러운 움직임을 기대할 수 있다.
2. 풀 스텝과 하프 스텝
스텝모터는 기본적으로 풀 스텝(full step)으로 동작한다. 위 그림과 같이 인접한 두 전자석에 전류를 흘려주면 기어가 자력에 의해 두 전자석 사이에 위치한다. 동일한 방식으로 다음 인접한 두 전자석에 전류를 흘려주면 기어가 회전한다. 이 과정을 반복하여 하드웨어로 정해진 단계만큼 스텝모터를 동작시키면 구동축이 한 바퀴 회전한다. 이번 예제에서 다루는 바이폴라 스텝모터의 경우, 풀 스텝으로 200단계 회전 시 구동축이 한 바퀴 회전한다.
다양한 마이크로 스테핑 방식 중 하프 스텝(half step)이 가장 대표적이다. 위 그림과 같이 인접한 두 전자석에 전류를 흘려주면 기어가 자력에 의해 두 전자석 사이에 위치한다. 그 다음, 풀 스텝과는 다르게 하나의 전자석에만 전류를 흘려주면 기어가 해당 전자석을 향하도록 위치한다. 이 과정을 반복하여 하드웨어로 정해진 단계만큼 스텝모터를 동작시키면 구동축이 반 바퀴 회전한다. 이번 예제에서 다루는 바이폴라 스텝모터의 경우, 하프 스테븡로 400단계 회전 시 구동축이 한 바퀴 회전한다.
3. 바이폴라 스텝모터 드라이버 A4988 모듈
마이크로 스테핑을 구현하기 위해서는 스텝모터에 흐르는 전류를 직접 제어해야겠지만, 바이폴라 스텝모터 드라이버 A4988 모듈이 해당 기능을 지원하므로 간단하게 구현할 수 있다. A4988 모듈에 마이크로 스텝 제어 단자가 세 개 있는데, 해당 단자들에 논리 전원을 어떻게 인가하느냐에 따라 마이크로 스테핑 모드를 정할 수 있다. 아무런 논리 전원도 연결하지 않으면 기본적으로 세 단자에는 0이 입력되며, 이때 스텝모터는 풀 스텝 모드로 동작한다. 만약 마이크로 스텝 제어 단자 1에만 논리 전원을 연결하면 스텝모터는 하프 스텝 모드로 동작한다. A4988 모듈은 앞서 소개한 하프 스텝 외에도 1/4, 1/8, 1/16 모드를 지원한다. 바이폴라 스텝모터 드라이버 A4988 모듈은 아래 링크로 접속하면 구매할 수 있다.
4. 예제
4.1. 회로 구성
4.2. 프로그램 작성
int dirPin = 2; // 정수형 변수 선언 후 디지털 핀 번호 2번으로 초기화 int stepPin = 3; int steps_per_rev = 200; // 스텝모터 회전 단계 수 정의 int mode = 2; // 마이크로 스테핑 계수 정의, 본 예제에서는 하프 스텝 모드를 구현함 void setup() { pinMode(dirPin, OUTPUT); // 디지털 2번 핀을 출력(OUTPUT) 모드로 설정 pinMode(stepPin, OUTPUT); } void loop() { // 스텝모터의 회전방향을 설정 digitalWrite(dirPin, HIGH); // 디지털 2번 핀에 디지털 신호 HIGH를 출력 // 스텝모터를 400단계만큼 동작 for(int i = 0; i < (steps_per_rev * mode); i++) { digitalWrite(stepPin, HIGH); // 디지털 3번 핀에 디지털 신호 HIGH를 출력 delayMicroseconds(2000); // 2000 μs 대기 digitalWrite(stepPin, LOW); // 디지털 3번 핀에 디지털 신호 LOW를 출력 delayMicroseconds(2000); } delay(1000); // 1000 ms 대기 // 스텝모터의 회전방향을 반대 방향으로 설정 digitalWrite(dirPin, LOW); // 디지털 2번 핀에 디지털 신호 LOW를 출력 // 스텝모터를 800단계만큼 동작 for(int i = 0; i < (2 * steps_per_rev * mode); i++) { digitalWrite(stepPin, HIGH); delayMicroseconds(1000); // 1000 μs 대기 digitalWrite(stepPin, LOW); delayMicroseconds(1000); } delay(1000); }
[함께 읽으면 좋은 페이지]
참고문헌
- DroneBot Workshop. (2018). Stepper Motors with Arduino - Controlling Bipolar & Unipolar stepper motors. YouTube. https://www.youtube.com/watch?v=0qwrnUeSpYQ. 2024.06.14.- How To Mechatronics. (2022). Stepper Motors and Arduino - The Ultimate Guide. YouTube. https://www.youtube.com/watch?v=7spK_BkMJys. 2024.06.14.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | 바이폴라 스텝모터 드라이버 TB6600 모듈 (4) 2024.11.14 아두이노 라이브러리 | 스텝모터 가속 제어 (3) 2024.11.13 아두이노 | 바이폴라 스텝모터 드라이버 A4988 모듈 (4) 2024.11.08 아두이노 라이브러리 | 유니폴라 스텝모터 드라이버 ULN2003 (3) 2024.11.07 아두이노 프로젝트 | 스마트 냉각팬 (0) 2024.07.19