August 03, 2007

Super Sylphide 進捗状況(7) -- 圧力センサの較正

オートパイロットシステム Super Sylphideには、2種類の圧力センサが搭載されています。1つは穴が2つ空いていて、その2つの圧力差を測るためのゲージ圧センサ、1つは大気圧を測るための絶対圧センサです。今回は前者のゲージ圧センサについて、最近行った較正作業の紹介をしようと思います。

このゲージ圧センサを何に使うかというと、飛行機の速度を出すのに利用できます。簡単に原理を紹介しておくと、航空関係の方なら誰でも知っていると思われる、ベルヌーイの式という有名な方程式があります。
bernoulli.gif
この式は速度がある気体の圧力を計測するとどうなるか、ということを簡易的に示した式(詳しくはWikipedia先生参照)で、p_{0}は速度がある方向に正対して計測した圧力(全圧)、pは速度がある方向に直交して計測した圧力(静圧)を示しています。この式に基づくと、ゲージ圧センサによってp_{0}とpの差が得られれば、かつ気体の密度ρがわかれば、気体の速度Vが計算できます。逆に気体が静止していると考えれば、気体に対する速度、つまりは空気に対する飛行機の速度を知ることができます。
なお、一般的な飛行機では差圧を得るのに、ピトー管という特殊な導圧管を利用しています。

ということで本題の較正作業ですが、差圧をとる為に2つ穴が空いているゲージ圧センサの片方の穴に速度がある気体を、もう片方の穴に静止した気体を入力して、どのような電圧がセンサから出力されるか確認しました。
ゲージ圧センサはfreescale MPXV5004DPで、速度のある気体を得るために、一定の気体速度を出せる較正用風洞を利用しています。また圧力を穴まで導くために、アルミパイプと耐圧チューブを使いました。

CA340042.JPG
作業風景。左側に見える穴が風洞の出口。そこからアルミパイプとチューブでセンサの穴へ。

pitot_result.gif
計測結果。

ベルヌーイの式のとおり、気体の速度の2乗に支配された電圧が出力されました。模型飛行機が飛行する20m/s以下といった低速域でも、十分使用可能なことが確認できました。

※その後、DSPとマイコンでSPI通信ができるようになりました。

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

August 06, 2007

はて☆スタ ペイント

はてなスターの実用的でない、新たな使い方を模索してみました。

※ちょっとインデックスページが重くなりそうなので、インデックスページから来られた方は"続き"に本文があります。

続きを読む "はて☆スタ ペイント"
00:50 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (2) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/584

August 08, 2007

ビープ音で『カエルの歌』 (Windows版)

最近『どう書く.org』を見るのが面白いです。

そこで目にとまったのがビープ音で、カエルの歌を演奏するというもの。皆さん、様々な言語で挑戦されています。Rubyで音をどう鳴らしているのか興味があったのでコードを見てみたところ、残念ながら*NIXにしかないビープ音を鳴らすコマンドbeepを利用していました。

これではM$のWindowsでは実行でできません。仕方がないので、Windowsでも実行できるようにビープ音を鳴らすWin32APIのBeep関数(引数として周波数と時間)を呼び出してみることにしました。こんな感じでいけます。

require 'Win32API'
$beep = Win32API::new('kernel32', 'Beep', ['i', 'i'], 'i')

FREQ_TABLE={ ?c=>262, ?d=>294, ?e=>330, ?f=>349, ?g=>392, ?a=>440, ?b=>494, ?r=>39999}
def play(mmf)
    mmf.each_byte{|c| $beep.call(FREQ_TABLE[c], 500)}
end
play "cdefedcrefgagfercrcrcrcrcdefedcr"

ちなみにマイコン関係をいじっていると、たまに音声処理をしたくなることがあります。そんなときに一定周波数の音声波形が欲しくなることがあるのですが、そんなときはRuby経由でWin32APIのBeep関数を呼び出すのが手ごろそうですね。

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

August 14, 2007

GPSチップアンテナ

電子工作をしていると、何か面白い部品がないか、部品漁りを定常的にしているのですが、最近sparkfunで面白いものを見つけたので、購入してみました。それが今回のお題のGPSチップアンテナです。

このアンテナ、非常に小さいです。商品のページにもあるとおり硬貨よりも小さいので、模型飛行機などでGPSを利用するときに重宝しそうです。しかしながら、このままでは受信機にとりつけることが難しいので、SMAのRFコネクタを接続した基板を作ってみることにしました。
ここでSMAコネクタは、基板の端に取り付けるタイプ(end launch type)を利用することにしましたが、このSMAコネクタも同じくsparkfunから入手できます。SMAのケーブルについては現在秋月で1.5mのものが購入できるので、それを利用することにしました。MCXなど他のコネクタ接続を考えるなら、以前の記事『秋葉原でレアパーツ (カプトンテープとMCXコネクタ)』をどうぞ。

基板ですが、Olimexで製作することにします。高周波基板なので、本当ならばインピーダンスコントロールがされたまじめな基板屋を使うべきなのでしょうが、お手軽レベルで基板屋は妥協することにしました。設計自体は、いちおうマイクロストリップラインの計算をして設計しました(FR-4(ε=4.8) 1.6mm厚 2層基板 copper:0.035mmで線幅2.8mm、Z=50.1 ohm)が、基板の製作品質を追求していないのでどの程度効果があるのか謎なところです。

gps_chip_antenna_top_brd.gifgps_chip_antenna_bottom_brd.gif
設計した基板。

毎度おなじみのEagle回路図レイアウトも置いておきます。コンデンサが2つ入っていますが、これはリターンロスを改善するためのもので、値はデータシートのリファレンスをそのまま利用しています。

※その後、基板の実装をしました。

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

August 20, 2007

Super Sylphide 進捗状況(8) -- DSP/BIOSを利用した割込みMcBSP(SPI Slave)

オートパイロットシステム Super Sylphideには、高速な計算をサポートするためにメインCPUとしてDSP(Digital Signal Processor)のTI TMS320C6713Bが、そして周辺への接続や基本的なログ機能のためのマイコンSilicon Laboratories C8051F340が搭載されています。両者の間ではA/D変換データや外部からの指令値をやりとりする必要があり、物理的にSPIならびにI2Cの2つのインターフェイスで接続されています。今回はそのうち、より高速にデータを転送できるSPIに関する話です。

SPIは3本または4本の線によって接続される簡易的、汎用的なインターフェイスで、馴染みがあるところですとSDカードにも使われています。お手軽ながら、ある程度のデータ転送速度を確保することができる(現在、最大24Mbpsで利用中)ので、マイコン野郎ご用達インターフェイスであると思っています。以前、SDカードとマイコン間のSPI信号を計測した記事があるので、物理的にどのような信号が流れているか興味があるようでしたら、そちらを参考にどうぞ。マイコミジャーナルのバス記事も、参考にあげておきます。

このSPIですが、お手軽ということもあり多くのマイコンに採用されています。実際Super Sylphideのマイコンにも、まさにSPIの機能が搭載されているので、こちらの実装は非常に簡単でした。
一方のDSPは、これ自体が汎用的、簡易的なものではないので、インターフェイスも残念ながらあまり簡易的なものが搭載されていません。SPIを実現するにあたっても、高機能なMcBSP(Multi-channel Buffered Serial Port)というインターフェイスを、設定によって簡易化して利用する必要があります。加えてDSPはマイコンに比べ割り込み処理が複雑であったり、また今回はDSPに付属のリアルタイムOS DSP/BIOSを利用したタスク管理をしようと考えたため、ますます訳がわからなくなってしまいました。

そんなこんなで、本家TIのドキュメントやComp.DSPを彷徨ったあげく、ようやく完成しました。

CCS_070818.gif
DSP開発環境のCCS(Code Composer Studio)で、晴れてマイコン側から送られたデータ(右下)を読めた。

同じようなことをしたいという奇特な方がどれだけいるかは知りませんが、参考になればと、現時点でのソースコードを散らかしておきます。実装形態の要約としては、タイトルの通り『McBSPをSPI Slaveで利用し、割り込み制御はDSP/BIOSのセマフォを活用』(まさに呪文(笑))です。

※その後、このDSPのSPIでデータの塊を通信する方法について記事を書きました。

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

August 24, 2007

XBeeはじめました

無線環境が必要になってきたのでZigBeeを導入しようとしています。小型であること、調達が容易であること、国内で認証を取っていることが決めてとなり、XBee / XBee Proというmaxstreamの製品を利用することにしました。調達のし易さについては、Digi-KeyRSコンポーネンツで買えます。認証についても多少触れておくと、出力が大きく遠距離まで届くProの方は、国内ではフルパワーでは使わないよう注意書きがある少し面白い状況です。

まだZigBeeの何たるかを習得していないのですが、とりあえずPCと接続して実験しようと考えています。購入した開発キットにはPCと接続して動作を確認するための開発ボードが2枚ついてくるのですが、片方がUSB接続なのにもう片方がシリアルポート接続と、いけていない状況です。ノートPCで利用しようと思うと、USBシリアル変換ケーブルを別途用意する必要があり面倒なので、オリジナルXBee USB接続ボードを作ることにしました。また、せっかくなので、郊外での実験の際はできる限り荷物を減らしたいということもあり、接続の機能のみを実現したできるだけ小さなものを作ってみることにしました。

XBee_bridge_brd_top.gifXBee_bridge_brd_bottom.gif

できあがりはこのような感じになりました。いちおう公開されている本家の開発ボードの回路図(PDF)を元におこした図面なので動作はすると思いますが、まだ基板の発注すら行っていないので動くかどうかはわかりません(笑)。なお、部品の調達には配慮して、秋月と千石で売っているもののみで組み立てられるようにしました。

恒例のEagle回路図レイアウトをおいておきます。(※バグ修正前、以下参照)

※その後、バグが発見されました(2007/10/25)。申し訳ありません。
バグの内容ですが、XBeeの5番ピン(-RESET)にいれるのはCBUS3(デフォルトでは-PWRENの機能)ではなく、CBUS4(同じく-SLEEP)でなければなりませんでした。これではXBeeにずっとRESETが掛かっていることになってしまいます。設計の時点で負論理であることを勘違いしていた可能性が大です。

修正方法ですが、物理的にジャンパでCBUS3とCBUS4を入れ替えても良いのですが、CBUSnの機能は内部EEPROMによって定義され、FTDIの無償ユーティリティMProgによって書き換えが可能なので、そちらでソフトウェア的に修正しました。MProgに書き込む内容は以下のとおりです。

XBeeAdapter_modify.png
赤丸部分が問題の箇所。

CBUS3とCBUS4の機能を入れ替えました。これで無事動作しています。
なお上記のバグを物理的に修正した基板データ(回路図レイアウト)もおいておきます。

なお、できあがりはこのような感じです。

XBee_bridge.jpg

コンパクトで給電もUSBからされるので重宝しています。

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

August 31, 2007

2007 槍ヶ岳

遅いながらようやく夏休みにすることができたので、ここ数日で友人と槍ヶ岳に行って来ました。ルートは上高地~槍沢~槍ヶ岳~飛騨乗越~槍平山荘~新穂高温泉の2泊3日の行程です。友人は日本ではまだ富士山を登っただけなので、少々厳しかったかもしれませんが時には強引さも必要なのです(笑)。
本当ならば西鎌を通って鏡平山荘のほうに行こうと思っていたのですが、槍の穂先付近で雷鳴を聞いてしまったので、潔くルート変更して早く稜線から離れることにしました。天候もいまひとつで、展望はあまりなく登頂しただけという感じです。気合を入れてRollei SL66SEを持っていったのですが、活躍の場がありませんでした。

2007kasa.jpg
見えそうで見えない笠ヶ岳。W42CAで撮影。

残念な天候でしたが、その分山での出会いに恵まれました。今回はパーティが2人だったので、色々な方とお話する機会があり面白かったです。特に帰りをご一緒させていただいたWさんには色々とよくしていただきました。松本城の観光まで付き合わせてしまって申し訳なかったです。また次回も素敵な出会いがあるといいなぁ。

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