RepRap 기반의 3D 프린터 제작에 가장 많이 사용되는 보드 중에 하나인 Arduino MEGA 2560과 RAMPS 보드에 대해 분석을 해보고자 한다.
(사진 및 회로도 출처 : http://arduino.cc/ )
http://arduino.cc/en/uploads/Main/arduino-mega2560_R3-sch.pdf
Arduino MEGA 2560 R3 보드의 회로도이다.
Arduino MEGA 2560은 크게 두 부분으로 나눌 수 있다. PC와 통신을 담당하는 Atmega16u2와 실제 기능을 수행하는 Atmega2560.
USB를 통해 PC와 통신을 담당하는 부분이며, Atmega16u2 나 Atmega8u2 등의 칩이 사용된다. R3 버전의 보드부터 Atmega16u2 가 사용됐다.
이 Atmega16u2에 올라가는 펌웨어를 잘 개발하면, USB2Serial 을 통해 시리얼 포트로 gcode를 전송하는 것이 아니라,
native usb device로 동작하여 binary gcode 를 전송하거나, SD 카드를 PC 와 연결된 상태에서 인식하도록 하는 것 등의 작업이 가능하지 않을까 싶다.
Arduino MEGA 2560 보드의 외부 전원 회로이다.
X1은 보드상의 DC 잭이고 아답터를 통해 전원을 공급받는다.
D1은 다이오드이며 역전류를 방지한다.
VIN은 Shield의 파워커넥터와 연결이 된다. 따라서 Shield를 통해서 전원을 공급받을 수 있다.
D1 다이오드는 Shield 를 통해 공급받은 전류가 아답터 쪽으로 역류하지 않도록 한다.
이 레귤레이터를 통해 5V 전원이 모두 공급되므로 이 레귤레이터의 용량(1A)을 초과하지 않는 선에서 회로를 추가해야 한다.
리니어 레귤레이터 이므로 입력과 출력 전압 차이는 모두 열로 손실된다.
Arduino.cc 에서는 7~12V 전원을 사용할 것을 권장하고 있다.
PC1, PC2, C2 는 안정적인 전원을 공급할 수 있도록 구성된 커패시터이다.
Power-on-reset 회로이다.
5V 전원이 공급될 때 저항과 커패시터의 RC 딜레이에 의해 일정 시간 동안 리셋을 유지시켜 디바이스가 정상동작 하도록 한다.
(햐안 점이 1번 핀)
프로그래머를 이용해 Atmega2560 에 직접 프로그래밍을 하기 위한 프로그래머 포트 이다.
5V 전원이 공급되면 켜지는 LED 이다. 회로상엔 녹색 LED.
Digital13(or PWM)핀을 통해 제어할 수 있는 LED이다. 회로도 상엔 노란색.
IC7A는 OPAMP 인데 위와 같이 회로를 구성하면, voltage follower 로써 동작한다.
Voltage follower 회로는 입력전압과 동일한 전압을 출력해주는 회로이다.
3번 핀을 통한 전압 입력이 그대로 1번 핀으로 출력된다.
대신 전류 공급은 IC7A를 통해서 하기 때문에, 부족한 포트의 전류를 보완해줄 수 있다.
Arduino MEGA 2560은 다양한 방법으로 보드의 전원을 공급받을 수 있다.
1. 외부 DC 아답터
2. Shield
3. USB
Atmega2560 이 사용하는 전압은 5V 인데, 위 세가지 방법으로 5V 전원을 공급받을 수 있다.
1, 2 번의 경우 제일 처음에 설명한 외부 전원 회로와 레귤레이터를 통해 5V를 공급한다.
3 번의 경우 Atmega16u2 에 연결된 USB를 통해 전원을 공급받는다.
문제는 USB와 DC 아답터 혹은 Shield 를 통한 전원 공급이 동시에 이루어질 경우,
레귤레이터에서 생성된 5V와 USB 단자의 5V 가 충돌하여 PC의 USB 단자가 망가질 우려가 있기 때문에,
PC를 보호하기 위한 회로가 위의 회로이다.
우선 오른쪽의 IC6(LP2985-33)을 통해 5V 전원으로부터 3.3V 전원을 생성한다.
생성된 3.3V 전압은 IC7B 의 6번핀으로 입력된다.
IC7B는 IC7A와 마찬가지로 OPAMP이다. (IC7A와 IC7B 는 하나의 부품이며 동일 회로가 2개 내장되어 있다.)
위와 같이 회로를 구성하면 비교기로 동작한다.
OPAMP의 +입력과 -입력의 전압을 비교하여 + 입력이 큰 경우 VDD(이 경우엔 5V)를 출력한다.
+입력단은 CMP가 연결되어있고, -입력단은 앞에서 생성된 3.3V가 입력되었다.
CMP는 VIN을 10K옴 저항 두개로 분배(전압분배법칙)하였기 때문에 VIN/2 (V)의 전압이 생성된다.
즉 VIN에 6.6V 보다 큰 전압이 들어오면 IC7B의 출력은 VDD(5V), 6.6V보다 작은 전압이 들어오면 GND(0V) 이다.
P-Channel MOSFET은 일종의 전자 스위치이다.
G(Gate)에 IC7B의 출력(GATE_CMD)가 연결되어있고, D(Drain)에 USBVCC가 연결되어있고, S(Source)에 +5V가 연결되어있다.
전류는 Source 에서 Drain으로 흐르므로 위 회로에서는 반대로 연결하는 것이 더 낫지 않나싶다.
Gate 입력이 0V(Source 보다 낮은 전압)일 때 P-Channel MOSFET은 ON된다. Gate 입력이 5V(Source 보다 높은 전압)이면 OFF된다.
즉 VIN의 입력이 6.6V보다 크면 GATE_CMP가 5V가 되어 MOSFET이 OFF되고 USB 전원이 차단된다.
외부 DC 아답터나 Shield 를 통해 6.6V 이상의 전원을 공급 받을 경우 USB 전원이 차단된다는 이야기다.
Atmega2560이 동작하기 위해 필요한 기본 회로이다. Crystal 을 통해 시스템 클럭이 생성된다.
AVCC는 ADC 같은 Analog 회로를 위한 전원이다.
나머지 회로들은 Arduino 의 입출력 포트를 포함한 shield 와 연결되는 커넥터 들이다.
Shield로 부터 VIN을 공급받고 Shield 에 5V, 3.3V를 공급하기 위한 전원 커넥터이다.
Analog0~15 핀이다.
Digital0~53 핀이다.
Digital 핀들의 일부는 특정한 용도로 사용될 수 있다.
예를 들면 50~53 핀은 SPI 통신을 위해 사용될 수 있고,
Digital0, 1, 14~21 은 UART, IIC 등의 통신용으로 사용이 가능하고,
Digital2~13은 PWM 제어용으로 사용할 수 있다.