chiark / gitweb /
Update Marlin/thermistortables.h
[marlin.git] / Marlin / thermistortables.h
1 #ifndef THERMISTORTABLES_H_
2 #define THERMISTORTABLES_H_
3
4 #include "Marlin.h"
5
6 #define OVERSAMPLENR 16
7
8 #if (THERMISTORHEATER_0 == 1) || (THERMISTORHEATER_1 == 1)  || (THERMISTORHEATER_2 == 1) || (THERMISTORBED == 1) //100k bed thermistor
9
10 const short temptable_1[][2] PROGMEM = {
11 {       23*OVERSAMPLENR ,       300     },
12 {       25*OVERSAMPLENR ,       295     },
13 {       27*OVERSAMPLENR ,       290     },
14 {       28*OVERSAMPLENR ,       285     },
15 {       31*OVERSAMPLENR ,       280     },
16 {       33*OVERSAMPLENR ,       275     },
17 {       35*OVERSAMPLENR ,       270     },
18 {       38*OVERSAMPLENR ,       265     },
19 {       41*OVERSAMPLENR ,       260     },
20 {       44*OVERSAMPLENR ,       255     },
21 {       48*OVERSAMPLENR ,       250     },
22 {       52*OVERSAMPLENR ,       245     },
23 {       56*OVERSAMPLENR ,       240     },
24 {       61*OVERSAMPLENR ,       235     },
25 {       66*OVERSAMPLENR ,       230     },
26 {       71*OVERSAMPLENR ,       225     },
27 {       78*OVERSAMPLENR ,       220     },
28 {       84*OVERSAMPLENR ,       215     },
29 {       92*OVERSAMPLENR ,       210     },
30 {       100*OVERSAMPLENR        ,       205     },
31 {       109*OVERSAMPLENR        ,       200     },
32 {       120*OVERSAMPLENR        ,       195     },
33 {       131*OVERSAMPLENR        ,       190     },
34 {       143*OVERSAMPLENR        ,       185     },
35 {       156*OVERSAMPLENR        ,       180     },
36 {       171*OVERSAMPLENR        ,       175     },
37 {       187*OVERSAMPLENR        ,       170     },
38 {       205*OVERSAMPLENR        ,       165     },
39 {       224*OVERSAMPLENR        ,       160     },
40 {       245*OVERSAMPLENR        ,       155     },
41 {       268*OVERSAMPLENR        ,       150     },
42 {       293*OVERSAMPLENR        ,       145     },
43 {       320*OVERSAMPLENR        ,       140     },
44 {       348*OVERSAMPLENR        ,       135     },
45 {       379*OVERSAMPLENR        ,       130     },
46 {       411*OVERSAMPLENR        ,       125     },
47 {       445*OVERSAMPLENR        ,       120     },
48 {       480*OVERSAMPLENR        ,       115     },
49 {       516*OVERSAMPLENR        ,       110     },
50 {       553*OVERSAMPLENR        ,       105     },
51 {       591*OVERSAMPLENR        ,       100     },
52 {       628*OVERSAMPLENR        ,       95      },
53 {       665*OVERSAMPLENR        ,       90      },
54 {       702*OVERSAMPLENR        ,       85      },
55 {       737*OVERSAMPLENR        ,       80      },
56 {       770*OVERSAMPLENR        ,       75      },
57 {       801*OVERSAMPLENR        ,       70      },
58 {       830*OVERSAMPLENR        ,       65      },
59 {       857*OVERSAMPLENR        ,       60      },
60 {       881*OVERSAMPLENR        ,       55      },
61 {       903*OVERSAMPLENR        ,       50      },
62 {       922*OVERSAMPLENR        ,       45      },
63 {       939*OVERSAMPLENR        ,       40      },
64 {       954*OVERSAMPLENR        ,       35      },
65 {       966*OVERSAMPLENR        ,       30      },
66 {       977*OVERSAMPLENR        ,       25      },
67 {       985*OVERSAMPLENR        ,       20      },
68 {       993*OVERSAMPLENR        ,       15      },
69 {       999*OVERSAMPLENR        ,       10      },
70 {       1004*OVERSAMPLENR       ,       5       },
71 {       1008*OVERSAMPLENR       ,       0       } //safety
72 };
73 #endif
74 #if (THERMISTORHEATER_0 == 2) || (THERMISTORHEATER_1 == 2) || (THERMISTORHEATER_2 == 2) || (THERMISTORBED == 2) //200k bed thermistor
75    const short temptable_2[][2] PROGMEM = {
76 //200k ATC Semitec 204GT-2
77 //Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
78 // Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance
79    {30*OVERSAMPLENR, 300},
80    {34*OVERSAMPLENR, 290},
81    {39*OVERSAMPLENR, 280},
82    {46*OVERSAMPLENR, 270},
83    {53*OVERSAMPLENR, 260},
84    {63*OVERSAMPLENR, 250},
85    {74*OVERSAMPLENR, 240},
86    {87*OVERSAMPLENR, 230},
87    {104*OVERSAMPLENR, 220},
88    {124*OVERSAMPLENR, 210},
89    {148*OVERSAMPLENR, 200},
90    {176*OVERSAMPLENR, 190},
91    {211*OVERSAMPLENR, 180},
92    {252*OVERSAMPLENR, 170},
93    {301*OVERSAMPLENR, 160},
94    {357*OVERSAMPLENR, 150},
95    {420*OVERSAMPLENR, 140},
96    {489*OVERSAMPLENR, 130},
97    {562*OVERSAMPLENR, 120},
98    {636*OVERSAMPLENR, 110},
99    {708*OVERSAMPLENR, 100},
100    {775*OVERSAMPLENR, 90},
101    {835*OVERSAMPLENR, 80},
102    {884*OVERSAMPLENR, 70},
103    {924*OVERSAMPLENR, 60},
104    {955*OVERSAMPLENR, 50},
105    {977*OVERSAMPLENR, 40},
106    {993*OVERSAMPLENR, 30},
107    {1004*OVERSAMPLENR, 20},
108    {1012*OVERSAMPLENR, 10},
109    {1016*OVERSAMPLENR, 0},
110 };
111
112 #endif
113 #if (THERMISTORHEATER_0 == 3) || (THERMISTORHEATER_1 == 3) || (THERMISTORHEATER_2 == 3) || (THERMISTORBED == 3) //mendel-parts
114 const short temptable_3[][2] PROGMEM = {
115                 {1*OVERSAMPLENR,864},
116                 {21*OVERSAMPLENR,300},
117                 {25*OVERSAMPLENR,290},
118                 {29*OVERSAMPLENR,280},
119                 {33*OVERSAMPLENR,270},
120                 {39*OVERSAMPLENR,260},
121                 {46*OVERSAMPLENR,250},
122                 {54*OVERSAMPLENR,240},
123                 {64*OVERSAMPLENR,230},
124                 {75*OVERSAMPLENR,220},
125                 {90*OVERSAMPLENR,210},
126                 {107*OVERSAMPLENR,200},
127                 {128*OVERSAMPLENR,190},
128                 {154*OVERSAMPLENR,180},
129                 {184*OVERSAMPLENR,170},
130                 {221*OVERSAMPLENR,160},
131                 {265*OVERSAMPLENR,150},
132                 {316*OVERSAMPLENR,140},
133                 {375*OVERSAMPLENR,130},
134                 {441*OVERSAMPLENR,120},
135                 {513*OVERSAMPLENR,110},
136                 {588*OVERSAMPLENR,100},
137                 {734*OVERSAMPLENR,80},
138                 {856*OVERSAMPLENR,60},
139                 {938*OVERSAMPLENR,40},
140                 {986*OVERSAMPLENR,20},
141                 {1008*OVERSAMPLENR,0},
142                 {1018*OVERSAMPLENR,-20}
143         };
144
145 #endif
146 #if (THERMISTORHEATER_0 == 4) || (THERMISTORHEATER_1 == 4) || (THERMISTORHEATER_2 == 4) || (THERMISTORBED == 4) //10k thermistor
147 const short temptable_4[][2] PROGMEM = {
148    {1*OVERSAMPLENR, 430},
149    {54*OVERSAMPLENR, 137},
150    {107*OVERSAMPLENR, 107},
151    {160*OVERSAMPLENR, 91},
152    {213*OVERSAMPLENR, 80},
153    {266*OVERSAMPLENR, 71},
154    {319*OVERSAMPLENR, 64},
155    {372*OVERSAMPLENR, 57},
156    {425*OVERSAMPLENR, 51},
157    {478*OVERSAMPLENR, 46},
158    {531*OVERSAMPLENR, 41},
159    {584*OVERSAMPLENR, 35},
160    {637*OVERSAMPLENR, 30},
161    {690*OVERSAMPLENR, 25},
162    {743*OVERSAMPLENR, 20},
163    {796*OVERSAMPLENR, 14},
164    {849*OVERSAMPLENR, 7},
165    {902*OVERSAMPLENR, 0},
166    {955*OVERSAMPLENR, -11},
167    {1008*OVERSAMPLENR, -35}
168 };
169 #endif
170
171 #if (THERMISTORHEATER_0 == 5) || (THERMISTORHEATER_1 == 5) || (THERMISTORHEATER_2 == 5) || (THERMISTORBED == 5) //100k ParCan thermistor (104GT-2)
172 const short temptable_5[][2] PROGMEM = {
173 // ATC Semitec 104GT-2 (Used in ParCan)
174 // Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
175 // Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance
176    {17*OVERSAMPLENR, 300},
177    {20*OVERSAMPLENR, 290},
178    {23*OVERSAMPLENR, 280},
179    {27*OVERSAMPLENR, 270},
180    {31*OVERSAMPLENR, 260},
181    {37*OVERSAMPLENR, 250},
182    {43*OVERSAMPLENR, 240},
183    {51*OVERSAMPLENR, 230},
184    {61*OVERSAMPLENR, 220},
185    {73*OVERSAMPLENR, 210},
186    {87*OVERSAMPLENR, 200},
187    {106*OVERSAMPLENR, 190},
188    {128*OVERSAMPLENR, 180},
189    {155*OVERSAMPLENR, 170},
190    {189*OVERSAMPLENR, 160},
191    {230*OVERSAMPLENR, 150},
192    {278*OVERSAMPLENR, 140},
193    {336*OVERSAMPLENR, 130},
194    {402*OVERSAMPLENR, 120},
195    {476*OVERSAMPLENR, 110},
196    {554*OVERSAMPLENR, 100},
197    {635*OVERSAMPLENR, 90},
198    {713*OVERSAMPLENR, 80},
199    {784*OVERSAMPLENR, 70},
200    {846*OVERSAMPLENR, 60},
201    {897*OVERSAMPLENR, 50},
202    {937*OVERSAMPLENR, 40},
203    {966*OVERSAMPLENR, 30},
204    {986*OVERSAMPLENR, 20},
205    {1000*OVERSAMPLENR, 10},
206    {1010*OVERSAMPLENR, 0}
207 };
208 #endif
209
210 #if (THERMISTORHEATER_0 == 6) || (THERMISTORHEATER_1 == 6) || (THERMISTORHEATER_2 == 6) || (THERMISTORBED == 6) // 100k Epcos thermistor
211 const short temptable_6[][2] PROGMEM = {
212    {28*OVERSAMPLENR, 250},
213    {31*OVERSAMPLENR, 245},
214    {35*OVERSAMPLENR, 240},
215    {39*OVERSAMPLENR, 235},
216    {42*OVERSAMPLENR, 230},
217    {44*OVERSAMPLENR, 225},
218    {49*OVERSAMPLENR, 220},
219    {53*OVERSAMPLENR, 215},
220    {62*OVERSAMPLENR, 210},
221    {73*OVERSAMPLENR, 205},
222    {72*OVERSAMPLENR, 200},
223    {94*OVERSAMPLENR, 190},
224    {102*OVERSAMPLENR, 185},
225    {116*OVERSAMPLENR, 170},
226    {143*OVERSAMPLENR, 160},
227    {183*OVERSAMPLENR, 150},
228    {223*OVERSAMPLENR, 140},
229    {270*OVERSAMPLENR, 130},
230    {318*OVERSAMPLENR, 120},
231    {383*OVERSAMPLENR, 110},
232    {413*OVERSAMPLENR, 105},
233    {439*OVERSAMPLENR, 100},
234    {484*OVERSAMPLENR, 95},
235    {513*OVERSAMPLENR, 90},
236    {607*OVERSAMPLENR, 80},
237    {664*OVERSAMPLENR, 70},
238    {781*OVERSAMPLENR, 60},
239    {810*OVERSAMPLENR, 55},
240    {849*OVERSAMPLENR, 50},
241    {914*OVERSAMPLENR, 45},
242    {914*OVERSAMPLENR, 40},
243    {935*OVERSAMPLENR, 35},
244    {954*OVERSAMPLENR, 30},
245    {970*OVERSAMPLENR, 25},
246    {978*OVERSAMPLENR, 22},
247    {1008*OVERSAMPLENR, 3}
248 };
249 #endif
250
251 #if (THERMISTORHEATER_0 == 7) || (THERMISTORHEATER_1 == 7) || (THERMISTORHEATER_2 == 7) || (THERMISTORBED == 7) // 100k Honeywell 135-104LAG-J01
252 const short temptable_7[][2] PROGMEM = {
253    {46*OVERSAMPLENR, 270},
254    {50*OVERSAMPLENR, 265},
255    {54*OVERSAMPLENR, 260},
256    {58*OVERSAMPLENR, 255},
257    {62*OVERSAMPLENR, 250},
258    {67*OVERSAMPLENR, 245},
259    {72*OVERSAMPLENR, 240},
260    {79*OVERSAMPLENR, 235},
261    {85*OVERSAMPLENR, 230},
262    {91*OVERSAMPLENR, 225},
263    {99*OVERSAMPLENR, 220},
264    {107*OVERSAMPLENR, 215},
265    {116*OVERSAMPLENR, 210},
266    {126*OVERSAMPLENR, 205},
267    {136*OVERSAMPLENR, 200},
268    {149*OVERSAMPLENR, 195},
269    {160*OVERSAMPLENR, 190},
270    {175*OVERSAMPLENR, 185},
271    {191*OVERSAMPLENR, 180},
272    {209*OVERSAMPLENR, 175},
273    {224*OVERSAMPLENR, 170},
274    {246*OVERSAMPLENR, 165},
275    {267*OVERSAMPLENR, 160},
276    {293*OVERSAMPLENR, 155},
277    {316*OVERSAMPLENR, 150},
278    {340*OVERSAMPLENR, 145},
279    {364*OVERSAMPLENR, 140},
280    {396*OVERSAMPLENR, 135},
281    {425*OVERSAMPLENR, 130},
282    {460*OVERSAMPLENR, 125},
283    {489*OVERSAMPLENR, 120},
284    {526*OVERSAMPLENR, 115},
285    {558*OVERSAMPLENR, 110},
286    {591*OVERSAMPLENR, 105},
287    {628*OVERSAMPLENR, 100},
288    {660*OVERSAMPLENR, 95},
289    {696*OVERSAMPLENR, 90},
290    {733*OVERSAMPLENR, 85},
291    {761*OVERSAMPLENR, 80},
292    {794*OVERSAMPLENR, 75},
293    {819*OVERSAMPLENR, 70},
294    {847*OVERSAMPLENR, 65},
295    {870*OVERSAMPLENR, 60},
296    {892*OVERSAMPLENR, 55},
297    {911*OVERSAMPLENR, 50},
298    {929*OVERSAMPLENR, 45},
299    {944*OVERSAMPLENR, 40},
300    {959*OVERSAMPLENR, 35},
301    {971*OVERSAMPLENR, 30},
302    {981*OVERSAMPLENR, 25},
303    {989*OVERSAMPLENR, 20},
304    {994*OVERSAMPLENR, 15},
305    {1001*OVERSAMPLENR, 10},
306    {1005*OVERSAMPLENR, 5}
307 };
308 #endif
309
310 #if (THERMISTORHEATER_0 == 51) || (THERMISTORHEATER_1 == 51) || (THERMISTORHEATER_2 == 51) || (THERMISTORBED == 51) 
311 // 100k EPCOS (WITH 1kohm RESISTOR FOR PULLUP, R9 ON SANGUINOLOLU! NOT FOR 4.7kohm PULLUP! THIS IS NOT NORMAL!)
312 // Verified by linagee.
313 // Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
314 // Advantage: Twice the resolution and better linearity from 150C to 200C
315 const short temptable_51[][2] PROGMEM = {
316    {190*OVERSAMPLENR, 250},
317    {203*OVERSAMPLENR, 245},
318    {217*OVERSAMPLENR, 240},
319    {232*OVERSAMPLENR, 235},
320    {248*OVERSAMPLENR, 230},
321    {265*OVERSAMPLENR, 225},
322    {283*OVERSAMPLENR, 220},
323    {302*OVERSAMPLENR, 215},
324    {322*OVERSAMPLENR, 210},
325    {344*OVERSAMPLENR, 205},
326    {366*OVERSAMPLENR, 200},
327    {390*OVERSAMPLENR, 195},
328    {415*OVERSAMPLENR, 190},
329    {440*OVERSAMPLENR, 185},
330    {467*OVERSAMPLENR, 180},
331    {494*OVERSAMPLENR, 175},
332    {522*OVERSAMPLENR, 170},
333    {551*OVERSAMPLENR, 165},
334    {580*OVERSAMPLENR, 160},
335    {609*OVERSAMPLENR, 155},
336    {638*OVERSAMPLENR, 150},
337    {666*OVERSAMPLENR, 145},
338    {695*OVERSAMPLENR, 140},
339    {722*OVERSAMPLENR, 135},
340    {749*OVERSAMPLENR, 130},
341    {775*OVERSAMPLENR, 125},
342    {800*OVERSAMPLENR, 120},
343    {823*OVERSAMPLENR, 115},
344    {845*OVERSAMPLENR, 110},
345    {865*OVERSAMPLENR, 105},
346    {884*OVERSAMPLENR, 100},
347    {901*OVERSAMPLENR, 95},
348    {917*OVERSAMPLENR, 90},
349    {932*OVERSAMPLENR, 85},
350    {944*OVERSAMPLENR, 80},
351    {956*OVERSAMPLENR, 75},
352    {966*OVERSAMPLENR, 70},
353    {975*OVERSAMPLENR, 65},
354    {982*OVERSAMPLENR, 60},
355    {989*OVERSAMPLENR, 55},
356    {995*OVERSAMPLENR, 50},
357    {1000*OVERSAMPLENR, 45},
358    {1004*OVERSAMPLENR, 40},
359    {1007*OVERSAMPLENR, 35},
360    {1010*OVERSAMPLENR, 30},
361    {1013*OVERSAMPLENR, 25},
362    {1015*OVERSAMPLENR, 20},
363    {1017*OVERSAMPLENR, 15},
364    {1018*OVERSAMPLENR, 10},
365    {1019*OVERSAMPLENR, 5},
366    {1020*OVERSAMPLENR, 0},
367    {1021*OVERSAMPLENR, -5}
368 };
369 #endif
370
371 #if (THERMISTORHEATER_0 == 52) || (THERMISTORHEATER_1 == 52) || (THERMISTORHEATER_2 == 52) || (THERMISTORBED == 52) 
372 // 200k ATC Semitec 204GT-2 (WITH 1kohm RESISTOR FOR PULLUP, R9 ON SANGUINOLOLU! NOT FOR 4.7kohm PULLUP! THIS IS NOT NORMAL!)
373 // Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
374 // Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
375 // Advantage: More resolution and better linearity from 150C to 200C
376 const short temptable_52[][2] PROGMEM = {
377    {125*OVERSAMPLENR, 300},
378    {142*OVERSAMPLENR, 290},
379    {162*OVERSAMPLENR, 280},
380    {185*OVERSAMPLENR, 270},
381    {211*OVERSAMPLENR, 260},
382    {240*OVERSAMPLENR, 250},
383    {274*OVERSAMPLENR, 240},
384    {312*OVERSAMPLENR, 230},
385    {355*OVERSAMPLENR, 220},
386    {401*OVERSAMPLENR, 210},
387    {452*OVERSAMPLENR, 200},
388    {506*OVERSAMPLENR, 190},
389    {563*OVERSAMPLENR, 180},
390    {620*OVERSAMPLENR, 170},
391    {677*OVERSAMPLENR, 160},
392    {732*OVERSAMPLENR, 150},
393    {783*OVERSAMPLENR, 140},
394    {830*OVERSAMPLENR, 130},
395    {871*OVERSAMPLENR, 120},
396    {906*OVERSAMPLENR, 110},
397    {935*OVERSAMPLENR, 100},
398    {958*OVERSAMPLENR, 90},
399    {976*OVERSAMPLENR, 80},
400    {990*OVERSAMPLENR, 70},
401    {1000*OVERSAMPLENR, 60},
402    {1008*OVERSAMPLENR, 50},
403    {1013*OVERSAMPLENR, 40},
404    {1017*OVERSAMPLENR, 30},
405    {1019*OVERSAMPLENR, 20},
406    {1021*OVERSAMPLENR, 10},
407    {1022*OVERSAMPLENR, 0}
408 };
409 #endif
410
411
412
413 #define _TT_NAME(_N) temptable_ ## _N
414 #define TT_NAME(_N) _TT_NAME(_N)
415
416 #ifdef THERMISTORHEATER_0
417   #define heater_0_temptable TT_NAME(THERMISTORHEATER_0)
418   #define heater_0_temptable_len (sizeof(heater_0_temptable)/sizeof(*heater_0_temptable))
419 #else
420 #ifdef HEATER_0_USES_THERMISTOR
421   #error No heater 0 thermistor table specified
422 #else  // HEATER_0_USES_THERMISTOR
423   #define heater_0_temptable 0
424   #define heater_0_temptable_len 0
425 #endif // HEATER_0_USES_THERMISTOR
426 #endif
427
428 #ifdef THERMISTORHEATER_1
429   #define heater_1_temptable TT_NAME(THERMISTORHEATER_1)
430   #define heater_1_temptable_len (sizeof(heater_1_temptable)/sizeof(*heater_1_temptable))
431 #else
432 #ifdef HEATER_1_USES_THERMISTOR
433   #error No heater 1 thermistor table specified
434 #else  // HEATER_1_USES_THERMISTOR
435   #define heater_1_temptable 0
436   #define heater_1_temptable_len 0
437 #endif // HEATER_1_USES_THERMISTOR
438 #endif
439
440 #ifdef THERMISTORHEATER_2
441   #define heater_2_temptable TT_NAME(THERMISTORHEATER_2)
442   #define heater_2_temptable_len (sizeof(heater_2_temptable)/sizeof(*heater_2_temptable))
443 #else
444 #ifdef HEATER_2_USES_THERMISTOR
445   #error No heater 2 thermistor table specified
446 #else  // HEATER_2_USES_THERMISTOR
447   #define heater_2_temptable 0
448   #define heater_2_temptable_len 0
449 #endif // HEATER_2_USES_THERMISTOR
450 #endif
451
452 #ifdef THERMISTORBED
453   #define bedtemptable TT_NAME(THERMISTORBED)
454   #define bedtemptable_len (sizeof(bedtemptable)/sizeof(*bedtemptable))
455 #else
456 #ifdef BED_USES_THERMISTOR
457   #error No bed thermistor table specified
458 #endif // BED_USES_THERMISTOR
459 #endif
460
461 #endif //THERMISTORTABLES_H_
462