2022年10月17日月曜日

3Dプリンタ フィラメント接合器開発(4)V6 hotendヒーター制御

皆さんこんにちは.
「パルフェ」を買ったんだけど18禁バージョンでなくて落胆しているヒラサカです.付録のタペストリーもらったからまぁいいか・・・・

さて、フィラメントを接合しよう!

ArduinoでV6 hotendの温度制御をしました.作業風景はこんな不安定です.ご安全に!

↓target 100℃で走らせてこんな出来栄えです.ださっ! 5℃ぐらい振動してる.
MarlinのPID制御はもっと収束性がGOODですから、負け組確定でぇす.
フィラメントを接合するだけだからこれでもいいいや.
いや~、温度制御って初めてやったんですけど、思ったよりもエグいんですね.
 理由1) 加熱だけしか制御できない(冷却は自然冷却)
 理由2)loop応答が10秒ぐらいある(遅いloopはダルい)
こんなloopは嫌いだなぁ.やっぱloop応答はuSecオーダーがいいよね.

ヒーター開発はこれでオシマイなので、次はメカニカルな開発へと移行します.うまくできるかは不明です.

以下にArduino sourceを記します.

3へ   5へ

かしこ

ーーーー
#include <TimerOne.h>  タイマライブラリ

ヒーター目標温度
#define TEMP_TARGET 100 // heater target temp. [degree]
ヒーターduty初期設定
#define HEATER_DUTY_START 50 // initial heater duty [%]

サーミスタ抵抗→温度変換テーブル (長いので省略.連載2回目を参照)
volatile const float t[] PROGMEM ={-30,-29,-28,-27,-26,-25,-24,-23,...
volatile const float r[] PROGMEM ={1733.2,1630.408,1534.477,....

int duty = HEATER_DUTY_START; // initial duty %

void setup() {
  Serial.begin(9600); COMシリアル9600bps
  pinMode(LED_BUILTIN, OUTPUT); LEDチカチカポート
  Timer1.initialize(200000); // uSec 0.2秒周期で12Vをチョッパする
タイマ1duty設定のおまじない
  Timer1.pwm(9, duty / 100.0 * 1023.0); // pin9 or pin10, duty=N/1024
タイマ1のコールバック関数設定
  Timer1.attachInterrupt(cb_tim1);
  Serial.print("heater control initial duty ");
  Serial.println(duty);
}

// call back function of timer1
int p=0;
void cb_tim1() {
  if(p==0) p=1; LEDチカチカしてるだけなので空っぽでもOK
  else     p=0; 
  digitalWrite(LED_BUILTIN, p);
}

void loop() { メインループ
  int sensorValue = analogRead(A0); サーミスタポートをADCする(12bit)
  float voltage = sensorValue * (5.0 / 1023.0); 電圧に変換する、5V full scale
  Serial.print("ADC : ");
  Serial.print(sensorValue);
  Serial.print(" voltage: ");
  Serial.print(voltage);
  // voltage = 5.0 * rth / ( rth + 4700 )
  // voltage rth + voltage 4700 = 5 rth
  // 4700 voltage = ( 5.0 - voltage) rth
  // 4700 voltage / ( 5.0 - voltage ) = rth
  float rth; // thermistor kohm 電圧をサーミスタ抵抗kΩに変換
  rth = 4700.0 * voltage / ( 5.0 - voltage ) / 1000.0 ; // kohm
  Serial.print(" [V] termistor: ");
  Serial.print(rth);
  Serial.print(" [kohm]");

  // R vs T table
  // convert rth to temperature
  int i;
  for(i=0;i<320;i++){ kΩを温度に変換する
    float rtable = pgm_read_float_near(r+i);
    if(rtable<rth) break;
    else  i++;
  }
  float ttable = pgm_read_float_near(t+i); // temp.
  Serial.print(" temp: ");
  Serial.print((int)ttable);
  Serial.print(" [deg]");

  // heater control ヒーター制御
やってることは、かなり不真面目です.
 ・目標温度に達したらヒーターOFF
 ・目標温度までの乖離が10℃より大きいならヒーターON
 ・目標温度までの乖離が10℃以下ならヒーター50%ON
  if(ttable < TEMP_TARGET) {
    if(TEMP_TARGET - ttable > 10) duty = 100;
    else duty = 50;
  }
  else duty = 0; // heater cut off

ヒーター更新
  Timer1.pwm(9, duty / 100.0 * 1023.0); // update heater duty

  Serial.print(" heater duty: ");
  Serial.print(duty);
  Serial.println(" [%]");

loop応答が10秒もあるのでヒーター更新は1秒毎で十分かなと
  delay(1000);    // wait for N mSec
}

11 件のコメント:

  1. 津久井街道で相模湖まで
    位相が回らないはずのエミッタフォロワまで,数々の回路を発振させてきたので,リンギングが見えると不安になるわたし。安定しているようで,ご同慶の至りです。

    返信削除
    返信
    1. エミフォロはそれ自身で発振することもありまして、えへへ

      常温から上がって最初のオーバーシュートは大きいですがその後はまぁなんとか.ダサいけれど.

      削除
    2. MarlinのPID制御は、定常状態に達するとピタッと変動しませんので優秀です.LCDに実測温度が表示されるんです.

      削除
  2. なんか、「教科書通り」の、グラフになってて、笑いました。
    http://www.picfun.com/motor05.html
    モータのPID制御法
    ※これは、正確には「単純On/Off制御」ではない(引き込み時のロジックなどが違うから)のですが、極めて似ています。
    (最低ある程度のフィードフォワードを掛けないと、うねうね変動は消えないですね。まぁでも、これでも充分実用になってると思います。一分以内には、ほぼ定常状態になってるし。)

    >エミフォロはそれ自身で発振する
    理論上は、「エミッターフォロワ(コレクタ接地)回路」は、利得が無いので発振することは無いハズなのですが、
    「実際の配線引き回し」で、「完璧なエミッターフォロワ」は、作れない(信号源/配線インピーダンスや、迷走容量とかある)ので、実際は、
    「エミッターフォロワでもエミッタ接地でもベース接地でもない、謎回路」が、出来上がっていて、発振に至るのでしょうね・・・
    ※ソフトと同じで、「回路図(仕様書)どおりに作っても」動かない回路、が出来上がるわけです。
    というか、実際の回路のKnow-Howなんて「配線がらみ」なものが殆どです。
    IC/LSIの発達も、こういうものを「パッケージの中に閉じ込める」ことによって、「再現性、信頼性の確保」を狙ったことから始まってるし。

    返信削除
    返信
    1. >教科書通り

      あははー、コピペ疑惑発生! わらたー

      削除
    2. >パッケージの中に閉じ込める

      1980年代ぐらいに、ハイブリッドICというのがあり、VHSデッキの中にも載ってたりしました.
      IC+ディスクリ部品を2cmぐらいの基板上にこしらえて、それをモールドしたものでした.なぜかオレンジ色が多かったのはなんでだろ?
      これも閉じ込めて品質保持を図ったものだったと思います.

      削除
    3. >なぜかオレンジ色
      私の記憶では、「みどりいろ」のヤツもありましたね。
      いずれにしても、いかにも
      「焼き物」
      という感じのパッケージング(別に、焼結してあるものばかりではないハズですが)
      でした。

      削除
    4. ああ、今思えば「セラミックコンデンサ」の色と同じだ。作り方も、同じなのかも。

      削除
    5. みどり色ですか、それはわたしは記憶にない感じです.

      削除
    6. 「みどりいろ」は、パッケージの色では無くて、セラミック基板(のコーティング)の色でしたね。こんな感じの
      https://www.lionpower.co.jp/business/img/product_hybridic_01.jpg
      (こういうのがそのままで、使われていることも、良くありました。場合によっては、部品の型番が「削られていたり」しましたが。)

      パッケージの色としては、オレンジの他は、「黒色」ですね。こんな感じの
      https://akizukidenshi.com/catalog/g/gM-11187/

      削除
    7. そうそう、これです.
      性能は安定してるかもだけど、お値段が安くないのがちょっと厳しいかんじでした.

      削除