カートをみる マイページへログイン ご利用案内 お問い合せ お客様の声 サイトマップ
◆◆改造・組み合わせ、回路・ソフトウェアの設計・開発サービスを行っています。「問い合わせ」フォームでご相談ください!詳しくはこちらをクリック!
◆◆入力するご自分の>メールアドレスの誤りにご注意ください。
「ご注文」や「お問い合わせ」時にすぐに自動的に送られる「確認メール」が届かない場合は、入力された;メールアドレスが誤っています
◆◆製品に含まれるすべての部品(プリント板、LED、端子など)の色は写真と異なる場合があります
◆◆製品マニュアル、回路図、プログラム(有効な場合)などは製品には同梱していません。最新版を製品ページからダウンロードするか郵送サービスをご利用ください
◆◆すべての製品には一般的なハンダ(共晶ハンダ)が塗布されています

PIC-P40によるペルチェ素子用温度コントローラ


PIC-P40開発ボード製作例:
マイコンキットドットコムで販売するOLIMEX社のPIC-P40と40ピンの16F877Aを使用したペルチェ素子で対象物を加熱または冷却するための温度コントローラです。自宅でPCBをエッチングするときのエッチング液の加熱、熱帯魚の水槽の加熱(夏は冷却)、自作の恒温槽、部品の冷却などに簡単に使えます。
追加する部品は、MCP6022オペアンプ、機械式ロータリーエンコーダ、MP4212モータードライバ(H型)、2SA1015トランジスタ、LCD、LED(単色、2色)、タクトスイッチ2個、ペルチェ素子、コンデンサー少々、抵抗少々です。約1800円(秋葉原での実売価格。ペルチェ素子を除く価格。価格を保証するものではありません。)の追加部品と約4時間で完成。
動作説明:
 温度センサーとして感熱抵抗(NTC。サーミスタ)を使用し(デフォルト。IC型温度センサーも使用可能)、温度を測定します。薄くて小型なので対象物への貼り付けが容易であることと温度範囲が広いのが特長です。
 ロータリーエンコーダーを回して目標の温度、温度センサー、B定数(NTCの場合)、PID各係数、PWMデューティー表示可否を設定します。目標の温度と現在の温度を2行16文字のLCDに表示します。
 加熱時には赤色のLEDが、冷却時には青色のLEDが点灯します。
 PID制御を使用し目標の温度に到達させています。
 科学実験などにお使いください。使用したPIC16F877Aは多くのIOピンがあり、PIC-P40ボードにも多くのスペースがあるのでいろいろ実験できます。(キーワード:ペルチェ素子、TEクーラー、PID制御、LOG、対数計算、B定数、サーミスタ、感熱抵抗、P16F877A)
回路説明:
 ロータリーエンコーダーを2ビットで読み、H型FETドライバICをPWM(パルス変調)モードを使って4ビットで動かし、LCDを7ビット(データ4ビット、制御3ビット)で駆動しています。ペルチェ素子の加熱と冷却はH型FETドライバICで電流方向を制御し、その加熱/冷却能力はパルスのデューティー比(オンとオフの比)を変えることで制御しています。PIC、温度センサー回路、H型FET素子、ロータリーエンコーダー、スイッチ、LED、LCDだけの簡単な回路です。
 温度センサーは感熱抵抗(NTC:ネガティブ ・テンプリチャー・コエフィシェント・サーミスタ:Negative Temperature Coefficient Thermistor。一般にサーミスタと呼ばれています。)を使用しています。温度の上昇に対して抵抗値が下がるのでネガティブと呼ばれています(下図)。NTCに定電流を流し、NTCの両端に発生する電圧により温度を検出する仕組みです。NTCの電流は使用する温度範囲によって変更できるようにオペアンプ(単電源のMCP6022使用。LM358など使用可)で調整します。NTCは温度が低いと抵抗が上がるので流す電流を下げないと、大きな電圧が発生してしまい(電圧降下が大)、または自己発熱により測定できません。逆に温度が低いときは、抵抗値がきわめて小さくなるので電流を上げないと、電圧を検出できません。そこで、一般にNTCを使用する場合は、測定する温度範囲によって測定するための電流を変えます。下図のグラフでは60度C以下では10μA、60度を超える温度範囲では100μAが最適と示されています。この製作例では、オペアンプMCP6022を使用した定電流発生回路によりボリュームを回して100μAに調節して使用します。つまり、R2が3.3kΩとすると、トランジスタのエミッタ電位が4.67V(=5V-(3.3k×0.1μA))(電源電圧の誤差、抵抗R2の誤差がありますので最終的には、LCDに表示される実測値を見ながら調整します)となるように設定するということです。ちなみに回路ではボリュームの可変範囲が大きすぎます。これは定電流値をいろいろ変えて実験しようと思ったためです。100μAに固定する場合は、ボリュームのプラス側、マイナス側に固定抵抗を挿入し、可変範囲を狭くしたほうが使いやすいです。ソフトウェアはデフォルトでは100μAの電流で測定するようになっています。異なる電流を使用する場合は、このR2とソフトウェアをモディファイしてください。下図参照(出典:米ILX Lightwave社アプリケーションノート)。


ボリュームをまわすと電流を変えられます。LM35などのIC型温度センサーを使用する場合の回路は回路図参照。
 H型FET素子は、東芝製のMP4212を使用。ペルチェ素子駆動には力不足です。しかし、小型のペルチェ素子用、モーター制御用または実験用として使用可能です。ちなみに、この製作例は簡単にサーボモータをPIC制御できるように簡単に変更できます(機会があれば掲載します)。ペルチェ素子による加熱冷却能力は電流と電圧に比例しますのでアプリケーションにあわせて、個別FETでH型駆動回路を作成してください。Googleなどで「H型ドライバ」などの検索ワードで検索すると、たくさん製作例が出てきます。
 LCDとしては、SUNLINK社のSD1602H(小型、バックライト付き)を使用しています。
ロータリーエンコーダはアルプス製の機械式を使用しています。チャタリングが多いのでソフトによるチャッタ除去処理が必須です。
 LEDとして出力時表示に赤色、加熱/冷却表示に2色LED(赤と青入り)を使用しています。2色LEDが入手できなければ単色をLEDを2個使用してください。青色・赤色2色入りLEDはアキバで見つけたのですが、先週その店に行ったところ、もう売ってませんでした。DigikeyやRSコンポーネンツ通販サイトも探しましたが青色と赤色の2色LEDはありませんでした。レア品かもしれません。
 2個のタクトスイッチより、出力オン/オフとファンクション(目標温度設定、温度センサー設定、B定数設定(NTC使用時のみ表示)、P係数設定、I係数設定、D係数設定、PWMデューティー表示化可否設定)を行います。写真(2)の右側のタクとスイッチを押すと出力します。写真(2)の左側のスイッチを押すとファンクションが変わります。
ソフトウェア説明:
8kワードほとんど使用してます。ムダが多いです。
 温度制御にはPID制御を使用しています。PID制御とは、対象物を目標値に導く制御方法であり、最短時間で、最適な形(目標値に対して行き過ぎたり、少なかったりしないということ)で目標値に達するように制御します。一般にP制御(比例制御)だけだと「振動」(目標値に達しても、行き過ぎて加熱しすぎ、あわてて冷却すると、また行き過ぎて冷却しすぎ、また加熱、また冷却と、いつまでも目標値で安定しない現象)します。目標値と現在値の差の値に係数を乗算するだけで、そのまま利用(P:プロポーショナル。比例制御)する部分と、差とその時間でできる面積に相当する積分値(I:インテグラル。積分制御)を利用する部分と、目標値との変化速度量に相当する微分値(D:デリバティブ。微分制御)(グラフで傾きに相当する部分です)を利用する部分の3つの制御値(PとIとD)で制御します。日本語では、比例積分微分制御と呼ばれます。温度制御では、一般にPI制御(比例積分制御)のみ行われるのが一般です(微分制御はない)。以下の式で表されます。
 MV(t) = Pout + Iout + Dout
(式の説明:MVはマニュピレート・バリアブルつまり制御量。P制御値とI制御値とD制御値を加算したものが制御量となることを示しています)
それぞれP、I、D制御値は下記の式で表されます。



PIDそれぞれの係数「K」の最適な値は、ペルチェ素子、対象物の熱容量に左右されるので、ロータリエンコーダで自由に変更できるようにしています。
P制御値は、単純に目標値と現在値の温度差に係数Kpを乗算しています(下図)。

I制御値は、目標値と現在値の差をソフトのループが測定するごとに加算しているだけです。簡単な面積分してます。それに係数Kiを乗算しています(下図)。

D制御値は、目標値と現在値の差を測定した時間の差で割り算して傾きを計算しているだけです。それに係数Kdを乗算しています。最初に説明しましたが、PIC-P40でサーボモータをも駆動するように製作した回路とソフトウェアなのでD制御していますが、温度制御だけならPI制御だけでD制御は必要ないかもしれません(下図)。

(注記:出典は米Wikipedia。各グラフはWikipediaを参照しています。詳しくは下記のWikipediaをご覧ください。かなり詳しく説明されています。http://en.wikipedia.org/wiki/PID_controller
 温度測定の部分は、温度センサーとしてNTC(サーミスタ。25度Cのとき10kΩ)を使用していますので、対数計算しています。温度と抵抗値とB定数の関係は以下の式で表されます。

(説明:T0は基準温度、R0はそのときの抵抗値。つまり、この製作例で使用したサーミスタは25度Cのとき10kΩなのでT0が25度、R0が10kΩです。ただし、K(ケルビン)単位ですので273.15加算した値です。)
対数計算は、今回使用しているCCS社のCコンパイラではライブラリとして提供されているので、このままの式を書けば、計算してくれます(CCS社のCコンパイラに感激。簡単すぎる!)。しかし、マイコンキットドットコム店長自作のソフトウェアのムダが大きく、8kワードに入らなくなったので、変換表を使用して対数を求め、適当に補間し、少ないプログラムメモリで処理しています。使用したPICの16F877Aには10ビットのADコンバータが搭載されていますが、マイナス温度からプラス80度くらいまでを制御(温度測定する)する場合には、足りません。そこで測定と変換処理を16回繰り返し、14ビット相当のADコンバータとしてソフトで処理し、小数点以下2桁の温度を表示しています(下図の「Actual」が測定値)。ちなみに64回測定と計算を繰り返せば16ビット相当のADCを実現できるかもしれません。ソフト中のループ回数を「16」から「64」に変更するだけです。どうなるかお試しください。

温度センサーとしてIC型のLM35も使用できるようにソフトウェアを作りました。ファンクションスイッチで項目を選択し、ロータリーエンコーダをまわすと切り替わります。しかし、回路は作っていません。回路図に掲載しましたので、作って加えればNTCもLM35も使用できます。
 ペルチェ素子の駆動にはMP4212を使用し、それを2ビットのPWM出力と2ビットの制御出力でエネルギーと方向を制御しています。インバータ素子を入れれば各1ビットでもOKです。PID値計算プログラムで得たMV(制御量)によりPWMのデューティー比を変え、温度差の正負から電流の向きを変えています。同時に2色LEDを点灯させています。加熱のとき赤色、冷却のときに青色。ちなみに、ペルチェ素子ではなく抵抗型のヒータ(ニクロム線など)を使用するときは、制御線1ビットを使用すれば簡単に実現できます。自宅でPCBをエッチングするときの加熱用であればこれで十分です。
 ロータリーエンコーダは機械式を使用しており、かなり安価な部品を使用したのでかなりチャッタが発生します。したがって早くまわせません。しかし、温度コントローラの温度設定は、あるときはプラス40度C、あるときはマイナス10度Cにするなど、高速に温度を変えたいときがあります。そこで、クリック間(クリックのある製品を使用しています)で止めたときに、その直前の状態(インクリメントかディクリメントか)によって、高速にインクリメントかディクリメントしています。これでチャッタの心配はいりません。快適に、高速に、イッキにマイナス10度Cからプラス80度Cまで変更できます(必要あれば)。つまりゆっくりまわせば0.1度ずつ増加・減少し、クリックの間で止めれば、1度ずつ高速に増加・減少します。その変化量については詳しくはソフトウェアを見てください。好みにあわせて変えてください。
 ファンクション切り替えをタクトスイッチで行います。CASE文を使っています。切り替えると、LCDの1行目にそれぞれ設定する項目が表示されます。2行目は常に現在の温度を表示しています。タクトスイッチを押すごとに表示される順番:目標値(Target)>温度センサー(NTC or LM35)>B定数(B const。ただし、この項目は温度センサーとしてNTCを選択したときにだけ表示されます)>P係数(P gain。上記の式のKpです)>I係数(I gain。上記の式のKiです)>D係数(D gain。上記の式のKdです)>PWMのデューティー比表示可否(Display Duty?。制御の確認用にPWMのデューティー比を表示します。冷却時はマイナス値になります)。下図。

それぞれの値はすべてロータリーエンコーダをまわして設定します。上記の説明のようにクリックの間で止めると高速に変化します。
 設定値(目標温度、B定数、PID係数)を保存するために内蔵のEEPROMにソフトでその値を保存するようにプログラムを途中まで作成しましたが、「Out Of ROM」がCCS社のCコンパイラで発生し、最終的にあきらめました。マイコンキットドットコム店長自作のCソースではムダが多く、内蔵プログラムメモリに入りきりません。ぜひ、入るようにチャレンジしてください。


ケース実装例:
上の写真では、PIC-P40温度コントローラボードをタカチ製「SY-150A(アイボリー色)」に実装しています。パネルの印刷(レタリング)は、コクヨ製ノリ付きインクジェットプリンタ用クリアラベル(A4サイズ)で印刷し、フロントパネルに貼り付けています。
LCD部分は印刷しなければクリアな窓として透けて見えます。ドローイングツールで作図すれば、インスタントレタリングなどの手間はかからず簡単です。さらに、右のロータリーエンコーダーの文字「Temperature」のようにツマミを囲むように丸く文字を並べることも簡単です(LEDの文字「OUTPUT」「HOT/COOL」も丸く囲んでいます)。オススメ。デザインは、米国の測定器メーカー風に作りました。
LCDはSUNLINK社の「SC1602B」を使用しています(製作例の1602Hとコネクタが異なるだけで制御方法は同じなので簡単に置き換えられます)。下に並ぶスイッチは左から電源、ファンクション、出力オンスイッチです。いずれも日本開閉器製のパネル取り付け型スイッチです。LEDは上が出力オン表示、下が加熱/冷却表示(2色)です。
パネルの加工は、ケガキせず、上記の作図図面を紙にプリントし、低粘着スプレーノリで貼り付け、慎重にドリル、リーマー、ハンドニブラ(ホザン製)で加工し、加工完成後に貼り付けた作図図面をはがすだけです。これもオススメ加工法です。ただし、プリンタの寸法精度を事前に確認してください。ちなみにマイコンキットドットコムが使用しているインクジェットプリンタは1%大きくプリントされ、レーザープリンタは0.5%大きくプリントされます。正確に作る場合は、その%分を小さく作図します。パネルの作図、プリント、加工に4時間程度必要です。
上記のクリアラベルによるパネル制作方法、パネル加工方法などをいずれご紹介します。

オマケ:
この製作例はサーボモータの自作例を掲載するためにも検討した、と説明しました。実際にマブチモータを取り付けた例です(下図)。

目標値付近で、赤色と青色のLEDを交互に点灯させながら、軽快にプーリーが右回転、左回転と切り替わります。実際にサーボ機構として動作させるには、プーリーに可変抵抗(ボリューム)を固定し、その抵抗値をこの製作例の温度測定値の代わりに入力、フィードバックさせ、制御はレバーを付けた可変抵抗(ボリューム)の値を変えることで行う。これにより、「倒立振り子」も簡単にプラス1000円程度でできるかもしれません。次回の製作例をお楽しみに。

注記:この製作例はマイコンキットドットコム店長が作成し、参考に公開しているのものです。製品として動作を保証するものではありません。そのままで動作はしますが、冗長な回路、プログラムが多く、手本にはなりません。あくまでも参考とお考えください。
USBインターフェイス付きのPIC-P40-USBでも製作できます。USBインターフェイスが必要なときは、PIC-P40-USBをご使用ください。

謝辞:CCSCソフトウェアの作成、PIDの検討、PICそのものの使用方法、CCSCで「Out Of Memory」が出たときの対処方法などPIC業界で有名な後閑哲也様の「電子工作の実験室」(http://www.picfun.com/)を参考にさせていただきました。さらに、2桁表示LCDの表示用ライブラリの使用などをご本人に快く承知していただきました。感謝いたします。

参考資料:
PIC-P40による温度コントローラ製作例の回路図(PDF)
PIC-P40による温度コントローラ製作例のCソースとHEX(zip)

ページトップへ