SyntaxHigh

Saturday, March 28, 2015

AT86RF233

TOMモジュールについて

データシートを見る限り、位相差を測っているらしい。あるレジスタにアクセスすれば、自動で(あるノードとの?)位相差を習得し、距離を返してくれるそうだ。使うだけならば問題ない。

Getting AT86RF233

このチップをモジュール化した Zigbit という製品が幾つか販売されているが、現在日本ではDigikeyから各種製品が購入可能。一つ $28程度と少し高いが、デュアルチップアンテナだったり、安定化のための回路がいろいろ付いている。日本国内でも製品として販売可能だそうだ。

一方で、Rasberry Pi の OpenLab が AT86RF233 の breakout を出している。コチラはDatasheet の Typical Application そのままの実装で、ICのほかはアンテナのみ。$10で販売している。チップ自体が$5程度なので、かなり安い。

Radino.cc というところが、Arduino Leonard に AT86RF233 を載せたモジュールを発売していて、ソフトウェアも公開している模様。これは、ATMega32U4 のインターフェースでUSBにも直接つなげる・・・らしいが、ソフトウェアを見る限り、RF233 のルーチンコードが見当たらなかった。SPI等のインターフェースは用意してあるが、プロトコルは全部自分で書くということだろうか?

とりあえず Zigbit のモジュールを2つ、OpenLab の breakout を 10 個注文した。

chibiArduino

chibiArduino というプロジェクトが AT86RF231 をArudinoで使うためののライブラリを公開している。231 は233 の一つ前のバージョンで、TOM module をサポートしないものだが、Migration from at86rf231 to at86rf233 というドキュメントがあるぐらいで、基本的な動作は一致している。中身を見ると、ほとんど重要なところは同じようだ。

実際、chibiArduino のコードを見ると、chb_drvr_init() の中身の動きが、ほとんどAT86RF233のデータシートと一致している。おそらくそのままでもメッセージを送信したりは問題ナイと思う。

TOMの使い方

これをベースに TOM のモジュールをかけば Arduinoでもすぐに使えるだろう。TOM のモジュールは、TRX_CTRL_0 の TOM_EN bit に 1 を書いてやると enable になる。で、RX_START するのをまって(終わるのをまって), frame buffer の 0x73…0x7f (14bit) を読んでやるといい、らしいのだが・・で、Ranging Library のデモに出てくる “cm” の値はどれなのよ。

0x7d から 0x7f の 24bit で TIM (Timer/Counter measurement)  value based on 16MHz” を出している。他の値は、Preamable Fine Synchronization Monitoring といって、おそらくどれくらい綺麗に同期がとれているか、というのを示す値になっている。この値を使ってもっと精度の良い計測ができたりするのだろうか・・・・

TIMが本当に「Time of Flight」ならば、TIM * 光の速度(秒速30万キロメートル)/16MHz/2 が距離になる。どうやって距離を出すかまでデータシートに書いてあるように見えない。

この辺りは、ATMEL の ZigCloud のサンプルアプリ当たりを見ると分かりそうな気がするのでこれ以上は掘らないことにする。この辺のコードが Google に引っかからないので不便。

Antenna Diversity

AT86RF233 にはアンテナダイバーシティ機能がついている。何じゃそりゃ、というと、複数アンテナを使って方向推定したり、ノイズ除去したり~ということを出来るらしい。電波はパスによって僅かな距離でも不安定になってしまう、みたいなことが書いてある。

で、Application Note には、2本のアンテナのそれぞれまでの距離を算出するようなアプリケーションも実装されている。もし正確に測れれば、これだけでもある程度の電波が飛んできた方向がわかってしまうわけだが・・・(もちろん、世の中には複数アンテナを使って電波の方向を見つけるみたいなアプリもある)