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 perpormancembed LPC1768
NXP
Original mbed system
1 何故またmbed?
mbedとの付き合いは2010年3月から始まりましたが、2011年1月以降は活動が休止していました。
久々にmbedの活動を覗いてみたところだいぶ雰囲気が変わっており、今年5月からmbedをまた使い始めました。
下記のような点が再開へのモチベーションでした。
例えば、 char *const mon_msg = "Monitor for mbed system, created on "__DATE__""; などと日付けをprintf文などで打ち出すと日本にいて午前中などにDebugしていると違和感をもつでしょう |
3
Off-line development
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と同じライブラリーが使用できます。
ボッシュセンサーテック社製BMP180を利用して気圧計を作り、EEPROMを利用してロガー機能も付加しました。
回路図等は、こちらのブレッドボードタイプとこちらのはんだ付けタイプを参照願います。
BMP180の利用は、STM32L152
を使ったロガーで同じような機能を実現しましたが、やはりmbedでは初期化など煩雑な部分が隠ぺい出来て手を染める必要がないので、非常に開発
が楽です。
C++でライブラリーを作成し、細かな制御の流れを気にせず再利用可能な”部品”として広く使っていくmbedの基本思想は評価できる部分だと思います。
この気圧計では、①BMP180(気圧センサー)、②AT24C1024(EEPROM)、③M41T62(リアルタイムクロック)のライブラリーを作成
し、④TextLCD(汎用LCD制御)を一部修正し、⑤RHT03(湿度センサー)を利用しました。
そのため、制御プログラム自体はmain.cpp内で400行以下で記述できるシンプルな構成になっています。
4-2) ステッピングモータ制御
「stepper」というライブラリーとして、ユニポーラタイプのスッテッピングモータ駆動ソフトウェアを作成
しました。
4つのポートを出力端子として定義して、ソフトウェアで駆動パターンを順次変更していくシンプルな構成としています。
更新タイミングは、mbedの基本ライブラリーであるTickerを使用して割り込みで制御しています。
このソフトの特徴は、モーター駆動中に次のコマンドを受け付けることができる点で、正逆反転の様な状況も制御が可能です。
秋月電子通商で取り扱っている「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の動作推奨電圧範囲で駆動
出来る」
と思われる。
4-4) MEMSセンサー L3GD20(ジャイロ) LIS3DH(加速度)
MEMS(Micro Electro Mechanical Systems)セ
ンサーでのトップシェアは、ボッシュとSTマイクロで分け合っています(2013年情報はここにあります)。
今回は秋月電子通商で入手しやすいSTMicroelectronics社製のジャイ
ロセンサーと加速度センサーのライブラリーを作ってみました。
名前通り、「L3GD20」と「LIS3DH」
です。
どちらのセンサーも3軸方向のデータが取得でき、姿勢制御に使用する準備をしています。
例によってI2Cインターフェイス経由でのデータ取得ライブラリーですが、一か所はまって時間を費やす結果となりました。
両センサーともX,Y,Zの3軸データが連続したレジスタに蓄えられているので、X軸の最初の読み出しから連続してデータを読み込んだのですがうまく読め
ません。
個別にレジスタを指定して読むと問題なく読めるので、ハードウェアの問題やレジスタアドレスの問題でないのは判っていたので、データシートを注意深く読ん
でみると、