marlin 마를린 강좌

3D프린터 marlin 펌웨어에 대하여 (2)

ROCOCO 2020. 6. 24. 13:15
728x90

이제 VSC를 열어서 펌웨어를 불러오는 것 까지는 성공했고.. 그럼 이런 화면들이 주욱~ 나옵니다. 초록색 글씨들은 대부분 비활성화(주석처리)되잇는 것들이며 말그대로 프로그램에 영향을 미치지 않는 부연 설명이라고 생각하시면 됩니다.

먼저 우리가 어떤 보드를 쓰고 있는지 설정해줘야 하는데...좌측에 platform IO를 눌러 보시면, 각종 보드에 대한 설명들이 주욱 있습니다.

그중간에

*[platformio]

src_dir = Marlin

boards_dir = buildroot/share/PlatformIO/boards

default_envs = STM32F103RC_btt_512K_USB

이부분에 defalt_envs에 우리의 보드에 박혀있는 칩셋이름을 적어야 하는데 skr mini e3보드는 저 칩셋을 씁니다.

어디에 적혀있냐면.. 그아래에 쭉 나와 잇는 각종 보드들 설명과 함께 칩셋이름이 적혀잇으니 자신의 보드 이름을 찾아서 칩셋이름을 복사해서 쓰시면 됩니다.

보드와 칩셋을 설정했으면 좌측에 marlin폴더에 configuraion.h를 열어 봅니다.

이제 순서대로 알아 보겠습니다.

마를린 펌에 대한 설명이 나와있고~

* Marlin 3D Printer Firmware

* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]

*

* Based on Sprinter and grbl.

* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm

*

* This program is free software: you can redistribute it and/or modify

* it under the terms of the GNU General Public License as published by

* the Free Software Foundation, either version 3 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program. If not, see <http://www.gnu.org/licenses/>.

*

*/

#define CONFIGURATION_H_VERSION 020005

좀더 내려가시면 펌웨어 버전이 나와있습니다. 현재 2.0.5버전이라 저렇게 표기 되있습니다.

 

****아마 가끔 앞에서 복사한 예제 파일을 구형 버전으로 복사해서 하시는 분들이 있는데 그럴경우 여기 버전 세팅과 맞지 않으면 컴파일이 되지 않습니다 ㅎㅎㅎ

/**

* Select the serial port on the board to use for communication with the host.

* This allows the connection of wireless adapters (for instance) to non-default port pins.

* Serial port -1 is the USB emulated serial port, if available.

* Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.

*

* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]

*/

#define SERIAL_PORT 2

/**

* Select a secondary serial port on the board to use for communication with the host.

* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]

*/

#define SERIAL_PORT_2 -1

그다음에 주욱 내려오면 시리얼 포트가 나오는데.. 이것도 보통 예제를 제대로 복사에 넣엇다면 대충 맞습니다.

안건드리셔도 되어요

#define BAUDRATE 115200

이건 통신 속도 인데 115200이나 256000중에서 그냥 때려 박으면 됩니다. 별상관 없음요

그 바로 밑에 보드 이름과 프린터 이름을 설정할 수 있는 부분이 나옵니다 .

// Choose the name from boards.h that matches your setup

#ifndef MOTHERBOARD

#define MOTHERBOARD BOARD_BTT_SKR_MINI_E3_V1_2

#endif

// Name displayed in the LCD "Ready" message and Info menu

#define CUSTOM_MACHINE_NAME "Ender-3"

MOTHERBOARD BOARD_BTT_SKR_MINI_E3_V1_2

>>> 이것은 보드 이름을 적어야 되는데 자기가 쓰는 보드를 찾아서 적으면 됩니다. 저는 SKR MINI E3 V1.2보드를 쓰기에 이렇게 적엇는데, 보드이름을 어디에서 찾냐면

이렇게 옆의 메뉴에서 Marlin > src > core > board에 들어가서 찾으시면 됩니다.

제대로 보드이름을 박아 넣고 밑에 #define CUSTOM_MACHINE_NAME "Ender-3"

에서 'Ender-3'이라고 되잇는 부분은 임의 로 고쳐서 쓰셔도 됩니다. 저는 KOSIK이라고 썻어요 ㅋㅋㅋ

// This defines the number of extruders

// :[1, 2, 3, 4, 5, 6, 7, 8]

#define EXTRUDERS 1

// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.

#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

익스트루더 갯수와 필라멘트 직경을 정하는 부분인데 보통 익스는 한개, 필라는 1.75짜리를 쓰시니 그대로 두시면 됩니다.

그다음 주욱~~~~~~~~~~~~~~~~~~~~~~~

넘어가서 thermal setting에 대해 배워보겠습니다.

말그대로 온도 센서 및 히터 들에 대한 세팅인데요...

먼저 온도 센서 들이 쭉 나옵니다. 1번 부터 해서 다양한 온도 센서 들에 대해 번호를 달아놧는데..

대부분 ntc 100k를 사용 하시니 참고 하시면 좋습니다.

제조사 마다 쓰는 센서가 달라서... 온도가 마냥 올라갈경우 화재가 날수도 있습니다. 하지만 그런경우는 거의 없져;;;ㅋㅋ

#define TEMP_SENSOR_0 라는 부분은 0센서에 어떤 서미스터가 적용이 되어 있냐를 입력하시면 됩니다. 대부분 NTC 100K쓰시니 1넣으시면 대충 맞아요

만약 히팅베드를 사용하고 있다면, 아래에 있는 #define TEMP_SENSOR_BED 부분에도 입력을 해주셔야합니다.

#define TEMP_SENSOR_0 1

#define TEMP_SENSOR_1 0

#define TEMP_SENSOR_2 0

#define TEMP_SENSOR_3 0

#define TEMP_SENSOR_4 0

#define TEMP_SENSOR_5 0

#define TEMP_SENSOR_6 0

#define TEMP_SENSOR_7 0

#define TEMP_SENSOR_BED 1

#define TEMP_SENSOR_PROBE 0

#define TEMP_SENSOR_CHAMBER 0

최종적으로 이렇게 되겠죠 ㅋ

그다음에 PID 세팅이 있는데 이건 좀 전문적이고 복잡하고 나름 설명할게 있으니 따로 다루겠습니다. 그냥 설정안하고 두어도 사용가능하니 걱정 마시고 넘어 갑시다.

그다음에 내려가면 Mechanical Settings 이 있는데 혹시 coreXY 기반 프린터를 사용하시면 이부분 주석 해제 해주시면 됩니다.

//===========================================================================

//============================= Mechanical Settings =========================

//===========================================================================

// @section machine

// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics

// either in the usual order or reversed

//#define COREXY

//#define COREXZ

//#define COREYZ

//#define COREYX

//#define COREZX

//#define COREZY

그다음에 내려가시면 제일 중요한 것중에 하나인 ENDSTOP 설정입니다. 거의 3d프린터에는 좌표의 끝을 알려주는 엔드스탑 스위치가 달려있는데 그 스위치가 어디에 달려잇는지 정하는 부분입니다.

///===========================================================================

//============================== Endstop Settings ===========================

//===========================================================================

// @section homing

// Specify here all the endstop connectors that are connected to any endstop or probe.

// Almost all printers will be using one per axis. Probes will use one or more of the

// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.

#define USE_XMIN_PLUG

#define USE_YMIN_PLUG

#define USE_ZMIN_PLUG

//#define USE_XMAX_PLUG

//#define USE_YMAX_PLUG

//#define USE_ZMAX_PLUG

대부분 많이 사용하시는 프루사 타입, 엔더 3등은 모두 min 부분에 그러니까 좌표 0부분 시작부분에 엔드스탑이 달려있으니 min부분을 세가지 모두 주석 해제 해주시면 됩니다.

사파이어프로는 X와 Z축은 min에, Y는 max에 있더라고요

여튼 맞게 주석 해제 해주시면 됩니다. 이게 안맞으면 나중에 프린터가 오체불만족마냥 제맘대로 안움직이고 힘드니 잘 설정 해주셔야 합니다.

그리고 내려가면 더중요한 부분인 스위치 방식에 대해 나옵니다.

// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).

#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.

이게 뭐냐면 대분의 엔드스탑 스위치는 이렇게 생겻는데 세가지 단자가 있습니다.

가운데는 접지선인 GND(그라운드), 그리고 C 와 NC 두가지 단자중에 하나를 선택하여 신호를 정합니다.

그래서

내가 쓰는 프린터의 엔드스톱스위치가 C에 배선되있다면 true 로 바꿔 주시고

내가 쓰는 프린터의 엔드스톱스위치가 NC에 배선되있다면 false로 나두시면 됩니다.

대부분 NC를 쓰니 false 로 두시면 됩니다.

만약 펌웨어를 올려서 오토 홈을 했는데 이동하지 않는다! > 그럼 엔드스탑을 누른 상태에서 다시 오토홈을 해보시고, 움직인다면, 스위치가 반대로 되잇는것이니 X축인지 Y축 스위치 인지 적어놧다가 해당부분 true 로 바꾸셔도 됩니다.

그다음에 내려가면 더중요한 스탭모터드라이버 세팅입니다,.

* Stepper Drivers

*

* These settings allow Marlin to tune stepper driver timing and enable advanced options for

* stepper drivers that support them. You may also override timing options in Configuration_adv.h.

*

* A4988 is assumed for unspecified drivers.

*

* Options: A4988, A5984, DRV8825, LV8729, L6470, L6474, POWERSTEP01,

* TB6560, TB6600, TMC2100,

* TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,

* TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,

* TMC26X, TMC26X_STANDALONE, TMC2660, TMC2660_STANDALONE,

* TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE

* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'L6474', 'POWERSTEP01', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']

*/

#define X_DRIVER_TYPE TMC2209

#define Y_DRIVER_TYPE TMC2209

#define Z_DRIVER_TYPE TMC2209

//#define X2_DRIVER_TYPE A4988

//#define Y2_DRIVER_TYPE A4988

//#define Z2_DRIVER_TYPE A4988

//#define Z3_DRIVER_TYPE A4988

//#define Z4_DRIVER_TYPE A4988

#define E0_DRIVER_TYPE TMC2209

//#define E1_DRIVER_TYPE A4988

//#define E2_DRIVER_TYPE A4988

//#define E3_DRIVER_TYPE A4988

//#define E4_DRIVER_TYPE A4988

//#define E5_DRIVER_TYPE A4988

//#define E6_DRIVER_TYPE A4988

//#define E7_DRIVER_TYPE A4988

위에 주석에는 초록색으로 드라이버 종류들이 주욱 나와있는데, 밑에 해당 XYZ와 익스트루더 에 어떤 모터 드라이버가 연결되있는지 설정하시면 됩니다. 이름만 위에서 복사해서 넣어주시면 되어요..

제가 사용하는 skr mini e3보드는 XYZE모두 TMC2209가 박혀 있으니 이렇게 해주시면 되고,

사파이어 순정을 예로 들면 XY는 TMC2208, Z와 E는 A4988이더라고요..

엔더 순정은 모두 A4988

이렇게 설정해주시면 됩니다.

또 쭉내려가시면 정말 정말 중요한... 중요한게 정말 많네요;;;;

중요한 모터 스탭값입니다.

* Default Axis Steps Per Unit (steps/mm)

* Override with M92

* X, Y, Z, E0 [, E1[, E2...]]

*/

#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 415 }

쉽게 말해 우리가 쓰는 모터는 그냥 빙빙 회전하는게 아니라 한걸음 한걸음 딱딱 일정 발걸음 만큼 움직이는 '스탭'모터입니다. 그래서 이걸로 얼만큼에 좌표를 갈지 정해서 프린트를 하는 건데요,

모터 회전수에 따라 얼만큼 걸어갈지를 정하는 겁니다. 보통 모터마다 세팅이 정해져있는데

일반적으로 거의 모든 프린터가 (보론제로를 제외하고) NEMA17에 1각의 각도가 1.8인 스테핑 모터를 사용하고, GT2벨트(피치가 2인 벨트)를 사용하기 때문에 값이 딱 정해져 있습니다.

그래서 XY축은 대부분 80이죠 ㅋ

문제는 Z축과 익스트루더 인데...

Z축은 리드 스크류, 그러니까 톱니가 달린 위아래로 베드나 헤드를 움직여주는 스크류에 나사선이 어떠냐에 따라 당연히 움직이는 거리가 다릅니다.

Z축에 사용되는 TM스크류가 피치가 2에

리드가 8일 경우 400

리드가 4일경우 800

리드가 2일 경우 1600을 입력 해주면 됩니다.

보통 사파이어는 1600, 엔더는 800이엇나? 그래요;; 이건 봐야 아는데..

이것도 펌웨어를 올리고 나서 Z축이나 익스트루더를 움직였을때 내가 10mm를 움직이라고 명령햇는데 5mm만 움직인다면 두배로 해주시면 됩니다 ㅎㅎ보통 질문 많이 하시는게 원하는 만큼 안움직인다는 경우가 많은데 이렇게 스탭값을 조정하시면 됩니다.

익스트루더도 필라멘트에 네임팬으로 표시해놓고 10mm를 움직이라고 명령햇는데 5mm만 움직인다면 두배로 해주시면 됩니다 ㅎㅎ

그다음 주욱 내려가서

// @section machine

// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.

#define INVERT_X_DIR true

#define INVERT_Y_DIR true

#define INVERT_Z_DIR false

이건 모터의 회전 방향을 정하는 것인데, 만약 펌웨어를 올려서, Move axis를 해서 축을 움직엿는데 반대로 움직이는 축이 있다면 이 모터 회전 방향을 true로 하시면 반대로 움직입니다. 더 쉽게 모터 케이블을 반대로 꼽는 방법도 있지요 ㅋㅋ

// Direction of endstops when homing; 1=MAX, -1=MIN

// :[-1,1]

#define X_HOME_DIR -1

#define Y_HOME_DIR -1

#define Z_HOME_DIR -1

그밑에는 엔드스탑의 방향을 정하는 것인데 이것은 위에 엔드스탑 PLUG와 연동되니..X축을 max로 햇다면 1, min으로 햇다면 -1로 적으시면 됩니다. 안맞추면 빌드가 안되요.

// The size of the print bed

#define X_BED_SIZE 235

#define Y_BED_SIZE 235

// Travel limits (mm) after homing, corresponding to endstop positions.

#define X_MIN_POS 0

#define Y_MIN_POS 0

#define Z_MIN_POS 0

#define X_MAX_POS X_BED_SIZE

#define Y_MAX_POS Y_BED_SIZE

#define Z_MAX_POS 250

이건 베드 사이즈와 Z_MAX는 출력 높이를 설정하는 부분입니다. 프린터에 맞게 수치 입력 해주시면 되어요

모든 수정을 마친후에 아래 체크표시를 눌러 빌드를 하시면 됩니다.

SUCCESS라고 나오면 일단 완료가 된건데 .. 펌웨어는

marlin-2.0폴더 > .pio > build > STM32F103RC_btt_512K_USB(보드명) 폴더 안에 firmware.bin이라는 파일로 저장되어 있을겁니다.

그파일을 SD카드에 넣어서 프린터에 꼽고 전원을 껏다 켜시면 펌웨어가 설치 됩니다.

일단 오늘은 여기까지 ㅋㅋ

여기까지 하시면 일단 펌웨어 올리고 출력 하는데는 문제 없으실 겁니다.

다음 화에서는 BL터치나 NPN근접센서같은 오토레벨링 센서 장착에 따른 펌웨어 수정을 다뤄 보겠습니다.

- 끝 -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

보탑 : 보탑 피트니스 의류 래시가드 쇼핑몰 보탑

 

보탑

해외 직구 전문 쇼핑몰 보탑

smartstore.naver.com

https://smartstore.naver.com/botop/products/4902356124

 

이상해씨 포켓몬 화분 수공예제작 3d 프린팅 : 보탑

[보탑] 최신 IT제품과 다양한 해외 직구 제품을 판매합니다.

smartstore.naver.com

 

728x90
댓글수0