mbed again
IMAGE12.GIF - 2,801BYTES

2014年8月31日 新規作成開始

1
何故またmbed?
2
On-line development
3
Off-line development
4
事例
LPC1114FN28
STM32L152RE
STM32F401RE
LPC1768
.
.


.
mbed LPC1114FN28
Switch Science
small & simple
mbed ST Nucleo L152RE
STMicroelectronics
low cost & low power
mbed ST Nucleo F401RE
STMicroelectronics
low cost & high perpormance
mbed LPC1768
NXP
Original mbed system
.
.

.




1 何故またmbed?
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

mbedとの付き合いは2010年3月から始まりましたが、2011年1月以降は活動が休止していました。
久々にmbedの活動を覗いてみたところだいぶ雰囲気が変わっており、今年5月からmbedをまた使い始めました。
下記のような点が再開へのモチベーションでした。

  1. rtos (real time operating system)がOfficalな形でサポートされたこと
  2. ソースコードが全面公開され、今まで闇の中だったmbedの基本的な部分がソースコードを介して理解出来る状況となった
  3. on-line開発環境の改善が進み、使い勝手が初期の頃に比較して大幅に改善され安定した
  4. NXP社の努力で立ち上げたmbedだが、ARM社の運営に移行し、初期のNXP社mbedシステム以外に各社からmbedボードが提供され るようになった
  5. on-line開発だけでなくoff-line開発がしやすい環境が出来上がった
ここで、私の活動 を見ていただけます。


2  On-line development
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

オンラインでの開発環境は、mbedの一番の売りでどんな使用環境でもmbedにログインできれば使用できるので非常に便利です。
開発環境の管理は、時として最新の状態を保とうとすればするほど労力がかかり、かつ継続して注意する必要がありますが、mbedのオンライン開発環境は何 も気にする必要はありません。
2014年7月からはオンラインエディタで直接日本語も入力できるようになり、以前に比べてハードルがどんどん下がっているように思えます。

いつも使っていて、気になる点や注意すべき点を下記に示します。
1) コピペがマウス操作では出来ない → 人の慣れは怖いもので、Ctrl-C,V,X,Zで操作することは頭では意識しているつもりでも毎回怒られな がらエディットしています
2) TAB操作もなかなかうまくいかない(特に修正時は)
3) 右上にターゲットのCPU(mbedボード名)が表示されているが、いくつものmbedボードで同じようなソフトウェアを作って評価しているとたま に間違ってCPUに書き込み、動作しないことに気づくのが遅れる
4) たまにネットワークスピードが極端に遅くなり、いらいらすることがある(時には半日単位で)
5) プログラム作成時のタイムスタンプがUTCベースなので注意のこと!
例えば、
char *const mon_msg = "Monitor for mbed system, created on "__DATE__"";
などと日付けをprintf文などで打ち出すと日本にいて午前中などにDebugしていると違和感をもつでしょう
6) Debugの環境が弱い
   → 既存のBug Freeのライブラリーを利用して短いソフトウェアを作成する場合には問題ないでしょうが、ライブラリー自体の作成などではprintfだけでは難しい場面も出てくるでしょう

といくつか指摘しましたが、利便性を考えれば我慢できる範囲といえるでしょう。
  




3  Off-line development
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

mbedの運営管理が変化して、一番大きな変更点はApache Licenseに基づく”Open Source”となりソースコードの閲覧が可能となったことだと思います。
例えば、ここでmbedのソースファイルが参照できます

このソースファイルとmbedのコニュニティーで公開されている各種ライブラリーとソフトウェアを集めてくれば、mbedのオンライン環境を使わなくてもmbedのソフトウェア開発が可能になります。
私は、下記の3つの環境でオンラインだけでなくオフライン開発環境も設定して使っています。

環境
情報源
特徴
ねむいさん謹製
PN2+OpenOCD
STM32をはじめとしたARMマイコンをGCCでビルドする環境を整える(2014年度中期版)
  PN2(Programmer's Note)
  OpenOCD(ねむいさんのが一番) ここの一番下にあるOpenOCD
OpenOCDの開発もだいぶ進んで、敷居が下がって来ています
少しご無沙汰で開発環境が少し古いまま使っています
EmBlocks
Em::Blocks IDE
mbedでの紹介
Em::Blocks IDE ホームページ
この開発環境も安定して使えます
μVision Keil μVision IDE
無償評価版のダウンロードには事前登録が必要です
サイズ限定版であってもLPC1114FN28では何の問題もありません

Debug段階でprintfだけで済まない場合に限り、上記開発環境下でDebugをしています。
但し、この頃はオンライン環境下でロジックアナライザーなどを併用して開発をしているのでオフライン環境はほとんど使っていません。

もう一つの使い方は、mbed開発環境で使えないCPUに対してmbedと同じプログラムを走らせるときに便利です。
STM32L152は大分長く使っている愛着のCPUですが、mbed用CPUはL152RET6でROM/RAMサイズが大きいので、BINファイルはL152RBT6に書き込んでも動作させることができません。
オフラインで開発すればスタック領域などを修正することで、チップ単位で購入済のL152RBT6でもmbedと同じライブラリーが使用できます。




4  事例
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES
4-1) 気圧計(データロガー)

ボッシュセンサーテック社製BMP180を利用して気圧計を作り、EEPROMを利用してロガー機能も付加しました。
回路図等は、こちらのブレッドボードタイプこちらのはんだ付けタイプを参照願います。

BMP180の利用は、STM32L152 を使ったロガーで同じような機能を実現しましたが、やはりmbedでは初期化など煩雑な部分が隠ぺい出来て手を染める必要がないので、非常に開発 が楽です。
C++でライブラリーを作成し、細かな制御の流れを気にせず再利用可能な”部品”として広く使っていくmbedの基本思想は評価できる部分だと思います。
この気圧計では、①BMP180(気圧センサー)、②AT24C1024(EEPROM)、③M41T62(リアルタイムクロック)のライブラリーを作成 し、④TextLCD(汎用LCD制御)を一部修正し、⑤RHT03(湿度センサー)を利用しました。
そのため、制御プログラム自体はmain.cpp内で400行以下で記述できるシンプルな構成になっています。

4-2) ステッピングモータ制御

stepper」というライブラリーとして、ユニポーラタイプのスッテッピングモータ駆動ソフトウェアを作成 しました。
4つのポートを出力端子として定義して、ソフトウェアで駆動パターンを順次変更していくシンプルな構成としています。
更新タイミングは、mbedの基本ライブラリーであるTickerを使用して割り込みで制御しています。
このソフトの特徴は、モーター駆動中に次のコマンドを受け付けることができる点で、正逆反転の様な状況も制御が可能です。

ハードウェアは、ユニポーラタイプ駆動のためローサイドドライバーで非常に簡単な回路構成です。
今回は、TD62003APを使用し逆起電力吸収ダイオードも有効に使います。
速度アップとトルクアップのためにはダイオードをそのまま電源に接続せず、ツェナーダイオードを入れると良いと思います。

4-3) ブラシモーター制御

秋月電子通商で取り扱っている「DRV8830モータードライバモジュール」を制御するライブラリー「DRV8830」 を作成してみました。
こんな小さなチップで大丈夫かな?と思うほど小さく安く入手できますが、思ったより能力が高く使いやすいICです。
ICの電源がロジック部分とパワー部分とに分かれていないためにI2Cのインターフェイスのプルアップをどうするか悩みましたが、TIのデータシートを見 ると下記のような記述が見つかりました。

DRV8830
1A Low Voltage Brushed DC Motor Driver with Speed Regulation (I2C Ctrl)
Low-Voltage Motor Driver With Serial Interface .. (Rev. F)

arameter
  LOGIC-LEVEL INPUTS
MIN
Typ
MAX
UNIT
VIL
Input low voltage
0.25 x VCC
0.38 x VCC

V
VIH
Input high voltage

0.46 x VCC
0.5 x VCC
V
VHYS
Input hysteresis

0.08 x VCC

V
IIH
Input high current (VIN=3.3V)


50
uA

このデータから、モーター駆動ICを6.5V最大と仮定し、VCC=3.3VのCPUから駆動することを考えると、

1) I2Cのプルアップ抵抗を3.3KΩとして、50μAが流れ込むとすれば、端子電圧は、
   Vin-chip  =  3.3V - (3.3KΩ x 50μA) = 3.3-0.165 = 3.135V
2) 入力端子のVhと認識する最少電圧は、最悪値として、
   Vh = 0.5 x VCC = 0.5 x 6.5 = 3.25V
3) これではIC電源を6.5V最大まで使えず、6.2V位までということになる
4) この数値は最悪値組み合わせで、アマチュアが趣味の世界で室温付近で動作させるのであれば、
   VCC = 6.8V -> Vh = 0.46 x VCC = 0.46 x  6.8 = 3.128V

実力では、
「3.3VのmbedボードのCPU端子からI2Cの信号SDAと SCLを3.3KΩのプルアップ抵抗で3.3Vに接続した状態で、モーター及びDRV8830の電源を2.75Vから6.8Vの動作推奨電圧範囲で駆動 出来る」
と思われる。

ハードウェアとしてはブラシ付きDCモーター駆動では、ノイズ対策と起動時の大電流での誤動作対策が重要でうまく作らないとDRV8830がエラーを返し て停止する可能性が高いです。
電源系のデカップリングとアースの取り方、さらにフィルター追加などを試みるとよいと思います。

4-4) MEMSセンサー L3GD20(ジャイロ) LIS3DH(加速度) 

MEMS(Micro Electro Mechanical Systems)セ ンサーでのトップシェアは、ボッシュとSTマイクロで分け合っています(2013年情報はここにあります)。
今回は秋月電子通商で入手しやすいSTMicroelectronics社製のジャイ ロセンサー加速度センサーのライブラリーを作ってみました。
名前通り、「L3GD20」と「LIS3DH」 です。
どちらのセンサーも3軸方向のデータが取得でき、姿勢制御に使用する準備をしています。

例によってI2Cインターフェイス経由でのデータ取得ライブラリーですが、一か所はまって時間を費やす結果となりました。
両センサーともX,Y,Zの3軸データが連続したレジスタに蓄えられているので、X軸の最初の読み出しから連続してデータを読み込んだのですがうまく読め ません。
個別にレジスタを指定して読むと問題なく読めるので、ハードウェアの問題やレジスタアドレスの問題でないのは判っていたので、データシートを注意深く読ん でみると、

In order to read multiple bytes, it is necessary to assert the most significant bit of the subaddress field.
In other words, SUB(7) must be equal to ‘1’ while SUB(6-0) represents the address of the first register to be read.

とありました。両方のデータシートに同じ記述があります。
たとえば、L3GD20のX軸下位8ビットのレジスタは、L3GX_OUT_X_Lで定義しましたが、0x28のアドレスです。
単独で読みだす場合には、
reg_addr = L3GX_OUT_X_L;
で良いですが、連続でX_LからZ_Hまで6個のレジスタを連続で読みだす場合には、レジスタアド レスの 最上位ビット(bit7)を1にセットします
reg_addr = L3GX_OUT_X_L | 0x80;
とする必要があります。すなわち、0xa8のアドレスとします。
この文章にたどり着くまでに、時間を費やしてしまいました。



TOP02_001.PNG - 934BYTES









































































































2014/8/31 =1