So-net無料ブログ作成

ファイルシステム搭載 H8マイコンボード MH8ALFAT05を使った温度ロガーの製作 [ALFAT]

マルツ電波で販売されているファイルシステムを搭載したH8/Tinyマイコンボード(MH8ALFAT05)を使って8チャンネル、表示単位は0.5度、温度範囲0℃~100℃(計測精度は0℃~50℃が±1度、それを超える範囲では最大±3℃)まで計測及び記録できる温度ロガーを製作しました。現物は16日から開催されるインターネプコンで展示される(様に今頑張っているところ)予定です。 このボードのハードウエアには、マイコンにはルネサス製のH8/3687F Tinyマイコンを使用しており、ファイルシステムにはFATファイルシステム専用のICを使用しています。 入出力要素として多数のポートを引き出せるようにし、またボード上にはキャラクタLCDインタフェース、4bitのタクトスイッチ、圧電スピーカー、RS232(EIA574)コネクタを用意してあります。 またファイルシステムなのでRTCを必要としますが、電池バックアップ可能なRTCも搭載可能です。 デバック用にはE8インタフェースコネクタを装備しています。 ソフトウエアには、フリーのμITRON4.0仕様OSのHOSを搭載し、タスク構成=機能分割とする事で基本設計を容易にし、全体的な開発工数の削減を行う事ができました。
温度センサーには低価格で入手性が良く、利用し易いサーミスタ(石塚電子製 103AT-2)を使用しています。このサーミスタはNTC、つまり負の温度係数を取る抵抗体で、温度が上がるほど抵抗値が減少します。 写真は、今回作成したセンサーケーブルとテスターに接続されたK型熱電対をいっしょにアルミ箔で包んだ状態です。実は部品手配に失敗して、8チャンネル計測できるところ、5チャンネル分のセンサーケーブルしか作製できていません。
しかしサーミスタは白金温度センサーやIC温度センサー等と異なり、温度に対する抵抗値の変化が直線とはならず、今回の作品は0℃~100℃までを計測範囲としていますが、特に高い方の温度ではH8の内臓している10bitのA/Dコンバーターでは分解精度が不足するので、MH8ALFAT05基板とは別にアナログ入力用の基板を製作し、そちらに12bitのA/Dコンバーターを搭載しています。 センサー及びセンサーケーブルは、ケーブルの抵抗値が誤差になる事を防ぐ目的で3線式ケーブルとなっていますので、容易にケーブル長を伸ばす事が可能です。また、ノイズの多い環境下で使用する時は、2芯シールドケーブルを使用する事でノイズ耐性を高める事が出来ます。 ※計測温度範囲は0℃~100℃としていますが、実際にセンサーケーブルの作製に使用したケーブルや熱収縮チューブは100℃まで耐えられる物を用意できなかったので、実質的な耐用温度は70℃程度となっています。
ちなみにサーミスタの温度/抵抗値の特性をエクセルにグラフを描かせると、こんな事になっています。縦軸が抵抗値で単位はΩ、横軸が温度で単位は℃。特に50℃を超える辺りから曲がりがきつくなり、分解能が直線的なA/Dコンバーターでは高い温度での精度が苦しくなる事が容易に想像できます。
このロガーには警報表示出力機能を持たせて有ります。基板下部のユニバーサル領域に赤と青のLEDをそれぞれ8個並べておりますが、予め設定された温度を超えると、このLEDは青色から赤色のLEDの点灯に切り替わります。勿論まだ沢山のポートが余っているので、リレーを搭載して、警報のリレー出力とする事も可能ですし、基板上の圧電スピーカーでピー!ピー!ピー!と鳴らす事も可能です。
表示メッセージですが、まあ16文字×2行という非常に少ない表示量で行わなければならないので、あまり親切な表示メッセージとは言い難いのですが、左上の"R"は”RUNNING”、つまり計測実行中を表し、その右は記録間隔(P=PERIOD:単位は分)を示しています。ちなみに表示の更新は1秒で行われます。 記録間隔の右隣は現在時刻を表しています。 下の行が計測温度を表示していて、”チャンネル番号:計測温度”のフォーマットとなっています。 画面が小さいので一度に表示できるチャンネルは2個となります。その為別のチャンネルを見るためには、タクトスイッチのUP/DOWNキーで表示チャンネルを切り替えます。
一応目標としていた50℃を超える範囲での最大3℃の誤差と言うのは、何とか入ったみたいです。 これはチャンネル1と2。
これはチャンネル3と4。
これはチャンネル5と6。 チャンネル6はセンサーケーブルが接続されておらず開放状態となっている為、抵抗ブリッジ回路での差分電圧が発生せず、25℃表示となっています。7、8チャンネルも同様になっています。
試験にはホットプレートを使用していますヽ (´ー`)┌ 。 まあ自宅でやっているので、揃えられる設備はこの辺が限界!。ただ熱容量が大きく、蓋をする事で狭い空間内の環境を維持し易いので、外乱を受け難い環境を構築はできます。
100℃に達した時点でホットプレートのスイッチを落としたのですが、ヒーターの余熱でこの後120℃まで上がってしまいました。危ない危ない。
ちなみに今回の試験で記録されたデータです。10分置きのデータとなっています。 画像をローカルに落としてから開くと、拡大して見る事ができます。
グラフ化しています。やはりローカルに落としてから見る事ができます。 常に温度が変化している状態なので、ややバラツキが見えます。 更なる精度を求めるなら、個々のセンサーの特性を取る必要が有るのかもしれません。


今回のサーミスタのB定数は3435K。25℃におけるゼロ負荷抵抗値は10KΩ。B定数、ゼロ負荷抵抗値共に1%精度です。計算上、今回の計測精度の範囲内ならそれ程影響はしないのですが、より高精度な計測を行うなら、個々のサーミスタのB定数や誤差を実測しておく必要が有るでしょう。
しかし今回の製作は参考出品用なのであまり予算をもらえず、時間もコストも掛ける事ができません。まあこんな物でしょう。
時間もコストも仕様の内ですから。

ちなみに例によってこんな変換テーブルを作って、マイコンのCPUパワーとかメモリとかのリソース消費を減らしています。

/* ------------------------------------------------------------------------ */
/* 0度から200度までのサーミスターの変換テーブル                             */
/*                                          designed by hamayan             */
/*                                          Copyright (C) 2007 - by hamayan */
/* ------------------------------------------------------------------------ */

const double thermister_table[] = 
{
	3814.812506,	/* 0.000000degrees 28736.182351ohm 3.730225vad */
	3790.432595,	/* 0.500000degrees 28082.720160ohm 3.706386vad */
	3765.913251,	/* 1.000000degrees 27446.421791ohm 3.682410vad */
	3741.259768,	/* 1.500000degrees 26826.780410ohm 3.658303vad */
	3716.477523,	/* 2.000000degrees 26223.305711ohm 3.634071vad */
	3691.571967,	/* 2.500000degrees 25635.523334ohm 3.609717vad */
	3666.548623,	/* 3.000000degrees 25062.974294ohm 3.585249vad */
	3641.413081,	/* 3.500000degrees 24505.214440ohm 3.560671vad */
	3616.170994,	/* 4.000000degrees 23961.813932ohm 3.535988vad */
	3590.828066,	/* 4.500000degrees 23432.356738ohm 3.511207vad */
	3565.390057,	/* 5.000000degrees 22916.440147ohm 3.486333vad */
	3539.862767,	/* 5.500000degrees 22413.674308ohm 3.461372vad */
	3514.252040,	/* 6.000000degrees 21923.681780ohm 3.436329vad */
	3488.563752,	/* 6.500000degrees 21446.097100ohm 3.411210vad */
	3462.803806,	/* 7.000000degrees 20980.566369ohm 3.386022vad */
	3436.978132,	/* 7.500000degrees 20526.746852ohm 3.360769vad */
	3411.092674,	/* 8.000000degrees 20084.306595ohm 3.335457vad */
	3385.153391,	/* 8.500000degrees 19652.924051ohm 3.310093vad */
	3359.166247,	/* 9.000000degrees 19232.287730ohm 3.284682vad */
	3333.137207,	/* 9.500000degrees 18822.095849ohm 3.259230vad */
	3307.072231,	/* 10.000000degrees 18422.056005ohm 3.233743vad */
               途中略
	2610.556308,	/* 23.500000degrees 10600.483972ohm 2.552671vad */
	2585.735838,	/* 24.000000degrees 10395.739108ohm 2.528401vad */
	2561.029615,	/* 24.500000degrees 10195.617212ohm 2.504243vad */
	2536.441486,	/* 25.000000degrees 10000.000000ohm 0.000000vad */
	2511.975188,	/* 25.500000degrees 9808.772554ohm 2.456276vad */
	2487.634342,	/* 26.000000degrees 9621.823212ohm 2.432475vad */
	2463.422459,	/* 26.500000degrees 9439.043467ohm 2.408800vad */
               途中略
	690.586576,	/* 90.000000degrees 1269.406379ohm 0.675274vad */
	684.793345,	/* 90.500000degrees 1252.990543ohm 0.669609vad */
	679.076411,	/* 91.000000degrees 1236.831221ohm 0.664019vad */
	673.434747,	/* 91.500000degrees 1220.923779ohm 0.658502vad */
	667.867340,	/* 92.000000degrees 1205.263674ohm 0.653058vad */
	662.373189,	/* 92.500000degrees 1189.846457ohm 0.647686vad */
	656.951304,	/* 93.000000degrees 1174.667768ohm 0.642384vad */
	651.600706,	/* 93.500000degrees 1159.723337ohm 0.637153vad */
	646.320428,	/* 94.000000degrees 1145.008980ohm 0.631989vad */
	641.109516,	/* 94.500000degrees 1130.520596ohm 0.626894vad */
	635.967025,	/* 95.000000degrees 1116.254167ohm 0.621865vad */
	630.892024,	/* 95.500000degrees 1102.205755ohm 0.616903vad */
	625.883591,	/* 96.000000degrees 1088.371503ohm 0.612006vad */
	620.940818,	/* 96.500000degrees 1074.747628ohm 0.607172vad */
	616.062805,	/* 97.000000degrees 1061.330425ohm 0.602403vad */
	611.248666,	/* 97.500000degrees 1048.116261ohm 0.597695vad */
	606.497525,	/* 98.000000degrees 1035.101576ohm 0.593049vad */
	601.808517,	/* 98.500000degrees 1022.282880ohm 0.588464vad */
	597.180787,	/* 99.000000degrees 1009.656752ohm 0.583939vad */
	592.613494,	/* 99.500000degrees 997.219837ohm 0.579473vad */
	588.105805,	/* 100.000000degrees 984.968850ohm 0.575066vad */
               以下略

μALFATポータブル化計画 [ALFAT]

まったく個人的な計画なのだけれど、μALFAT基板ポータブル計画なんてやっていています。
絶対にメーカーさんは保証しませんし、私も保証しませんが、H8/Tinyが3.3V程度の電圧でも20MHzで動く事に気を良くして写真の様にニッケル水素電池(1700mA/h)四本直列で動かしています。
この状態で音楽の再生なら8時間位再生可能です。
※1.2V×4=4.8Vなのですが、実際にはそこそこ電流が流れているので電池の内部抵抗による電圧降下から、回路上の電圧は初期で4V程度となっています。

ただこうなると液晶の表示が問題となってくるのですが、まあ基本的に横着な私は電源を投入すると勝手に再生をし続ける様にプログラムを組んでいますので、「液晶見れらなくても良いか!」なんて手抜きをしていました。

しかし最近発売されているSC1602Bは電源電圧に限り2.7Vまで保証されていますので、改めて表示出力を見直しました。
問題となるのはコントラスト電圧と言う事になります。VDDに対して4.5V程度低い電圧を供給する必要がありますのでVDDから負電圧を生成できる電圧コンバータ回路が必要となります。
電圧コンバーター専用ですが、「良いのが有りましたよお客さん!」

これです。MicrochipのTC7660HCPAって奴ですが、ICLとかリニアテックとかマキシム辺りで出している相当品が500円以上していますが、これはなんと157円です。値段付け間違えたんじゃあないの?。

この電圧コンバータICの使い方は簡単で、外付けで10μFのコンデンサを2個用意するだけです。それであっさりVDDを反転した負電圧を生成してくれます。一応コンデンサには低ESR品が指定されていますので、電解コンデンサでは無くタンタルコンデンサを使用しました。容量に関しては10μFを下回らなければ良いみたいで、22μFとか、それ以上の容量でも動くと思われます。

※電池で駆動しているのでVDDの変化が気になりますが、ニッケル水素電池は充電直後の初期電圧から1.2V位に落ちた後、そこで根性を出してその電圧を維持し続け、最後の最後にストンと落ちますので、それ程液晶のコントラストの変化を気にしなくても構わないと思います。
調整用可変抵抗にはつまみ付きの物を用意すれば安心でしょう。

※μALFAT評価基板に実装する時は、可変抵抗を標準の位置に実装せず、基板下部のユニバーサル領域で、負電圧の生成回路と、コントラスト調整用可変抵抗を組み立てると簡単です。

Transcend 1GB SDカード TS1GSDC

Transcend 1GB SDカード TS1GSDC

  • 出版社/メーカー: トランセンド・ジャパン
  • メディア: エレクトロニクス


SanDisk SDSDH-2048-903 UltraIISDカード2GB

SanDisk SDSDH-2048-903 UltraIISDカード2GB

  • 出版社/メーカー: サンディスク
  • 発売日: 2005/12/16
  • メディア: エレクトロニクス


μALFAT評価基板が発売されました [ALFAT]

画像をクリックすると販売ページに行きます。
うーん、今回はまたえらい発売まで紆余曲折有ったが、なんとかここまで漕ぎ着けた。

基本的にSDカード(一応MMCカード)+FATファイルシステム+H8マイコンの組み合わせなので、色々な事に使う事ができます。

なんか役に立ちそうなアプリケーションを考えて見ます。


H8/Tinyって、3.3Vで動いちゃうのね。でも保証はしない。 [ALFAT]

音楽を聴く為にこのボードを動かそうと思って準備していたけれど、5V出力のACアダプターが見つからず、3.3Vが見つかったので、ものは試しに3.3Vで動かしてみるか!とH8/Tiny @ 20MHzを3.3Vで動かしてみました。
あーっさり動いています。勿論、LCDの表示は駄目ですが。
ちなみにH8/Tinyの3.3V時の動作保証は10MHzだっけ?。I2CとSPIをソフトウエア(*´ー`)でグリグリ、でも何ら問題なくMP3の再生をやっています。

日立、もといルネサスったら、相変わらずスペックを最大の安全サイドで書くんだから。


おおっと忘れていた。インターネプコンでのμALFAT基板の展示 [ALFAT]


インターネプコンのELE TRADE会場でマルツさんが出展するので、ついでにμALFAT基板を展示してもらいました。

スペースは小さいけれど、入り口の直ぐ側と言う事もあり、ひっきり無しにマルツさんのパンフレットが入った紙袋を受け取っています。
そうなんですよ、展示会に入るとまず欲しくなるのが手提げ袋。兎に角色々持たされますので、その辺を十分判ってらっしゃるようです。

ちなみにザイリンクスなんか特大紙袋を寄越してきますので、必然的にザイリンクスの紙袋を持ってうろうろする人が多い、宣伝効果を考えています。

私は、軽くて丈夫な布製の袋が一番嬉しいな。


H8+ファイルシステム基板 只今開発中! [ALFAT]

年末からこれで大忙し。
取り敢えずベースのH8+ファイルシステム基板に、MP3拡張基板を載せて、現在音楽鑑賞中。

ネプコンマルツさんのブースにて展示してもらえるよう、ハードウエア作ったり、アプリケーションデバックしたり、これからドキュメントも作成せねばならない。
Ethernet拡張基板なんてハードウエアも作ったけれど、こっちはソフトウエアに関しては、何ら手を付けていない。

間に合うのかなあ?


簡単ファイルシステム評価ボード ALFATを使ってみよう! 其の十三 [ALFAT]

※注意!
これからこのブログを書きながら最終的なハードウエアデバック、アプリケーションソフトウエアの構築に入ります。なので、写真や文章と実際の製品では異なる部分が出る可能性が有ります。その点をご了承下さい。

ヒューマンデータさんありがとう!編 続き


引き続きヒューマンデータさんから提供していただいたμALFATを実装したFAT-005をいじっています。

このチップの特徴は、

  1. 一文字コマンド
    ALFATが二文字のコマンドだったのに対してより短くなっています。また、ALFATの場合はエラー以外はプロンプトの表示だったのに対して、μALFATでは成功でも、失敗でもリザルトコードが返ります。
  2. フレームモードの廃止。
    イマイチ使い方の良く判らなかったフレームモードが廃止となり、全てテキストモード?となっています。
  3. ファイルの同時オープン数が16から4へ。
    まあ16は必要無いでしょうからね。
  4. 小型化
    64pinQFPから48pin QFPになっています。
  5. CPUパワーアップ
    50MHzから最大70MHzとなったのかな。
  6. RTC内蔵
    従来はソフトウエアで時計機能を実現していましたが、μALFATではハードウエアでRTCをサポートしています。の為、32KHzのクリスタルを外付けできるようになっています。
その他細かい所の変更、機能強化が有ったと思いますが、まあこの辺で止めて置きます。 さて、実際に動かして見ます。まずプログラミング的に大きく変わったと実感できるのは、Boot Loaderの扱いです。ALFATではUART、SPI、I2Cの全てのインタフェースでBoot Loaderの操作が可能だったのですが、μALFATではUARTのみしかBoot Loaderにアクセスできません。H8とはI2Cで接続しているのですが、いきなりファームウエアが起動してしまうので、通常の使用では問題無いのですが、ファームウエアの更新をする時にどうするか困っています。
Renesas H8/3694F Test Program for HEW3.   →これは自分のクレジット
designed by hamayan.
Copyright (C) hamayan since 2004.

 GHI Electronics, LLC   →ここからμALFATのクレジットが始まる
----------------------
   Boot Loader 2.02
   uALFAT(TM) 2.05
!00  →リザルトコード 0 (0は成功を示す)

!00  →改行(\r)でもリザルト=0
I  →"I"コマンドでSD/MMCカードをマウントします。
!00
細かい点では、ALFATではコマンドに使える文字は大文字でも小文字でも構わなかったのですが、μALFATの場合は大文字のみです。まあこれはそれ程問題では無いのですが。
v  →小文字でコマンドを入力
!FD  →だめーーー
V
uALFAT 2.05  →ファームウエアのバージョン
!00  →成功
また、ディレクトリのリストコマンド(ALFATなら"LF")が無くなっていますね。代わりになるのは"@"コマンドと"N"コマンドでしょうか?。
@  →"@"コマンドでディレクトリエントリの初期化を行って、
!00
N  →"N"コマンドでファイル名またはディレクトリ名を順次出力します。
!00
ALFATFWR.GHI 20 00012630  →左からファイル名、拡張子、属性、サイズです。
!00
N
!00
ABCD    .TXT 00 00000010
!00
N
!00
EFGH    .TXT 00 00000010
!00
N
!00
TEMPER02.CSV 00 00000093
!00
N
!00
TEMPER02.ODS 20 00003AAB
!00
N
!00
TEMPER03.CSV 00 00005CDF
!00
N
!00
TEMPER03.ODS 20 00010DEB
!00
N
!4D  →ディレクトリリストの最後を示します。
では、新たにディレクトリを作成し、そこに二つのファイルを書き込みモードでオープンし、適当なデータを書き込み、ファイルをクローズ、ディレクトリを取ってファイルが出来ている事を確認、今度は読み出しを行い、ファイルの削除を行う所までをデモしてみます。
M LOG_DATA  →ディレクトリの作成
!00
A LOG_DATA  →ディレクトリの移動
!00
O 1W>VOLTAGE.LOG  →書き込みモードでオープン。ファイルハンドルは"1"
!00
O 2W>CURRENT.LOG
!00
W 1>7  →ファイルハンドル"1"に7文字書き込み
!00
12.123V$00000007  →「12.123V」が入力したデータ、「$00000007」は実行結果
!00
W 2>A
!00
1234567890$0000000A
!00
C 1  → ファイルハンドル"1"をクローズ
!00
C 2
!00
@
!00
N
!00
.       .    10 00000000  →カレントディレクトリ
!00
N
!00
..      .    10 00000000  →ROOTディレクトリ
!00
N
!00
VOLTAGE .LOG 00 00000007  →出来ている
!00
N
!00
CURRENT .LOG 00 0000000A  →これも出来ている
!00
N
!4D
A ..  → ROOTディレクトリに移動
!00
@
!00
N
!00
ALFATFWR.GHI 20 00012630  →ROOTディレクトリのファイル
!00
A LOG_DATA  → 再び作成したディレクトリに移動
!00
O 1R>VOLTAGE.LOG  → 読み出しモードでオープン
!00
O 2R>CURRENT.LOG
!00
R 1Z>8  → FILL文字"Z"で8文字読み出し
!00
12.123VZ$00000007  →「12.123V」までは先程書いたデータ、"Z"はFILL文字
!00
R 1Z>7  → そのまま更に読み出してみた
!00
ZZZZZZZ$00000000  →ファイルポインタが最後に達しているので、
FILL文字の"Z"のみ7文字出力
!00
R 2Z>A
!00
1234567890$0000000A
!00
C 1  →ファイルをクローズ
!00
C 2
!00
D VOLTAGE.LOG  → ファイル削除コマンド
!00
@  →ディレクトリを取ってみる
!00
N
!00
.       .    10 00000000
!00
N
!00
..      .    10 00000000
!00
N
!00
CURRENT .LOG 00 0000000A
!00
N
!4D  → 「VOLTAGE.LOG」は削除されてしまった。
先のBOOT LOADERの問題以外は、これは使えるのではないでしょうか。 この一文字コマンド体系も、ヒューマンインタフェースではイマイチですが、マイコンからの操作の場合はむしろ容易になると思います。

追記

ファームウエアのバージョンアップですが、ファームウエア上から"X S"コマンドを発行する事で、更新処理に入ります。但し、ALFATのファームウエアの時の様にI2C上でも「W??」と言うメッセージが出ないので、どのタイミングで停止して良いのかさっぱり判りません。
Renesas H8/3694F Test Program for HEW3.
designed by hamayan.
Copyright (C) hamayan since 2004.

 GHI Electronics, LLC
----------------------
   Boot Loader 2.02
   uALFAT(TM) 2.06
!00
うーん、困った。

簡単ファイルシステム評価ボード ALFATを使ってみよう! 其の十二 [ALFAT]

※注意!
これからこのブログを書きながら最終的なハードウエアデバック、アプリケーションソフトウエアの構築に入ります。なので、写真や文章と実際の製品では異なる部分が出る可能性が有ります。その点をご了承下さい。

ヒューマンデータさんありがとう!編


ALFATのキットを作成するにあたって、なにかとヒューマンデータさんには色々(技術的な事とかMSのあれとか)お世話になっているんです。もともとALFATチップの日本の代理店でもありますし。
今回はなんとμALFATチップの評価用にFAT-005とμALFATチップを融通していただきました。
ちょっと時間掛かってしまいましたが、写真の様に評価基板に組み付ける事が出来たので、いよいよμALFATを使ってみたいと思っています。で、これの結果が良ければ、ALFATからμALFATへの切り替えも検討しています。


簡単ファイルシステム評価ボード ALFATを使ってみよう! 其の十一 [ALFAT]

※注意!
これからこのブログを書きながら最終的なハードウエアデバック、アプリケーションソフトウエアの構築に入ります。なので、写真や文章と実際の製品では異なる部分が出る可能性が有ります。その点をご了承下さい。

アプリケーション編2

LM35DZの場合、計測範囲が0℃~であり、0℃以下になっても出力は0に張り付いたままになってしまうので、逆にこの温度センサーICを0℃以下に冷やす事で、回路のオフセット電圧を調べる事が出来ます。
そこでALFATの基板に5分間だけA/D値の記録を取るプログラムを作成し、冷蔵庫の冷凍室に突っ込んで見ました。
結果は2~3のA/D値をサンプリングできましたので、この回路のオフセットは3とします。オフセット調整回路を持たない割りには、なかなか優秀ですね。
さてこの回路は前回も紹介した通り0℃~50℃までの温度を計測します。オフセットが無ければ0℃~50℃に変化した時、LM35DZの出力は0mV~500mV変化します。しかしH8のA/Dのダイナミックレンジは0Vから5Vまでなので、LM35DZの出力をそのまま入れたのではA/Dの性能を有効に使っていない事となり、それは勿体無いのでLM35DZとH8の間にオペアンプを入れて増幅をする話でした。
50℃となった時に、H8に5V入る様に増幅してもいいのですが、上限に若干余裕を持たせて、50℃の時に約4.5V入る様に増幅率を設定します。 オペアンプは非反転増幅回路を構成し、使用するのは1%精度の金属皮膜抵抗です。増幅率を決める二つの抵抗の抵抗値は160KΩと20KΩを予定していましたが、手持ちに162KΩしか無かったので、実際は162KΩと20KΩとなっています。つまり理論上の増幅率は9.1と言う事です。もっとも1%精度の抵抗なので、最大1%の誤差がある訳ですが、0℃~50℃の範囲で小数点以下1位までしか計測しないので、これで十分でしょう。
ところでフルスケールですが、H8/3687Fの場合VREF端子を持たないので、VCCがA/Dコンバータの基準電圧となってしまいます。つまりA/Dコンバータのダイナミックレンジは電源電圧に影響されてしまうので、この基板の電源電圧も求めて置きましょう。
テスターで計ると5.05V有りました。つまりアナログ入力が5.05Vの時にA/Dの最大値の1023となる訳です。という事はA/D値を温度に換算するには以下の式を解く事となります。
増幅率 = 162K ÷ 20K + 1
A/D値のフルスケール = 0.5(V) × 増幅率 × 1024 ÷ 5.05(V)
オフセット = 3
温度 = (A/D値 - オフセット) × 50(℃) ÷ フルスケール
これで読み取ったA/D値を温度に換算してLCDに表示したのが冒頭の写真です。
簡単ですが調整が完了したので、早速温度計測&ロガーとして動かしてみましょう。
H8/3687のRTCを動かし、1秒周期のタイマーを起動します。そのタイマーの値をメイン関数でモニタし、1秒の変化のタイミングでA/Dコンバータを起動、CH4のA/D値をLCDに表示します。また、10秒置きにファイルへも書き込みを行います。
以下がRTCを起動している処理と、割り込みハンドラです。
  /* RTC初期化 */
  RTC.RTCCR1.BIT.RUN = 0;	/*動作停止*/
  RTC.RTCCR1.BIT.RST = 1;	/*リセット*/
  RTC.RTCCR1.BIT.RST = 0;	/*リセット解除*/
  RTC.RTCCSR.BIT.CKSI = 8;	/*32.7678KHz*/
  RTC.RTCCR2.BIT.SEIE = 1;	/*割り込み許可*/
  RTC.RTCCR1.BIT.RUN = 1;	/*動作開始*/
  IENR1.BIT.IENTA = 1;	/*割り込み許可*/
#pragma interrupt(RTC_Int) /*RTC*/
void RTC_Int( void )
{
  IRR1.BIT.IRRTA = 0;
  IO.PDR3.BIT.B6 ^= 1;
  second_count++;
}
続いてループ文の中身
#define	TEMPER_OFFSET  3  /*温度計測回路のオフセット分*/
#define	GAIN  (162 / 2 + 10)  /*AMPのゲイン*/
#define	FULL_SCALE  ((50 * GAIN * 1024L) / 505)
#define	temperature(temp)  ((((long)temp - TEMPER_OFFSET) * 5000L) \
  / FULL_SCALE)
  for( loop = old_count = second_count = 0; loop < 60 * 2; loop++ )
  {
    /*1秒経過待ち*/
    while( second_count == old_count ) ;
    old_count = second_count;

    /*A/D変換の開始 AN4に温度の入力がある*/
    AD.ADCSR.BIT.CH = 4;	/*AN4の選択*/
    AD.ADCSR.BIT.CKS = 1;	/*変換時間は70ステート*/
    AD.ADCSR.BIT.ADST = 1;	/*変換の開始*/
    while( AD.ADCSR.BIT.ADF == 0 ) ;	/*変換完了待ち*/
    AD.ADCSR.BIT.ADF = 0;
    AD.ADCSR.BIT.ADST = 0;	/*変換の停止*/
    temper = AD.ADDRA >> 6;	/*データの引き取り*/

    /*温度をLCD表示用に変換*/
    memcpy( LcdBuf, base_msg, sizeof(base_msg) - 1 );
    itoa4( &LcdBuf[9], temperature( temper ) );
    LcdBuf[9] = LcdBuf[10];
    LcdBuf[10] = LcdBuf[11];
    LcdBuf[11] = '.';
    LcdBuf[13] = ' ';
    /*表示*/
    LCD_Refresh();

    /*10秒に一回ファイルに書き込み*/
    if( (loop % 10) == 0 )
    {
      /*温度をファイルデータに変換*/
      strcpy( buffer, itoa4(temp_buf, loop) );	/*秒*/
      strcat( buffer, "," );	/*カンマ*/
      LcdBuf[13] = '\0';
      strcat( buffer, &LcdBuf[9] );	/*温度*/
      strcat( buffer, "\r\n" );	/*改行コード*/

      /*ファイルへの書き込み*/
      I2CMasterPuts( ALFAT_ADR, file_data_write );	/*WFコマンド発行*/
      do
      {
        I2CMasterGetc( ALFAT_ADR, &rcv_data );
      } while( rcv_data != '"' ) ;
      I2CMasterPuts( ALFAT_ADR, buffer );	/*データの書き込み*/
      prompt_read( 1 );
    }
  }
ファイルへはCSV形式(カンマ区切りのテキスト形式)で記録されますので、記録されたメディアをパソコンに挿し込んで表計算プログラムで読み込めば以下の様なグラフを表示する事が出来ます。

温度が大きく変化しているのはLM35DZを指で摘んで温度変化をさせているからです。
という訳で、温度ロガーの一丁上がりです(*´ー`) フッ。

簡単ファイルシステム評価ボード ALFATを使ってみよう! 其の十 [ALFAT]

※注意!
これからこのブログを書きながら最終的なハードウエアデバック、アプリケーションソフトウエアの構築に入ります。なので、写真や文章と実際の製品では異なる部分が出る可能性が有ります。その点をご了承下さい。

アプリケーション編1


ちょっと間が開きましたが、動作確認は終了しましたので、今度は簡単なアプリケーションを作成しています。
作成するのは「温度(室温)ロガー」です。
温度の様な身近な物理現象は、体感し易く、実生活に影響を及ぼすとても日常的な現象で、既に温度計を持っている方も沢山居るでしょう。
そんな温度計だからこそ、例えば終日の温度の変化を記録に取って色々役立てる事が出来ます。
例えばペットを飼ってはいるが、日中にペットを残して不在になる人も多いでしょうけれど、残されたペットの健康の為にも家の温度の変化って気になりますよね。
勿論このキットはロガー機能だけと言う訳ではないのだから、プログラミングする事で温度の変化に伴ってエアコンを制御したりする事も可能となります。基本的にリモコンを操作できればいい訳ですから。

さて、これが回路図です。
小さい、見難いって!まあまあブログでの話なのでその辺は。
温度センサーにはLM35DZを使用しています。回路が簡単になりますからね。
LM35シリーズはパッケージによって計測温度範囲が-55℃~+150℃の物も有りますが、このDパッケージの場合は0℃~100℃までとなります。ちょっと室温を計測するには下の方の温度範囲が狭いのですが、まあとりあえずのアプリケーションですから。
この温度センサーICの特徴は、1℃の変化に対して出力が10mVとなっている点で、例えば温度が100℃に達した時は出力は1V出ている事となります。
今回は100℃まで計りません。0℃~50℃の範囲とし、マイコンのA/Dコンバータの入力レンジを有効に使う為に温度センサーICの後ろにオペアンプを追加して増幅しています。ゲインの設定は、固定抵抗を使用して約9倍のゲインとしています。50℃の時の温度センサーICの出力が500mVなので、マイコンの入力には4.5V入る事となります。
但し、今回使用した金属皮膜抵抗には公称値に対して1%の誤差を持っており、またオペアンプ自体にもオフセットエラーが存在するので、温度計測の精度を求めるなら何らかの調整が必要となります。ただ、一般家庭で恒温槽を持っている人は居ないでしょうから、室温と冷蔵庫で計測してグラフにプロットし、オフセット及びゲインを実測するとかになりますね。

基板のユニバーサル領域にこれら部品を配置していくのですが、事前に基板CAD(この例ではEAGLE)を使って配置を決めておくと、作業が楽になります。
EAGLEのAUTOROUTERで描かせて見たのが上の配線です。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。