-
아두이노 라이브러리 | 스텝모터 가속 제어Technology/Arduino 2024. 11. 13. 09:36
1. 스텝모터 가속 제어
앞서 소개한 방법으로 스텝모터를 제어했다면 스텝모터의 동작이 부드럽지 않았을 것이다. 이는 위 그림의 왼쪽 그래프처럼 스텝모터의 회전을 갑자기 변속했기 때문이다. 부드러운 동작을 원한다면 위 그림의 오른쪽 그래프처럼 일정한 시간동안 스텝모터의 회전 속력을 연속적으로 변경해야 한다. 이러한 가속 제어는 유니폴라 스텝모터 드라이버의 경우 반복문을 사용하여 한 단계 동작할 때마다 회전 속력을 서서히 변경하는 것으로, 바이폴라 스텝모터 드라이버의 경우 반복문을 사용하여 단계 제어 단자에 입력하는 펄스 주기를 서서히 변경하는 것으로 직접 구현할 수 있다.
2. 아두이노 라이브러리 추가
아두이노 플랫폼에는 스텝모터의 가속 제어를 위한 알고리즘이 라이브러리로 구현되어 있다. 그러나 기본적으로 제공되는 라이브러리는 아니기 때문에 라이브러리를 IDE에 추가하는 과정이 필요하다. 아두이노 IDE 상단 툴바에서 '툴'을 선택한 뒤 '라이브러리 관리' 항목을 선택하자. 그러면 곧이어 '라이브러리 매니저' 창이 나타나는데, 해당 창 오른쪽 상단에 라이브러리 이름을 입력하면 아두이노 플랫폼에서 지원하는 라이브러리를 검색할 수 있다. 해당 칸에 'AccelStepper'를 입력하자. 라이브러리를 검색하면 입력한 검색어와 관련된 라이브러리 목록이 나타난다. 'AccelStepper' 최신 버전을 선택하여 설치하도록 하자. 아래 링크로 접속하면 해당 라이브러리에 대한 설명과 사용 방법을 확인할 수 있다.
3. 예제
3.1. 회로 구성 - 유니폴라 스텝모터 드라이버 ULN2003 모듈
3.2. 프로그램 작성 - 유니폴라 스텝모터 드라이버 ULN2003 모듈
#include <AccelStepper.h> // 스텝모터 가속 제어를 위한 라이브러리 추가 int FULLSTEP = 4; // 라이브러리 풀 스텝 설정 계수 정의 int HALFSTEP = 8; // 라이브러리 하프 스텝 설정 계수 정의 int steps_per_rev = 2048; // 스텝모터 회전 단계 수 정의 // 스텝모터 객체 생성 // 마이크로 스테핑 모드 설정 // 모듈과 연결된 디지털 핀을 IN1-IN3-IN2-IN4 순서로 정의 AccelStepper myStepper1(FULLSTEP, 8, 10, 9, 11); AccelStepper myStepper2(HALFSTEP, 4, 6, 5, 7); void setup() { myStepper1.setMaxSpeed(1000); // myStepper1의 회전 속력 한도를 1000 step/s으로 설정 myStepper1.setAcceleration(50); // myStepper1의 회전 가속력을 50 step/s^2으로 설정 myStepper1.setSpeed(200); // myStepper1의 회전 속력을 200 step/s으로 설정 myStepper1.moveTo(steps_per_rev); // myStepper1의 목표 단계를 2048단계로 설정 myStepper2.setMaxSpeed(1000); myStepper2.setAcceleration(50); myStepper2.setSpeed(200); myStepper2.moveTo(-steps_per_rev); // myStepper1의 목표 단계를 -2048단계로 설정 } void loop() { if (myStepper1.distanceToGo() == 0) // myStepper1이 목표 단계까지 동작해야할 단계가 0과 같을 경우 { myStepper1.moveTo(-myStepper1.currentPosition()); // myStepper1의 목표 단계를 반대로 설정 if (myStepper2.distanceToGo() == 0) { myStepper2.moveTo(-myStepper2.currentPosition()); } } myStepper1.run(); // 사전에 설정한 대로 myStepper1 동작 시작 myStepper2.run(); }
3.3. 회로 구성 - 바이폴라 스텝모터 드라이버 A4988 모듈
3.4. 프로그램 작성 - 바이폴라 스텝모터 드라이버 A4988 모듈
#include <AccelStepper.h> // 스텝모터 가속 제어를 위한 라이브러리 추가 // 스텝모터 객체 생성 // stepPin과 dirPin을 가진 드라이버 사용 여부를 판단하는 계수 입력 // 모듈과 연결된 디지털 핀을 stepPin-dirPIN 순서로 정의 AccelStepper myStepper1(1, 8, 9); AccelStepper myStepper2(1, 2, 3); void setup() { myStepper1.setMaxSpeed(1000); // myStepper1의 회전 속력 한도를 1000 step/s로 설정 myStepper1.setAcceleration(500); // myStepper1의 회전 가속력을 50 step/s^2으로 설정 myStepper1.setCurrentPosition(0); // myStepper1의 현재 위치를 0으로 설정 myStepper2.setMaxSpeed(1000); myStepper2.setAcceleration(500); myStepper2.setCurrentPosition(0); } void loop() { myStepper1.moveTo(800); // myStepper1의 목표 단계를 800단계로 설정 myStepper1.runToPosition(); // 사전에 설정한 대로 myStepper1 동작 시작, 완료할 때가지 대기 myStepper2.moveTo(1600); // myStepper2의 목표 단계를 1600단계로 설정 myStepper2.runToPosition(); myStepper1.moveTo(0); // myStepper1의 목표 단계를 0단계로 설정 myStepper2.moveTo(0); while(myStepper1.currentPosition() != 0 || myStepper2.currentPosition() != 0) { myStepper1.run(); // 사전에 설정한 대로 myStepper1 동작 시작 myStepper2.run(); } }
[함께 읽으면 좋은 페이지]
참고문헌
- DroneBot Workshop. (2018). Stepper Motors with Arduino - Controlling Bipolar & Unipolar stepper motors. YouTube. https://www.youtube.com/watch?v=0qwrnUeSpYQ. 2024.06.17.
- How To Mechatronics. (2022). Stepper Motors and Arduino - The Ultimate Guide. YouTube. https://www.youtube.com/watch?v=7spK_BkMJys. 2024.06.17.반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | 디지털 인터럽트 (1) 2024.11.15 아두이노 | 바이폴라 스텝모터 드라이버 TB6600 모듈 (4) 2024.11.14 아두이노 | 바이폴라 스텝모터 드라이버 A4988 모듈 마이크로 스테핑 (4) 2024.11.09 아두이노 | 바이폴라 스텝모터 드라이버 A4988 모듈 (4) 2024.11.08 아두이노 라이브러리 | 유니폴라 스텝모터 드라이버 ULN2003 (3) 2024.11.07