激安リフロー炉T-962とその改造
中国製の激安リフロー炉T-962というのがあって、3万円くらいで買えてしまいます。とはいえ標準だと制御が甘くてあまりうまくリフローでできないようです。そこで熱電対を追加して改造ファームウエアを書き込んで使っている例が紹介されています。私はこちらの記事を参考に改造してみました。
この改造をして、ソースコード内の温度プロフィルを調整することで、それなりにリフローはできるようになったのですが、どうも温度が上がりきらないことがときどきあったり、また炉内で温度が不均一なようで、特に端のほうでは半田が融けていないことがたびたびあります。
制御アルゴリズムの変更
まあこんなものかなあ、と思っていたのですが、改めて改造ファームウエアのソースコードを読んでみると、温度の制御がちょっとマズい(というか改善の余地がある)のではないかと思えてきました。このファームウエアでは、10秒ごとに目標温度を指定してそれに向けてPID制御する、という動作をします。つまり仮にその10秒間のうちに目標温度に到達しなくても、次のステップへ進んでしまうわけです。これだと、ヒーターの性能が足りずに温度が上がりきらないことは十分起こり得て、実際の「ときどき半田が融けない」という現象とも符合します。
一般にリフロー炉の温度制御は、以下のように行います(共晶半田の場合。温度の数値は部品によって異なるので一例)。
- 150度ー200度で100秒保つ(予熱)
- 220度以上まで加熱し、最高温度260度を10秒以内保つ(220度以上の時間は150秒以内)
- 冷却
(リフロープロファイルの例:エイブリック(株)のWebページより)
そこで、このような制御ができるように、リフローの温度プロファイルを、「目標温度、判定温度、保持時間」の3つの数値の組みで指定するようにしました。
- 目標温度:この温度になるようにヒータ・ファンを制御する
- 判定温度:この温度に到達したら保持モードに入る(温度制御は続ける)
- 保持時間:保持モードに入ったあとで制御を続ける時間。この時間が過ぎたら、次の目標温度の制御へ移る
これに向けてソースコード(特にreflow.c)を書き換えました。なお制御値の上限と下限を指定しているのですが、どうもコンパイラのバグなのか、その値がうまく内部の変数に反映できないようでした。具体的には最大値を0xffff(65535)と指定しているのに、内部では503という半端な値となってしまいます。どうもこの値を使っているようで、オリジナルの改造ファームウエアのreflow.cでは、PID制御の制御値(out)から248を引く、という謎のマジックナンバーが出てきます(503-248=255)。またPID制御の理屈から言えば、実際の温度が目標温度よりも高い場合は制御値は負となり、ヒータを停めてファンを回すはずですが、制御値の最小値が0に設定されていて、「制御量が248以下のときはヒータを停めてファンをまわす」という謎の式になっています(つまり制御量=248がニュートラル)。
このあたりがどうも気持ち悪かったので、制御アルゴリズムも、本来のPID制御の制御値を使うように書き直しました。制御値が正のときはヒータをON(制御値に比例、最大255)でファンをOFF、負のときはファンをON(制御値(の絶対値)に比例、最大255)でヒータをOFF、としました。本来であれば制御値とヒータとファンの制御パラメータ(PWMデューティ比)との係数は異なるはずですが、とりあえずは同じ比例係数にしました。
実際のリフロー動作
まず、以下のパラメータで制御をしてみました。
- 目標温度=190、判定温度=150、保持時間=100
- 目標温度=260、判定温度=250、保持時間=10
- 目標温度=50、判定温度=80、保持時間=20
あわせて、炉内にダミー基板を中央と端においてそこに熱電対を固定して、その温度もあわせて記録しました。
そのときの温度カーブが上図です(同時に計測できないので、2回(A/B)に分けて計測しているのでグラフの左右の位置はずれています)。
システムが持っている熱電対の温度(制御A/B)はほぼ指定通りになっていますが、基板表面温度が加熱中は高めに出る傾向があり、特にピーク温度は目標温度の260度を大きく超えて280度以上まであがってしまっています。
システムの熱電対は炉の上の方にあるので、基板温度とはずれていて時間遅れもあるだろうことは予想していたのですが、この温度差はけっこう問題です。
そこでピークの目標温度を240度に変更して、同様の制御をして温度を計測してみました。
そのときの温度カーブが上図です(同様に2回(A/B)に分けて計測しているのでグラフの左右の位置はずれています)。基板温度が炉内の中央と端で5度位のずれはありますが、255−260度で収まっていそうです。また予熱時間やピーク温度付近の時間も問題なさそうです。
実際にクリームはんだを塗ってと部品を載せてのリフローをした結果は、追って報告したいと思います。
ソースコードはこちらですが、実は手元のT-962は液晶モニタが故障してしまって表示されないため、画面表示関連は一切手を加えていません。また複数プロファイルの切り替えも未実装です。どなたか、実装していただけるとうれしいです。