September 07, 2011

Super Sylphide 進捗状況(43) -- Tiny Feather アクリルパネル

無人航空機(UAV)用の次期オートパイロット装置Tiny Featherを鋭意開発中ですが、近いうちに展示会デビューをしそうなので、観賞に適したパネルを表裏につけてみることにしました。

TF_with_panel.jpg
アクリル製

前は写真下のシナベニアで保護していましたが、これですと部品を見ることができません。アクリルにしたところ、とても透明度が高く、実装した部品がくっきり見えます。

パネルの切り出しはEmerge+という、知人の@OuchOuchOuchさんがやってらっしゃる工房にお願いしました。レーザーカットです。

TF_panels.jpg
こんな感じで受け取り

提供されているテンプレート上に図面を作成することで、割安に製作してもらえるサービスを使いました。送付されてきた状態は、まさに提出した図面と同じです。参考に提出したイラストレータ図面をおいておきます。

パネル作りに続いてアクリルでケース作りにもチャレンジしてみたいと考えています。

※この次はTiny FeatherのCPLDの中身(i2c部分)について記事があります。

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

September 16, 2011

Super Sylphide 進捗状況(44) -- CPLD で i2c MUX

無人航空機(UAV)用の次期オートパイロット装置Tiny Featherを開発中です。今回は搭載されているCPLDの中身の一部を紹介してみたいと思います。題してi2c MUX(マルチプレクサ)。

マイコンと周辺機器を接続するのに、i2cという便利な規格があります。接続できるものとしては、センサやメモリ、IOエキスパンダなど様々なものがあります。Tiny Featherでも、i2cを利用した地磁気センサ(Honeywell HMC5843)を搭載しています。

i2cは、2本の線に物理的に並列に接続するだけで接続が完了します。ワイヤードANDという方法を使っていて、何も信号のやり足りがない場合はHi状態にプルアップされ、何かやり取りがあるときにはどれか1つの機器がLowを出力することで、線全体がLowとなり多数での通信が時間分割で成立するようになっています。
逆に言うと、線が物理的に接続されていないと、i2cで通信を成り立たせるのは困難です。Tiny Featherでは残念ながらその状態、すなわちi2cに関わる線を物理的に接続していません。以下の図に、一般的なi2c接続とTiny Featherでのi2c接続を示します。

TF_i2c_mux.png
上: 一般、下: Tiny Feather。

Tiny Featherでは、CPLDを介してi2cを接続しているため、CPLDの部分で物理的接続が切れてしまっています。なぜこのようなメンドクサイ方法をとったかというと、計算を担当するDSPが載った基板(赤)、そしてセンサ類が載ったIMU基板(緑)、この接続に自由度を持たせておきたかったというのが理由です。将来的には、DSP以外にも、別のプロセッサ(今のところFPU付のCortex-M4が有力)で計算を行いたいと考えており、そのためにも配線をCPLDを通して行うことで基板設計の自由度をあげておきたかったのです。そのような理由から、i2cもCPLDを介して接続することにしました。

結局のところ、CPLD内でi2cの通信状態をモニタし、ピンの入出力方向を常時制御することで、あたかもCPLD内で物理的に結線がされているような振る舞いをさせています。該当部分のVHDLソースi2c_mux.vhdを公開します。テストコードi2cmux_test.vhdもあわせてどうぞ。機能限定版で作っているので、i2cマスタの接続先は1つ、通信に想定外のことがあるとハングする可能性がある、クロックストレッチに対応していないなど、改善点はまだまだたくさんあるのですが、今のところ十分使えています。

※続いてCPLDとSPIに関する話を書きました。

※※2013/4/14現在、さらにクロックストレッチに対応しました。

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

September 23, 2011

Super Sylphide 進捗状況(45) -- CPLD で SPI MUX

無人航空機(UAV)用の次期オートパイロット装置Tiny Featherを開発中です。前回は搭載されたCPLDの中身についてi2cに関する記事でしたが、今回はその続きでSPIについて紹介します。題してSPI MUX(マルチプレクサ)。

中身の模式図をいきなり出してしまうことにします。

TF_spi_mux.png

図のように、マスタのDSPから生えている1つのSPIバスを、CPLDを介して4つのスレーブデバイスで共有しています。順に紹介すると、Flash ROM、ADS1248(24 bit AD変換機)MAXII User Flash Memory(UFM)、バスブリッジ(SPI、およびCPLD内のレジスタインターフェイスを中継しています)です。前2者は独立したデバイスなのに対して、後2者はCPLD内に実装されています。

スレーブデバイスの切り替えはCPLD内のレジスタを介して行われます。切り替えはFlash ROM、MAXII UFM、バスブリッジの3者間で行われますが、前2者はブート時のみしかアクセスしないのに対して、バスブリッジ、およびそこから生えているADS1248はブート以降に使うことを考慮しての設計になっています。なお、切り替えに使うレジスタは別経路(Asynchronous Memory I/F)でもアクセスが可能です。また、バスブリッジの中身については別の記事でそのうち紹介したいと思います。

SPIはi2cに比べるとはるかに単純で、入力と出力に使う配線が物理的に切り分けられているため、とても使いやすいです。しかしながらデバイスが増えると配線が増えてしまうのが困りものです。そこで今回紹介したように、一回CPLDで受けることで、配線の自由度を増すとともに配線数を極小化できました。

例によってコードを置いておきます。CPLDの中身の全コードはこのあたりにあるのですが、今回の部分は最上位であるtop.vhdに主に書かれています。

※続いて、Tiny Featherの誘導制御の骨組みを公開しました。

※※ADSが外部機器としてつながるようになったため、現在SPI MUXはさらに複雑になっています。図でいうと、ADCと並列にADSがアドレスによって洗濯できるようになりました。

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

September 30, 2011

Cortex-M4F がDigiKeyで注文可能に

浮動小数点演算ができる使いやすい少ピンマイコンを探し続けているのですが、とうとう決め手になりそうなものがでてきました。ARMのCortex-M4Fを採用したSTMicroelectronicsのSTM32F405RGT6です。まだ現時点で在庫がありませんが、DigiKeyで購入可能です。

64ピンのパッケージで168MHzで浮動小数点演算が回ります。拡張バスがないのでメモリの継ぎ足しはできないのですが、SRAMは192KBあります。USBも2.0 high-speed対応(HSの場合は外部PHY必要、FSは内蔵PHY利用可能)でMMCSDインターフェイスももっています。いろいろ作れそうと心躍ったところで、Eagleのライブラリ(スクリプト形式)をこさえてみました。基板もそのうち作りたいです。

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