安価で比較的扱いやすいPIC(Peripheral Interface Controller)は、世に出ている様々な製品に内蔵されている。その中でも主に制御部分に関する回路等で使用される。
本研究では、PICを用いて実際に製作した周辺機器の制御を行う。さらにPICの制御により、製作した機器から得た情報をPICに内蔵されたUSART(Universal Synchronous Asynchronous Receiver Transmitter)と呼ばれる周辺機器との通信を可能にする機能を用いてPCとの通信を確立し、PICによる周辺機器からの情報収集を行うことを目的とする。
ここでは本研究で使用するPICについての説明を行う。
マイコンとはマイクロコンピューターの略である。1971年、ビジコン社の嶋正利氏と、インテル社のテッド・ホフ(Ted Hoff)氏の共同発明によって初のマイコン「4004」が誕生した。マイコンが誕生してから近年までに数多くの種類が開発されている。さらにこのマイコンに内蔵されている機能はより高性能でかつ高速化し、中では、必要とされる周辺機器制御の機能を全て含んだワンチップマイクロコンピュータと呼ばれるものも開発されている。特に周辺機器との制御に特化したマイコンも存在する。本研究で使用したPICとはGeneral Instruments (GI)社により周辺機器のインターフェース制御用に開発されたものである。現在のマイコン開発で知られるMicrochip社はもともとこのGI社内の電子部品を扱う事業部門の1つであった。1987年にPICの開発、生産専用の工場として独立し、現在のMicrochip社となった。本研究で扱うPICは周辺機器制御用に開発されたマイコンである。これらはマイコンの中でも非常に簡単な構造になっており、また、35個という少ない数の命令によってプログラムを作ることが出来る。以上のことから使いやすく安価であるということがPICの最大の特徴であり、この特長を生かし様々な用途の製品に使われている。身近なものではPCを含む電化製品から自動車、産業機器に至るまで幅広く使用されている。
PIC(Peripheral Interface Controller)とはMicrochip社が開発したコンピュータ周辺に接続されている周辺機器を制御することを目的としたマイクロコントローラー(Microcontroller)と呼ばれる種類のICである。PIC単体にコンピュータに必要とされる機能(CPU、メモリ(RAM・ROM)、I/O等)が内蔵されており、基本的には電源と入出力装置があれば動作をする。PICの動作はROM内に書き込まれたプログラムに従って動作する。プログラム開発に使用できる言語はアセンブリ言語とC言語である。また、Microchip社によってPIC用の統合開発環境MPLAB IDEが無料で提供されている。統合開発環境とは、プログラムの作成、実行、デバッグができる環境のことである。
本研究ではMPLAB IDEの環境下でアセンブリ言語を使用して開発を行うこととする。
PICには大きさやI/Oピンの数、内蔵された機能の違い等によって数多くの種類が存在し、PICが扱うデータによっても8bit、16bit、32bitがそれぞれ存在する。この中で一般に幅広く使用されている8bitのPICについて大別すると、図1に示すように3つに分類することが出来る。以下にこれらの特徴を述べる。
PICの命令が12bit幅で、初期に開発された非常にコストパフォーマンスに優れたシリーズである。I/Oピン、タイマ機能を持ち、PIC自体の面積も小さく、低電圧(約2.0V)での動作が可能なタイプも存在するためバッテリー駆動等に適している。
PICの命令が14bit幅で、シリーズ中最も幅広く使用されているシリーズである。機能もA/D変換やシリアル通信といった多くの機能を備えており、種類も豊富である。
PICの命令が16bit幅で、シリーズ中最も上位にあたり、機能も高機能である。また、実行時間も最速である。
本研究で使用するPICはミドルレンジシリーズの上位にあたる16F877Aを使用することとする。16F877Aは基本的には電源5Vとクロックによって動作する。
アセンブリ言語とはプログラミング言語の種類の1つである。コンピュータが直接解釈、または実行が出来るマシン語と1対1で対応した言語であり、もっともマシン語に近い低級言語である。低級といってもアセンブリ言語ではマクロ機能を使用出来るものもある。マクロとはプログラム中に記述された特定の文字列をあらかじめ定めておいた規則に従って置換することをいう。この機能を使うことによってプログラムがシンプルになるほか、抽象的な指示が可能になるといったプログラムを作成する上でメリットとなる点がある。
USART(Universal Synchronous Asynchronous Receiver Transmitter)とはシリアル通信を行う回路を示す。シリアル通信とは1本の信号線上の信号をプロトコルに従い「1」、「0」でデータを送る通信方法である。この通信方式には全二重の非同期式(調歩同期式)通信と半二重の同期通信の2種類がある。
本研究で使用するPICにはこのUSART機能が内蔵されており、PCや他の周辺機器とシリアル通信を行う用途で使用できる。通信方式は上記で述べた2種類に対応しているが、同期式通信においては周辺デバイスとの簡単なデータ通信用として設計されているため、高度な同期式通信として使用する目的には向かない。また、PIC上では通信速度(ボーレート)を設定する際にボーレート設定値としてあらかじめ定義された式よりPICのクロック数等から適切な値を算出する必要がある。
本研究ではPCとの通信を目的とし、PIC動作による温度センサーを備えた時計を製作する。
本研究で製作した製作物の仕様を動作モード、スイッチの機能ごとにまとめたものを表1に示す。動作モードには通常時、時刻修正時、PC通信可時という3つのモードがある。本研究では時刻や温度を取り扱うため、それらを表示するのに液晶表示器(LCD)を使用する。1行目に時刻、2行目に現在の温度TとPCの通信状態(ON、OFF)を表示する。また、スイッチをSW1〜SW4の計4つ実装し、通常時はSW1で時刻の12時間表示、24時間表示の切り替えを行う。SW2はPCの通信状態の切り替えを行い、通信可の場合はON、通信不可の場合はOFFとする。SW3、SW4は使用不可である。また、SW1を約2秒間押し続けることによって時刻修正モードに切り替わる。この状態の時はSW2で修正位置(時、分、秒)を決定し、SW3で時刻カウントアップ、SW4で修正時刻を反映させ、その後通常時に戻す。SW1は使用不可である。温度の更新は1秒未満の間隔で随時行うが、スイッチ等何か操作を行っているときは温度更新をしない。なお、PCの通信状態がONの時はSW2以外のスイッチは使用不可となる。実際のLCD表示例を図2、図3、図4にそれぞれ示す。
スイッチ名 | 各動作モードにおけるスイッチの機能 | ||
---|---|---|---|
通常時 | 時刻修正時 | PC通信可(ON)時 | |
SW1 | ・時刻表示(24H、12H)の切り替え ・時刻修正モードへの切り替え | 使用不可 | 使用不可 |
SW2 | 通信状態の切り替え | 修正位置合わせ | 通信状態の切り替え |
SW3 | 使用不可 | 時刻カウントアップ | 使用不可 |
SW4 | 使用不可 | 修正時刻反映 | 使用不可 |
本研究で製作した回路に関して機能ごとに分けて詳細を説明する。回路図を付録1に、回路全体のブロック図を図5に示す。
図6は電源回路部分の回路図である。電源回路部ではPICの動作に必要な安定した5Vを供給する目的がある。また、A/D変換の際に必要となる基準電圧(5V)としての役割も兼ね備えている。安定した電圧を得るために色々な手段が考えられるが、比較的に部品点数も少なく簡易的に得られる方法として本研究では3端子レギュレータを使用した。これは3本の端子を持ち、それぞれ入力電圧、出力電圧、GNDに分かれる。動作は入力に一定の電圧を加えると、出力に希望する電圧が安定して出力されるというものである。希望する電圧というのはレギュレータによってそれぞれ出力される電圧の種類があるため、今回は5Vを出力するタイプのレギュレータ(78L05)を使用した。入力電圧の決定は通常、希望する電圧の+2Vとされているため入力電圧は7V以上で設定した。また、あまりに入力電圧が高すぎると、入力電圧と出力電圧の差がほぼ熱に変わるため、熱対策をしないと自身が発する熱でレギュレータ自体が壊れる可能性が出てしまう。そのため、熱対策が必要ない程度の電圧(約9V)で入力電圧の最大値を設定した。
レギュレータの入出力側にそれぞれ接続されたセラミックコンデンサは発振防止用である。このコンデンサはレギュレータを使用する上で必ず使用しなければならないもので、これがないと希望する動作は得られない。加えて、入力側に接続された電解コンデンサは、レギュレータへの電圧供給をより安定化させるために使用している。
図7はクロック部分の回路図である。PICによっては内部にクロック回路を持ち、電源と出力装置さえあれば動作するものがあるが、本研究で使用したPICにはクロック回路は内蔵されていない。そのため外部にクロック回路を用意する必要がある。本研究ではPIC動作に必要なクロックと、時計用に使用するクロックとを兼用することとする。よって高精度でかつ入手が容易であるクロックが必要となる。これらを満たすものに高精度発振ユニットというものがある。今回使用したものは5Vで動作する出力周波数12.8MHzの発振ユニットである。このユニットの出力波形を図8に示す。図8より正確に12.8MHzが出力されていることが分かる。
図9はスイッチ部の回路図である。スイッチに接続する抵抗はプルダウンとしている。PICは電圧5Vを「1」、0V(GND)を「0」と認識しているため、スイッチのみでPICと接続を行った場合、スイッチが押されていない時は5VにもGNDにも接続されていない不安定な状態となる。そのため、5V側もしくはGND側に抵抗を接続し、抵抗を通してPICに接続するようにするとスイッチが押されていない時の判別が正確に行える。ここでGND側に接続された抵抗をプルダウン抵抗と呼ぶ。プルダウン抵抗を接続した場合、スイッチがONの時は抵抗に5Vがかかるため、その手前にあるPICとの接続部も同様に5VとなりPICの入力は「1」となる。スイッチがOFFの時はPICとの接続部分がGNDと同電位となるためPICの入力は「0」となる。よって、スイッチが押されるとPIC内部では「1」、放されると「0」となる。
図10はPIC→PC方向へと通信を行うための変換回路である。外部の機器がPCとの通信を行う方法としてシリアル通信という方法がある。その中でも一般に最も普及している通信規格にRS232C(EIA-232)というものがある。この規格の信号レベルはRS-232Cレベルと呼ばれる独特のもので、「1」と認識する電圧は-3V〜-15V、「0」と認識する電圧は3V〜15Vとなり、負論理となる。一方、PICではTTLレベルという信号レベルで、約2〜5Vの時「1」、約0.8V〜0Vの時「0」と認識する。つまりRS232C規格でPICとシリアル通信を行う場合は信号レベルを規格に合わせて変換する必要がある。本研究ではRS-232C規格に完全に準じて通信を行うことを目的とせず、PCとの通信を行うことに重点を置いているため、簡易的な方法を用いて変換回路を設計した。
図10よりPICから「1」をPCへ送信する場合、PIC側は5Vであるため、10kΩの抵抗を通しトランジスタ(2SC1815)のベースへと電流が流れる。するとトランジスタの特性によってコレクタからエミッタへと電流が流れる。するとPC側(RXD端子)はGNDと同電位となり0Vとなるが、この電圧値ではRS-232C規格には合わない。しかし、市販されているほとんどのPCのシリアルポートがケーブル未接続時の誤動作防止のため0Vで「1」と判断するように設計されている。そのため、0V時にはPC側では「1」と判断する。次に、PICから「0」をPCへ送信する場合、PIC側はGNDと同電位となりベースへは電流は流れない。そのためRXD端子は1kΩの抵抗を通して5Vと接続された状態となる。ここで抵抗値を1kΩとしているのは、RXD端子のインピーダンスが小さいため、大きな抵抗値にすると電圧降下によりRS-232C規格に満たなくなってしまうためである。よって、1kΩとして3V以上となるように調節し、「0」と判断させている。以上よりPIC→PCへの電圧レベルの変換が行われたことになる。
図11はPC→PIC方向へと通信を行うための変換回路である。図11よりPCから「1」を送信する場合、PC側(TXD端子)は約-15Vとなる。このままでは逆起電圧によりトランジスタを破壊してしまうため、ダイオード(1N4148)を接続しトランジスタに逆起電圧がかからないようにしている。よってトランジスタのベースには電流が流れないため、PIC側では10kΩの抵抗を通して5Vと接続された状態となり「1」と判断する。次にPCから「0」を送信する場合、TXD端子は約15Vとなるため10kΩの抵抗を通してベースへと電流が流れる。するとトランジスタの特性からコレクタからエミッタへ電流が流れるためPIC側の端子はGNDと同電位の0Vとなり「0」と判断する。以上よりPC→PICへの電圧レベルの変換が行われたことになる。
図12は温度センサー部の回路図である。本研究で使用した温度センサーはS-8100Bというセンサーである。電源は3Vから動作し、測定温度範囲は-40℃〜100℃、温度特性は-8mV/℃である。そのため5Vで動作させた時、測定範囲内で出力される電圧は最大でも約2V程度となる。また、電圧の変化が8mVと非常に小さいためノイズの影響を受けやすい。そこでノイズ対策として出力にセラミックコンデンサを接続している。加えて電源側に1MΩの抵抗を接続しているのは、センサーの出力インピーダンスが高いため、外部回路と接続した場合に出力電圧が低下する可能性があるのでプルアップ抵抗として接続している。
図13は液晶表示器部分の回路図である。本研究で使用するLCDはSC1602BS*Bというもので、5Vで動作し16文字×2行の表示が可能である。このLCDには14の端子がありそれぞれ電源、GND、表示のコントラスト調節、RS、R/W、E(STB)、DB0〜DB7までのデータ送受信用の端子である。このLCDをPICから制御するのにRS、R/W、E(STB)の3つの端子と8bitからなるコマンドを用いて行う。通常はDB0〜DB7までの8bitでデータのやり取りを行うが、今回はプログラム上で工夫することによりDB4〜DB7までの4bitのみを使用してPICで使用するポート数を通常の半分とした。Vo端子に接続されている20kΩの抵抗は半固定抵抗で、この抵抗値を調節することによって液晶表示の濃さ(コントラスト)を調節できるようにしている。4bitバス時の初期化のフローチャート図を付録2に示す。
3.2(7)で簡単に触れたが、LCDの制御にはRS、R/W、E(STB)の3つの制御信号を使用する。それぞれの制御信号を送るタイミングは時間的に決まっており、RS、R/W信号の組み合わせによってLCDへの読み込み、書き込み等の制御コマンドを区別する。ここでは制御部分についての詳細を説明する。
RS信号は書き込み対象のレジスタを選択するための信号である。R/W信号との組み合わせで使用する。
R/W信号はLCD内部のレジスタの読み込み、及び書き込みの切り替えを行う信号である。RS信号との組み合わせで使用する。
E(STB)信号はデータのイネーブル信号で、データの出力時に関係する信号である。LCDへデータを出力する場合、データを出力した後にE(STB)をLow、High、Lowと変化させる必要がある。
ここで読み込み時、及び書き込み時における各制御信号の詳細なタイミングチャートを図14に示す。また、図14から実際に読み書き時の制御に影響する部分のタイミングチャートを図15に示す。さらにRS、R/Wからなる制御コマンドの一覧を表2に示す。制御コマンド内の制御命令とはデータの内容によって命令を定義し、その定義されたデータをLCDに送ることによって液晶表示に特殊な動作させるものである。この制御命令の一覧を付録3に示す。プログラムを作成する上でLCDにデータを読み書きする場合は図15に示すタイミングで制御を行うこととする。つまり、液晶への書き込み時は書き込みデータを出力した後にRS、R/W信号を送り、その後にE(STB)を「1」、「0」と切り替える。逆に液晶からの読み込み時はRS、R/W信号を送り、その後にE(STB)を「1」とし、データを読み込んだ後に「0」とする。
RS | R/W | コマンド内容 |
---|---|---|
0 | 0 | 制御命令の出力 |
1 | 0 | 表示、文字データの出力 |
0 | 1 | ビジー信号の入力 |
1 | 1 | 表示、文字データの入力 |
本研究ではPCとの通信にPIC側では内蔵されたUSART機能を用いてシリアル通信を行う。PC側では付属のハイパーターミナル上で操作を行う。シリアル通信の通信方式は非同期式通信、通信速度を9600bps、データビット数を8bit、通信障害検出用のパリティビットのチェックを無しとし、通信バッファあふれ防止用のフロー制御をしないとして通信を行うこととする。また、PCとの通信において扱う情報は現在時刻(24時間制)及び温度情報である。実際に通信を行ったハイパーターミナル上の表示例を図16に示す。加えてPICからPCへの通信を行っている時の波形を図17に示す。図17において、図中の上部の波形がPICから出力された波形、下部の波形がPC側のシリアルポートの受信部の波形である。波形は上下逆さまとなっており通信が行えていることがわかる。
本研究で作成したプログラムについてフローチャートを用いて機能ごとにプログラムの流れを説明する。プログラム作成ではマクロを使用した。マクロはclock_macro.incとして別ファイルに作成した。また、各機能との同期を取るためにフラグを使用している。定義したフラグは以下の通りである。
・時計部分(clockflg) bit 0 1秒経過したかどうか 0 : していない 1 : した bit 1 時刻修正(set)モードかどうか 0 : setモードではない 1 : setモードである bit 2 12Hと24Hの切り替え判定 0 : 12H 1 : 24H bit 3 12Hの時、AMかPMかの判定 0 : AM 1 : PM bit 4 時刻修正時のAM、PM判定 0 : AM 1 : PM bit 5〜7 未定義(常に0) ・スイッチ部分(swflg) bit 0 SW1が押されたかどうか 0 : 押されていない 1 : 押された bit 1 SW1が押され、長押しではなく単なるクリックかどうか 0 : クリックでない 1 : クリック bit 2 SW1が押され、長押しされたかどうか 0 : 長押しではない 1 : 長押し bit 3〜7 未定義(常に0) ・PC通信部分(pcflg) bit 0 通信モードかどうか 0 : OFF 1 : ON bit 1 通信モードがONになった後、初回の通信かどうか 0 : 2回目以降 1 : 1回目 bit 2〜7 未定義(常に0) ・温度部分(tcheckflg) bit 1 温度がマイナスかどうか 0 : 正 1 : 負 bit 2〜7 未定義(常に0)
作成したプログラム及びマクロを付録4、付録5にそれぞれ示す。
メイン部のフローチャートを付録6に示す。メイン部では主に1秒ごとの時刻更新とスイッチの入力の有無、及びSW1の長押し判定を行っている。
スイッチの判定の仕方を図18に示す。本研究ではスイッチ(SW1)が押されてからある一定の時間が経過するまで押され続けた場合に長押し、一定時間が経過する前に放された場合はただの押しと判断するようにしている。プログラムでは、初めにswflgをチェックし押されていなければidle状態へ、押されていればactive状態へ進む。active状態では長押し用の判定タイマーを減算して0になったら長押し、そうでなければ押しと判断し、swflgの対応するbitを「1」とする。ここで述べる長押し判定用タイマーの値は実測で約2秒となるように値を設定している。また、idle状態の時はスイッチが押されたかどうかをチェックすると共に、押されていなければ温度更新を行うこととしている。なお、温度更新にはインターバルタイマを用意し、一定時間を設けることによって表示のふらつきを抑えている。
時計部では主に1秒のカウントとスイッチごとの処理を行う。時計部のフローチャートを付録7に示す。ここで重要となる点は1秒のカウントである。本研究ではPIC動作用のクロックと兼用で1秒カウント用のクロックとして12.8MHzのクロックを使用している。また、割り込みを使うことによって他の処理中でも正確なカウントが行えるようにしている。カウント部分のプログラムはマクロで定義している。
温度部では主に温度センサーから出力された電圧値をPIC内部でA/D変換によってデジタル化し、計算式から温度へ換算する。また、温度が負の場合はERRORとし、エラー値として ? を温度データとする。温度部のフローチャートを付録8に示す。
通信部では主にPIC側でSW2を押して通信モードをONにすると、初回通信時にハイパーターミナル上にメッセージを表示し、コマンドの受信とSW2の入力をチェックする。PC側でEnterを押すたびにそのときの時刻(24時間制)と温度を表示する。また、EもしくはPIC側でSW2を押すと終了メッセージを表示し、通信モードをOFFとする。通信部のフローチャートを付録9に示す。
3.にて回路、プログラムについての説明を行った。ここでは本研究で製作したマイコン時計の精度について説明を行う。
1秒をカウントするために12.8MHzのクロックを分周することによって1Hzを作り出すこととする。ただし、時計用に使用しているクロックはPICと兼用で使用しており、内部クロックとして設定しているためPICの仕様上、無条件でクロック周波数は1/4となる。そのため、3.2MHzから分周を行うこととなる。プログラム上で分周させる方法としては様々考えられるが、本研究ではPICが内蔵するTIMER1とCCP1機能を使用して1Hzを生成する。今回使用したPIC16F877Aにはタイマー機能が3種類内蔵されている。タイマー機能とは、ある一定周期に何かを実行させたい時に用いられるものである。その中でもタイマー1は16bitで構成されるタイマーで、この3種類の中では最も多いbit数である。さらにタイマーにはプリスケーラと呼ばれるものがあり、これはタイマーへクロックを適用する際にあらかじめ用意された値で分周を行うものである。これを使用することによってある程度分周されたクロックがタイマーへ適用される。ここではタイマー1のプリスケーラで設定できる最大値(1/8)を設定した。この段階でタイマー1に適用されるクロック数は0.4MHzとなる。ここでTIMER1とCCP1機能とを組み合わせて使用する。CCP1には複数の機能があるが、その中のコンパレータ(16bit比較器)としてのコンペアモード機能を使用する。この機能はTIMER1がCCPに指定したカウント値になった時にイベントを起こす機能である。この機能を使ってプリスケーラ機能を実現することとする。ここでは、プログラム上で扱いやすい値にするために16000をCCP1に設定することとした。これより最終的に分周されたクロック数は25Hzとなるので、カウント値に達したら割り込みを発生させるようにすると、1秒間に25回割り込みがかかることになる。そのためプログラム上で25回カウントすれば正確な1秒が得られることとなる。以上を式にすると下記式(1)のようになる。
4.1では1秒の生成方について説明を行った。理論的には4.1の内容で1秒の生成が行えるはずだが、実際の環境下で使用する場合は様々な影響によって出力される周波数に誤差が生じる場合がある。特に発振ユニットは温度による影響を受けやすいため、本研究では常温(約20℃)と低温(約5℃)の環境化において時計としてどれほどの精度が期待できるかの実験を行った。
本実験ではクロック回路と電源回路、LCD、及びスイッチからなる時計として動作する最低限の回路を基板上で構成し、実験用ハードウェアとして製作した。実際の製作物を図19に示す。このハードウェアは外部電源を使用し、スイッチを押すことによって1秒カウントが開始される。これを常温と低温の環境下にそれぞれ配置し、1週間経過後の液晶表示を目視により確認し、誤差を求め精度を確かめる。また、比較する基準となる時間は電話の時報「117」とする。
常温時における誤差は肉眼では確認できなかった。また、低温時における誤差については、表示に若干のぶれがあったが1秒未満であったため肉眼では正確に1秒以上の誤差としては確認できなかった。
肉眼で確認する限りでは常温及び低温の環境下では1秒以上の誤差は認められなかったが、時報や肉眼での確認等、誤差は確実に発生しているため、今回の実験では誤差を約±0.5秒として考えることとする。すると、精度を式(2)のように計算すると、
となった。これを月差で考えると、月差約±2秒となる。
本研究での温度機能部分に関しての詳細な説明を行う。
本研究で使用した温度センサーの温度対出力電圧の関係を図20に示す。また、この温度センサーの温度特性は-8mV/℃である。温度センサーから得られた電圧はA/D変換によってデジタル化される。PIC16F877Aは10bitのA/D変換が行える。ここではA/D変換の基準となる電圧を5Vとして取り込んだ電圧を10bit(1024)に分割して表すこととする。すると、10bitのA/D変換での1bitあたりの電圧は約5mVとなるため、問題なくセンサーの細かな変化もA/D変換することが出来る。ここで、温度分解能をxとすると式(3)が成り立つ。
式(3)よりxは
つまり温度は0.61℃ごとの測定となる。
温度分解能が0.61℃であるため、LCD上で確認するには中途半端な値となる。そのため今回はLCD上に表示する温度は整数値のみの3桁とした。
A/D変換によって得られた値から実際に我々が認識できる温度T[℃]に変換する必要がある。変換する際には温度変換の式を作り、その式からプログラム上で計算を行ってLCDへと表示する。図20よりセンサーからの入力電圧をv0[V]とした時、温度T[℃]を求める式は式(4)となる。
ここで、A/D変換値をyとした時、v0は式(5)のように表せる。
式(4)、(5)より実際の温度を計算する。
市販のセンサーは理論値と比べて多少の誤差を含んでいるため、その較正を行うこととする。式(4)は図20より得られた式であるが、下記式(6)のように変数a、bからなる1次式とみることが出来る。
式(6)の変数a、bを実際に実験により求めることによって較正する。変数a、bを求めるためには式が2つあれば求まるため、ある2点の温度を測定し、その時のセンサーの出力電圧を測定することにより較正が可能となる。
ある2点の温度を標準となる温度計と共に測定し、それを比較し較正を行う。本実験では0℃と50℃の2点を測定することとする。また、LCD上に温度とA/D変換値を表示するようにする。測定温度を作るためにクーラーボックス、小型扇風機とペットボトルからなる簡易的な恒温槽を製作する。恒温槽は通常以下の機能から成り立つ。
(a) 外部の温度の影響を受けにくくするための断熱性のある箱
(b) 発熱体
(c) 温度監視部分
(d) 温度制御部分
以上の機能を今回は以下のように代用し恒温槽としての機能を実現することとした。
(a) クーラーボックスを使用
(b) 0℃時は氷水、50℃時はペットボトル内にお湯を入れたものを使用
(c) 測定温度を目視により確認
(d) (b)の発熱体の温度を調節
他に、ボックス内の空気を循環させるために小型の扇風機を使用する。図21に実際に製作した簡易恒温槽を示す。標準とする温度計はK型熱電対タイプの温度プローブをディジタルマルチメータに接続したものとする。以下に実験手順を示す。
@ 簡易恒温槽で0℃と50℃の環境を作り、それぞれにおいてセンサーから得られた温度とA/D変換値を測定する。
A 測定したA/D変換値を式(5)に代入してv0を求め、式(6)に代入する。
B 代入により得られた0℃時と50℃時の2つの式よりa、bを求める。
測定結果、較正前の温度、較正後の温度を表3、表4、表5にそれぞれ示す。また、表3より変数a、bは以下となった。
温度 T [℃] | A/D変換値 |
---|---|
0 | 359 |
50 | 279 |
|
|
以上の結果より、整数値部分において正しく較正が行えた。
本研究ではPICを用いて温度機能を備えた時計を製作し、USART機能を使用してPCとの通信によって情報の伝達を行った。通信が行えたことによって周辺機器制御としての可能性はひろがったのではないかと思う。今回は温度や時刻といった少ない情報のみであったが、PIC周辺に実装する部品(センサー等)によっては様々な情報を得ることも可能である。PCとの通信が行えたということは同時にこれらの情報管理も容易に行えるということにも繋がる。また、本研究ではPCとの通信のみで良かったため簡易的な通信回路を用いたが、RS232C規格に準じた通信回路を作ればより多くの規格に対応した機器との通信が可能になり、また、制御も行えることとなる。
本研究目的は概ね達成できたが、製作物に関しては多少の検討箇所が挙げられる。それを以下に示す。
[1] “PIC16F87XA Data Sheet”,Microchip社
[2] “改訂版 電子工作のためのPIC16F活用ガイドブック”,後閑哲也,技術評論社
[3] “はじめてのPICアセンブラ入門”,光永法明,後田敏,CQ出版社