2014년 11월 26일 수요일

Arduino DUE 사용에 있어서 EEPROM 대체방법

arduino DUE가 arduino Mega의 속도한계를 개선하고자 나온 32bit 버전 보드인데..

문제는 많은 기존 arduino Mega로 만들어진 프로젝터들이 내부 데이타관리를 

EEPROM을 이용해서 사용하고 있는데..

arduino DUE는 ARM 코어를 가진 SAM3X는 EEPROM 대신에 FLASH 메모리를 사용하고 있는 것이다.

그래서 arduino 포럼에서 나온 두가지 방법이 있는데..

첫번째 방법은 arduino DUE 보드에서 USB를 관리하는 16u2 칩이 있는데 

이 16u2 내부에 있는 EEPROM을 이용하는 것이 어떠냐 하는 것이다. ( 이런 꼼수를...ㅎㅎ ) 

근데 문제는 512 byte인가로 용량도 작지만 16u2 의 펌웨어를 수정해야 되고

 ISP 핀연결을 해줘야 한다. 빡센 느낌이 팍~ 온다. ㅎ


두번째 방법은 FLASH를 EEPROM처럼 쓸수 있는 함수를 추가하여 사용하는 것이다. 

단, EEPROM 처럼 스케치를 다시 올리면 안지워지지 않고 새로 초기화 된다는 것이다. 

하지만 이게 좀더 쉽고 편리한 방법같아 보인다.

sebnil/DueFlashStorage
DueFlashStorage saves non-volatile data for Arduino Due. The library is made to be similar to the EEPROM library.
github.com
본문으로 이동
먼저 이런 작업을 안하고도 델타봇이 arduino Mega에서 제대로된 성능을 보여주면 좋겠다. ㅎ

Marlin 펌웨어 기본 구성 가이드

DLP 1호기를 마린으로 셋팅했었는데 2호기는 Grbl 펌웨어를 수정하여 사용하다보니 사용할일이 없었는데 
다시 델타봇을 위해 다시 보게되어 정리해본다.
펌웨어는 아래에서 받을수 있고 계속 업데이트 되고 있어서 나중에는 틀린 부분이 있을수 있다.
세팅은 Configuration.h 파일에서 #define을 주석처리하거나 주석을 해제하여 세팅하는 방식이다.

-.기본구성
1.Baud Rate -> 통신속도 설정
#define BAUDRATE 250000 //속도가 높은게 좋긴한데 PC에따라 드라이버 호환이 안되는 경우가 있다고 함
//#define BAUDRATE 115200

2.Motherboard -> 제어보드 설정
자신이 사용하는 제어보드에 맞게 설정
#ifndef MOTHERBOARD
#define MOTHERBOARD 33 //일반적으로 많이 사용하는 Ramps 1.4 보드
#endif

-.온도설정
1.Thermistor -> 온도센서 설정
사용하는 서미스터 목록에서 골라서 설정
#define TEMP_SENSOR_0 1 //핫엔드
#define TEMP_SENSOR_1 0 //0은 사용안함
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_BED 1 //히트베드
Ramps 1.3 보드의 경우 T0, T1이 핫엔드와 히트베드 센서로 할당되어 있다함
RAMPS 1.3 Temperature Connectors T0 & T1 Connected
RAMPS 1.3 Temperature Connectors with T0 & T1 Connected to Hot End & Heated bed sensors
2.Maximum Temperatures -> 최대온도 설정
#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define BED_MAXTEMP 120
히팅튜브 최대 온도가 이 디폴트값보다 낮을수 있으니 확인이 필요함

-.기계작동부 설정
1.End Stops & Pull Ups -> 엔드스탑(리밋) 스위치 및 풀업저항 설정
엔드스탑 스위치연결을 풀업저항을 이용하여 연결하겠다는 설정인데..
풀업이 뭐지? 하고 고민할수 있는데 이런 스위치연결은 풀다운과 풀업방식이 있고
기본적으로 MCU에서 풀업을 지원해준다. 풀다운 방식을 사용하려면 아래 문구를 주석처리하고
저항을 달아줘야 한다. 굳이 그럴필요가 없으므로 풀업설정을 사용하면 될 것 같다,
엔드스탑 스위치가 NO(Normal Open) 상태에서 눌렸을때 풀업일때는 
1 -> 0으로 바뀐다. 스위치의 신호선이 NO 상태에 있을때는 1로 유지해주는게 풀업저항이다.
풀업저항이 설정안되어 있고 신호선이 NO 상태에 있으면 floating 상태로 1일수도 0일수도 있다.
만약 보드와 일체형인 엔드스탑 스위치는 풀업저항이 보드에 설치되어 있어 아래 코드가 필요없을 것이다.
#define ENDSTOPPULLUPS 
위 코드가 설정되면 아래와 같이 각축별로 엔드스탑의 풀업저항을 설정할수 있다.
#ifndef ENDSTOPPULLUPS
// fine Enstop settings: Individual Pullups. will be ignord if ENDSTOPPULLUPS is defined
#define ENDSTOPPULLUP_XMAX
#define ENDSTOPPULLUP_YMAX
#define ENDSTOPPULLUP_ZMAX
#define ENDSTOPPULLUP_XMIN
#define ENDSTOPPULLUP_YMIN
//#define ENDSTOPPULLUP_ZMIN
#endif
RAMPS 1.3 Mechanical End Stop Connections X-, Y- & Z+
RAMPS 1.3 Mechanical End Stop Connections X-, Y- & Z+
​엔드스탑스위치가 NO (Normal Open), NC (NOrmal Close)에 연결된 제품에 따라 엔드스탑신호를 반전시킬 필요가 있다. 
// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
// set to true to invert the logic of the endstops.
const bool X_ENDSTOPS_INVERTING = false;
const bool Y_ENDSTOPS_INVERTING = false;
const bool Z_ENDSTOPS_INVERTING = false;
 
Opto 센서를 리밋스위치로 사용할 경우는 Opto 센서 데이타시트를 확인해 봐야 한다.
2.Stepper Motors
:스텝모터 회전방향
#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR true
#define INVERT_E0_DIR true
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
RAMPS 1.3 Stepper Motor Wire Connections
RAMPS 1.3 Stepper Motor Wire Connections
제일 나중에 테스트 하면서 10mm만 이동시켜서 스텝모터 방향을 체크하여 설정한다.
처음으로 스텝모터를 움직이거나 홈으로 이동시킬때 만약의 사태를 대비해 reset 버튼을 
누를 준비를 하고 있어야 한다.
:홈이동 방향
엔드스탑 스위치 연결도 홈방향에 맞춰서 연결해야 한다.
// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR 1
RAMPS 1.3 Mechanical End Stop Connections X-, Y- & Z+
RAMPS 1.3 Mechanical End Stop Connections X-, Y- & Z+. These should also match End Stop home direction.
:이동제한
#define X_MAX_POS 130
#define X_MIN_POS 0
#define Y_MAX_POS 130
#define Y_MIN_POS 0
#define Z_MAX_POS 107
#define Z_MIN_POS 0
작업영역이라고 보면 될 것 같다. 이 이상으로 이동하지 못하도록 제한을 거는 거다. 처음 테스트시 Z축 값은 실제보다 작게해서 테스트해야 핫엔드와 베드의 충돌을 예방할 수 있다.

:유닛당 스텝수
#define DEFAULT_AXIS_STEPS_PER_UNIT   {106.76, 106.76, 800, 48.14}
이 값이 프린터의 정밀도를 좌지우지 하는 설정값이다. 값의 순서는 X, Y, Z, E 이며
X, Y 축 값 설정 공식은 다음과 같다.
Steps per mm = ((360°/Motor step size°) * (1/Driver microstepping))/(Belt pitch * Tooth count)
예) Steps per mm = ((360°/1.8°) * (1(1/16)))/(5 * 12) = 53.333333 
Z축 공식은 (steps for a 360° rotation of stepper/Threaded Rod Pitch)
예) (360 / 1.8) * 16 = 3200에서 피치로 나누면 3200 / 4 = 800
E축 공식은 Steps per Unit (Extruder) = Motor Steps per Revolution * Extruder Gear Ratio / (Pinch Wheel Diameter * Pi)
Extruder Gear Ratio = (big_gear_teeth / small_gear_teeth) 
예) // Classic Wade with a 39:11 gear ratio
(200 * 16) * (39 / 11) / (7 * 3.14159) = 515.91048
// MK7 Direct Drive with 2engineers 50:1 planetary gear motor
(48 * 16) * (50 / 1) / (10.56 * 3.14159) = 1157.49147

이상으로 기본적인 세팅값 설정가이드를 마친다. 자작하는 마린 사용자에게 조금이나마 도움이 되었으면 한다.

#참고사이트

델타봇용 Marlin과 Repetier 펌웨어 검토

델타봇용 펌웨어에 대해 비교 검토해 봤다. 

-. 장점
: 설정이 쉬운편
: Auto Leveling 지원
-. 단점
: 복잡한 모델링 작업시 버벅댐 - G-code를 ascii 형태로 전송

-. 장점
: Auto Leveling 최근 지원
: 복잡한 모델링 작업시도 덜 버벅댐 - G-code 정보를 binary 형태로 전송
: Repetier 호스트 사용시 호스트 프로그램내에서 펌웨어 설정값 변경가능
: Arduino DUE 32bit 보드지원
-.단점
: 설정이 다소 복잡 - 웹컨피그 툴제공

​적고보니 마린을 까는것 같은데.. 설정이 좀더 용이하여 OC 카페에서 보면 마린을 더 많이 사용하는 것 같다.
어떤걸로 세팅을 해야 좋을지.. 많이들 쓰는 마린으로 먼저 사용할지 성능이 좀더 낫다는 레피티어로 삽질하면서 세팅을 할지.. 고민이다.

2014년 11월 21일 금요일

Delta 프린터 조인트 구조 종류

델타 프린터의 정밀도는 조인트 정밀도에 많이 영향을 받는다고 한다.

그래서 내가 생각하고 있는 조인트 방식이 있는데 이것과 다른 조인트 방식과 비교한 RepRap 사이트의 내용을 정리해 보고자 한다.

1. RepRap Cardan 조인트 
대부분의 RepRap 디자인에 사용되는 조인트로 출력해서 사용. 출력물 상태에따른 조인트의 작은 변화에따라 매우 큰 노즐 위치 오류발생함
-.장점
: 매우 낮은 비용
: 출력 가능
-.단점
: 정밀도가 제작과 조립에 의존적
: 디자인에 따라 백러시와 정렬이 어긋날 가능성이 높음
-. 사용프린터

2. Rod End Bearing
틸트축이 +/-30도로 제한됨, 프린트시 최대 이동 영역을 움직이려면 35~40도가 필요하여 프린트 영역이 제한됨
-.장점
: 부품이 제조 판매됨 - RC 헬기나 비행기에서 사용하는 부품임
: 나사선이 있는 로드 사용가능
-.단점
: 제한된 프린팅 영역
: 원뿔모양의 스페이서 필요
-.사용 프린터
Kossel
3DR


3. 마그네틱 조인트
-.장점
: 정밀도 높음
: 백러시 없음
: 노드 위치가 정확함
: 낮은 비용
: 쉬운 조립
: 쉬운 분리
-.단점
: 제한적인 고정력
: 부품들이 접착되어야 함
: 자석이 충격과 높은온도(80도 이상)에 민감함

#다양한 적용방법
1) 튜브안에 자석넣는 방식 - 실린더 자석을 튜브안에 접착함
-. 부가적 단점
: 튜브 커팅과 드릴에따라 정밀도가 의존적임

2) 링자석이 움직이는 방식 - 자석의 오랜 시간 마찰에대한 영향이 알려지지 않음

3) 링자석 고정방식 - 링자석이 lift 나 effector에 접착됨, 쇠구슬은 로드의 부품으로 사용됨,
자석의 오랜 시간 마찰에대한 영향이 알려지지 않음
이 방식이 현재 내자작 델타 프린터에 고려중인 방식이다.
-. 부가적 장점
: +/-90도까지 틸드가능
-. 사용프린터
Wood-D

#참고사이트

Marlin firmware 세팅시 참고이미지 For DeltaBot

Marlin 펌웨어 변수값 세팅시 참고할만한  이미지네요.

직교식 프린터와는 다른 원통좌표계를 사용하는 개념이라 변수 설정값이 특이하네요.