Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
ホットプレートを利用したリフローの製作 坂井 雅紀
https://www.craft-design.yokohamaから ソフトウエアをダウンロードできます
底から見た写真手前からSSRのヒートシンク、PIC16F1788のった基板、その隣にスイッチングレギュレータ、奥にLCDなどが見えます
ホットプレートの温度を測定するサーミスタを接続するコネクタ
PIC16F1788
ショート時:デバッグモードオープン時:ノーマルモード
PICKITプログラム
LCDコントラストボリューム
ホットプレートの裏側温度フューズ240℃とサーモスイッチ195℃が見えます
温度フューズ & サーモスイッチをとりはずし直接 AC100vケーブルをカシメで接続します
回路図
ホットプレート
温度制御方法
1秒 2秒 3秒 4秒
ヒーターON
ヒーターOFF
100%ON
80%ON
60%ON
40%ON
20%ON
コントローラは下図の用に1秒間隔でホットプレート内のヒータを制御する。このヒーターON時間はソフトウエアのheater_on_time(変数)の値で制御する。ソフトウエアでPWM信号を生成しています。100%ヒーターONの時のheater_on_timeは200となる。最小分解時間は5mSecであり ヒータON時間は5mSec*Heater_on_timeとなる。ヒータON時、コントローラは下図のブロック図のSSR(ソリッドステートリレー)に信号を送り、SSRがONしAC100Vがホットプレートのヒーターに供給され、加熱される。
SSR
コントローラPIC16F1788
AC100V温度
センサ
本リフローのPID温度制御は PICFUNの後閑先生が書かれているPIDの内容を参考に 行いました。
PID制御の計算式はe0(今回の偏差) = 目標温度 – 現在の温度dMV0(今回の操作量差分) = Kp*(e0 - e1) + Ki*e0 + Kd*(e0 - 2e1 + e2)またはdMV0(今回の操作量差分) = 100/Pb{(e0 - e1) + e0/Ti + (e0 - 2e1 + e2)*Td}MV0(今回の操作量) = MV1(前回の操作量) + dMV0
ここで e1:前回の偏差、e2:前々回の偏差Kp:比例感度(または比例ゲイン),Pb:比例帯 = 100/KpKi:積分計数、Ti:積分時間 = Kp/KiKd:微分係数、Td:微分時間 = Kd/Kp
1)K(定常値)、L(無駄時間)、T(時定数)を求める (CHR法・・・ステップ応答から求める)
1-1)ホットプレートの時間vs温度特性グラフのS字曲線の 変曲点上に接線を引く1-2) ホットプレートの時間vs温度特性グラフの 時間が 無限大の時の定常値Kを予測する(300℃とした)1-3)定常値Kの63%のに当たる値になったところから、 無駄時間L、時定数Tを求める。
次ページのグラフ
0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 2300
50
100
150
200
250
300
ホットプレート 時間vs温度特性
時間(秒)
温度
(℃
)
K 定常値:300℃
0.63K=189℃
T時定数:150秒
L無駄時間:10秒
制御動作種別 Kpの値 Kiの値 Kdの値
P(比例)制御 0.3~0.7T/KL=4.9~11.4
0 0
PI制御 0.35~0.6T/KL=5.7~9.8
0.3~0.6/KL=0.0326~0.0652(Ti=87~306)
0
PID制御 0.6~0.95T/KL=9.8~15
0.6~0.7/LK=0.0652~0.0761(Ti=129~230)
0.3~0.45T/K=4.5~6.75(Td=0.3~0.7)
PID計算した結果は、heater_on_time(0~200)の値をを変えることによりホットプレート内のヒーターON時間を制御する。P動作から上記パラメーターで実験すると、Kp=1の時、オーバーシュートが発生しない最短時間で収束した。(上の表ではKp=4.9~11.4なので、大きな違いがある。理論式から実際の制御で何かが抜けているのかもしれない?)また、PI動作では、Kp=1、Ti=300で最も良い結果が得られた。PID動作では、heater_on_time(操作量)の値が、安定しないため、PI動作で制御している。以上より 現在のPI制御の式はe0(今回の偏差) = 目標温度 – 現在の温度(次ページのサーミスタ デジタルデータ:赤)dMV0(今回の操作量差分) = (e0 - e1) + e0/300MV0(今回の操作量:heater_on_time) = MV1(前回の操作量) + dMV0で制御している。
0 10 20 25 30 40 50 60 70 80 85 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 2500
200
400
600
800
1000
1200
温度センサー(サーミスタ:204 CT-4) 特性
adc_data
1024-adc_data
温度
デジ
タル
デー
タ
ノーマルモード表示(温度設定)
S C゜02.pmeTt 0e
N +C゜33.pmeTwo
<設定温度>[ ]℃ 表示
<リフロー温度>現在のリフロー温度
を示す。[℃表示]
<ヒーターON/OFF>リフローのヒータの
ON/OFFを示す
ノーマルモード表示(プロファイル設定)
P C゜011elifo 0r
N +C゜33.pmeTwo
<プロファイルNo>ハンダ付けプロファイル
番号を示すProfile1~9
<プロファイル温度>現在のプロファイル温度を示す。
1秒ごとにプロファイル温度が更新される[ ]℃ 表示
<リフロー温度>現在のリフロー温度
を示す。[℃表示]
<ヒーターON/OFF>リフローのヒータの
ON/OFFを示す
デバッグモード表示(温度設定)
1 tC゜0205703 02
0 +C゜33770000
<設定温度>デジタル表示
<設定温度>[ ]℃ 表示
<リフロー温度>現在のリフロー温度
を示す。[℃表示]
<リフロー温度>現在のリフロー温度
を示す。[デジタル表示]=サーミスタ出力
<ヒータON時間>リフローのヒーターをONしている時間を示す(0~200)
<ヒーターON/OFF>リフローのヒータの
ON/OFFを示す
<温度設定>デバッグモード
温度設定を示す
<経過時間>スタートボタン押下からの時間
デバッグモード表示(プロファイル設定)
0 1pC゜0166300 00
0 +C゜33770000
<プロファイル実行時間>リフロー温度が100℃に達した以降の時間を
示す[秒]
<プロファイル温度>デジタル表示
<プロファイル温度>[ ]℃ 表示
<プロファイルNo>ハンダ付けプロファイル
番号を示す(p1~p9)
<リフロー温度>現在のリフロー温度
を示す。[℃表示]
<リフロー温度>現在のリフロー温度
を示す。[デジタル表示]=サーミスタ出力
<ヒータON時間>リフローのヒーターをONしている時間を示す(0~200)
<ヒーターON/OFF>リフローのヒータの
ON/OFFを示す
ホットプレートを利用したリフローの製作
main
オシレータ設定、PORTの設定
start_flag=0,ヒーターOFF、heater_on_timer=0,LED消灯
OPamp1,2、ADC初期設定、LCD初期設定
now_temp set_temp ⇒ 初期設定(set_temp>=10)
タイマー2(5mSec)初期設定(割込み設定)
割込み許可
while(1)
input_action()
PIDパラメータ初期設定( MV0=0,dMV0=0,MV1=0,e0=0,e1=0,e2=0,Kp,Ti,Td )
process_action()
タイマー2割込み処理(5mSecTimer)
割込みフラグクリア
Rotary_A_10ms=1? && Rotary_A_5mSec=0?&& rotary_encoder_detect_counter=0?
Rotary_B=0?
encoder_flag=1
encoder_flag=0
encoder_flag=2
Rotary_A_10ms=Rotary_B_5msRotary_A_5ms=Rotary_A
encoder_flag_detect_counter>0
encoder_flag_detect_counter--
five_msec_flag生成
RET
ロータリーエンコーダーA端子の立下りを検知encoder_flag_detect_counterが0の時検知可能
y
y
y
5mSec処理フラグ
encoder_flag_detect_counter=20
ロータリーエンコーダーの回転を検知後、5mSec*20=100mSec検知を禁止する
input_action()ロータリーエンコーダー処理
encoder_flag=0
encoder_flag?
display_upper_LCD()
0
1(左回転)
2(右回転)
set_temp--
set_temp=1
set_temp++
set_temp=255
set_temp<2 set_temp>255
set_tempに対応したデジタル値に変換
デジタル値をset_digiにセット
RET
y
start_flag=0?
start_flaf=1,LED点灯 start_flaf=0,LED消灯、ヒーターOFF
500mSecDelay
押しボタン処理
スタート/ストップボタン押下?
<set_tempの値の意味> 0 : 使用不可 1 - 9 : プロファイルNoを示す10 - 255 : 設定温度を示す
display_upper_LCD
RET
set_temp?
display_profile_temp()
0-9 10-255
display_set_temp()
profile_tempをASCIIコードに変換
lcd_strings1[0-6]に[Profile]設定
LCD1行目に表示
RET
profile_temp?
lcd_strings1[15,15]に[ p]設定
lcd_strings1[7]に[set_temp]設定
lcd_strings1[8]に[スペース]設定
lcd_strings1[9-13]に[Start]設定 lcd_strings1[9-13]に[End ]設定
lcd_strings1[9-13]に[profile温度℃]設定
100 0
other
display_profile_temp
display_set_temp
set_tempをASCIIコードに変換
lcd_strings1[12-14]に[ ]℃設定
set_degiをASCIIコードに変換
lcd_strings1[4-7]にASCIIコード設定
lcd_strings1[9-11]にASCIIコード設定
lcd_strings1[0-3]に[Set ]設定
LCD1行目に入力情報表示
RET
debug?
lcd_strings1[15]に[ d ]]設定lcd_strings1[15]に[ t ]設定
n y
process_action()
RET
five_msec_flag=1?
display_now_temp()
conrol_heater()
five_msec_flag=0y
heater_ontimer--
one_sec_timer=0?y
one_sec_timer--one_sec_timer=200
1秒処理
5mSec処理 heater_on_timer=0?
ヒーターOFFLCDに[-]表示
y
display_now_temp()
RET
ヒーターADC ON AD⇒ 変換完了か?
AD結果をnow_digiにセット
now_digi>829
now_digiをLCD左に表示
温度をLCD右に表示
now_digiの対応温度をthermisterテーブルで変換start_flag=0ヒーターOFF
LED消灯
1秒毎の処理
環境ADC ON AD⇒ 変換完了か?
AD結果をenv_digiにセット
ADC出力のデジタル値が255℃以上なのでヒーター
をOFFする。
y
control_heater()
RET
start_flag=1
heater_on_timer設定ヒーターON
LCDに[+]表示
ヒーターOFFLED消灯
y
ON状態か?n
now_digi>set_digi?
ヒーターOFFLCDに[-]表示
PID計算heater_on_timerの値
(0-200)を求める
e2=e1,e1=e0MV1=MV0
y
n
1秒毎の処理
ヒーターOFF 1秒間に1回は必ずヒーターをOFFする
<Heater_on_timeの値>4:4×5mSec=20mSec(ヒータON時間:5Hz 1波形)200:200×5mSec=1000msec(ヒーターON時間 1秒 50波形)1秒ごとに本処理を行うので200の設定はヒーター連続ONを示す
set_temp<10の時、プロファイルnのset_digiに設定
0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 2400
50
100
150
200
250
300
リフロー温度特性
JEDEC規格
サーミスタ (共晶はんだ )
温度計 (共晶はんだ )
サーミスタ (鉛フリーはんだ )
温度計 (鉛フリーはんだ )
時間(秒)---100℃以降の経過時間
温度
(℃
)
60-150sec
60-120sec
60-180sec60-150sec
JEDEC規格の共晶はんだと鉛フリーはんだプロファイルにおける、自作リフローの温度特性を測定した。JEDEC規格の共晶はんだのプロファイルで規定しているのは、Ⓐのプレヒード部で温度は100~150℃:60~120秒、Ⓑのリフロー部で温度225~240℃:60~150秒である。鉛フリーはんだのプロファイルで規定しているのは、Ⓒのプレヒート部で温度は150~200℃:60~180秒、Ⓓのリフロー部で245~260℃:60~150秒である。
Ⓐリフローに実装されているサーミスタ温度センサーと、リフロー中央部を外付け温度計で温度を測定した
Ⓑ
Ⓒ
Ⓓ