April 06, 2013Super Sylphide 進捗状況(61) -- mruby on TinyFeatherオートパイロットシステムTinyFeatherですが、開発環境を見直そうと考えています。その一環として、JTAGエミュレータなどのハードやコンパイラといったソフトウェアを揃えなくとも、ちょっとしたスクリプトを書くだけで制御系を構築できるようにしようと考えています。その一環として、スクリプト言語を搭載することにしました。いくつか候補があったのですが、僕はmrubyを選びました。Rubyが好きだからです(笑)。 取り急ぎ、mrubyが動作している様子を掲載してみようと思います。 配列やハッシュ、算術演算、evalを試してみました。TinyFeatherとPCを擬似シリアル(USBのCDC)で繋げ、PCからシリアルボートにアクセスしている画面です。送受信が両方表示されており、見難くてすいません。TinyFeatherの中ではDSP(Texas Instruments TMS320C6745)上でmirbに近いものが走っています。なおmrubyのビルドに使ったスクリプトはbuild_config.rbです。 最終的には、これまでC/C++で記述をしていた『TinyFeatherの誘導制御スケルトン』の部分が、Micro SD上に配置したRubyスクリプトだけで全て済む、ビルドレス環境にしようとしています。制御系を設計するにあたってはゲインの調整などの試行錯誤、すなわち、設計から実行、検証、改善のいわゆるPDCAサイクルを素早くまわすことがとても重要ですので、ビルドレス環境はとても適しているのではないかと思います。 世界で唯一のRubyで動く(であろう)オートパイロットシステム TinyFeatherの今後にご期待ください(笑)。 ※次の進捗ではTinyFeatherのi2cまわりを改修しました。 April 14, 2013Super Sylphide 進捗状況(62) -- CPLD で i2c Multiplex その2オートパイロット装置Tiny Featherを改修しています。地磁気センサをHoneywell HMC5883Lから半田付けが容易なFreescale MAG3110へ変更し、また新規に絶対圧センサとしてMS5611-01BA01を搭載することにしました。いずれもすごいロガー(NinjaScan) Rev.Cで採用した部品です。 実装はこんな感じになりました。 この変更はいずれもi2cバス上のデバイスが置き換わったことになるのですが、少々問題が生じました。TinyFeatherでは以前の記事『Super Sylphide 進捗状況(62) -- CPLD で i2c MUX』にあるとおり、CPLDを介した特異な方法で本体のDSPとi2cデバイスを接続しています。今回導入したi2cデバイスのうちMAG3110は、介在しているCPLDがあらかじめ想定していた挙動とは異なる挙動をすることがわかり、CPLDのコードを変更する必要に迫られました。その挙動というのがクロックストレッチという機構です。 クロックストレッチというのは、スレーブデバイスがクロックをLOWレベルで固定することにより、マスタデバイスを待たせることが可能な機構です。MAG3110を例に出すと、下図のような挙動をします。 まずは、クロックストレッチが行われていない際のオシロスコープ画像です。クロック(黄色)が一定間隔で動いていることが見て取れると思います。
詳しくはコードを見てみてください。マスタ、スレーブとも確実にLOWを出力する一定時間はgenericパラメータで調整できるようにしてあります。僕が実際にこのコードを使う際は、今回はi2cのfast modeに対応する400KHzのLOW時間1.25 usを指定するようにしました。 ※次の進捗として、OLED表示をつけてみました。こちらで紹介のi2c MUXも使った成果です。 |
かれんだ~
スポンサード リンク
|