November 03, 2007

GPSチップアンテナ 特性解析結果

sparkfunから購入したGPSチップアンテナの基板をおこしたものの、うまく衛星を捉えることができない、という記事を書きましたが、Takeyasuさんという方がご助力を買ってでてくださり、問題のチップアンテナの特性解析を行ってくださいました。今回の記事はその結果報告です。

解析対象に用いたのは、これまでに作成した基板の中で、素のままアンテナ基板、マッチングキャパシタ付き基板の計2種です。

Ant_NoMatch.jpg
素のままのリターンロス特性

Ant_Matched.jpg
マッチング回路付のリターンロス特性

Ant_NoMatch_SC.png
素のままのスミスチャート

共振周波数がGPSの1.575GHzからずれていることが確認できます。実はsparkfunで売っているチップアンテナは150111という型番で、データシートをみると共振周波数が1.575GHzよりも低いことがわかります。
加えてこちらで設計した基板では、アンテナの真下に材質がFR4(誘電率およそ4.7)の基板が存在するため、アンテナに作用する誘電率が、アンテナ自身の誘電体の誘電率(4.7よりも低い)よりも大きくなってしまい、短縮率の増加、逆に言えば共振周波数がより低い方へずれてしまったのではないか、というコメントをTakeyasuさんより戴きました。このことを裏付ける証拠として、チップアンテナを基板から一度はずし、垂直に立てた状態(つまりアンテナ周囲は誘電率1の空気)で計測した共振周波数は凡そ1.5GHzであったとのコメントも戴いております。
なお、作成した基板の参考にしたデータシートにある性能評価用の回路では、アンテナの裏にFR4が存在いますが、共振周波数は1.575GHzにきています。このことについては、おそらく共振周波数が1.575GHzよりも高い特性をもつ152111という型番のアンテナの評価結果であろう、ということも教えていただきました。

この結果と考察、ならびにこれまでの検討を踏まえて、以下の点を改善し再挑戦する予定です。

  • アンテナの裏にくる基板をなくす。つまり穴をあける。
  • あるいは実はアンテナはヘリカルアンテナで裏面からパターンが見えるので、いくつかの螺旋をショートさせてアンテナの電気長を短縮する。
  • 信号線の周囲のGNDが余分。マイクロストリップというかコプレナ的になっている。
  • 型番150111のアンテナではデータシートにあるマッチング回路(おそらく型番152111用)は性能を低下させているので、必要ない。
  • 型番152111のアンテナを購入できないか探してみる。

最後にTakeyasuさんに改めて謝辞を表したいと思います。

※その後、アドバイスに従い、基板を作り直してみましたが…

11:18 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/600

November 07, 2007

7bits エンコーダ/デコーダ

最近、以前PC接続用基板を作ったXBeeを用いて、シリアル通信(より正確にはUART)をしていますが、少し困ったことがありました。当然やり取りされるデータは1byte単位なので、複数バイトで意味を持つような通信はちょっとした工夫をしないと、どこのバイトからどこのバイトが一つの意味単位を構成しているのかが不明になってしまいます。そこで今回はその工夫、題して7bits エンコーダ/デコーダについて記そうと思います。
実はこういうことはよくある話で、車輪の再発明であることは十分自覚していますが、せっかくコードを書いたので晒してみようと思います。

複数バイトで一つの意味を表すための工夫としてはいくつかの方法が考えられますが、今回は各バイトの先頭1bitを情報開始フラグとして利用することにしました。つまり先頭のバイトではそのフラグを落とし残り7bitsで情報を表す、例えば2進表記で0b0XXXXXXXのようにします。以降のバイトについてはそのフラグを立てて0b1XXXXXXXとし、同じく残り7bitsで情報を表すことにします。これでどこから意味単位が始まるのか簡単に把握できます。

ここで問題になるのが7bitsで情報を表す、ということです。1byte=8bitsなのでどう考えても7bitsでは情報量が不足します。そこで7+1に分けて、7bitsについては先頭のバイトに格納し、残り1bitについては次のバイトと混ぜて7+2にし、その7bitsについては2番目のバイトに格納し、
残り2bitについては更に3番目のバイトと混ぜて7+3にし………、という操作を繰り返すと、うまく情報を伝えることができます。これが7bits エンコーダのする仕事です。逆に7bits単位で送られてきた情報を引っ付けて元の情報に戻す、これが7bits デコーダの仕事です。

これをC言語でサクッと実装してみました。bits7.cbits7.hです。u8 = unsigned charなので必要に応じてtypedefしてください。またテストコードをつけてあります。実行するには#define BITS7_TEST_MODEしてコンパイルしてみてください。

ちなみにですが先ほどの先頭1bitをフラグにする通信方式を利用すると、XBeeでは非常にいいことがありまして、"+++"(+を3文字分)でコマンドモード(GPIOの操作やAD変換値の取得などXBeeがもつ機能へのアクセスモード)に移行してしまうことを抑制できます。ASCII文字で表されてしまうのは先頭の一文字だけですので、複数バイトでやり取りをしている限りは'+'の文字が3個続くことはありません。

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (3) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/601

November 13, 2007

Super Sylphide 進捗状況(13) -- Time Keeper 完成

研究開発中のオートパイロットシステム Super Sylphideの関係で、少し前にGPS受信機からくる時刻情報を中継するモジュール Time Keeperについて記事を書きましたが、この度ようやくファームウェアが完成し機能するようになりましたので、改めて紹介をしたいと思います。

まずはTime Keeperのファームウェアソースを公開したいと思います。このファームウェアは、前の記事で紹介したハードウェア上のF8051F410マイコン上で動作し、コンパイラはsdccを想定しています。実はコンパイル後に気づいたのですが、使用しているフラッシュ領域が8KBとかなり小さく済んだので、フラッシュ低容量バージョンのC8051F412でも動作します。F412の方がDigiKeyではF410よりも100円程度お得です。

ファームウェアの動作概略図をせっかくなので書いてみました(図では上記の事情により、搭載マイコンをC8051F412と表記してあります)。

time_keeper.gif

GPS受信機が電波を捉えられているときは、GPS受信機から出力される時刻情報としての1pps信号、並びに測位データをそのまま後続の機器へ中継します。また電波が途切れたときに備えてTime Keeper自身の時刻情報も更新します。
一方、GPS受信機が電波を捉えてないときには、GPS受信機から1ppsや測位情報が送られてこなくなりますので、GPS受信機に代わって、1ppsや偽測位情報をTime Keeperが発信します。この情報はC8051F410に内蔵のReal Time Clock (RTC)の機能を使って生成されています。

テストケースとして、GPS受信機がはじめ利用可能で、途中数分間に利用不能となり、再度回復した場合(トンネルなど)、ならびに前回電源ON時はGPS受信が可能であったが、今回は電源ON時よりGPSが利用不能であった場合の2つのケースを実施してみましたが、両ケースとも正常に稼動していました。

23:26 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/602

November 19, 2007

GPSロガー ファームウェア

少し以前にGPSロガーを作っていまして、基板データを公開したりしましたが、そういえばファームウェアなどのソフトウェア要素を何ひとつ載せていなかったな、と思い今回の記事を書いています。また最近のアクセス履歴を見てみると、『GPSロガー』で検索される方がかなり多いようなので、自作GPSロガーを考えている方の参考に成なれば幸いです。

作ったファームウェアですが、以前の記事を見ていただければわかるようにSilicon LaboratoriesのC8051F340というマイコン上で動作するものです。コンパイラは、このデバイス向けで無償で使えるC言語コンパイラ、sdccを利用しました。デバッカはSilicon LaboratoriesのF340開発キット(直販で99ドル、DigiKeyでも購入可)に付属のUSB接続アダプタとIDE(統合開発環境)を利用しました。IDEは純正でない無償のsdccとも連携してフルソースコードデバックが行えるので、開発時には非常に重宝しました。

ファームウェアは下の図のような構造になっています。

LEA-4T_logger_fw.png

基本的にu-blox製LEA-4T GPS受信機が出力してきた航法データ(位置や速度)や生データ(Carrier PhaseやPsuedo Range)をそのまま保存する、という機能をこのファームウェアで実現しています。LEA-4Tは比較的安い受信機ながら航法データを最大4Hz、生データを最大10Hzで出力できるので、とてもお勧めです。
保存されるデータは別に開発しているオートパイロットシステム Super Sylphideとの関連で32byte固定長の特殊フォーマットになっています。といってもその32byteの先頭に'G'の文字がつき、残り31byteはu-bloxのubxフォーマットでそのままデータが入っているだけなので、後ろの31byteを全て引っ付ければ、u-bloxのログビューア u-centerで内容を見ることができます。

SDカードへの書込みは標準的なFAT16フォーマットを利用して行っています。この部分はELMのChaNさんが開発・無償提供されている、汎用ファイルシステム・モジュール Tiny-FatFsをC8051マイコンに合うように取り込むことで解決しました。ChaNさんには感謝の意をここで表したいと思います。
なお、その他の部分はSilicon Laboratoriesによるリファレンスデザイン USB-MSD-RDをかなり改造することで対応しました。

さらにUSBの部分は記録したログがPCから直接みれるように、PCに接続した際にディスクとして見れるMass Storage Device(MSD)という規格に準拠させてあります。同時に、GPS受信機の出力をPCにダイレクトに転送するために、USB上に擬似シリアルポートでを作るCommunication Device Class(CDC)という規格にも準拠させてあるのですが、WindowsのCDCが思い通りの動作をしてくれないので、こちらの機能は不完全な状態にあります。

これらのファームウェアを公開することにします。ライセンスについてはreadme.txtにあるとおり、Creative Commonsの表示-非営利-継承に準拠するものとします。利用させていただいているTiny-FatFsは2007年11月現在、ChaNさんによって無制限での利用が認められていますが、再配布などする際はこちらのライセンスにも注意を払っていただきたく思います。

09:12 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/603

November 27, 2007

完成済みPDFにヘッダを埋め込む

とある事情で40個くらいの完成済みPDF全ての1ページ目のみにヘッダを入れる必要がでてきました。このような編集機能を総称するとアノテーションというそうで、製品版のAdobe Acobat(無償のReaderではなく、作成や編集機能がついたもの)を持っているとGUI操作でできるようです。
しかしながら普段からPDFはTeX経由で作っていたり、M$のwordやPower Pointをあえて使う必要があっても無償のPrimoPDFでPDF作りに励んでいるため、残念ながら手元にAcobatがありません。またこの40個程度という数が微妙で、GUI操作、というかマウスを使う操作が比較的嫌いな僕としては、CUIなコマンドツールの方がうれしいです。
そこで今回は色々と調べまわってみた結果、解決にたどり着くことができましたので、それをまとめておこうと思います。

トップページから読まれている方は続きをどうぞ。

続きを読む "完成済みPDFにヘッダを埋め込む"
14:48 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/604