활동 및 제작 과정
위 회로를 참고하여 구동시키려고 했다. 하지만 작동이 안됐다.
- 스텝 모터의 선을 잘못 연결해서
→ 스텝 모터를 구동하기 위해서는 각 코일에 연결된 전선의 쌍을 정확히 파악해야 한다. 사용한 스텝 모터는 4개의 전선을 가지고 있었으나 전선의 연결 순서를 알 수 없었기 때문에 전선의 짝을 찾는 과정을 진행하였다. 먼저 두 전선을 임의로 선택하여 서로 연결한 뒤 모터 축을 손으로 회전시켰다. 만약 선택한 두 전선이 동일한 코일의 양단이라면 코일 내부에 유도 전류가 발생하여 회전 저항이 증가하므로 축이 평소보다 뻑뻑하게 돌아간다. 반대로 서로 다른 코일의 전선을 연결한 경우에는 이러한 현상이 나타나지 않아 비교적 부드럽게 회전한다. 이 원리를 이용하여 여러 조합을 확인한 결과 각 코일의 전선 쌍을 찾아낼 수 있었다.
2. 12V 어댑터 대신 9V 어댑터를 사용해서
→초기에는 스텝모터 구동에 12V 전원 대신 9V 전원을 사용해도 충분할 것으로 예상하여 연결하였다. 그러나 모터가 정상적으로 동작하지 않았으며 이는 스텝모터와 A4988 드라이버가 요구하는 전압 및 전류를 9V 전원이 충분히 공급하지 못했기 때문으로 판단된다.
처음에는 Stepper motor - NEMA-17 size - 200 steps/rev, 12V 350mA랑 A4988 스텝 모터 드라이버 모듈 레드 RED를 사용하여 구동시키려고 했다. 하지만 Nema 17 42각 128분주 SBD-12-NK245-02 마이크로스텝 드라이버 일체형 5.5Kg.cm(드라이버 내장형)를 사용하는 것이 더 효율적일 것 같아 교체하게 되었다.
드라이버 내장형 스텝 모터(일체형 스텝 모터)
모터 뒤에 있는 초록색 보드는 스텝 모터 드라이버이며 모터와 하나의 제품으로 결합된 형태이므로 드라이버 내장형 스텝 모터라고 부른다. 이 스텝 모터 드라이버의 주요 기능으로는 전력 증폭 및 전류 제어와 마이크로스텝 제어, 제어 신호 해석이 있다. 아두이노는 직접 스텝 모터를 구동할 수 없어 드라이버가 외부 전원을 받아 모터가 필요로 하는 전류를 공급하고 코일에 흐르는 전류의 크기를 조정하여 안정적으로 회전할 수 있도록 도와준다. 그리고 일반적인 스텝 모터는 한 바퀴를 회전하기 위해 200스텝이 필요하는데 드라이버는 이를 더 세분화하여 제어할 수 있다. 그리고 마이크로스텝 제어를 사용하여 진동, 소음 감소, 회전의 부드러움, 위치 제어 정밀도 행상이라는 장점이 있다. 아두이노는 드라이버에 PUL, DIR, ENA과 같은 신호를 보내는데 드라이버는 이러한 신호를 핵석하여 모터 내부 코일에 전류를 순서ㅐㄷ로 공급함으로써 회전을 만들어낸다.
일체형 스텝 모터와 일반 스텝 모터 비교
이처럼 일체형 스텝 모터는 배선이 단순하여 제작하기 쉽고 공간을 적게 차지한다. 이외에도 노이즈와 접축 불랴이 적다는 점이나 진동 환경에서도 안정적으로 동작한다는 장점을 가진다.
스마트 창문 만들 때 일체형 스텝 모터가 더 적합하다고 판단한 이유는 창틀 내부가 좁고 장기간으로 안정적으로 동작하기 위해서는 위와 같은 장점들을 가진 일체형 스텝 모터가 구동부로 적합하다고 생각했다.
위와 같이 이체형 스텝 모터와 아두이노를 연결했다.
// 핀 번호 정의
const int stepPin = 3; // CP 핀
const int dirPin = 4; // DIR 핀
const int enPin = 5; // EN 핀
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(enPin, OUTPUT);
digitalWrite(enPin, LOW);
}
void loop() {
// 1. 정방향 70도 회전
digitalWrite(dirPin, HIGH);
for(int i = 0; i < 39; i++) { // 200스텝을 360도로 나눈 뒤 70도를 곱함 (약 39스텝)
digitalWrite(stepPin, HIGH);
delayMicroseconds(3000); // 3000으로 늘려 속도를 더 느리게 설정
digitalWrite(stepPin, LOW);
delayMicroseconds(3000);
}
delay(1000); // 1초 대기
// 2. 역방향 70도 회전
digitalWrite(dirPin, LOW);
for(int i = 0; i < 39; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(3000);
digitalWrite(stepPin, LOW);
delayMicroseconds(3000);
}
delay(1000); // 1초 대기
}
코드는 위와 같이 짰다. 하지만 구동이 되지 않았다. EN 단자의 전선을 제거하자마자 모터가 정상적으로 작동하였다. 드라이버는 안전 및 전력 절감을 위해 EN 단자에 신호가 없을 때 모터를 활성화하고 반대로 5V 신호가 입력되면 모터의 동력을 차단하도록 설계되어 있다. 아두이노의 디지털 핀을 소스 코드에서 별도로 low로 제어하지 않거나 신호가 플로팅되면 드라이버는 이를 5V 신호로 오인하게 되어 결과적으로 드라이버가 모터 보호를 위해 도력 차단 상태를 유지하여 모터가 돌지 않았던 것이다. 그래서 EN 단자의 배선을 분리하여 신호 입력을 완전히 빈 상태로 만들었다. 그 결과 모터가 정상적으로 돌았다.