-
아두이노 라이브러리 | 다중 스텝모터 동시 제어 MultiStepper.hTechnology/Arduino 2024. 11. 20. 14:35
1. 다중 스텝모터 동시 제어
다중 스텝모터 동시 제어 CNC 가공기나 3D 프린터처럼 여러 스텝모터를 사용하는 기계들을 보면, 스텝모터들이 차례차례 움직이는 것이 아니라 동시에 움직이고 있는 것을 알 수 있다. 이는 사실 스텝모터들이 작은 단위의 단계로 차례차례 동작하되 빠르게 움직여 동시에 움직이는 것처럼 보이는 것이다. 이를 구현하기 위해서는 각 스텝모터가 동작해야할 총 단계와 사용자가 지정한 동작 속력을 고려하여 각 스텝모터의 최소 동작 단위를 계산하는 알고리즘이 필요하다.
2. 아두이노 라이브러리 추가
아두이노 라이브러리 추가 아두이노 플랫폼에는 여러 스텝모터를 동시에 제어하기 위한 알고리즘이 라이브러리로 구현되어 있다. 그러나 기본적으로 제공되는 라이브러리는 아니기 때문에 라이브러리를 IDE에 추가하는 과정이 필요하다. 아두이노 IDE 상단 툴바에서 '툴'을 선택한 뒤 '라이브러리 관리' 항목을 선택하자. 그러면 곧이어 '라이브러리 매니저' 창이 나타나는데, 해당 창 오른쪽 상단에 라이브러리 이름을 입력하면 아두이노 플랫폼에서 지원하는 라이브러리를 검색할 수 있다. 해당 칸에 'AccelStepper'를 입력하자. 라이브러리를 검색하면 입력한 검색어와 관련된 라이브러리 목록이 나타난다. 'AccelStepper' 최신 버전을 선택하여 설치하도록 하자. 아래 링크로 접속하면 해당 라이브러리에 대한 설명과 사용 방법을 확인할 수 있다.
AccelStepper: MultiStepper Class Reference
Operate multiple AccelSteppers in a co-ordinated fashion. This class can manage multiple AccelSteppers (up to MULTISTEPPER_MAX_STEPPERS = 10), and cause them all to move to selected positions at such a (constant) speed that they all arrive at their target
www.airspayce.com
3. 확인사항
해당 라이브러리는 스텝모터 가속 제어를 위한 라이브러리 기반으로 작성되었다. 따라서 해당 라이브러리를 이용하기 위해서는 스텝모터 가속 제어 라이브러리를 먼저 선언해야 한다. 스텝모터 가속 제어를 위한 라이브러리 기반으로 작성되었으니, 다중 스텝모터를 동시에 제어하기 위한 라이브러리도 가속 제어를 지원할 것 같지만, 아쉽게도 여러 스텝모터를 제어할 경우에는 가속 제어를 지원하지 않는다.
4. 예제
4.1. 회로 구성
회로 구성 56각 100mm 바이폴라 스텝모터 NK2310028BH 2상 1.8도 8파이
모터뱅크
www.motorbank.kr
TB6600 스테핑 모터드라이버
사용 가능 모터 : 2상 및 4상 바이폴라 / 입력전압 : 9~40VDC / 최대 출력 전류:4A
www.devicemart.co.kr
4.2. 프로그램 작성
#include <AccelStepper.h> // 스텝모터 가속 제어를 위한 라이브러리 추가 #include <MultiStepper.h> // 다중 스텝모터 동시 제어를 위한 라이브러리 추가 // 스텝모터 객체 생성 // stepPin과 dirPin을 가진 드라이버 사용 여부를 판단하는 계수 입력 // 모듈과 연결된 디지털 핀을 stepPin-dirPIN 순서로 정의 AccelStepper myStepper1(1, 3, 2); AccelStepper myStepper2(1, 5, 4); AccelStepper myStepper3(1, 7, 6); MultiStepper steppersControl; // 다중 스텝모터 객체 생성 long goToPosition[3]; // 각 스텝모터의 목표 단계를 저장하기 위한 배열 정의 void setup() { myStepper1.setMaxSpeed(1000); // myStepper1의 회전 속력 한도를 1000 step/s로 설정 myStepper2.setMaxSpeed(1000); myStepper3.setMaxSpeed(1000); steppersControl.addStepper(myStepper1); // myStepper1을 다중 스텝모터 객체에 추가 steppersControl.addStepper(myStepper2); steppersControl.addStepper(myStepper3); } void loop() { goToPosition[0] = 800; // myStepper1의 목표 단계를 800단계로 저장 goToPosition[1] = 1600; goToPosition[2] = 3200; steppersControl.moveTo(goToPosition); // 다중 스텝모터 객체의 목표 단계를 갱신 steppersControl.runSpeedToPosition(); // 사전에 설정한 대로 스텝모터 동작 시작, 완료할 때가지 대기 delay(1000); // 1000 ms 대기 goToPosition[0] = 0; // myStepper1의 목표 단계를 0단계로 저장 goToPosition[1] = 0; goToPosition[2] = 0; steppersControl.moveTo(goToPosition); steppersControl.runSpeedToPosition(); delay(1000); }
[함께 읽으면 좋은 페이지]
아두이노 라이브러리 | 스텝모터 가속 제어
1. 스텝모터 가속 제어 앞서 소개한 방법으로 스텝모터를 제어했다면 스텝모터의 동작이 부드럽지 않았을 것이다. 이는 위 그림의 왼쪽 그래프처럼 스텝모터의 회전을 갑자기 변속했기 때문
vedacube.tistory.com
아두이노 | 바이폴라 스텝모터 드라이버 TB6600 모듈
1. 바이폴라 스텝모터 드라이버 TB6600 모듈 바이폴라 스텝모터 드라이버 TB6600 모듈은 바이폴라 스텝모터 1개를 양방향으로 제어할 수 있다. 바이폴라 스텝모터 전자석 단자에 스텝모터를 연결
vedacube.tistory.com
참고문헌
- How To Mechatronics. (2022). Stepper Motors and Arduino - The Ultimate Guide. YouTube. https://www.youtube.com/watch?v=7spK_BkMJys. 2024.08.01.반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | 펠티어 열전소자 (0) 2024.11.22 아두이노 SPI 통신 | 열전대 써모커플 증폭 모듈 MAX31856 (0) 2024.11.21 아두이노 | 유도형 근접 스위치 DC 5V 모듈 (0) 2024.11.19 아두이노 프로젝트 | 컨베이어 벨트 (0) 2024.11.17 아두이노 | 디지털 인터럽트 (1) 2024.11.15