reprap heated bedの温度エラーが発生する
私の環境の3Dプリンタは自作のため、エクストルーダの温度計は熱電対、ヒートベッドはサーミスタを使用しています。ですが、なぜかこの組み合わせだと、Printrun起動時にエラーが発生します。
Error:Heated bed switched off. MAXTEMP triggered !!
最初は半田不良等が原因かと思いましたが、テスタで確認しても
問題なさそうだし、???
ググってると、同じような方がいました。
Marlinでは熱電対、サーミスタを組み合わせて使えないみたいです。なんでやねん。
https://ultimaker.com/en/community/view/11056-thermistor-and-thermocouple-wont-work-together
ということで手探り状態ですが、出力されるエラーメッセージから
Marlin firmwareのソースをgrepしてみました。
$ grep "MAXTEMP triggered" * language.h:#define MSG_SWITCHED_OFF_MAX " switched off. MAXTEMP triggered !!"
それで
$ grep MSG_SWITCHED_OFF_MAX * language.h:#define MSG_SWITCHED_OFF_MAX " switched off. MAXTEMP triggered !!" language.h:#define MSG_MAXTEMP_EXTRUDER_OFF ": Extruder" MSG_SWITCHED_OFF_MAX language.h:#define MSG_MAXTEMP_BED_OFF "Heated bed" MSG_SWITCHED_OFF_MAX
さらに
$ grep -R MSG_MAXTEMP_BED_OFF * language.h:#define MSG_MAXTEMP_BED_OFF "Heated bed" MSG_SWITCHED_OFF_MAX temperature.cpp: SERIAL_ERRORLNPGM(MSG_MAXTEMP_BED_OFF);
で、temperature.cppを眺めるとbed_max_temp_error関数で呼ばれていました。
さらにbed_max_temp_error関数はISR関数の以下の箇所でした。
1604 /* No bed MINTEMP error? */ 1605 #if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0) 1606 if (current_temperature_bed_raw MAXTEST bed_maxttemp_raw) { 1607 target_temperature_bed = 0; 1608 bed_max_temp_error(); 1609 } 1610 #endif 1611 } // temp_count >= OVERSAMPLENR
SERIAL_ECHOマクロを埋め込み、変数の値を確認したところ、以下のとおりでした。
current_temperature_bed_raw = 15665
bed_maxttemp_raw = 0
なぜか、maxttempが0になっています。これが原因と判明しましたがなぜそうなるのか、私には分かりません。とりあえず、上記箇所をコメントアウトしたところ、エラーは出なくなりました。
またPrintrunで温度計、およびヒータを確認したところ、正常に動作するようになりました。
こんな適当でいいのかと思いながら、目を閉じました。
あとはエクストルーダのステッピングモータが動かないのを調べないと。。。
自作3Dプリンタ完成まで、まだ時間がかかりそうです。