熱電対によるヒーター制御:温度測定と設定部の実装完成
Tiny861のバグ騒ぎが一段落して、ブレッドボード上では熱電対による測定温度の表示と、温度の設定までの機能が完成した。7セグLEDは、FPGAのときに使った6桁のテスト基板なので1列の緑単色と味気ないが、実装版は緑と赤の2段の7セグLEDでそれらしくなるはずだ。
温度設定のロータリーエンコーダーも余程、高速で回さない限り割り込み方式で確実に回転を捉えている。ただ、値が変わる度にEEPROMにデータを書き込んでいると、とりこぼしが多い。EEPROMは書き出しに4ms近く待たされるからだ。まあ、そんな高回転でまわすこともないし、大勢に影響はない。
実装版は結局、当初案どおりアクリル曲げ器のスイッチ用の小さなケースに表示・設定部を組み込み(というよりここの工作が先行してしまっている)、SSR(ソリッドステートリレー)などのヒーター制御部は分離する方向で計画が進んでいる。どちらも曲げ器の台板に固定して使う予定なので、分ける必要はないのだが、部品在庫一掃のねらいもある。
久しぶりのハンダ付けが楽しい(11/6/2011)
実装版は、ケースが決まっているが構成は確定していない。いつもと順序が逆である。今回の工作は2階建ての基板で、上に7セグLEDとエンコーダー、シフトレジスターが載り、下の基板がCPUとオペアンプなどのアナログ部が載る予定である。
いつものようにアートワークを始める。下の主基板のCPU部や、アナログ部はスペースもあり、アートワークを描くまでもないのだが、上の7セグLEDの方は配線のスペースがない。7セグLEDのダイナミック表示のため並列配線も簡単なように見えて重ならないようするのは、そう簡単ではない。おかしいな。こんなに大変だったっけ。
まあ、簡単でないから面白いということもある。そうか、このあいだはLEDはわずか2つだけだったし、FPGAの時に作った6ヶの7セグLEDは、ピンが縦位置で、並列配線が楽だったのだ。今度は、ピンが横位置でしかも3ヶづつ2段。面倒なわけである。
アートワークの面白いところは、工夫次第で配線が一気に楽になることがあることである。そういえば、Eagleでは日がな一日、これをやってあきなかった。他の事もやりながら(気分を換えて見直すと、良いアイデアが浮かぶ)、2日間かけて主基板とLED基板2枚のアートワークは完成した。
いよいよ、実装だ。久しぶりのハンダ付けが楽しい。まず、主基板のアナログ部から配線を始める。アナログ部の配線はわずかですぐ完成した。例によってkumanさん流の逐次開発方式で、ブレッドボードでやった調整をもう一度、実装版で繰り返す。
アナログ部は、冷温端の温度を計測する温度センサーLM60の出力電圧を、熱電対の発生起電圧(1℃あたり、40.7μV)に合わせる分圧抵抗の調整と、熱電対と合算した電圧を、Tiny861のADコンバーターの測定範囲(最大2.56V 10ビット1024段階)に合わせて増幅するオペアンプの増幅率の調整である。
LM60 は半田付けせず、調整のためソケットにしてある。まずLM60をつけずにソケットに適当な電圧をかけ、熱電対との分圧回路の補正を行う。ここは室温の補正なので数百度の温度を扱うときは、それほど神経を遣う必要はない。抵抗を分離して片側を固定抵抗にしたので調整は簡単に済んだ。
次は、オペアンプの増幅率の調整だ。ここはオフセット電圧もからむので、熱電対をはずして、また別の電圧をかけ、方眼紙を取り出して慎重に測定を開始する。
うーむ、オペアンプのリニアリティが余り高くないな。どの電圧域でも同じ増幅率というわけにはいかない。電圧の高いところで、所定の増幅率61.425(1℃あたり2.5mVにするため、2.5/0.0407)にすると、低い電圧(0.1V以下)では大きくずれてしまう。
オフセット電圧が悪さをしているのだろうが、補正の仕方がいまいちわからない。このあいだのグラフはオフセット電圧がマイナスに行ってしまった。こればっかりやっているわけにもいかない。補正はあとでも出来るので、アナログ部は一応これで良しとして、次に移ることにする。
7セグLEDの配線は相当な密集度だ(11/8/2011)
ハンダ付けは、7セグLED基板の方に移った。面倒である。7セグLEDを組み込んだ基板だけが結構な値段で売られている理由が良くわかった。7セグLEDがたくさん並び、エレメントを始めから並列に配線したダイナミック表示用のユニットもあるが、3つのはないので今度の工作には使えない。ただ黙々とつないでいくしかない。
凝り性なもので、気楽に線を交叉させて配線するのに抵抗がある。アートワークはそうならないように引いてはあるが、現実にハンダ付けがその通りできるかというと、線が重なってそううまくはいかない。一回のハンダ付けの集中の限度は限られている。少しやっては、何か別のことをやって気を紛らし、また半田ごてを握るという繰り返しである。
そのかたわら、そろそろ温度制御のことについて検討し始めた。まだ先の話ではある。でも、単なるon/off制御だけでは面白くない。モーター制御のころから考えているロボットやラインセンサーなどの制御より、温度制御はゆるくて勉強にはもってこいである。色々ウェブを探し回ってわかりやすいサイトを探す。
PID制御の復習をした。Dは良くわかるが(前回との偏差で比例量をいつもより増やすか減らす)、Iはどうするのだろう。設定値と現在値の差分を足して行って、一定のタイミングで比例量を増やすのだろうか。P制御だけでは、オフセットはとれないのだろうか。
今まで習った制御の伝達関数とはどういう関連があるのだろう? PID制御との接点が見つけられない。2次応答の時間変化を周波数成分変化にするような変換だったような気がするが、その記憶は遠い彼方に消えている。
Tiny861のフューズビットを書き損なう(11/10/2011)
すべての配線が終了した。しかし、なぜかすぐ電源を入れるのが怖くて何となく別の作業しているうちに、またショックな事件がおきた。実装版のCPUを用意しようとして、もうひとつのストックのTiny861を初期設定しているとき、フューズビットを書き損ったのである。
フューズビットのハイバイトとローバイトを間違えて書き込んだ。コンソールのメッセージを見ると、SEL0~3にデータシートにないビットを書き込んだことになる。これだけで、全く反応しなくなった。やれやれ、¥200(秋月)の石だけれど、まだ新品だ。一度も使わずに部品箱に死蔵されてしまう部品をまたひとつ作ってしまった。不憫でならない。
パラレルプログラミングの出来るAVR Dragonなら、こういう石を救えるのだろうか。DigiKeyでは¥4,305である。円高でまた少し下がったようである。この前、Tiny2313(¥100)を救おうとした時は、1対47(当時4700近辺)の投資対効果だったが、今度は、300:4300と1対14まで上がった。そろそろ買っても良いか。
ただ、送料無料にするためには、もう少し買うものを増やす必要がある。あと、¥3000ばかり。こうして電子工作無限地獄が続いていく。
電動ドリルのスタンドを買う(11/11/2011)
何か、ものを失うと、無意識のうちに何か別のものを揃えようとする癖が今度も出た。久しぶりにDIY店に行って、無性にドリルスタンドが買いたくなった。CPUチップの代わりというのもなんだが、前から欲しかった工具である。
普通の電動ドリルをボール盤にする(まあ、ドリルスタンドです)工具である。¥2,980の超廉価だが結構しっかりしている。電子工作のプラスティックケースの穴あけ工作くらいならこれで十分だ。プロクソンのミニルーター用のドリルスタンドは既にあるが、少し大きい穴を開けるのは今までの大工工作用の昔の大きな電動ドリルを手で支えて開けていた。
買って帰って早速、ドリルのテストをする。うん、これは楽だ。値段が安い割にはがたつきも少なく強度も問題ない。しかし、出来上がった温度計の実装版に電源を入れる気力がまだわかない。たいした機械でもないのに結構苦労した。動けばともかく動かないときのショックを味わうことを恐れている。
というか、色々なことを思いつく(やりたくないための無意識の行動だろう)。実際の熱電対の高温測定実験などもそうである。本来の用途、アクリル曲げ器の温度測定のため、ニクロム線を入れたパイプの中に熱電対を入れて温度を測ってみた。なぜ、今までやらなかったのだろうと思うぐらいの基本的なテストだ。熱電対の発生電圧は例のDVM(秋月のデジタル電圧計)で測る。0.1mVまで測れる。
どの程度の制御で温度を一定に保てるかというのが実験の当面の目的である。とりあえず調光器で下げた電圧を与えて様子を見る。通電すると見る見るうちに電圧が上がり、切ると、結構早く温度が下がって行く。on/off制御でも何とかなりそうだ。
ただ、パイプの中と外では、100度近い温度差があることがわかった。表面温度を熱電対で確実に測るには、熱電対を表面に固定する必要があるが、固定の仕方がわからない。それにパイプの場所によって結構温度に違いがある。中の方が安定して測れることは確かだ。換算する方が信頼性が高いかもしれない。
このあたりをウェブで色々調べるが、熱電対の世界は、圧倒的にプロの世界で、当研究所のような遊び半分の温度測定のケースは全くない。うーむ、参考になる情報が少ないなあ。手探りで作っていくしかないようだ。
やっと実装版に通電。何とかLEDまでは出た(11/12/2011)
出来上がったものをいつまでも置いておくわけには行かない。意を決して、出来上がった実装版のテストに入った。残っていた電源コネクターをつけて通電する。おお、7セグLEDが点いた。おーし、このあたりは大丈夫なようだ。ただ、フォントは無茶苦茶だし、エンコーダーも動いていない。
少し調べて、原因はすぐわかった。エンコーダーが動いていないのは、制御線をプルアップしていない。フォントがおかしいのは、スキャンが逆方向だったり配線間違いが見つかった。不具合の場所はほぼ特定できた。そりゃそうだ。ブレッドボード版と何も変えていない。良かった。これでゆっくり寝られる。
次の日、きのうまでの究明経過をメモに書きだし、確かめながらひとつづつ、つぶしていく。直すべきところがわかっているこういう作業は、むしろ楽しい。CPUソケットの内側にプルアップ抵抗を入れようとして苦労する。シングルラインではない梯子型のソケットでやりにくい。
最近の当研究所のCPUソケットはすべてシングルラインを使っている。中にパスコンなどが入れられるので便利である。それに気づく前に買った梯子型のソケットが部品箱にだぶついている。
ここも在庫一掃のためなのだが、マーフィーの法則とはこういうものである。こういうときに限って、ソケットの中に部品を実装しなければならなくなる。梯子のような支持部が邪魔だ。プルアップ抵抗2つを無理やり押し込む。
次は、7セグのエレメント違いである。9番と10番をテレコにしていることが、昨日のテスト結果で判明している(1から9までの数字を表示させて見つけた)。これはうっかりミスだ。基板配線を確認する。あれえ、間違っていない。どうしてだろう。ソースコードのコメントを見て驚いた。
これまで動かしてきた7セグLEDは、ピンの順番がabcdegfと最後の2エレメントがfgと並ばずgfと逆になっている。こういうものだと思って3種類の7セグLEDをこれまで問題なく動かしてきた。ところが、今度買ってきた(千石電商)7セグのデータシートは、abcdefgとアルファベット順になっている!
予備の部品をブレッドボードに差して実際に確かめる。そうだ間違いない(あたりまえか)。ふーむ、7セグLEDのピン配列は統一されていないのか。一つ勉強した。解決は?四の五の言わずに半田付けでひっくり返しただけである。
さて、最後は7セグの表示位置がずれている件である。もういちどピンナンバーとドライブしているトランジスターとの結線を確認する。どうしたことだ。全くの勘違いも良い所で、全然順番になっていない。一体、どういうつもりでこの配線をしたのか疑いなくなるデタラメぶりである。
1本のドライブをシフトレジスターのパラレルピンの残りの1ビットでつけているので、これに何か縛られておかしなことになったらしい。いずれにしても、ソフトをいじっても解決する話だが、あんまりハードが目茶目茶なものをソフトで吸収すると、あとで苦労しそうで、わかりやすい形に順番をそろえる。
熱電対による温度制御は、表示部と設定部まで完成した(11/13/2011)
さあ、細かいところは、まだいくつかあるが、大所はこれで大丈夫なはずだ。ChaNさんのISP-UARTを使っているので、デバッグ->ソース改修->テストのサイクルが早い。PC(UART)端末の接続を切れば、AVRは自然にISPモードになり、プログラムをただちに書き込める。書き終わった後、端末を立ち上げると、デバッグ用のUARTメッセージが流れてプログラムがスタートする。
2Kばかりのフラッシュなのでコンパイルは一瞬で終わる。端末を立ち上げる。よーし、7セグLEDが光った。緑と赤なのできれいだ。ちゃんとした数字になっている。エンコーダーを回す。良いぞ、ちゃんと数字が上下する。
勢いに乗って、ケースの完成を急ぐ。早速買ったドリルスタンドが大活躍する。大きな穴もリーマーではなく、3ミリドリルあたりで連続して揃えて開けていけばどんな形にも簡単に切り抜くことが出来る。正確な位置に開けられるのでこういうことが楽に出来る。やっぱり工具には金をかけるものだ。熱電対のコードのソケットと電源ケーブル(制御線を含める)ソケットの穴が短時間に正確に開いた。好調だ。
電池を仮付けして持ち運びが出来るようにしたら、やることがある。台所に機材を持ち込む。基準温度として我が家で最も正確な温度、100℃を計測するためである。我家の標高は、40mで今日は天気も良い。沸騰点は殆ど100℃のはずである。
家族に内緒で、鍋に水をいれ沸騰させる。熱電対をそこに入れる。温度は順調に上がって、100℃を越えた。暫く沸騰を続け、105~110℃の範囲に納まることを確かめた。平均は107℃あたりのようだ。鍋の底の火のあたるところが高く、沸騰面の水面近くが低い。お湯はこっそり捨てる。
ふむ、7%の誤差か。もう少し校正したほうが良いかもしれない。しかし、アクリル曲げ器の温度設定のリファレンスとしては、これでもう十分なような気もする。
少し、ゆとりが出来たので、温度制御で空焚きをしたときに出すエラーメッセージを7セグLEDに出して遊ぶ。温度センサーが発熱体からはずせるので、これは必須の機能だ(昔、熱帯魚の飼育でひどい目にあったことがある)。
いずれにしても、これで温度制御の第一ステップ、温度測定部と温度設定部はほぼ完成したようだ。次の課題は、いよいよSSRを使ったヒーター制御だ。
回路図やソースコードの公開は、簡単なヒーター制御が出来てからにしよう。
| 固定リンク
「AVR」カテゴリの記事
- ソフトI2Cはクロックストレッチまで手を出してあえなく沈没(2017.09.02)
- オシロのテストどころかソフト開発で大はまり(2017.07.26)
- 超音波方式の人感センサーI2C化と新しいオシロ(2017.06.29)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
- 赤外線学習リモコンはデータ再現で挫折したまま進まず(2016.07.21)
「電子工作」カテゴリの記事
- 生存証明2(2022.10.19)
- 生存証明(2022.01.23)
- パソコン連動テーブルタップの修理を諦めて自作(2021.02.16)
- 半年ぶりのブログ更新に漕ぎつけた(2019.09.19)
- 研究所活動は停滞したままでCCDカメラ顕微鏡導入など(2019.02.08)
コメント
takaiさん、コメントありがとうございます。
はい、ご教示のパラレルライター等については承知しております。
以前の記事にもでておりますが、ひとつくらいは純正のAVRライターを買おうと決めたことにこだわっているだけで、他意はありません。
なにしろ「へそ曲がり」なもので、自作は今回しないと意地を張っています。誤解を招いて申し訳ありませんでした。
投稿: がた老 | 2011年11月16日 (水) 11時01分
arduinoで動くfuse resetterと言うのが有ります、もちろん自作可能なやつ。
これで書きそこなったfuse bitを戻せます。
HVSPとかfuse resetterでググるとでてきますよ。
投稿: takai | 2011年11月16日 (水) 03時40分