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 를 통해 공급받은 전류가 아답터 쪽으로 역류하지 않도록 한다.
IC1 은 정전압 레귤레이터 이다. http://www.nxp.com/documents/data_sheet/NX1117C_NX1117CE_SER.pdf
이 레귤레이터를 통해 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) 이다.

T1(FDN340P) 는 Single P-channel MOSFET이다. https://www.fairchildsemi.com/ds/FD/FDN340P.pdf

   

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 제어용으로 사용할 수 있다.







Posted by mahnee

델타봇은 XYZ 좌표를 Z축과 평행한 세개의 축(A,B,C 라고 지정)에 대한 좌표로 변환하여 구동이 되는 형식이다.


이 때 Z축의 좌표는 세개의 축(A,B,C)을 동일하게 이동하는 것과 같기 때문에 XY 좌표만 생각하면 된다.


XY 평면 상에 델타봇의 각 축과 로드를 나타내면 다음과 같다.





XY평면의 원점은 델타봇의 중심으로 설정한다. 

델타봇의 B, C 축을 연결하는 선이 XY평면상에서 X축과 평행한 선으로 설정한다.


이 때, 델타봇의 각 축의 위치는 다음과 같이 XY 평면상의 좌표로 나타낼 수 있다.





여기서 , d는 원점에서 각 축까지의 거리이다.


계산을 간단히 하기 위해 이펙터의 크기와 로드 고정부품의 크기 등은 무시한다.


XY평면상의 임의의 점 P(x,y)의 좌표를 점에서 각 축까지의 거리로 변환을 해보자.






이다.


델타봇에서 각 로드는 각 축을 중심으로 로드엔드의 운동각(?)의 범위 내에서 축을 중심으로 회전을 하는 것으로 보면 된다.

따라서 델타봇의 각 축과 축의 중심에서 임의의 점을 잇는 선을 직교좌표로 하는 평면으로 가져오면 그림과 같다.



로드의 높이 H는 다음 식으로 구할 수 있다.



여기서 R은 로드의 길이이다.


로드의 길이는 정해져 있고 축의 중심에서 임의의 점까지의 거리는 위 식에서 구한 값이다.

따라서 A축에서 로드의 높이 Ha는 다음과 같다.



같은 방법으로 B, C축에서 로드의 높이를 구하면 다음과 같다.





따라서 xy 좌표로 제공되는 gcode로부터 각 축의 로드 높이를 계산해서 구동이 가능하다.

이렇게 계산된 각 축의 로드 높이에 Z좌표를 offset으로 적용하면 최종 구동 높이를 얻을 수 있다.





※ 혹시 잘못된 부분이나 이상한 점이 있으면 알려주셨으면 합니다. 

    이상하게 간단해서 이게 맞나 싶네요.


※ 이펙터나 로드 고정 부품의 크기를 고려하면 수식이 좀 더 복잡해 지겠죠.




'공작 > 3D 프린터' 카테고리의 다른 글

Hotend 테스트  (0) 2014.03.28
UP! Plus 프린터 플랫폼 히터 및 센서 사양  (0) 2014.03.26
델타봇용 로드엔드 구입  (0) 2014.02.08
3D 프린터 구동용 보드 구매..  (0) 2014.01.21
Y 축 제작  (0) 2013.06.23
Posted by mahnee

온라인 전자부품 몰에서 RAMPS 1.4 보드를 구매 했다.

원래 따로 제작하려고 했었는데 시간도 그렇고, 

빨리 뭔가 전자적으로 구동되는 걸 봐야 힘이 날것 같아서 구매해 버렸다.




제품 박스의 내용물이다.

Arduino Mega 2560 호환 보드인 Funduino Mega 2560(중국산 호환 보드인듯)와 Pololu A4988 모듈들, 박스 안에 별도로 들어있는 RAMPS 1.4 보드와 각종 전선 들이다.



X, Y, Z 축과 두 개의 extruder를 구동하기 위한 5개의 A4988 모터 드라이버 모듈과 RAMPS 1.4 보드, Funduino Mega 2560 이다.

보드를 조립하고 Marlin 펌웨어를 올려보았다. 


여기까지는 좋았다.


모터를 테스트 하기 위해 12V를 연결했는데, 과전류가 흐르는 것...!

모터를 너무 많이 달았나싶어 모터 드라이버도 빼보았는데 여전하다.


부품이 문제가 있나 싶어, 부품을 하나하나 들어내기 시작!

(반품하려 했으나, 주말이고 또 그만큼 기다려야 해서 그냥 디버깅 하기로 함)


아무리 부품을 들어내도 증상이 해결되지 않았다.

결국 모든 부품을 보드에서 떼어내게 되었고,

아무 부품도 실장이 되어있지 않은데도 전원부 쇼트 발생!!


결국 회로도와 PCB 레이아웃을 기반으로 확대경으로 들여다 보며 문제를 찾아나가기 시작했다.



그 결과, 위 사진의 빨간 네모속 오류를 발견했다.

해당 패드는 Hotend Heater 제어를 위한 출력 단자 D10의 + 단자의 뒷면 패턴이다.

패드는 12V이고 주변은 GND인데 설계 오류인지 공정 문제인지, 저렇게 연결이 되어있었다.

칼로 패턴을 끊고 모든 부품을 다시 실장.


모터 테스트를 하니 정상 동작한다.



더 이상 테스트 할 것이 없어, 가지고 있는 LCD를 붙여보기로 했다.

그래픽 LCD의 경우 u8glib 라는 LCD 통합 라이브러리를 사용한다. 


문제는 사용된 LCD의 컨트롤러는 SED1520 으로 u8glib 가 지원하지 않는 칩이었던것!

(호환되는 칩이 있는지 모르겠지만 찾지 못함).


결국 라이브러리를 수정하여 SED1520을 지원하는 코드를 추가하였다.

그래서 위와 같은 출력화면을 얻었다.


이제 다시 손을 놓았던 기구부 제작에 들어가야 겠다.


'공작 > 3D 프린터' 카테고리의 다른 글

델타봇의 좌표 변환에 대한 생각.  (0) 2014.02.11
델타봇용 로드엔드 구입  (0) 2014.02.08
Y 축 제작  (0) 2013.06.23
관통 구멍 뚫기  (0) 2013.06.15
베어링 구입  (0) 2013.06.15
Posted by mahnee

오늘 베어링을 구입하러 공구상가에 다녀왔다.


인터넷에서는 3천원이 넘었는데,

공구상가에서는 1600원, 1500원이네!!! 반값!!! 좋다 공구상가!! 역시 인터넷은 편리하지만 비싼듯(배송비도 나가고...).

배송비도 없으니 금상첨화!


연마봉은 열처리연마봉만 있고 절단은 안해주신다고 해서 고려중.

일단 절단기 사용이 가능하면 구매하기로..

안되면 인터넷에서 절단을 해주니 인터넷으로 구매....


비열처리가 싼데..



'공작 > 3D 프린터' 카테고리의 다른 글

Y 축 제작  (0) 2013.06.23
관통 구멍 뚫기  (0) 2013.06.15
Z 모터 마운트 제작  (0) 2013.06.15
가조립된 프레임..  (0) 2013.06.09
부품 가공  (0) 2013.06.08
Posted by mahnee

Z축 구동을 위한 모터의 마운트를 제작했다.

더불어 U(?)클램프도 카드를 잘라 붙여 보강을 했다.

훨씬 튼튼해 졌다.



문제는 관통하는 구멍을 어떻게 뚫을 것인가 이다.


CNC의 Z축 가공 거리가 크지 않아 드릴링이 힘들다.

'공작 > 3D 프린터' 카테고리의 다른 글

관통 구멍 뚫기  (0) 2013.06.15
베어링 구입  (0) 2013.06.15
가조립된 프레임..  (0) 2013.06.09
부품 가공  (0) 2013.06.08
전산볼트 절단..  (0) 2013.05.31
Posted by mahnee

프레임 구성 부분만 일단 조립해 보았다.




요런 모양..


※ 참고 : http://reprap.org/wiki/RepRapPro_Huxley_frame_assembly

'공작 > 3D 프린터' 카테고리의 다른 글

베어링 구입  (0) 2013.06.15
Z 모터 마운트 제작  (0) 2013.06.15
부품 가공  (0) 2013.06.08
전산볼트 절단..  (0) 2013.05.31
3D 프린터 부품  (0) 2013.05.26
Posted by mahnee
CNC를 이용해 프레임을 구성하는 부품들을 가공.


나무는 집성목인데.. 합판을 쓰는게 나을듯 하다.
연마봉 고정해주는 부분을 너무 얇게 가공을 해서 두개가 부러졌다.


'공작 > 3D 프린터' 카테고리의 다른 글

베어링 구입  (0) 2013.06.15
Z 모터 마운트 제작  (0) 2013.06.15
가조립된 프레임..  (0) 2013.06.09
전산볼트 절단..  (0) 2013.05.31
3D 프린터 부품  (0) 2013.05.26
Posted by mahnee

구입한 M6 전산볼트를 크기에 맞게 절단했다.

구매한 M6 전산볼트는 1M길이 4개로,

1M 두 개는 310mm 씩 3개 로 자르고,

1M 두 개는 300mm 두 개 나머지 하나 로 잘랐다.


원래 설계한 길이는 280mm * 2, 380mm * 1 였으나,

조금 넉넉히 자르려고 300mm 로 자르니 나머지 하나가 395mm가 되어 적당한 듯 싶다.



310mm * 6, 너트까지 결합한 모습




300mm * 4, 395mm * 2



'공작 > 3D 프린터' 카테고리의 다른 글

베어링 구입  (0) 2013.06.15
Z 모터 마운트 제작  (0) 2013.06.15
가조립된 프레임..  (0) 2013.06.09
부품 가공  (0) 2013.06.08
3D 프린터 부품  (0) 2013.05.26
Posted by mahnee

3D 프린터 제작을 위한 부품 목록


모든 부품은 RepRapPro Huxley에 사용된 부품이며,

설계 변경에 따라 길이 및 수량 등이 조금씩 변경되었음.


부품 구매에 따라 내용이 업데이트 됨.




'공작 > 3D 프린터' 카테고리의 다른 글

베어링 구입  (0) 2013.06.15
Z 모터 마운트 제작  (0) 2013.06.15
가조립된 프레임..  (0) 2013.06.09
부품 가공  (0) 2013.06.08
전산볼트 절단..  (0) 2013.05.31
Posted by mahnee
이전버튼 1 이전버튼

블로그 이미지
온갖 자작과 공학 전반에 걸쳐 관심이 많은 ..
mahnee
Yesterday
Today
Total

달력

 « |  » 2024.3
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함