皆さんこんにちは.
「パルフェ」を買ったんだけど18禁バージョンでなくて落胆しているヒラサカです.付録のタペストリーもらったからまぁいいか・・・・
さて、フィラメントを接合しよう!
ArduinoでV6 hotendの温度制御をしました.作業風景はこんな不安定です.ご安全に!
↓target 100℃で走らせてこんな出来栄えです.ださっ! 5℃ぐらい振動してる.
MarlinのPID制御はもっと収束性がGOODですから、負け組確定でぇす.
フィラメントを接合するだけだからこれでもいいいや.
理由1) 加熱だけしか制御できない(冷却は自然冷却)
理由2)loop応答が10秒ぐらいある(遅いloopはダルい)
こんなloopは嫌いだなぁ.やっぱloop応答はuSecオーダーがいいよね.
ヒーター開発はこれでオシマイなので、次はメカニカルな開発へと移行します.うまくできるかは不明です.
以下にArduino sourceを記します.
かしこ
ーーーー
#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 )
// 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
}
津久井街道で相模湖まで
返信削除位相が回らないはずのエミッタフォロワまで,数々の回路を発振させてきたので,リンギングが見えると不安になるわたし。安定しているようで,ご同慶の至りです。
エミフォロはそれ自身で発振することもありまして、えへへ
削除常温から上がって最初のオーバーシュートは大きいですがその後はまぁなんとか.ダサいけれど.
MarlinのPID制御は、定常状態に達するとピタッと変動しませんので優秀です.LCDに実測温度が表示されるんです.
削除なんか、「教科書通り」の、グラフになってて、笑いました。
返信削除http://www.picfun.com/motor05.html
モータのPID制御法
※これは、正確には「単純On/Off制御」ではない(引き込み時のロジックなどが違うから)のですが、極めて似ています。
(最低ある程度のフィードフォワードを掛けないと、うねうね変動は消えないですね。まぁでも、これでも充分実用になってると思います。一分以内には、ほぼ定常状態になってるし。)
>エミフォロはそれ自身で発振する
理論上は、「エミッターフォロワ(コレクタ接地)回路」は、利得が無いので発振することは無いハズなのですが、
「実際の配線引き回し」で、「完璧なエミッターフォロワ」は、作れない(信号源/配線インピーダンスや、迷走容量とかある)ので、実際は、
「エミッターフォロワでもエミッタ接地でもベース接地でもない、謎回路」が、出来上がっていて、発振に至るのでしょうね・・・
※ソフトと同じで、「回路図(仕様書)どおりに作っても」動かない回路、が出来上がるわけです。
というか、実際の回路のKnow-Howなんて「配線がらみ」なものが殆どです。
IC/LSIの発達も、こういうものを「パッケージの中に閉じ込める」ことによって、「再現性、信頼性の確保」を狙ったことから始まってるし。
>教科書通り
削除あははー、コピペ疑惑発生! わらたー
>パッケージの中に閉じ込める
削除1980年代ぐらいに、ハイブリッドICというのがあり、VHSデッキの中にも載ってたりしました.
IC+ディスクリ部品を2cmぐらいの基板上にこしらえて、それをモールドしたものでした.なぜかオレンジ色が多かったのはなんでだろ?
これも閉じ込めて品質保持を図ったものだったと思います.
>なぜかオレンジ色
削除私の記憶では、「みどりいろ」のヤツもありましたね。
いずれにしても、いかにも
「焼き物」
という感じのパッケージング(別に、焼結してあるものばかりではないハズですが)
でした。
ああ、今思えば「セラミックコンデンサ」の色と同じだ。作り方も、同じなのかも。
削除みどり色ですか、それはわたしは記憶にない感じです.
削除「みどりいろ」は、パッケージの色では無くて、セラミック基板(のコーティング)の色でしたね。こんな感じの
削除https://www.lionpower.co.jp/business/img/product_hybridic_01.jpg
(こういうのがそのままで、使われていることも、良くありました。場合によっては、部品の型番が「削られていたり」しましたが。)
パッケージの色としては、オレンジの他は、「黒色」ですね。こんな感じの
https://akizukidenshi.com/catalog/g/gM-11187/
そうそう、これです.
削除性能は安定してるかもだけど、お値段が安くないのがちょっと厳しいかんじでした.