USART機能を用いたセンサー付きマイコン時計の製作

ネットワークシステム研究室
指導教員 : 坂本 直志 准教授
05KC080 : 中嶋 章裕

目次


1.始めに

安価で比較的扱いやすいPIC(Peripheral Interface Controller)は、世に出ている様々な製品に内蔵されている。その中でも主に制御部分に関する回路等で使用される。

本研究では、PICを用いて実際に製作した周辺機器の制御を行う。さらにPICの制御により、製作した機器から得た情報をPICに内蔵されたUSART(Universal Synchronous Asynchronous Receiver Transmitter)と呼ばれる周辺機器との通信を可能にする機能を用いてPCとの通信を確立し、PICによる周辺機器からの情報収集を行うことを目的とする。

2.PIC

ここでは本研究で使用するPICについての説明を行う。

2.1 マイコンとPIC

マイコンとはマイクロコンピューターの略である。1971年、ビジコン社の嶋正利氏と、インテル社のテッド・ホフ(Ted Hoff)氏の共同発明によって初のマイコン「4004」が誕生した。マイコンが誕生してから近年までに数多くの種類が開発されている。さらにこのマイコンに内蔵されている機能はより高性能でかつ高速化し、中では、必要とされる周辺機器制御の機能を全て含んだワンチップマイクロコンピュータと呼ばれるものも開発されている。特に周辺機器との制御に特化したマイコンも存在する。本研究で使用したPICとはGeneral Instruments (GI)社により周辺機器のインターフェース制御用に開発されたものである。現在のマイコン開発で知られるMicrochip社はもともとこのGI社内の電子部品を扱う事業部門の1つであった。1987年にPICの開発、生産専用の工場として独立し、現在のMicrochip社となった。本研究で扱うPICは周辺機器制御用に開発されたマイコンである。これらはマイコンの中でも非常に簡単な構造になっており、また、35個という少ない数の命令によってプログラムを作ることが出来る。以上のことから使いやすく安価であるということがPICの最大の特徴であり、この特長を生かし様々な用途の製品に使われている。身近なものではPCを含む電化製品から自動車、産業機器に至るまで幅広く使用されている。

2.2 PICとは

PIC(Peripheral Interface Controller)とはMicrochip社が開発したコンピュータ周辺に接続されている周辺機器を制御することを目的としたマイクロコントローラー(Microcontroller)と呼ばれる種類のICである。PIC単体にコンピュータに必要とされる機能(CPU、メモリ(RAM・ROM)、I/O等)が内蔵されており、基本的には電源と入出力装置があれば動作をする。PICの動作はROM内に書き込まれたプログラムに従って動作する。プログラム開発に使用できる言語はアセンブリ言語とC言語である。また、Microchip社によってPIC用の統合開発環境MPLAB IDEが無料で提供されている。統合開発環境とは、プログラムの作成、実行、デバッグができる環境のことである。

本研究ではMPLAB IDEの環境下でアセンブリ言語を使用して開発を行うこととする。

2.3 PICの種類

PICには大きさやI/Oピンの数、内蔵された機能の違い等によって数多くの種類が存在し、PICが扱うデータによっても8bit、16bit、32bitがそれぞれ存在する。この中で一般に幅広く使用されている8bitのPICについて大別すると、図1に示すように3つに分類することが出来る。以下にこれらの特徴を述べる。

(1)ベースラインシリーズ

PICの命令が12bit幅で、初期に開発された非常にコストパフォーマンスに優れたシリーズである。I/Oピン、タイマ機能を持ち、PIC自体の面積も小さく、低電圧(約2.0V)での動作が可能なタイプも存在するためバッテリー駆動等に適している。

(2)ミッドレンジシリーズ

PICの命令が14bit幅で、シリーズ中最も幅広く使用されているシリーズである。機能もA/D変換やシリアル通信といった多くの機能を備えており、種類も豊富である。

(3)ハイエンドシリーズ

PICの命令が16bit幅で、シリーズ中最も上位にあたり、機能も高機能である。また、実行時間も最速である。

本研究で使用するPICはミドルレンジシリーズの上位にあたる16F877Aを使用することとする。16F877Aは基本的には電源5Vとクロックによって動作する。

図1 8bit PICシリーズ

2.4 アセンブリ言語

アセンブリ言語とはプログラミング言語の種類の1つである。コンピュータが直接解釈、または実行が出来るマシン語と1対1で対応した言語であり、もっともマシン語に近い低級言語である。低級といってもアセンブリ言語ではマクロ機能を使用出来るものもある。マクロとはプログラム中に記述された特定の文字列をあらかじめ定めておいた規則に従って置換することをいう。この機能を使うことによってプログラムがシンプルになるほか、抽象的な指示が可能になるといったプログラムを作成する上でメリットとなる点がある。

2.5 USART機能

USART(Universal Synchronous Asynchronous Receiver Transmitter)とはシリアル通信を行う回路を示す。シリアル通信とは1本の信号線上の信号をプロトコルに従い「1」、「0」でデータを送る通信方法である。この通信方式には全二重の非同期式(調歩同期式)通信と半二重の同期通信の2種類がある。

本研究で使用するPICにはこのUSART機能が内蔵されており、PCや他の周辺機器とシリアル通信を行う用途で使用できる。通信方式は上記で述べた2種類に対応しているが、同期式通信においては周辺デバイスとの簡単なデータ通信用として設計されているため、高度な同期式通信として使用する目的には向かない。また、PIC上では通信速度(ボーレート)を設定する際にボーレート設定値としてあらかじめ定義された式よりPICのクロック数等から適切な値を算出する必要がある。

3.マイコン時計

本研究ではPCとの通信を目的とし、PIC動作による温度センサーを備えた時計を製作する。

3.1 仕様

本研究で製作した製作物の仕様を動作モード、スイッチの機能ごとにまとめたものを表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にそれぞれ示す。


表1 製作物の仕様
スイッチ名各動作モードにおけるスイッチの機能
通常時時刻修正時PC通信可(ON)時
SW1・時刻表示(24H、12H)の切り替え
・時刻修正モードへの切り替え
使用不可使用不可
SW2通信状態の切り替え修正位置合わせ通信状態の切り替え
SW3使用不可時刻カウントアップ使用不可
SW4使用不可修正時刻反映使用不可


図2 LCD表示例(12時間制)


図3 LCD表示例(24時間制)


図4 LCD表示例(時刻修正画面)

3.2 回路

本研究で製作した回路に関して機能ごとに分けて詳細を説明する。回路図を付録1に、回路全体のブロック図を図5に示す。

図5 製作物のブロック図

(1)電源回路

図6は電源回路部分の回路図である。電源回路部ではPICの動作に必要な安定した5Vを供給する目的がある。また、A/D変換の際に必要となる基準電圧(5V)としての役割も兼ね備えている。安定した電圧を得るために色々な手段が考えられるが、比較的に部品点数も少なく簡易的に得られる方法として本研究では3端子レギュレータを使用した。これは3本の端子を持ち、それぞれ入力電圧、出力電圧、GNDに分かれる。動作は入力に一定の電圧を加えると、出力に希望する電圧が安定して出力されるというものである。希望する電圧というのはレギュレータによってそれぞれ出力される電圧の種類があるため、今回は5Vを出力するタイプのレギュレータ(78L05)を使用した。入力電圧の決定は通常、希望する電圧の+2Vとされているため入力電圧は7V以上で設定した。また、あまりに入力電圧が高すぎると、入力電圧と出力電圧の差がほぼ熱に変わるため、熱対策をしないと自身が発する熱でレギュレータ自体が壊れる可能性が出てしまう。そのため、熱対策が必要ない程度の電圧(約9V)で入力電圧の最大値を設定した。

レギュレータの入出力側にそれぞれ接続されたセラミックコンデンサは発振防止用である。このコンデンサはレギュレータを使用する上で必ず使用しなければならないもので、これがないと希望する動作は得られない。加えて、入力側に接続された電解コンデンサは、レギュレータへの電圧供給をより安定化させるために使用している。

図6 電源回路

(2)クロック回路

図7はクロック部分の回路図である。PICによっては内部にクロック回路を持ち、電源と出力装置さえあれば動作するものがあるが、本研究で使用したPICにはクロック回路は内蔵されていない。そのため外部にクロック回路を用意する必要がある。本研究ではPIC動作に必要なクロックと、時計用に使用するクロックとを兼用することとする。よって高精度でかつ入手が容易であるクロックが必要となる。これらを満たすものに高精度発振ユニットというものがある。今回使用したものは5Vで動作する出力周波数12.8MHzの発振ユニットである。このユニットの出力波形を図8に示す。図8より正確に12.8MHzが出力されていることが分かる。

図7 クロック回路
図8 発振ユニットの出力波形

(3)スイッチ部

図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」となる。

図9 スイッチ部の回路

(4)シリアル通信変換回路(PIC→PC)

図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への電圧レベルの変換が行われたことになる。

図10 通信変換回路(PIC→PC)

(5)シリアル通信変換回路(PC→PIC)

図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への電圧レベルの変換が行われたことになる。

図11 通信変換回路(PC→PIC)

(6)温度センサー部

図12は温度センサー部の回路図である。本研究で使用した温度センサーはS-8100Bというセンサーである。電源は3Vから動作し、測定温度範囲は-40℃〜100℃、温度特性は-8mV/℃である。そのため5Vで動作させた時、測定範囲内で出力される電圧は最大でも約2V程度となる。また、電圧の変化が8mVと非常に小さいためノイズの影響を受けやすい。そこでノイズ対策として出力にセラミックコンデンサを接続している。加えて電源側に1MΩの抵抗を接続しているのは、センサーの出力インピーダンスが高いため、外部回路と接続した場合に出力電圧が低下する可能性があるのでプルアップ抵抗として接続している。

図12 温度センサー部の回路

(7)液晶表示部

図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に示す。

図13 液晶表示部の回路

3.3 液晶表示器の制御

3.2(7)で簡単に触れたが、LCDの制御にはRS、R/W、E(STB)の3つの制御信号を使用する。それぞれの制御信号を送るタイミングは時間的に決まっており、RS、R/W信号の組み合わせによってLCDへの読み込み、書き込み等の制御コマンドを区別する。ここでは制御部分についての詳細を説明する。

(1)RS信号

RS信号は書き込み対象のレジスタを選択するための信号である。R/W信号との組み合わせで使用する。

(2)R/W信号

R/W信号はLCD内部のレジスタの読み込み、及び書き込みの切り替えを行う信号である。RS信号との組み合わせで使用する。

(3)E(STB)信号

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」とする。


表2 制御コマンドの一覧
RSR/Wコマンド内容
00制御命令の出力
10表示、文字データの出力
01ビジー信号の入力
11表示、文字データの入力



図14 各制御信号のタイミングチャート1


図15 各制御信号のタイミングチャート2

3.4 PCとの通信

本研究ではPCとの通信にPIC側では内蔵されたUSART機能を用いてシリアル通信を行う。PC側では付属のハイパーターミナル上で操作を行う。シリアル通信の通信方式は非同期式通信、通信速度を9600bps、データビット数を8bit、通信障害検出用のパリティビットのチェックを無しとし、通信バッファあふれ防止用のフロー制御をしないとして通信を行うこととする。また、PCとの通信において扱う情報は現在時刻(24時間制)及び温度情報である。実際に通信を行ったハイパーターミナル上の表示例を図16に示す。加えてPICからPCへの通信を行っている時の波形を図17に示す。図17において、図中の上部の波形がPICから出力された波形、下部の波形がPC側のシリアルポートの受信部の波形である。波形は上下逆さまとなっており通信が行えていることがわかる。

図16 通信表示例
図17 PIC→PC時の通信波形

3.5 プログラム

本研究で作成したプログラムについてフローチャートを用いて機能ごとにプログラムの流れを説明する。プログラム作成ではマクロを使用した。マクロは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にそれぞれ示す。

(1)メイン部

メイン部のフローチャートを付録6に示す。メイン部では主に1秒ごとの時刻更新とスイッチの入力の有無、及びSW1の長押し判定を行っている。

スイッチの判定の仕方を図18に示す。本研究ではスイッチ(SW1)が押されてからある一定の時間が経過するまで押され続けた場合に長押し、一定時間が経過する前に放された場合はただの押しと判断するようにしている。プログラムでは、初めにswflgをチェックし押されていなければidle状態へ、押されていればactive状態へ進む。active状態では長押し用の判定タイマーを減算して0になったら長押し、そうでなければ押しと判断し、swflgの対応するbitを「1」とする。ここで述べる長押し判定用タイマーの値は実測で約2秒となるように値を設定している。また、idle状態の時はスイッチが押されたかどうかをチェックすると共に、押されていなければ温度更新を行うこととしている。なお、温度更新にはインターバルタイマを用意し、一定時間を設けることによって表示のふらつきを抑えている。

図18 スイッチの判定

(2)時計部

時計部では主に1秒のカウントとスイッチごとの処理を行う。時計部のフローチャートを付録7に示す。ここで重要となる点は1秒のカウントである。本研究ではPIC動作用のクロックと兼用で1秒カウント用のクロックとして12.8MHzのクロックを使用している。また、割り込みを使うことによって他の処理中でも正確なカウントが行えるようにしている。カウント部分のプログラムはマクロで定義している。

(3)温度部

温度部では主に温度センサーから出力された電圧値をPIC内部でA/D変換によってデジタル化し、計算式から温度へ換算する。また、温度が負の場合はERRORとし、エラー値として ? を温度データとする。温度部のフローチャートを付録8に示す。

(4)通信部

通信部では主にPIC側でSW2を押して通信モードをONにすると、初回通信時にハイパーターミナル上にメッセージを表示し、コマンドの受信とSW2の入力をチェックする。PC側でEnterを押すたびにそのときの時刻(24時間制)と温度を表示する。また、EもしくはPIC側でSW2を押すと終了メッセージを表示し、通信モードをOFFとする。通信部のフローチャートを付録9に示す。

4.時計の精度

3.にて回路、プログラムについての説明を行った。ここでは本研究で製作したマイコン時計の精度について説明を行う。

4.1 1秒の生成

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.2 精度実験

4.2.1 概要

4.1では1秒の生成方について説明を行った。理論的には4.1の内容で1秒の生成が行えるはずだが、実際の環境下で使用する場合は様々な影響によって出力される周波数に誤差が生じる場合がある。特に発振ユニットは温度による影響を受けやすいため、本研究では常温(約20℃)と低温(約5℃)の環境化において時計としてどれほどの精度が期待できるかの実験を行った。

4.2.2 実験方法

本実験ではクロック回路と電源回路、LCD、及びスイッチからなる時計として動作する最低限の回路を基板上で構成し、実験用ハードウェアとして製作した。実際の製作物を図19に示す。このハードウェアは外部電源を使用し、スイッチを押すことによって1秒カウントが開始される。これを常温と低温の環境下にそれぞれ配置し、1週間経過後の液晶表示を目視により確認し、誤差を求め精度を確かめる。また、比較する基準となる時間は電話の時報「117」とする。


図19 実験用ハードウェア

4.2.3 実験結果

常温時における誤差は肉眼では確認できなかった。また、低温時における誤差については、表示に若干のぶれがあったが1秒未満であったため肉眼では正確に1秒以上の誤差としては確認できなかった。

4.3 実験結果より得られた精度

肉眼で確認する限りでは常温及び低温の環境下では1秒以上の誤差は認められなかったが、時報や肉眼での確認等、誤差は確実に発生しているため、今回の実験では誤差を約±0.5秒として考えることとする。すると、精度を式(2)のように計算すると、

となった。これを月差で考えると、月差約±2秒となる。

5.温度センサー

本研究での温度機能部分に関しての詳細な説明を行う。

5.1 温度分解能

本研究で使用した温度センサーの温度対出力電圧の関係を図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桁とした。

図20 温度センサーの温度対出力電圧

5.2 温度変換

A/D変換によって得られた値から実際に我々が認識できる温度T[℃]に変換する必要がある。変換する際には温度変換の式を作り、その式からプログラム上で計算を行ってLCDへと表示する。図20よりセンサーからの入力電圧をv0[V]とした時、温度T[℃]を求める式は式(4)となる。

ここで、A/D変換値をyとした時、v0は式(5)のように表せる。

式(4)、(5)より実際の温度を計算する。

5.3 較正実験

5.3.1 概要

市販のセンサーは理論値と比べて多少の誤差を含んでいるため、その較正を行うこととする。式(4)は図20より得られた式であるが、下記式(6)のように変数a、bからなる1次式とみることが出来る。

式(6)の変数a、bを実際に実験により求めることによって較正する。変数a、bを求めるためには式が2つあれば求まるため、ある2点の温度を測定し、その時のセンサーの出力電圧を測定することにより較正が可能となる。

5.3.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を求める。

図21 簡易恒温槽

5.3.3 実験結果

測定結果、較正前の温度、較正後の温度を表3、表4、表5にそれぞれ示す。また、表3より変数a、bは以下となった。

表3 測定結果
温度 T [℃]A/D変換値
0359
50279


表4 較正前の温度
標準温度 [℃]センサーの測定温度 [℃]
0ERROR
53
108
1512
2018
2523
3028
3532
4037
4542
5048
表5 較正後の温度
標準温度 [℃]センサーの測定温度 [℃]
00
55
1010
1515
2020
2525
3030
3535
4040
4545
5050


以上の結果より、整数値部分において正しく較正が行えた。

6.まとめ

本研究ではPICを用いて温度機能を備えた時計を製作し、USART機能を使用してPCとの通信によって情報の伝達を行った。通信が行えたことによって周辺機器制御としての可能性はひろがったのではないかと思う。今回は温度や時刻といった少ない情報のみであったが、PIC周辺に実装する部品(センサー等)によっては様々な情報を得ることも可能である。PCとの通信が行えたということは同時にこれらの情報管理も容易に行えるということにも繋がる。また、本研究ではPCとの通信のみで良かったため簡易的な通信回路を用いたが、RS232C規格に準じた通信回路を作ればより多くの規格に対応した機器との通信が可能になり、また、制御も行えることとなる。

本研究目的は概ね達成できたが、製作物に関しては多少の検討箇所が挙げられる。それを以下に示す。

@ 時計機能部分
 PICに内蔵されているEEPROMという電源をOFFにしてもメモリ内のデータが消えない機能を使って、前回の設定内容を引き継ぐようなことが可能である。そのため、今回は設定するほどの箇所はないが例えばタイマー機能等、今後の機能拡張によっては引き継げたら便利な場合があるため機能向上として検討したい。
A 温度機能部分
 今回はハードウェアの構成上、温度分解能が中途半端な値となってしまったが、オペアンプ等でセンサーの出力電圧を増幅する、あるいは、基準電圧を適切な値に調節してやれば温度分解能を0.1とすることが出来る。これによってより細かな温度表示が可能となる点において検討したい。

7.参考文献

[1] “PIC16F87XA Data Sheet”,Microchip社

[2] “改訂版 電子工作のためのPIC16F活用ガイドブック”,後閑哲也,技術評論社

[3] “はじめてのPICアセンブラ入門”,光永法明,後田敏,CQ出版社

付録

付録1 回路図

付録2 4bitバス時の初期化フローチャート図

付録3 制御命令の一覧

付録4 作成したプログラム

付録5 作成したマクロ

付録6 メイン部のフローチャート

付録7 時計部のフローチャート

付録8 温度部のフローチャート

付録9 通信部のフローチャート