많은 분들이 이축 스테퍼 모터에 대해 들어보셨을 것입니다. 이 작은 메커니즘은 두 개의 동심 축을 독립적으로 구동하는 두 개의 스테퍼 모터로 구성됩니다. 주로 자동차 계측에 사용되지만, 다양한 흥미로운 프로젝트에서도 활용됩니다. 이번 프로젝트에서는 두 개가 아닌 세 개의 스테퍼 모터를 사용하여 세 개의 동심축을 회전시키는 메커니즘을 만들어보겠습니다.
다음은 Arduino를 사용하여 세 개의 스테퍼 모터를 제어하는 간단한 코드 예제입니다.
#include <AccelStepper.h>
AccelStepper stepper1(AccelStepper::DRIVER, 2, 5);
AccelStepper stepper2(AccelStepper::DRIVER, 3, 6);
AccelStepper stepper3(AccelStepper::DRIVER, 4, 7);
void setup() {
stepper1.setMaxSpeed(1000);
stepper1.setAcceleration(500);
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(500);
stepper3.setMaxSpeed(1000);
stepper3.setAcceleration(500);
}
void loop() {
stepper1.moveTo(1000);
stepper2.moveTo(1000);
stepper3.moveTo(1000);
stepper1.run();
stepper2.run();
stepper3.run();
}
메커니즘은 대부분 3D 프린팅 부품으로 제작됩니다. 나는 PLA 필라멘트를 사용했지만 아마도 더 나은 저항을 위해 PET-G가 표시되었을 것입니다. 그러나 어쨌든 잘 작동합니다.
디자인에서 가장 섬세한 부분은 샤프트였습니다. 샤프트의 기어 프로파일의 경우 GT2 풀리 제너레이터 웹 페이지를 사용하여 축(4.2mm, 8.2mm, 12.2mm)에 따라 내부 보어 직경이 다른 36개의 톱니가 있는 표준 GT2 기어에 대한 프로파일을 생성했습니다. 왜 정확히 36개의 이빨입니까? 결국이 어댑터를 사용하여 시계를 만들 것이기 때문입니다. 물론 치아의 수는 용도에 따라 바뀔 수 있습니다. 가장 일반적인 스테퍼 모터의 단차는 1.8도이며, 이는 회전당 200걸음을 의미합니다. 나는 60으로 나눌 수있는 단계를 원했기 때문에 단계 수가 정수가 될 수 있었다. 그래서 스테퍼 모터 샤프트에 20톱니 GT2 기어를 장착했습니다. 3개의 벨트는 모터의 회전 운동을 샤프트(36개의 톱니가 있는 피니언)로 전달하고 단계 수는 회전당 360/(20/36*1.8) = 360걸음이 되므로 1초는 모터 샤프트를 360/60 = 6단계 회전하는 것을 의미합니다.
메커니즘의 또 다른 중요한 값은 20개의 톱니가 있는 모터의 축과 36개의 톱니가 있는 축의 두 피니언의 축 사이의 거리입니다. 이 거리를 계산하기 위해 타이밍 풀리 거리 계산기 웹 페이지를 사용했습니다. 3개의 188mm 길이의 GT2 벨트를 사용했기 때문에 거리는 69.297mm였습니다. 그러나 설치를 용이하게 하기 위해 약간의 여유 공간이 필요했기 때문에 모터 지지대에 단순한 3mm 구멍이 아닌 4개의 작은 채널을 만들었다는 점을 고려해야 합니다.
물론 치수는 손에 들고 있는 것(모터, 벨트)에 따라 약간 변경될 수 있습니다. Tinkercad에서 프로젝트를 복사하고 편집할 수 있습니다.
위에서 썼듯이 이 메커니즘을 상상했을 때 가장 먼저 든 생각은 이것을 사용하여 시계를 만드는 것이었습니다. 스테퍼 모터는 시계로 매우 잘 사용할 수 있습니다. 매우 작은 증분으로 회전하도록 제어할 수 있는 고정밀 모터가 있어 정확한 위치 지정이 필요한 응용 분야에 사용하기에 이상적입니다. 스테퍼 모터의 이러한 특성으로 인해 모터를 사용하여 정확한 타이밍으로 시계 바늘을 움직일 수 있는 시계 애플리케이션에 사용하기에 매우 적합합니다. 스테퍼 모터는 마이크로 컨트롤러로 제어하여 현재 시간을 기준으로 정확한 증분으로 시계 바늘을 회전시킬 수 있습니다.
3개의 스테퍼 모터를 사용하면 모터를 독립적으로 제어하여 바늘을 올바른 위치로 회전시킬 수 있으므로 각 손의 위치를 더 잘 제어할 수 있습니다. 또한 시계의 각 바늘에 대해 별도의 모터를 사용하면 모터를 독립적으로 제어할 수 있으므로 바늘 위치에 더 큰 유연성과 정밀도가 가능합니다.
마지막으로, 독립적 인 회전이있는 3 개의 축은이 목적에 적합하며 상당히 높은 회전 토크를 가진 스테퍼 모터는 긴 손을 사용할 수 있으므로 큰 시계🙂의 구성이었습니다. 내가해야 할 일은 몇 개의 바늘을 인쇄하는 것이 었습니다 (여러 조각으로 인쇄 한 다음 함께 접착했습니다). 숫자, 선 포인터...
.... 파일은 Tinkercad, 손 및 숫자에 있습니다.
모든 것이 잘 작동하도록 Arduino Nano 용 프로그램을 만드십시오. 이 모든 것에 대해서는 다음 단계에서 설명합니다.
저는 샤프트와 샤프트를 지지하는 3D 프린팅으로 이 모든 것을 시작했습니다. 0.2mm의 레이어 높이와 50% 충전재를 사용했습니다.
그런 다음 메커니즘을 조립하는 단계로 넘어갔습니다. 일을 더 쉽게하기 위해 이것에 대한 비디오를 만들었는데, 조금 길고, 약간의 인내심이 있다면 볼 수 있지만 비디오가 없어도 어셈블리가 매우 직관적이라고 생각합니다.
몇 가지 관찰 ...
메인 샤프트를 장착 할 때 샤프트의 위치를 강화하기 위해 외경이 더 큰 M4 와셔 (페니 와셔)를 사용했습니다.
M3 나사산 막대의 절단 및 성형에 많은 어려움을 겪었고 금속 톱과 사포를 사용했지만 너트가 더 쉽게 나사로 조일 수 있도록 이 단계를 개선할 수 있다고 생각합니다.
막대를 스테퍼 모터에 나사로 고정하기 위해 작은 해킹을 사용하고 막대 끝에 너트를 조인 다음 와셔와 다른 너트를 조이고 잘 조이고 상단 나사를 사용하여 막대를 조였습니다. (같이 보기... 나사산 막대를 조이는 방법? )
벨트 톱니가 기어에서 튀어나오지 않을 만큼 메인 로드에 힘을 가하지 않도록 벨트를 너무 많이 늘리지 않았습니다.
샤프트의 기어와 같은 높이가 되도록 모터에서 기어의 위치를 여러 번 변경해야 했던 비디오를 볼 수 있습니다.
모든 것을 조립한 후(다음 단계의 전자 부품 참조) 시계를 만들기 위해 벽에 있는 모든 메커니즘을 어떻게 고정할 수 있는지 스스로에게 물었습니다. 이를 위해 나는 나사로, 구멍을 사용하여 벽에 고정되는 중간 플레이트를 설계하거나 처음으로 시도한 것처럼 고정되지 않은 이중 접착 테이프 조각을 사용하여 설계했습니다. 그래서 결국 모든 것은 나사에 달려 있습니다:)
... Tinkercad의 파일...
페이지에서 표지를 인쇄하지 않았지만 시계를 완성하고 싶은 사람은 누구나 사용할 수 있습니다.
나는 3개의 M5 나사, 너트, 와셔 및 돔 라이저를 사용하여 이 플레이트에 메커니즘을 고정했습니다. 시계 바늘도 장착했습니다.
이러한 작업에 대한 몇 가지 사진을 첨부했습니다.
회로도는 다음과 같습니다
보시다시피, RTC 모듈과 CNC 쉴드 사이의 듀퐁 와이어와 모터와 CNC 쉴드 사이의 케이블을 사용하여 위의 사진에서 어떻게 보이는지 볼 수 있습니다.
몇 가지 설명 ...
RTC 모듈은 배터리 없이 제공되었기 때문에 CR2032를 사용했지만 충전식이 아닙니다. 모듈에는 대신 LIR2032(충전식)이 필요한데, 저는 이 없었기 때문에 배터리 충전 회로를 비활성화해야 했습니다. 즉, 아래 그림과 같이 R5와 D2 사이의 연결인 PCB의 연결을 끊었습니다.
Arduino 포럼의 이 게시물에서 더 많은 정보 DS3231 CR2032 대 LIR2032 경고! 모듈이 배터리를 소모하고 있습니까?
CNC 쉴드조차도 완벽하지 않지만 알고 🙂 계시겠지만 제가 하고 싶었던 것은 수정이 필요하지 않았습니다(예: 마이크로 스테핑 활성화). 그러나 마이크로 스테핑을 사용할 때 시계가 어떻게 작동하는지 확인하기 위해 기사에서 변경했다는 것을 인정해야 하며 1/2 및 1/4 단계로 시도했지만 결국 전체 단계를 사용했습니다.
스테퍼 모터는 풀 스텝 모드에서 작동하는 경우 모터가 정지할 때 제자리에 고정되어 3축의 독립적인 회전을 용이하게 하는 장점이 있습니다. 마이크로 스테핑의 경우 이것이 더 어려울 수 있습니다. 또한 전체 단계에서 유지 토크(모터가 부하를 제자리에 유지할 수 있음)는 최대이며 마이크로 스테핑에서는 이 힘이 급격히 떨어집니다. 그러나 마이크로 스테핑의 장점은 모터의 움직임이 더 부드럽고 소음이 적다는 것입니다.
또한 기준 전압을 조정해야 하며, 그 후에 모터를 통과할 최대 전류가 결정됩니다. 각 a4988 드라이버의 vref를 각 모터의 최대 전류 0.8A(0.64x1.25)에 해당하는 0.64볼트 값으로 조정했습니다. 추가 정보: A4988 및 DRV8825 스테퍼 모터 드라이버에 대한 VRef를 설정하는 방법.
전원 공급 장치의 경우 12V 36W 전원 공급 장치로 충분하다는 것이 밝혀졌습니다 - 이 기사에 따르면 스테퍼 모터의 전원 공급 장치를 선택하는 방법은 무엇입니까?
나는 또한 테스트 중에 불쾌한 놀라움을 겪었습니다 ... 모터는 제대로 작동하기를 원하지 않았고, 격렬하게 회전하고, 윙윙거리고, 멈추고, 다시 시작하고... 나는 왜 그런지 이해하지 못했다. 결국 CNC 실드와 모터 사이의 연결 케이블의 전선에는 모터 측의 플러그에서 두 개의 전선이 반전되어 있다는 것을 깨달았습니다. 나는 그것들을 올바르게 배열했고 모든 것이 나중에 완벽하게 작동했습니다.
CNC 쉴드가 모터를 단계별로 제어하는 가장 간단하고 저렴한 옵션이라는 사실을 잊어서는 안 됩니다. 데스크톱 CNC 또는 3D 프린터에 사용되는 보드와 어떤 식으로든 경쟁할 수 없습니다. 그래서 모터가 약간 뜨거워지고 소음이 나고 고주파 휘파람이 들리는 것은 정상입니다.
스테퍼 모터를 구동하는 데 사용하는 라이브러리는 일정한 속도와 가속 / 감속의 2 가지 회전 방법을 허용합니다. 두 버전을 모두 시도했는데 가속/감속 모드를 사용하면 모터의 소음이 줄어들고 모터 시작 및 정지로 인한 시계 바늘의 진동이 상당히 줄어듭니다. 나는 시침과 분침, 그리고 초침 가속/감속에 일정한 속도를 사용했습니다.
그리고 마지막 경고입니다. 스테퍼 모터의 높은 회전 속도의 사용은 피해야 합니다. 속도가 증가함에 따라 주행 토크(회전력)가 감소하고 어느 시점에서 모터가 단계를 잃고 어느 시점에서 멈출 수도 있습니다. 스테퍼 모터는 저속에서 높은 회전력을 갖습니다(낮은 회전 속도에서 회전력이 낮은 일반 DC 모터와 반대).
나는 세 단계로 시계를 시작했다.
원하는 시간에 실시간 시계를 초기화하는 스케치를 실행하여 정확한 시간을 고정했습니다. 이 업데이트는 스케치 컴파일 날짜와 시간에 정확한 시간을 설정하여 수행 할 수 있으며, 정확한 시간과 비교하여 몇 초 (7, 8 초)의 차이가있을 수 있으며 실제로 성가신 일은 아닙니다. 또한 직렬 터미널에서 명시적인 날짜와 시간으로 직접 초기화할 수도 있습니다. 마지막 방법을 사용했습니다.
RTC 모듈 설정을 위한 스케치는 github에서 다운로드할 수 있습니다.
수동 원점 복귀는 12시 방향에서 시계 바늘을 수동으로 회전하는 것에 불과하며, 시계 프로그램을 시작할 때 이 위치를 모든 모터 움직임의 본거지로 간주합니다(사진 참조)
프로그램이 실제로 시작되면 실시간 시계에서 시간을 읽고 모터는 읽은 시간에 해당하는 위치에서 바늘을 회전 한 다음 시계의 모든 바늘이 시간의 흐름에 따라 움직입니다. 초침은 매초 초*6 걸음 위치로 회전하고, 분침은 10초마다 한 걸음씩, 시침은 2분마다 한 걸음씩 움직입니다.
전원이 꺼진 후에는 이 수동 원점 복귀를 당연히 다시 수행해야 하며, 그렇지 않으면 시계가 임의의 위치에서 시작됩니다. 다행히도 원점 복귀 후에는 정확한 시간을 읽는 것이 문제가 되지 않고 RTC 모듈에 저장되기만 하면 됩니다. 🙂
Arduino Nano 모듈에 업로드 한 주요 프로그램은
나는 3개의 스테퍼 모터를 원점으로 복귀시키기 위해 리미터나 센서를 사용하지 않았습니다. 저는 이 메커니즘이 간단하고 만들기 쉬우며 다른 프로젝트에도 유연하게 사용할 수 있기를 바랐습니다.
Arduino Nano를 실시간 클럭 모듈과 연결하기 위해 DS3231 라이브러리를 사용했습니다
3 개의 스테퍼 모터를 구동하기 위해 AccelStepper 라이브러리를 사용했습니다
위의 짧은 비디오에서 시계가 어떻게 작동하는지 볼 수 있습니다.
그 밖에 무엇을 추가할 수 있습니까?
어쩌면 이 메커니즘의 시계 적용이 완벽하지 않을 수도 있지만 할 수 있다는 것을 보여주고 싶었습니다.
그리고 더 나아가, 거꾸로 가는 시계를 만드는 것이 얼마나 간단한지 이제 깨달으셨습니까? 아니면 한 번에 24시간을 표시하는 시계? 아니면 십진법 시계(10분 100초로 10시간)? 아주 작은 변경으로 문제없이 수행 할 수 있습니다.
가장 중요한 유틸리티는 매우 큰 다이얼에 온도, 습도, 대기압과 같은 세 가지 고유한 값을 동시에 표시할 수 있는 가능성인데, 그건 그렇고, 이를 위해 이축 모터가 발명되었습니다. 하나의 엔진을 삭제하고 한 번에 2개의 표시 가능한 값을 갖거나 엔진을 하나 더 추가할 수 있으며, 내 디자인에서는 6개의 엔진을 사용할 수도 있지만 물론 상당한 수정이 필요할 수 있습니다:)
제 프로젝트에 감사하시고, 저에게 질문을 하실 수 있다는 것을 아시고, 최선을 다해 답변해 드리겠습니다.