2021年4月16日金曜日

石定盤 自作3Dプリンタ、サーミスタとMarlinのconfig

3Dプリンタを作ろう!

自作3Dプリンタのhotendにサーミスタを実装しようと思います.しかしサーミスタを使った経験がほとんどありません.電流制限用のPTCやNTCなら使いますけど、温度測定を目的とする行為はやったこと無いんです.温度測定なんか自作魂が盛り上がらないから.

熱電対じゃないの?という疑問も湧きますが、多くの3DPはサーミスタを使っていて、熱電対はマイナーなようです.Marlinは白金熱電対への対応はしています.

hotendの現物はこうなっています.サーミスタは丸の部分に装備されています.ヒーターの大電流チョッパに並行して温度センサの信号線が走るのってノイズ的に怪しい気がします.
中華通販の表記によるとサーミスタの素性は「NTC 100k B3950 ±1%」です.実測抵抗値は120kΩでした.なんだかなー
サーミスタとヒーターの接続はこのようになります.抵抗なので極性は不問でよろしかろう.

問題は、MarlinのConfiguration.hです.同ファイルにはたくさんのサーミスタの選択肢が定義されています.このどれにしたらいいんだ?

configファイルのサーミスタ設定の冒頭にはこのような警告が書かれています.
NORMAL IS 4.7kohm PULLUP!  1kohm pullup can be used on hotend sensor, using correct resistor and table
いまいちよく判りません.プリント基板には、hotend用としては1000Ω、heat bed用には4700Ωが使われているとでも言いたいのでしょうか?
Ramps1.4の回路図を参照しますと全部4700Ωがついてるようです.VCC=5Vです.

とても冗長ですが、Configuration.hに書かれた、Marlinが対応しているサーミスタ設定を全部コピペします.赤字は候補かなぁと思いますが、確証はありません.

ーーーー Configuration.hここからーーーー
Temperature sensors available:
   -5 : PT100 / PT1000 with MAX31865 (only for sensors 0-1)
   -3 : thermocouple with MAX31855 (only for sensors 0-1)
   -2 : thermocouple with MAX6675 (only for sensors 0-1)
   -4 : thermocouple with AD8495
   -1 : thermocouple with AD595
ここから上のはRamps1.4とは無関係です.MAXやADのチップを使ってないから.

    0 : not used

    1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
これは候補です.EPCOSというのはドイツの会社でTDKの傘下です.

  331 : (3.3V scaled thermistor 1 table for MEGA)
  332 : (3.3V scaled thermistor 1 table for DUE)
これは違うと思う.なぜなら、Ramps1.4の回路図によると5V pullupだから.

    2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
  202 : 200k thermistor - Copymaster 3D
この2つは違います.200kΩだから.

    3 : Mendel-parts thermistor (4.7k pullup)
Mendel社のhotendがあるらしい.あまり見かけないのでスルーしとく.

    4 : 10k thermistor !! do not use it for a hotend.
10kΩなので違います.

    5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan, J-Head, and E3D) (4.7k pullup)
104NT-4-R025H42G というのがサーミスタの品名、100kΩ@25℃ B4200 (仕様書)
B定数が違うのでスルー.

  501 : 100K Zonestar (Tronxy X3A) Thermistor
Tronxyというのは3DPメーカーの社名.スルーしとく.

  502 : 100K Zonestar Thermistor used by hot bed in Zonestar Prusa P802M
Prusa802は3DPの製品名.スルーしとく.

  512 : 100k RPW-Ultra hotend thermistor (4.7k pullup)
RPW-Ultraはマイナーなhotendの製品名.

    6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
1番よりも精度が落ちると書かれているのでスルー

    7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
   71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
Honeywellは社名、135-104LAG-J01は製品名.スルー.

    8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
0603チップなので違うのでスルー

    9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
AL03006-58.2K-97-G1は製品名.スルー

   10 : 100k RS thermistor 198-961 (4.7k pullup)
RS-Proという会社の、198-961という製品名.(仕様書
100kΩ B3960 なので目的の数値に近いので候補にしとく.

   11 : 100k beta 3950 1% thermistor (Used in Keenovo AC silicone mats and most Wanhao i3 machines) (4.7k pullup)
100kΩ B3950は目標数値にピッタリ.ただしsilicone matsはheat bedなのでスルー

   12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) 
チップ部品なのでスルー

   13 : 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE "”All In ONE"
100k B3950は数値は良い.Simple ONE、All In ONEはhotendの製品名.違うhotendなのでスルーしとく

   15 : 100k thermistor calibration for JGAurora A5 hotend
JGAuroraは社名、A5は製品名.スルー

   18 : ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327
200kΩなのでスルー

   20 : Pt100 with circuit in the Ultimainboard V2.x with 5v excitation (AVR)
   21 : Pt100 with circuit in the Ultimainboard V2.x with 3.3v excitation (STM32)
Ultimakerという社名の3DP部品屋があるらいし.スルー

   22 : 100k (hotend) with 4.7k pullup to 3.3V and 220R to analog input 
   23 : 100k (bed) with 4.7k pullup to 3.3v and 220R to analog input
3.3V pullupなので違うのでスルー

   30 : Kis3d Silicone heating mat 200W/300W with 6mm precision cast plate (EN AW 5083) NTC100K / B3950 (4.7k pullup)
100k,B3950は良いのだが、heat bedなのでスルー

  201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
違いそうなのでスルー

   60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
heat bedなのでスルー

   61 : 100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup
Vivedinoは社名、Formbotは製品名らしい.100k/B3950は良い.とりあえず候補

   66 : 4.7M High Temperature thermistor from Dyze Design
スルー

   67 : 450C thermistor from SliceEngineering
スルー

   70 : the 100K thermistor found in the bq Hephestos 2
スルー

   75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
heat bed、スルー

   99 : 100k thermistor with a 10K pull-up resistor
怪しいのでスルー

   51 : 100k thermistor - EPCOS (1k pullup)
   52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
   55 : 100k thermistor - ATC Semitec 104GT-2 (1k pullup)
1kΩ pullupなのでスルー

 1047 : Pt1000 with 4k7 pullup (E3D)
 1010 : Pt1000 with 1k pullup (non standard)
  147 : Pt100 with 4k7 pullup
  110 : Pt100 with 1k pullup (non standard)
Pt1000/Pt100は白金熱電対らしい、スルー

 1000 : Custom - Specify parameters in Configuration_adv.h     Use these for Testing or Development purposes. NEVER for production machine.
カスタム.スルー

  998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
  999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
ダミー、スルー
ーーーー Configuration.hここまで ーーーー

Configuration.hを読むのはこれくらいにして、1,2,3,,,61,1000などのサーミスタ番号の定義はsource codeの何処にあるのでしょうか?

それはthermistors.hにあります.下記のようにkΩとBがコメントされています.最初からこれを読めばよかった.
100kΩ B3950 4700pullupを赤字にします.
SPECが合う候補は3つです.11,60,61
しかしさらに、11と60はheat bedなので除外すると61だけしか残らない.

ーーーー thermistor.hここから ーーーー
#if ANY_THERMISTOR_IS(1) // beta25 = 4092 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "EPCOS"
  #include "thermistor_1.h"
#endif
#if ANY_THERMISTOR_IS(2) // 4338 K, R25 = 200 kOhm, Pull-up = 4.7 kOhm, "ATC Semitec 204GT-2"
  #include "thermistor_2.h"
#endif
#if ANY_THERMISTOR_IS(3) // beta25 = 4120 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Mendel-parts"
  #include "thermistor_3.h"
#endif
#if ANY_THERMISTOR_IS(4) // beta25 = 3950 K, R25 = 10 kOhm, Pull-up = 4.7 kOhm, "Generic"
  #include "thermistor_4.h"
#endif
#if ANY_THERMISTOR_IS(5) // beta25 = 4267 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "ParCan, ATC 104GT-2"
  #include "thermistor_5.h"
#endif
#if ANY_THERMISTOR_IS(501) // 100K Zonestar thermistor
  #include "thermistor_501.h"
#endif
#if ANY_THERMISTOR_IS(502) // Unknown thermistor used by the Zonestar Průša P802M hot bed
  #include "thermistor_502.h"
#endif
#if ANY_THERMISTOR_IS(512) // 100k thermistor in RPW-Ultra hotend, Pull-up = 4.7 kOhm, "unknown model"
  #include "thermistor_512.h"
#endif
#if ANY_THERMISTOR_IS(6) // beta25 = 4092 K, R25 = 100 kOhm, Pull-up = 8.2 kOhm, "EPCOS ?"
  #include "thermistor_6.h"
#endif
#if ANY_THERMISTOR_IS(7) // beta25 = 3974 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Honeywell 135-104LAG-J01"
  #include "thermistor_7.h"
#endif
#if ANY_THERMISTOR_IS(71) // beta25 = 3974 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Honeywell 135-104LAF-J01"
  #include "thermistor_71.h"
#endif
#if ANY_THERMISTOR_IS(8) // beta25 = 3950 K, R25 = 100 kOhm, Pull-up = 10 kOhm, "Vishay E3104FHT"
  #include "thermistor_8.h"
#endif
#if ANY_THERMISTOR_IS(9) // beta25 = 3960 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "GE Sensing AL03006-58.2K-97-G1"
  #include "thermistor_9.h"
#endif
#if ANY_THERMISTOR_IS(10) // beta25 = 3960 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "RS 198-961"
  #include "thermistor_10.h"
#endif
#if ANY_THERMISTOR_IS(11) // beta25 = 3950 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "QU-BD silicone bed, QWG-104F-3950"
  #include "thermistor_11.h"
#endif
#if ANY_THERMISTOR_IS(13) // beta25 = 4100 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Hisens"
  #include "thermistor_13.h"
#endif
#if ANY_THERMISTOR_IS(15) // JGAurora A5 thermistor calibration
  #include "thermistor_15.h"
#endif
#if ANY_THERMISTOR_IS(18) // ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327
  #include "thermistor_18.h"
#endif
#if ANY_THERMISTOR_IS(20) // Pt100 with INA826 amp on Ultimaker v2.0 electronics
  #include "thermistor_20.h"
#endif
#if ANY_THERMISTOR_IS(21) // Pt100 with INA826 amp with 3.3v excitation based on "Pt100 with INA826 amp on Ultimaker v2.0 electronics"
  #include "thermistor_21.h"
#endif
#if ANY_THERMISTOR_IS(22) // Thermistor in a Rostock 301 hot end, calibrated with a multimeter
  #include "thermistor_22.h"
#endif
#if ANY_THERMISTOR_IS(23) // By AluOne #12622. Formerly 22 above. May need calibration/checking.
  #include "thermistor_23.h"
#endif
#if ANY_THERMISTOR_IS(30) // Kis3d Silicone mat 24V 200W/300W with 6mm Precision cast plate (EN AW 5083)
  #include "thermistor_30.h"
#endif
#if ANY_THERMISTOR_IS(51) // beta25 = 4092 K, R25 = 100 kOhm, Pull-up = 1 kOhm, "EPCOS"
  #include "thermistor_51.h"
#endif
#if ANY_THERMISTOR_IS(52) // beta25 = 4338 K, R25 = 200 kOhm, Pull-up = 1 kOhm, "ATC Semitec 204GT-2"
  #include "thermistor_52.h"
#endif
#if ANY_THERMISTOR_IS(55) // beta25 = 4267 K, R25 = 100 kOhm, Pull-up = 1 kOhm, "ATC Semitec 104GT-2 (Used on ParCan)"
  #include "thermistor_55.h"
#endif
#if ANY_THERMISTOR_IS(60) // beta25 = 3950 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Maker's Tool Works Kapton Bed"
  #include "thermistor_60.h"
#endif
#if ANY_THERMISTOR_IS(61) // beta25 = 3950 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Formbot 350°C Thermistor"
  #include "thermistor_61.h"
#endif
#if ANY_THERMISTOR_IS(66) // beta25 = 4500 K, R25 = 2.5 MOhm, Pull-up = 4.7 kOhm, "DyzeDesign 500 °C Thermistor"
  #include "thermistor_66.h"
#endif
#if ANY_THERMISTOR_IS(67) // R25 = 500 KOhm, beta25 = 3800 K, 4.7 kOhm pull-up, SliceEngineering 450 °C Thermistor
  #include "thermistor_67.h"
#endif
#if ANY_THERMISTOR_IS(12) // beta25 = 4700 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Personal calibration for Makibox hot bed"
  #include "thermistor_12.h"
#endif
#if ANY_THERMISTOR_IS(70) // beta25 = 4100 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Hephestos 2, bqh2 stock thermistor"
  #include "thermistor_70.h"
#endif
#if ANY_THERMISTOR_IS(75) // beta25 = 4100 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "MGB18-104F39050L32 thermistor"
  #include "thermistor_75.h"
#endif
#if ANY_THERMISTOR_IS(99) // 100k bed thermistor with a 10K pull-up resistor (on some Wanhao i3 models)
  #include "thermistor_99.h"
#endif
#if ANY_THERMISTOR_IS(110) // Pt100 with 1k0 pullup
  #include "thermistor_110.h"
#endif
#if ANY_THERMISTOR_IS(147) // Pt100 with 4k7 pullup
  #include "thermistor_147.h"
#endif
#if ANY_THERMISTOR_IS(201) // Pt100 with LMV324 Overlord
  #include "thermistor_201.h"
#endif
#if ANY_THERMISTOR_IS(202) // 200K thermistor in Copymaker3D hotend
  #include "thermistor_202.h"
#endif
#if ANY_THERMISTOR_IS(331) // Like table 1, but with 3V3 as input voltage for MEGA
  #include "thermistor_331.h"
#endif
#if ANY_THERMISTOR_IS(332) // Like table 1, but with 3V3 as input voltage for DUE
  #include "thermistor_332.h"
#endif
#if ANY_THERMISTOR_IS(666) // beta25 = UNK, R25 = 200K, Pull-up = 10 kOhm, "Unidentified 200K NTC thermistor (Einstart S)"
  #include "thermistor_666.h"
#endif
#if ANY_THERMISTOR_IS(1010) // Pt1000 with 1k0 pullup
  #include "thermistor_1010.h"
#endif
#if ANY_THERMISTOR_IS(1047) // Pt1000 with 4k7 pullup
  #include "thermistor_1047.h"
#endif
#if ANY_THERMISTOR_IS(998) // User-defined table 1
  #include "thermistor_998.h"
#endif
#if ANY_THERMISTOR_IS(999) // User-defined table 2
  #include "thermistor_999.h"
#endif
#if ANY_THERMISTOR_IS(1000) // Custom
  const temp_entry_t temptable_1000[] PROGMEM = { { 0, 0 } };
#endif
ーーーー thermistor.hここまで ーーーー

61番はファイルをincludeしています.  #include "thermistor_61.h"
このファイルはどんな中身なのでしょうか?
下記をみると、mV→温度の換算表です.意外と古めかしい実装かと思いました.
61番でビルドしてみますけど、実態と合うものなのか、不安がよぎります.

ーーーー thermistor_61.hここから ----
const temp_entry_t temptable_61[] PROGMEM = {
  { OV(  35.10), 270 },
  { OV(  38.44), 265 },
  { OV(  40.89), 260 },
  { OV(  44.19), 255 },
  { OV(  47.83), 250 },
  { OV(  51.80), 245 },
  { OV(  56.20), 240 },
  { OV(  61.00), 235 },
  { OV(  66.30), 230 },
  { OV(  72.11), 225 },
  { OV(  78.51), 220 },
       中略
  { OV( 954.26),  35 },
  { OV( 966.59),  30 },
  { OV( 977.08),  25 },
  { OV( 985.92),  20 },
  { OV( 993.39),  15 },
  { OV( 999.42),  10 },
  { OV(1004.43),   5 },
  { OV(1008.51),   0 }
};
ーーーー thermistor_61.hここまで ----

多くの人はサーミスタ設定として1番を使うと思います.
1番と61番でtableにどのくらいの違いがあるか?
hotendの稼働域である200度付近を抜き出しますと、誤差は2%未満ぐらいでしょうか.このくらいなら1番を使っても大丈夫なかんじです.

1番
  { OV(  78), 220 },
  { OV(  84), 215 },
  { OV(  92), 210 },
  { OV( 100), 205 },
  { OV( 109), 200 },
  { OV( 120), 195 },
  { OV( 131), 190 },

61番
  { OV(  78.51), 220 },
  { OV(  85.57), 215 },
  { OV(  93.34), 210 },
  { OV( 101.91), 205 },
  { OV( 111.34), 200 },
  { OV( 121.73), 195 },
  { OV( 133.17), 190 },

61番で、室内温度計22.9℃、Marlin表示温度21.7℃が出ました.でも高温の動作検証はやりようがない感じ.


かしこ



【おしらせ】
当ブログで書き散らかした3DPの投稿をまとめたノウハウ集を作りました.ダウンロード販売しています.¥660です.
pdfをダウンロードしていただけます.全36ページ.

3DP印刷部品のstlファイルを無料ダウンロードできます.
Marlinのvscode project folder詰め合わせも無料ダウンロードできます.

まずは無料立ち読み版をご覧になってはいかがでしょうか.(pdf)

よろしくでーす.

0 件のコメント:

コメントを投稿