출처블로그>DiMO님의 블로그 | 디모코어

원문http://blog.naver.com/dimosoft/220225674380



이글은 마를린을 기준으로 하며, 비슷한 아두이노 계열에서는 모두 가능할 것입니다.


먼저, 장비를 판매하는 사람 또는 업자라면, 최소한 자신이 만든 제품을 상품이라는 소리를 들을 정도로 수정을 해서

판매를 해야 한다고 생각합니다

그런데, 대부분 다들 기계적인 부분을 조금 다르게 하고, 판매를 하는 것이 대한민국 3D 프린터의 현주소입니다.


 세계3대 오픈소스를 개발한 개발자는 거기에 한술 더 떠서, 엔드스탑과 전원도 없는 제품을 20만원대라고 공동으로 구매를 해서 

국민 프린터라고.....떠듭니다. 엔드스탑....그것이 있어도 0점을 잡는데, 힘든데.....없는 제품을....초보자들에게 판매를 하면....


 온도에 대해서 논의를 해보고자 한다.


다들 필라멘트를 출력할 때, 온도를 얼마에 맞추어라...높혀라...낮추어라....라고들 합니다. 


과연 이것이 의미가 있을까요?


Arduino 2560은 ATMEL2560이라는 소자입니다. 소자의 제원을 보면..4.5V ~ 5.5V가 동작온도입니다.

즉, 전원이 4.5V ~ 5.5V를 출력하면 정상으로 동작한다는 의미이다.


그리고, 써모다이오드를 4.7K의 풀업을 해서 온도를 측정한다. 그런데, 문제는 여기서 발생한다.

사용하는 저항이 정확한 것이 아니라 오차가 존재한다. 그리고, 센서선의 길이에 따라서 분포저항이 존대한다.

그리고, 센서 자체의 오차도....만만치 않다.... 또한, 센서 역시.....


 국내에서 판매되는 3D Printer는 대부분이 온도 센서의 값을 1로 놓는다. 의미도 모르고 무조건 1로 해 놓는 것이 참 당황스럽다.

 풀리는 이거다 저거다 따지는 데......중요한 센서부분은 그냥 대충 해 놓습니다. 

그리고는 그렇게 이야기를 합니다. 원래 오차가 많기 때문에 10도 정도의 차이는 의미가 없다고.......

최대한 맞추고 나타나는 오차는 어쩔 수 없지만. 맞추지도 않고 그냥 오차라고 치부.....


참고로 본인이 사용하는 Configure.h에서 온도 부분은 이렇게 되어 있다.


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

//=============================Thermal Settings  ============================

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

//

//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table

//

//// Temperature sensor settings:

// -2 is thermocouple with MAX6675 (only for sensor 0)

// -1 is thermocouple with AD595

// 0 is not used

// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)

// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)

// 3 is mendel-parts thermistor (4.7k pullup)

// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!

// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)

// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)

// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)

// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)

// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)

// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)

// 10 is 100k RS thermistor 198-961 (4.7k pullup)

// 60 is 100k Maker's Tool Works Kapton Bed Thermister

// 100 Dimo's Tthermal Sensor

//

//    1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k

//                          (but gives greater accuracy and more stable PID)

// 51 is 100k thermistor - EPCOS (1k pullup)

// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)

// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)


#define TEMP_SENSOR_0 100


 1번은 EPCOS회사의 NTC 100k 라는 소자를 지칭합니다. 자신이 사용하는 것이 http://www.epcos.com/inf/50/db/ntc_13/NTC_Leaded_disks_K164.pdf 이 소자라면 모를까...

그렇지 않다면 기본적으로 틀린 센서의 설정입니다. 

저의 경우에는 100이라고 만들어서 넣었습니다. 초보자가 힘들지 않느냐? 절대로 힘들지 않습니다.

 다만, 온도를 측정하는 장비가 있으면 누구나 만들 수 있습니다.


 우선 1로 설정하고, 필라멘트의 온도를 180도에 맞추라고 합니다.

아두이노가 180도라고 온도가 표시되면 이때, 온도 측정장치로 온도를 측정합니다. 

 센서 1번의 180도의 저항값는 


{       156*OVERSAMPLENR        ,       180     }, // thermistortables.h 에서 발취...


입니다.  저항은 156에 실측온도값을 기록합니다. 이런식으로 210도 230도를 반복해서 측정합니다.

이 온도를 측정하는 이유는 이 온도 말고는 딱히 정확하게 맞을 필요가 없어서 입니다. 다른 값을 해도 무방합니다.


이후에 마를린 소스코드에 보면 Python으로 된 온도 테이블 생성 프로그램이 들어있습니다. 


createTemperatureLookupMarlin.py 입니다. 


createTemperatureLookupMarlin.py rp=4700 t1=???:156 t2=???:??? t3=???:??? 

온도값이 먼저이고, 저항값을 뒤에 씁니다. 


이렇게 하면 테이블이 화면서 출력이 됩니다. 이를 thermistortables.h 파일에 아래와 같이 넣으면 됩니다.


#if (THERMISTORHEATER_0 == 100) || (THERMISTORHEATER_1 == 100) || (THERMISTORHEATER_2 == 100) || (THERMISTORBED == 100) 


const short temptable_100[][2] PROGMEM = {

   {1*OVERSAMPLENR, 500},

   {76*OVERSAMPLENR, 300},

   {87*OVERSAMPLENR, 290},

   {100*OVERSAMPLENR, 280},

   {114*OVERSAMPLENR, 270},

   {131*OVERSAMPLENR, 260},

   {152*OVERSAMPLENR, 250},

   {175*OVERSAMPLENR, 240},

   {202*OVERSAMPLENR, 230},

   {234*OVERSAMPLENR, 220},

   {271*OVERSAMPLENR, 210},

   {312*OVERSAMPLENR, 200},

   {359*OVERSAMPLENR, 190},

   {411*OVERSAMPLENR, 180},

   {467*OVERSAMPLENR, 170},

   {527*OVERSAMPLENR, 160},

   {590*OVERSAMPLENR, 150},

   {652*OVERSAMPLENR, 140},

   {713*OVERSAMPLENR, 130},

   {770*OVERSAMPLENR, 120},

   {822*OVERSAMPLENR, 110},

   {867*OVERSAMPLENR, 100},

   {905*OVERSAMPLENR, 90},

   {936*OVERSAMPLENR, 80},

   {961*OVERSAMPLENR, 70},

   {979*OVERSAMPLENR, 60},

   {993*OVERSAMPLENR, 50},

   {1003*OVERSAMPLENR, 40},

   {1010*OVERSAMPLENR, 30},

   {1015*OVERSAMPLENR, 20},

   {1018*OVERSAMPLENR, 10},

   {1020*OVERSAMPLENR, 0}

};

#endif


그리고, 100으로 지정하고 컴파일을 해서 다운로드를 하면 오차가 확줄어 있을 것입니다. 


자작이던, 양산품이던.....모두 이런 과정을 통해서 자신의 온도센서값을 보정해야만 출력 품질이 향상됩니다. 


안그러면, 실제온도가 160도인데 190도를 가르쳐셔....210로 PLA를 출력해야 하는 분도 본적이 있습니다.

이부분이 중요한 이유는 마를린은 Configure.h의 설정값보다 높아지면 자동으로 에러를 내면서 멈춥니다.


#define HEATER_0_MAXTEMP 275

#define HEATER_1_MAXTEMP 275

#define HEATER_2_MAXTEMP 275

#define BED_MAXTEMP 150


이부분을 수정해서 처리가 가능한데.....괜히 장비를 망가뜨릴 수 있습니다. 또한, 반대의 경우도 있습니다.


결론적으로.....


자신이 판매하는 제품의 온도센서의 값을 정확하게 넣지도 않는 제품을 판매한다는 것은 무성의하고 책임감이 없는 것입니다.

정확하지는 않아도 최소 10도 미만으로 충분히 보정이 가능합니다. 그것보다 크다면.....

이글을 통해서 수정해서 제품의 성능을 향상하기를 부탁드립니다.


PS. 추가사항...

온도를 측정하는 위치를 필라멘트가 나오는 곳으로 하시면 보다 효과적입니다. 

기구적인 부분이나 기타 여러가지의 요인에 의해서 나오는 모든 오차를 극복하는 방법이니깐요....

주로 사용하는 온도를 보정하는 이유는 나머지 값들은 그다지 잘 사용하지 않기 때문에 효율성을 극대화 하기 위함입니다.


'3d print' 카테고리의 다른 글

3d 프린터 출력물들입니다.  (0) 2015.04.17

2014년도에 3d프린터를 구입하여 이것저것 출력해 보고 있습니다.

그동안 출력한것들입니다.