3D 프린터 정리 #3

2015년도에 만들면서 정리하던 자료임

이제까지는 하드웨어 관련이었다면 오늘은 펌웨어 관련임

Step 1. 펌웨어를 수정하기전에

먼저 LCD를 정상적으로 구동하기 위해 아두이노 라이브러리에 u8glib를 추가하여 준다.

https://code.google.com/p/u8glib/ 에 접속해서 Bintray download links 부분에서 U8glib for Arduino 부분의 파일을 다운 받아서 아두이노 라이브러리에 등록함

Step 2. Marlin 기본 파일을 받는다.

먼저 LCD를 정상적으로 구동하기 위해 아두이노 라이브러리에 u8glib를 추가하여 준다.

https://github.com/MarlinFirmware/Marlin 에 접해서 zip 파일을 받음

압축을 풀고 Marlin 폴더의 Marlin.ino를 연다.

그리고 도구 – 보드 – Arduino Mega 2560 or Mega ADK 선택을 잊지않는다. 이게 안되어 있으면 컴파일 하다가 에러가 발생함

Step 3. Configuration.h의 수정

  1. LCD의 정상적 구동을 위해 525행 이후의 LCD파트를 먼저 수정한다.
    • 544행의 #define REPRAP_DISCOUNT_SMART_CONTROLLER 부분을 활성화 시켜줌 (단 자신의 모델에 맞게 활성화를 시켜주어야 함)
  2. 47행의 보드 선택 boards.h에서 자신에게 맞는 보드를 확인하고 코드를 넣어줌 (RAMPS 1.4를 쓰고 익스트루더, 팬, 배드를 쓰니까 33번 선택, 만약 익스트루더 2개를 쓰면 34번 선택)
    • #ifndef MOTHERBOARD
    • #define MOTHERBOARD 33
    • #endif
  3. 51행의 #define CUSTOM_MENDEL_NAME “This Mendel”을 활성화 시켜주고 This Mendel 대신에 자신의 모델을 넣어주면 엘시디에 자신의 모델 명이 나옴
  4. 58행의 #define EXTRUDERS 1 는 익스트루더의 갯수로 2개를 쓸 경우 2로 수정하면됨
  5. 107행~110행 온도 센서의 선택 : 노즐과 히팅배드에 100K thermistor가 장착 되므로 1번을 선택(75행~110행 옵션을 잘보고 선택), SENSOR_1, SENSOR_2는 안쓰므로 0을 선택
    • #define TEMP_SENSOR_0 1 // 100k thermistor
    • #define TEMP_SENSOR_1 0
    • #define TEMP_SENSOR_2 0
    • #define TEMP_SENSOR_BED 1 // 100k thermistor
  6. 참고 : 121행 ~ 135행은 노즐 및 히팅배드 작동가능 최대 최소 온도 설정 (안정성 관련)
  7. 참고 : 222행 익스트루더 작동 온도 설정. 만약 노즐 설정온도(170도 디폴트값) 이하에서 모터가 작동하면 노즐에서 필라멘트가 녹지 않은 상태에서 모터가 필라멘트를 밀게 되므로 파손 위험
  8. 293행 ~ 298행 엔드스탑 설정. 기계식 엔드스탑 및 optical 센서는 같이 작동하고, 홀센서는 반대로 작동하는 것 같음. 세팅값 유의해야함
    • Z축 엔드스탑을 Optical 센서 쓰는데 295행 const bool Z_MIN_ENDSTOP_INVERTING = true로 했더니 모터 작동 테스트에서 +값으로만 움직이고 -값으로는 움직이지 않는 현상 발생함
    • const bool X_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
    • const bool Y_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
    • const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
    • const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
    • const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
    • const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
  9. 299행 #define DISABLE_MAX_ENDSTOPS 활성화(최대 엔드스탑 비활성화) – 307행~310행은 0값써야 함. 1쓰면 작동 안함, 329행~331행은 -1을 써야함
  10. 307행~310행 : 엔드스탑의 원점 찍는 포인트로 최소면 0, 최대면 1 선택. 단 299행을 활성화 시켰다면 최대점은 사용 하면 안됨. 모터 작동 안함
    • #define X_ENABLE_ON 0
    • #define Y_ENABLE_ON 0
    • #define Z_ENABLE_ON 0
  11. 320행~323행 모터 작동 방향을 소프트웨어적으로 반대로 바꿔 줌. 각자의 설계에 맞게 수정하면 됨. 현재 모터 결선방향을 빨간선이 좌측으로 오게 하였고, false 값으로 줬을 때 +값으로 하면 시계 반대방향으로 모터 작동함
    • #define INVERT_X_DIR false
    • #define INVERT_Y_DIR false
    • #define INVERT_Z_DIR false
    • #define INVERT_E0_DIR true : 익스트루더는 시계 방향으로 움직여야 함
  12. 327행~331행 : 원점 잡을 때 위치. 299행을 활성화시켰다면 -1(min)을 써야함
    • #define X_HOME_DIR -1
    • #define Y_HOME_DIR -1
    • #define Z_HOME_DIR -1
  13. 참고 : 333행~334행은 원점을 측정해 놓은 최소값 이하로 움직이지 않고 설정해 놓은 최대값 이상으로도 움직이지 않음
  14. 336행~342행 : 출력 공간 결정. 엔드스탑으로 결정되는 원점을 기준으로 출력할 수 있는 공간을 결정한다. (물리적으로 넘어가지 않게 최대값 설정에 주의)
    • #define X_MAX_POS 300
    • #define X_MIN_POS 0
    • #define Y_MAX_POS 310
    • #define Y_MIN_POS 0
    • #define Z_MAX_POS 500
    • #define Z_MIN_POS 0
  15. 373행 ~ 377행 : 오토레벨링 점찍는 위치 설정. 336행~342행에서 출력공간 고려해서 설정할 것
    • #define LEFT_PROBE_BED_POSITION 30
    • #define RIGHT_PROBE_BED_POSITION 270
    • #define BACK_PROBE_BED_POSITION 280
    • #define FRONT_PROBE_BED_POSITION 20
  16. 400행~402행 : 오토레벨링 후 보정값. 오토 레벨링을 한 후에는 그 지점(원점기준)이 논리적인 작업 공간으로 인식되기 때문에 이를 다시 원래의 원점으로 보정해야 할 필요가 있다. 정확히는 모르겠음
  17. 482행 : 모터 스텝 결정
    • #define DEFAULT_AXIS_STEPS_PER_UNIT {160,160,3200,291}
    • 총각도 360도에 모터 1 Step이 1.8도 이므로 한바퀴를 돌기위해서는 총 200 step이 필요함. 또한 이를 1/32등분 할 수 있으므로 한바퀴 도는데 6400 step이 된다.
    • x, y축 풀리 잇수가 20이고 피치가 2이므로 풀리 1바퀴 이동거리는 40미리가 된다. 1mm를 움직이는데 필요한 스텝은 6400 step / 40 mm = 160 step/mm 이다.
    • z축은 피치가 2이므로 한바퀴 돌면 2mm 상승한다. 즉, 6400 step / 2 mm = 3200 step/mm 이다.
    • 익스트루더는 안쪽 톱니 지름이 7mm이므로 1바퀴 이동거리는 21.99mm이다. 즉, 6400 step / 21.99 mm = 291.03 step/mm 이다.
    • 보정하는 방법으로는 x,y축 100미리 z축 50미리인 막대를 만들어서 출력한 후 실제 길이를 측정하여 팩터를 스텝수에 곱하면 된다.
    • 보정 관련 참조 링크 http://www.thingiverse.com/thing:195604

으으~ 드디어 blank 상태에서 모터 테스트 및 엔드스탑 테스트를 마쳤습니다.

다음주 프로파일만 오면 거의 실제 모습이 나타나겠네요!!

노즐부

팬이 하나 덜 붙었긴 하지만 비슷하게 생겼죠? ㅋㅋㅋ

저렇게 조립될 예정인데.. 생각보다 많이 크네요 ㅜㅜ (움직이겠지 ㅜㅜ)

답글 남기기