swest.pa-i.org

 

一覧に戻る


   


GPSデータロガー

模型ロケットに搭載可能で、保守の容易な、GPSによる位置記録システムの開発をおこないました。


ダウンロード ━━━━

以下のコンテンツは、SWEST7で印刷配布したドキュメントを、このサイト用にフォーマット変換したものです。


GPSロガー オペレーションマニュアル

システムの概要 ━━━━

このGPSロガーは、モデルロケットに搭載され、GPSによってモデルロケットの三次元の飛行経路を観測・記録します。GPSロガーは、以下の3つの部分から構成されています。

観測記録部は、モデルロケットに搭載する部分です。防水のためのフィルムケースに格納され、GPSから受信したデータをメモリカードに記録します。

充電部は、観測記録部のバッテリーを充電する部分です。交流100Vの電源を使用して、8時間のタイマーによりバッテリーを充電します。

解析表示部は、観測記録部によって記録されたメモリカードのデータを解析し、画面に表示する部分です。この部分はサーバソフトウェアとして提供され、ユーザーのPCからネットワーク経由でアクセスします。なお、サーバソフトウェアをユーザーのPC上にインストールし、スタンドアローンで動作させることも可能です。

観測記録部の仕様

観測方法12チャンネルGPS
観測データ緯度、経度、高度、衛星捕捉数、時刻
準備時間最大10分
記録媒体mini-SDカード(付属) 10分版×1、1時間版×1
記録形式FAT16(制限あり)
記録間隔1秒ごと
入出力メモリカードスロット×1、LED×1、充電/テスト用コネクタ×1
電源内蔵バッテリー(3.6V 70mAh)
動作時間20分(準備時間を含む)
形状直径33mm×高さ53mmの円筒形
重量35g(メモリカードを含む)

充電部の仕様

電源交流100V
充電時間8時間(0.2C充電)
充電制御電流制限抵抗、メカニカルタイマー
入出力充電コネクタ×2

解析表示部の仕様

動作環境インターネットブラウザ、mini-SDカードインターフェース、カラーディスプレイ
サーバの動作環境PHP4+GD2が使用できる環境(典型的には、WindowsまたはLinux上でapacheを使用)
入出力記録ファイルの入力、画像データ(PNG)の出力、PDFファイルの出力(オプション)
出力内容位置と高度の軌跡を立体表示した俯瞰図、緯度・経度・高度・衛星捕捉数を時間軸にそって表示したグラフ

使用方法 ━━━━

以下の手順でGPSロガーを使用します。

充電

充電中の写真
(拡大)
  1. 観測記録部のジャンパスイッチがOFFになっていることを確認します。
  2. 観測記録部と充電部のコネクタを接続します。
  3. タイマーを8時間にセットします。
  4. 充電部をコンセント(交流100V)に接続します。
  5. タイマーが終了したら充電完了ですので、コネクタを外します。

動作テスト

  1. メモリカードをメモリカードスロットに挿入します。
  2. 観測記録部のジャンパスイッチをONにします。
    • →少しして、LEDが1秒ごとに点滅します。
  3. 動作を確認したら、ジャンパスイッチをOFFにします。

観測記録の開始

  1. 観測記録部のジャンパスイッチをONにします。
    • →少しして、LEDが1秒ごとに点滅します。
  2. 10分以内に衛星が捕捉され、現在位置がメモリカードに記録されていきます。

10分版のメモリカードを使用した場合には、衛星捕捉まではLEDが短く点滅し、メモリカードへの記録はおこなわれません。衛星を捕捉すると、通常の点滅になり、メモリカードへの記録がおこなわれます。

観測記録の終了

  1. ジャンパスイッチをOFFにします。
  2. メモリカードをメモリカードスロットから取り出します。持ち上げてロックを外し、引き抜いてください。

解析表示

  1. メモリカードをユーザーのPCに接続します。
    • →環境によっては、メモリカードに関する表示がおこなわれます。
  2. インターネットブラウザを起動し、サーバソフトウェアのURLを入力します。
    • →データの登録画面が表示されます。
  3. メモリカードのデータ(GPS.LOG)を選択し、送信します。
    • →解析画面が表示されます。
  4. メモリカードを停止します。
    • →メモリカードが取り出せるようになります。
  5. メモリカードをユーザーのPCから取り出します。

解析画面の見方 ━━━━

解析画面では緯度と経度は、データ全体の最大値と最小値の中間をゼロとして、メートルに変換されて表示されます。緯度がy座標、経度がx座標になります。

解析画面の写真
(拡大)

下側には、時間の経過による、緯度・経度・高度・衛星捕捉数の変化が、グラフとして表示されます。記録開始が左端で、縦線は1分ごとに引かれています。中央がゼロで、横線は100mごとに引かれています。経度(x)は青の線で、緯度(y)は緑の線で、高度は赤の線で示されています。衛星捕捉数は黄色の面で示され、下端がゼロ、中央が6、上端が12です。

上側には、位置と高度の変化が俯瞰図で表示されています。灰色の交差している線は地表(高度ゼロ)を示し、100m間隔で引かれています。緯度・経度・高度の変化が赤の線で、それを地表に投影した緯度・経度の変化が黒の線で示されています。

トラブルシュート ━━━━

観測記録部で異常が検出された場合には、LEDが以下のように点滅しますので、点滅の回数を数えてください。 2桁のエラー番号の場合は 「十の位→短い休み→一の位→長い休み」 のように示されます。 1桁のエラー番号の場合は 「一の位→長い休み」 をくり返します。 GPSロガー用に初期化されていないメモリカードを使用すると、このようなエラーになります。

11メモリカードの認識(CMD0)でエラーになりました。
12メモリカードの認識(CMD1)でエラーになりました。
13メモリカードの認識(BLEN)でエラーになりました。
2ファイルの最後まで記録したので、終了しました。
31メモリカードの読み込み(MBR)でエラーになりました。
32メモリカードのフォーマット(M-SIG)が正しくありません。
41メモリカードの読み込み(PBR)でエラーになりました。
42メモリカードのフォーマット(FAT16)が正しくありません。
43メモリカードのフォーマット(P-SIG)が正しくありません。
51メモリカードの読み込み(RDE)でエラーになりました。
52記録するファイル(gps*.log)がありません。
53記録するファイル(gps*.log)が先頭16エントリにありません。
61ファイルの書き込みでエラーになりました。
71メモリカードの読み込み(FAT)でエラーになりました。
72メモリカードのフォーマット(FAT0)が正しくありません。
73メモリカードに不良セクタがあります。

それ以外の場合は以下のように判断してください。

1秒ごとに短く点滅する衛星捕捉を待っており、正常な状態です。
1秒ごとに点滅する観測記録がおこなわれており、正常な状態です。
ONにしたときに点灯したままになるメモリカードが入っていないか、接触不良です。
一瞬点滅したあと消灯したままになるGPSモジュールからデータが受信できません。またはバッテリーがなくなりました。
途中から点灯したままになるバッテリーがなくなりました。
途中から暗く点灯したままになるバッテリーがなくなりました。

解析表示部の異常は、以下のように判断してください。

サーバに接続できないネットワークが動作しているか、URLが間違っていないか、サーバが動作しているか、サーバソフトウェアがインストールされているかを確認してください。
メモリカードが読めないメモリカードを接続したままPCを起動すると認識しないことがあります。また、環境によっては認識に時間がかかることがあります。
画面にソースコードが表示されるPHPがインストールされているか確認してください。
画面にエラーが表示されるURLが間違っていないか、ファイルやディレクトリのパーミションが設定されているか、GDやPDFLIBがインストールされているか確認してください。
表示されるグラフが異常観測記録がうまくできなかった可能性があります。

使用上の注意 ━━━━

  • メモリカードはGPSロガー用に初期化したものを使用してください。
  • GPSモジュールの金属部分はマイナス端子になっていますので、他の部品に接触させないようにしてください。
  • 充電コネクタを接続するときには、コネクタの向きに注意してください。

GPSロガー 製造マニュアル

部品表 ━━━━

観測記録部

種別型番重量
バッテリー3HB70 1 11.2g
GPSモジュールGH-80 1 10.6g
フィルムケース富士写真フィルム製 1 5.7g
プリント基板- 1 1.3g
メモリカードアダプタminiSD→SD 1 1.1g
メモリカードminiSDカード 1 0.9g
マイコンPIC12C509A 1
C0.1μF 1
R200Ω 1
LED- 1
ジャンパスイッチ2P 1
コネクタSM09B-SSR-H-TB 1
ピンヘッダ3×1P 1
スズめっき線
絶縁テープ
合計 32.3g

充電部

種別型番
タイマーAC100V 8時間 1
ACアダプタAC100V→DC12V 1
DCジャック 1
R470Ω 2
ピンヘッダ4×1P 1
コネクタ3P 2
コネクタ4P×1 1
リード線
熱収縮チューブ

基板の仕様 ━━━━

基板は軽量化のため0.8mm厚にしましたが、これは重要ではありません。パターンが複雑なのは、ピン配置を試作版(片面基板)と同じにしたためです。大きい丸は、当初ボタン電池を使う計画だった名残りです。

回路図

DIP版/表面実装版

基板は、DIP部品でも表面実装部品でも取りつけられるようになっています。

DIP版の基板写真
(拡大)
表面実装版の基板写真
(拡大)

マイコン(PIC12C509A)は、DIP版の場合は外側の穴を、表面実装版であれば内側のパターンを使ってください。

GPSコネクタは、DIP版の場合は4Pのピンヘッダを、表面実装版であればパターンを使ってください。DIP版の場合、GPSモジュールからの配線を4Pのコネクタに変換する必要があります。

CRとLEDは、DIP部品と表面実装部品のどちらでも使えるようになっています。Cについては穴の間隔も2種類用意してあります。

GPSモジュールの金属部分が基板と接触しないように、絶縁テープを貼ってください。

プログラムの書き込み

マイコンは、プログラムを書き込んだ状態で取りつけてください。DIP版の場合はICソケットを使用することもできます。

なお、コネクタとメモリカードに何も接続しない状態であれば、書き込みに必要な端子はオープンになりますので、実装後の書き込みも可能です。なお、筆者の環境ではV+(ピン1)をライターに接続した状態では、パスコンの影響かうまく読み書きできませんでした。

レギュレータ

設計変更の経緯により、3端子レギュレータのパターンが残っています。単3電池などで駆動する場合には、3端子レギュレータを実装すると3.3Vを作ることができます。電源は充電コネクタから供給します。

3端子レギュレータのピン配置に合わせられるように、2種類の穴が用意してあります。センターグランドのタイプであれば、表面実装にも対応しています。

レギュレータの実装写真
(拡大)

メモリカードアダプタ

端子部にスズめっき線を半田付けしておき、これを基板に半田付けします。全部の部品の半田付けが終わったら、スズめっき線の部分で2つに折るようにして、基板に重ねます。

メモリカードアダプタ実装途中の写真
(拡大)

メモリカードアダプタには、熱に弱い種類もあるようなので、注意してください。

バッテリーの実装方法

現状の基板では、バッテリーの足をうまく曲げる必要があります。面倒であれば、メモリカードアダプタのマイナス端子につないでしまっても構わないと思います。

バッテリー実装の写真
(拡大)
バッテリー実装の写真(別アングル)
(拡大)

充電部 ━━━━

DCジャックのマイナス端子を少し細く加工して、4Pのピンヘッダを差し込み、半田付けして固定します。DCジャックのプラス端子から、ピンヘッダの両側の端子に、それぞれ抵抗を半田付けします。絶縁のため、この状態で熱収縮チューブをかけるとよいでしょう。あとはコネクタを配線して完了です。観測記録部のコネクタは、中央のピンがマイナスです。

充電部の写真
(拡大)

タイマーは、家庭用の12時間タイマーを使いました。「オフのみ」が指定できるタイプであれば、24時間タイマーも使用できます。

メモリカードの初期化 ━━━━

メモリカードはあらかじめFAT16でフォーマットし、gps.logという記録用ファイルを格納しておきます。gps.logは自動的には大きくならないので、あらかじめ記録するサイズに合わせて大きくしておきます。

gps.logはルートディレクトリの最初の16エントリ以内に置く必要がありますが、フォーマット直後に1ファイルだけコピーすれば、問題ありません。また、FAT16でフォーマットする環境が用意できない場合は、確実にFAT16でフォーマットされている256MBのメモリカードを使用する方法もあります。

ファイル名がgpsd.logになっていると、衛星捕捉まではメモリカードへの記録がおこなわれません。

サーバ環境の構築 ━━━━

PHPとGD2が動作するHTTPサーバが必要です。無償で入手できるものとしてはApacheがあり、商用サーバなどで数多くの実績があります。 Windows版もUNIX版もありますので、環境に合ったものを選択してください。なお、いわゆるホスティングサービスでは、これらがはじめから提供されているものも多数あります。

PHPはサーバサイド言語で、HTTPサーバからCGIで起動するか、またはHTTPサーバにモジュールを組みこんで使用します。また、PHPにはGDエクステンションを組みこんでおく必要があります。ここまでの作業は、インターネットや書籍にさまざまな情報が出ていますので、参照してください。

設定が正しければ、glogana.phpをHTTPサーバからアクセスできるディレクトリに置き、webブラウザからアクセスすると、解析画面が表示されます。


GPSロガー 設計メモ

開発の動機 ━━━━

このシステムは、2004年8月に実施されたSWEST6会場で、Surveyorチームが複雑な設計のGPSロガーの調整に苦労していたのを見て、もっと単純で誰にでも作れるGPSロガーを設計しようと考えたことがきっかけとなって生まれました。

そのとき苦労していたのは、フラットパッケージの半田付けと、DC-DCコンバータのラッチアップでした。GPSロガーを、誰でも製造できるように再設計(リファクタリング)することが、このプロジェクトの目的です。

要件 ━━━━

GPSロガーは、モデルロケットの飛行径路を計測するのに使用します。モデルロケットは、火薬を燃焼して得られるガスの噴射により、高度100m程度まで上昇します。その後、モデルロケットはパラシュートを開いて地上または水上に降下します。GPSロガーを使うと、高度も正確に測定することができます。

モデルロケットに搭載する以上、GPSロガーはできるだけ小さく、軽いことが望ましいのですが、前回は防水を兼ねたフィルムケースを使用していましたので、このプロジェクトでも同じものを使用することにしました。大昔の雑誌の記事(初歩のラジオ?)で、コニカ(当時はサクラカラー)よりもフジのフィルムケースの方が防水性が高いと読んだ記憶があり、富士写真フィルムの低感度用フィルムケースを使用しています。

電源は内蔵する必要がありますので、電池を使用します。

それ以外の要件として、作りやすいことと、部品が入手しやすいことを重視しました。なお、GPSモジュールの部品については、前回と同じものを使用しています。

設計コンセプト ━━━━

要件を満たすために、どのような方針で設計をおこなうかですが、マルチメディアカード、またはその上位規格のSDカードを使用するという方針を仮定しました。これは以前「マルチメディアカードのSPIモードはクロック同期シリアルでアクセスできるので制御が簡単」と知人から聞いていたためです。個人的に経験を積んでおきたかったというのもあって、資料を調査し、採用しました。

サイズ的にも合格のはずだったのですが、適当なコネクタを手配し、カードを差してフィルムケースに入れてみたところ、厳しいことがわかりました。コネクタの作りによって大きさが違うのだと思いますが、部品が手配しにくくなるのは要件に反します。そこで、携帯電話やMP3プレーヤー向けに出回っている mini-SDカードを使用し、SDカードへの変換アダプタそのものをソケットにするように考えました。mini-SDカードは、アダプタ付きの製品が各社から提供されているため、入手は容易です。

なお、本システムではmini-SDカードをマルチメディアカードの上位互換品として使用しているのですが、以降の説明ではこれらを単に「SDカード」と呼ぶことにします。

フラッシュメモリLSIを基板に実装した場合とは異なり、SDカードは着脱可能ですから、GPSロガーは記録機能だけにし、別の機器にSDカードを差して読み出すことも可能になります。これにより、GPSロガーの単純化・軽量化が見込めます。

SDカードはPCでも読めるのですが、FATなどの標準的なフォーマットでない場合には、PC用の専用ソフトウェアを開発する必要があります。これは、 PCの環境の変化(OSのバージョンアップなど)によって動かなくなる危険があり、保守性の低下につながります。一方、もしFATで書き出せれば、どんな PCでも読み出せることになり、保守性とシステムの単純化が期待できます。そこで、何らかの形でFATを書き出すことが目標になります。また、分析システムがPCに依存してしまったのでは意味がないので、分析システムを動かすプラットフォームについての検討も必要です。

設計の詳細 ━━━━

電源

今回の設計では昇圧はおこなわず、3.3Vのレギュレータの使用もしくは3.6Vの直接入力としています。GPSモジュールは3.3V程度を必要とし、 100mA近く消費するので、当初は3V200mAhのコイン電池(CR2032)を2つ直列にして、レギュレータで3.3Vにする方針でいました。基板を起こした後に、コイン電池の放電能力について指摘をいただき、大電流放電が可能なNiMH電池に変更しました。最終的に、SANYOの3HB70 (3.6V 公称容量70mAh)または、VARTAの互換品を使うことにしました。いずれも、通信販売などで幅広く入手できます。大電流放電なので、30分〜1時間で電池がなくなる計算になります。

充電は、12VのACアダプタから電流制限抵抗を通して8時間充電するという単純なものです。

記録メディア

mini-SDカードは32〜512MBのものが、各社から販売されています。PCショップなどで購入できます。

マイコン

個人的に実績のあるPICの中で3.3Vが使えるものとなると、PIC12C509Aが思いつきます。これは8ピンのマイコンで、4MHzのRCクロックを内蔵しているため、部品点数が少なくできるという利点があります。比較的古く、機能も少ないのですが、フラットパッケージもあり、多数の店舗で入手できます。8ピンのうち電源は2ピンで、GPSモジュールとの送受信に2ピン、SDカードのアクセスに4ピンを割り当てることになります。

ソフトウェアの機能

PIC12C509AにはRAMが41バイトしかないため、普通のやり方ではFATを扱うことができません。つまり、1セクタ512バイトをメモリ上に読み込み、一部を変更してから書き戻すという処理をおこなうことができません。そこで、あらかじめPCを使ってメモリカード上にファイルを用意しておき、このファイルのデータ部分を1セクタ単位で更新していく方法を取ることにしました。

GPSモジュールからの受信はシリアル(9600N81)ですが、これの受信バッファも取れません。こちらについては、GPSモジュールの送信が間欠的であり、1秒に一度、何十バイトかがまとめて来るのを利用して対応します。具体的には、受信したデータはそのままセクタデータとしてSDカードに書き出します。送信が途切れたところで、ダミーデータを書き込んでセクタの残りを埋め、次のセクタに進み、次のデータの受信を待ちます。SDカードは、セクタの途中では書き込み待ちは発生しませんので、シリアルデータをそのまま書き込んでも取り落としはなく、データの途中でセクタが終わることもありません。

なおGPSモジュールから来るデータはバイナリですが、デバッグのしやすさ、ダミーデータの識別のしやすさを考え、データは16進ダンプ形式でテキストとして書き込みます。

LED表示

PIC12C509Aの入出力はすべて使用してしまっており空きがないのですが、動作の表示がほしいところです。そこで、SDカードのCS端子にLEDをつなぎ、アクセス中は点灯するようにしました。

何らかの異常時には点滅回数でエラーコードを表示するようにしています。これは昔、自動車整備の雑誌で読んだ、自動車のエンジン制御コンピュータのエラーログ機能を参考にしたものです。

分析システムのプラットフォーム

分析システムはGUI環境上で使用したいわけですが、普及しているWindowsマシンは将来のバージョンアップなどに心配があり、一方でオープンな Linuxは誰でも簡単に利用できるとは言い切れない状況です。モデルロケットの打ち上げ現場にPCを持ちこむことにも不安があります。そこで、比較的後発のサーバサイドスクリプトであるPHPを使用し、インターネットブラウザを使ってアクセスする方法を採用しました。

PHPは無償で利用できるサーバサイド言語で、Apacheなどの主要なHTTPサーバから利用することができます。WindowsにもLinuxにも対応しています。標準でPHPが利用できるホスティングサービスも多数あり、公開ディレクトリに「.php」のファイルを置くだけで動作させることができます。このため、クライアントはインターネットブラウザさえ動作すればPCでもMacでもケータイでもよく、サーバ側は最悪でもPC+Linux+ Apache+PHPとすることで確実に構築することができます。また、誰かが構築したサーバが公開されていれば、クライアント側は何もインストールしなくてもそこにアクセスするだけで動作しますので、プラットフォームへの依存が最小限に抑えられます。

PHPの言語仕様は、連想配列あり、クラスあり、多数の拡張モジュールありで、今回のようにファイルアップロード処理をおこなったり、画像の動的生成をおこなったりすることも簡単にできます。たとえば秋月電子通商のオンラインショップ(http://akizukidenshi.com/)もPHPで作られているようです。

その他

GPSモジュールは、GH-80という小型のものを用意していただきました。

作りやすさを考え、DIP部品のみでも作れるようにしました。コストは圧縮したいので、基板は共用になっています。

試作品 ━━━━

最初に、SDカードへのアクセスを検証するための試作基板を作りました。シリアルはPCに接続し、入力したアドレスのセクタダンプなどをおこなうものです。その後、MBR(マスターブートレコード)などの管理領域の読み込みをテストし、最終的にはメモリカードの先頭ファイルをシリアルに出力するテストをおこないました。ここまでくれば、読み込みを書き込みに変更することで書き込みが可能になります。

GPSモジュールとの通信は、まずレベルコンバータ(トランジスタ2個)を使ってPCに接続してテストし、その後PICに持っていきました。

GPSモジュールの感度が低い問題が発覚し、受信データをLCDに表示するためのボードも用意しました。LCDモジュールは5Vなので、PIC16F84Aを使用しました。

プリント基板のアートワークですが、試作品と同じピン配置にしたため、電源が引き回されて完成度が低くなっています。当初はコイン電池2個を直列にして6Vを得る考えだったため、3端子レギュレータのパターンが残っています。

PICによるFATアクセス ━━━━

PIC12C509Aはメモリが少ないため、セクタのデータを1バイトずつ読み込みながらのデータ処理と、1セクタまとめてのデータ書き込みしかできません。SDカードのブロック長設定機能を使い、1セクタ=1バイトにする方法も考えましたが、あらゆるSDカードでサポートされているか自信がなかったこと、シリアルの受信速度に追いつけない可能性があることを理由に見送りました。ちなみに、PIC12C509Aにはシリアル通信のためのハードウェア (SIO)もありません。

管理領域の読み込みについては、セクタリードコマンドを発行した後、必要なデータが来るまで読み飛ばし、その後データを読んで判断し、残りを読み飛ばすという動作になります。FATから次のエントリを読み出す処理は、たとえば最初の10バイトは読み飛ばし、次の2バイトを読み込み、その後の500バイトは読み飛ばす、という処理になります。1クラスタごとにこの処理をおこなうわけですが、SDカードのアクセスは高速なので、シリアルデータが途切れたときに処理することで十分に間に合います。今回の実装では、このタイミングで250ミリ秒間LEDを消灯し、動作の表示をおこなっています。

動作は、最初にMBR(マスターブートレコード)を読み込んでパーティションテーブルから最初のパーティションの開始セクタを取り出し、そこからPBR (パーティションブートレコードまたはBIOSパラメータブロック)を読み込みます。PBRを見て、FATのセクタ数と、1クラスタあたりのセクタ数を得ます。ここからRDE(ルートディレクトリエントリ)のアドレスが求まり、最初の1セクタ(16エントリ)の中から、書き込み対象のファイル名を見つけて、その先頭クラスタに書き込みを開始します。1クラスタが2セクタ以上ある場合は、セクタ数だけくり返します。1クラスタの書き込みが完了したら、 FAT(ファイルアロケーションテーブル)を読み込み、次のクラスタ番号を得て、書き込みを続けます。

当然、この方法では管理領域の更新はできず、ファイルサイズや更新日時は元のままになります。またFAT12については、1エントリが2セクタにまたがる場合があるため、対応を見送りました。

その他 ━━━━

内蔵プルアップ抵抗

PIC12C509Aには、レジスタの設定で、いくつかのピンのプルアップ抵抗を有効にすることができます。そこで、GPSモジュールからのシリアル受信端子と、SDカードからのデータ受信端子は、プルアップ抵抗の効くピンに割り当てることで、外部のプルアップ抵抗を節約することができます。

ワンタイムROMでの値の調整

PIC12C509AのダイはEPROMになっており、開発は窓付きのパッケージ(JWタイプ)を使用します。組み込み時には窓がなく消去できないワンタイム品を使うのですが、動作結果を見て値を調整したい場合もあります。

このときは、EPROMの先頭部分に「movlw 7fh」を、続いて「andlw 0ffh」をいくつか(筆者の場合は8〜16個)置き、最後に「movwf param0」のようにしてメモリに保存します。「andlw 0ffh」のバイナリコードは0xeffで、動作は「W =& 0xff」なのでWレジスタの値は変化しません。したがってこのコード列は、最初に「movlw 7fh」でWレジスタが0x7fになったあと、「andlw 0ffh」の並びでは何も起きず、最後に「movwf param0」でメモリに保存されることになります。この状態では、0x7fがメモリに保存されます。

値を変えたいときは、最初の「andlw 0ffh」を「movlw 34h」のように変更します。「movlw 34h」のバイナリコードは0xc34で、下位8bitがオペランドになります。EPROMは、初期化時は全ビットが1で、書き込むと0になりますので、 0xeffに0xc34を上書きすることが可能なのです。

必要であれば、この並びを何組か持っておくと、たとえばクロックやタイマーの調整、ステッピングモータの速度の調整、ストロークの調整、IDの書き換えなど、様々な目的に利用することができます。

逆差し対策

私は基板側のコネクタはピンヘッダを使うことが多いのですが、逆差しを防止できないという欠点があります。そこで、逆差ししても逆電圧がかかったりしないように、配列を工夫しています。

ケータイ対応

将来的に携帯電話からのインターネットアクセスを考慮して、衛星捕捉まで記録を開始しないモードを用意しました。ファイル名をgpsd.logにするとこのモードになり、ファイルサイズが小さくて済むため、携帯電話のような低速通信の機器に向いています。mini-SDカードからのファイルアップロードができる携帯電話があれば、そのままサーバに送信して結果を分析することができます。

また、imexportというディレクトリがあると、その中のgps.logを検索するようになっています。これは、このディレクトリに添付ファイルを格納する携帯電話に対応するためのものです。

トラブルの記録 ━━━━

ボタン電池の放電電流

当初はコイン電池(金属リチウム一次電池)を使う予定だったのですが、ある方に指摘されてデータシートを調べたところ、連続した大電流放電は保証外のようでした。参考にしたデータシートを以下に示します。

mini-SDアダプタの接続方法

mini-SDアダプタはプラスチック製のため、熱に弱いという心配がありました。そこで、初めて導電性接着剤を使ってみたのですが、それなりにコツが必要なようです。修正ペン型のものは粘性が低く、mini-SDアダプタの端子ガードの下に浸透して端子間で短絡してしまいました。また、固まったあとは脆いようです。2液混合エポキシ型も試してみたのですが、結果的に原因不明で端子間の短絡が発生しました。

導電性粘着剤を使用した銅箔テープ(シールド用)も試したのですが、安定した接続が得られませんでした。最終的に、製造マニュアルにあるように、半田付けで対応しました。

アドレスの制限

PIC12C509Aにはメモリが2バンクあります。0〜0x1fと、0x20〜0x3fで、それぞれ一部のみ実装されています。バンクはFSR(ファイルセレクトレジスタ)でアドレスを指定すると切り替わるのですが、このとき直接アドレスでアクセスするメモリにも影響があります。FSRを0x30にすると、0x20〜0x3fのバンクが有効になるため、0x14のメモリへの読み書きは実際には0x34におこなわれます。このため、どちらのバンクからもアクセスする変数は、0〜0xfの範囲に置く必要があります。なお、実際に使用可能なメモリは、7〜0x1fと0x30〜0x3fの41バイトです。

また、PIC12C509Aには1024ワードのプログラムメモリがありますが、call先に指定できるアドレスは0〜0xffという制限があります。また、goto先に指定できるアドレスは0〜0x1ffと0x200〜0x3ffのどちらか片方のみで、ステータスレジスタで切り替える仕組みになっています。サブルーチン類は先頭に固めておき、サブルーチン内のgotoが正常に動作するよう、後半512ワードから呼び出す場合にはステータスレジスタを設定しておく必要があります。

ちなみに、PIC12C509Aではcallのネストは2回までしかできません。メインルーチンからrssendを呼び、その中からrswaitを呼ぶことはできますが、それ以上呼ぶと、スタックが上書きされてしまい、メインルーチンに戻れなくなります。

PICの内蔵クロック

PIC12C509の内蔵4MHzクロックは、レジスタに微調整パラメータを書き込んで使用します。工場出荷時は5Vで校正された値が、プログラムメモリの最後に書き込まれ、電源投入時はここから実行が開始されます。

シリアルの受信化け(ストップビットがビット7に出てしまう)が出たとき、このシステムの動作電圧である3.6Vではクロックが遅くなっているのではないかと想像したのですが、実際に計測してみたところ影響のあるような遅れは見られませんでした。これは結局、定数のミスと判明しました。

GPSモジュールの受信感度

調査中ですが、このシステムでは、衛星捕捉能力について、GPSモジュールの実力が発揮できていないようです。電源の問題、シールドの問題などが考えられます。今までの実験結果は、以下の通りです。

battery typePIC typecase typelogstatus
NiMH directflatin film-casegl050718.logbroken
UM3x3 regulatedDIP-JWopengln50807.loggood
UM3x3 regulatedDIP-JWwith Cu plate(50x50)gls50807.loggood
NiMH directDIP-JWin film-casegl050813.logbad
NiMH + 470uFDIP-JWin film-casegle50814.logbad
NiMH + 470uFDIP-JWwith Cu plate(50x50)gl050815.loggood
NiMHDIP-JWopengl050817.loggood(1.5-2min)

振り返り ━━━━

何もしなくても動くくらい、単純な設計を目指したのですが、GPSモジュールの感度の問題は原稿執筆時点では未解決です。それ以外については、ハードウェアの問題は致命的なものは避けられ、期待通りの結果が得られたと考えています。

参考文献 ━━━━


 
  Copyright © π 2007-2009
Powered by light work group
このページの内容は無保証です