Más contenido relacionado La actualidad más candente (20) 組み込み入門1. SUGAR SWEET ROBOTICS CO., LTD.
組み込みプログラミング入門
菅 佑樹
(株式会社SUGAR SWEET ROBOTICS代表取締役)
(早稲田大学ヒューマノイド研究所招聘研究員)
(芝浦工業大学SIT研究所客員研究員)
(東京大学情報理工学系研究科大学発新産業創出拠点
プロジェクト 特任研究員)
1
2. SUGAR SWEET ROBOTICS CO., LTD.
目標
• 組み込み開発工程の流れを知る
• マイコンの選び方を知る
• 組み込み機器を併用した現在のロボットシ
ステムのトレンドを知る
• 組み込みにおける通信を知る
2
4. SUGAR SWEET ROBOTICS CO., LTD.
組み込みシステム
• 特定の機能を実現するために製品に組み込
まれるコンピュータシステム
• 小型 ー マイクロコントローラ
• 省資源
• 電力
• 処理速度
• 機能
4
5. SUGAR SWEET ROBOTICS CO., LTD.
マイコンとは何か
プログラムメモリ:CPUの命令
を格納するメモリ
5
CPU
I/O
コントローラ
プログラム
メモリ
ワーキング
メモリ
演算装置:プログラムメモリ
から命令を読み出して,I/Oコ
ントローラ等を制御する
入出力制御:ピンの状態や,
シリアル通信,PWMやタイ
マーなどを制御
作業メモリ:CPUの計算結果な
どを格納する作業メモリ
6. SUGAR SWEET ROBOTICS CO., LTD.
組み込みプログラミング
• 組み込みマイコンで実行できるソフトウエア
をプログラミングする
• C言語などのプログラミング言語で作成
したものをマイコン向けにコンパイル
して書き込む
• コンパイラ・・・C言語をマイコン用のマシ
ン語命令に変換
• ライター・・・マイコン用のマシン語命令を
マイコンのプログラムメモリに書き込む
• IDE・・・Integrated Development
Environment (統合開発環境) コンパイラやラ
イター,エディタなどがセットになっている
6
C言語のソースコード
コンパイル
コンパイラ
機械語ファイル
書き込み
ライター
7. SUGAR SWEET ROBOTICS CO., LTD.
組み込みデバッグ
• Debug (バグを取り除く)
• マイコンのプログラムの
悪い箇所を見つける作業
• C言語のプログラムを一
行ずつ実行しながら,変
数の値などを確認できる
• ICD (In circuit Debug) ・・・
回路にマイコンを搭載した
形でデバッグする方法
7
9. SUGAR SWEET ROBOTICS CO., LTD.
マイコンの選択肢
• PICーMicrochip
• 国内でホビーユーザーが多い
• 種類が豊富で、DSPを積んだものなどもある
• AVRーAtmel
• 小型で使いやすい。Arduinoで採用されている
• PSoCーCypress
• デジタル、アナログ機能モジュールを柔軟に組み合わせて使える
• H8, SHなどールネサス
• カーエレではまだ根強いか
• ARMマイコンーTI, Motorola, STmicro, NXP, Atmelなど
• 世界で最も使われているマイコン9
11. SUGAR SWEET ROBOTICS CO., LTD.
機能モジュール
• デジタルI/Oピン
• 数、電圧
• A/Dコンバータ
• 数、分解能、速度
• タイマー、カウンター
• 数、機能
• 通信モジュール
• UART, I2C, SSP, CAN, EtherNet
• その他
• D/Aコンバータ、アナログコンパレータ、DSP
11
12. SUGAR SWEET ROBOTICS CO., LTD.
なぜARMマイコンか
• ARMアーキテクチャは多数の会社にライセ
ンスされており、選択肢が豊富で、一社に
依存しない
• フリーのGCCコンパイラがメンテナンスさ
れており、安価なJTAGデバッガが使える
ので、安価に開発ができる
• 開発者が多く、情報が豊富
12
13. SUGAR SWEET ROBOTICS CO., LTD.
NXP LPCマイコンシリーズ
• NXP社のARMマイコン
• NXPの用意する統合開発環境が便利
• LPC Expresso
• mbedでも使われているマイコンで入手性
が高くラインナップも多い
• 安価なデバッガが付いている
13
15. SUGAR SWEET ROBOTICS CO., LTD.
組み込みボードのトレンド
• ソフトウエア環境の充実化
• 開発者コミュニティのサポート
• 異なる業界のユーザを取り込む動き
• デザイナー
• 技術系学生
• 非組み込み技術者
15
16. SUGAR SWEET ROBOTICS CO., LTD.
小型組み込みボード
• Arduino
• マイコンはAVR
• Processingなどのデザイナ向けのシンプルなプログラミングが可能
• mbed
• マイコンはNXP製のARMマイコン
• ブラウザ上で動作する開発環境
• インストール不要
• netduino
• マイコンはARMマイコン
• Microsoft .NET Microframeworkで動作
• Visual Studioで開発・デバッグができる
16
17. SUGAR SWEET ROBOTICS CO., LTD.
Arduino
• Atmel社の8ビットAVRマイコンを使ったオープンソースハードウ
エアの小型基板
• オープンなので,標準コネクタ配置に対応する増設基板
(シールド)がサードパーティから多数販売されている
(モーター回転・mp3再生・LED点灯・リレースイッチ・
液晶・Ethernet・無線通信・ロボット)
• いろいろな形状がある
• 標準型
• I/Oやメモリが大きい (Mega)
• 小型組み込み用 (Pro mini)
• 導電糸を使った電子手芸工作用 (Lilypad)
• XBeeに対応した無線通信用 (FIO)
• シンプルなIDE
• Processingという入門者向けのプログラミング言語に対応
(簡易版C++)
• オープンソースなので,様々な工作例とプログラムのソー
スコードがネット上で見つかる
• オーソドックスなarduinoは2,835円,オープンソースなのでサー
ドパーティ製の互換ボードがより安く売っている17
18. SUGAR SWEET ROBOTICS CO., LTD.
mbed
• NXP社の32bit ARMマイコンであるLXPマイコンを
使った小型基板
• ブレッドボードに装着しやすいI/Oピン配置
• Ethernetコントローラを備えている
• ブラウザ上で動作する開発環境
• ブラウザの操作でコンパイルができる
• mbedはPCにつなぐとUSBメモリのように見え
るので,コンパイルしたバイトコードを保存す
ると書き込まれる
• インターネット上で自分の開発したコードを公
開し,他の開発者のコードを読み込む機能をサ
ポートしている
• Cortex-M3を積んだ通常のmbedが5,400円,Cortex-
M0版は4,200円
18
19. SUGAR SWEET ROBOTICS CO., LTD.
組み込みLinuxボード
• Raspberry-Pi
• 一枚5,000円の安価なLinuxボード
• Intel Edison
• 名刺サイズの超小型Linuxボード
• Android端末
• スマートフォンのプログラミングをフリーで
19
20. SUGAR SWEET ROBOTICS CO., LTD.
Raspberry-Pi
• 教育用小型Linuxボード
• USBコネクタにキーボード
とマウス,HDMIモニタを繋
げば,Linuxが入ったパソコ
ンとして動作
• Ethernet, USB, 汎用I/Oを備
えて,組み込み用途にも合う
• 安価.旧型タイプAは2800円.
最新のタイプB+は3940円!
20
21. SUGAR SWEET ROBOTICS CO., LTD.
Intel Edison
• SDカードと同じサイ
ズながらLinux搭載
• 裏面にフィルムケーブ
ルを挿すコネクタ
• 無線LAN搭載
• 6,800円
21
22. SUGAR SWEET ROBOTICS CO., LTD.
Android端末
• オープンソースのOS「Android」を搭載し
た携帯端末
• 多くの端末が,カメラ,加速度センサ,ジャ
イロ,地磁気センサ,GPSなどを搭載
• 上述のArduinoと接続してデジタルI/Oを使
う事も出来る
• 開発環境を無料で揃えることができる
22
24. SUGAR SWEET ROBOTICS CO., LTD.
組み込みで作るロボットシステム
• 組み込み機器のみでロボットシステムを作るのは,も
はやあり得ない
• OSが無いと開発しにくい
• アップデートしにくい
• リソースが限られる
• 用途が固定される部分や,リアルタイム性が問われる部
分を組み込み
• ユーザインターフェースやインターネット通信などを上
位のコンピュータで構成
24
25. SUGAR SWEET ROBOTICS CO., LTD.
ロボット機器
25
頭部
RS485等サーバPC
コントローラ
(マイコン)
センサ等モータ
クライアント
• Aldebaran Robotics NAO
• 頭部でLinuxサーバープログラムが自動実行される
ウェブサーバ
IE等ブラウザ
26. SUGAR SWEET ROBOTICS CO., LTD.
ロボット機器
頭部
(Linux)
26
モータ
コントローラ
(マイコン)
• PID制御など,リアルタイムでの処
理が必要な部分をマイコンに任せる
• 上位のアプリケーションから目標位
置のみ送る制御
センサ等
RS485等
サーバ
コントローラ
(マイコン)
コントローラ
(マイコン)
歩行制御や画像処理,
音声合成など
モモーータタ
モモーータタ
モモーータタ
センサ等
セセンンササ等等
セセンンササ等等
セセンンササ等等
コントローラ
(マイコン)
コントローラ
(マイコン)
モモーータタ
電源管理やセンサなど
の情報収集
モータの位置速度制御
やLEDの点灯制御など
27. SUGAR SWEET ROBOTICS CO., LTD.
組み込みとロボットシステム
• 組み込みに於いても通信が鍵
• RS232C, RS485, SSP, I2C, CAN, USB,
ZigBee
• 近年ではEtherNet や無線LANに直接接続し
て、TCP/IPソケット通信が可能なマイコン
も多い
• 小型なマイコンにフルセットのLinuxも乗
るようになってきた27
31. SUGAR SWEET ROBOTICS CO., LTD.
31
LPCXpressoのダウンロード
2. toolを選ぶ
1. LPCXpressoを選ぶ
3. Filterボタンを押す
4. Toolsをクリック
5. LPCXpresso Windows
Installerを選択
34. SUGAR SWEET ROBOTICS CO., LTD.
Activate
• 起動するとworkspaceの
場所を問われるが,デフォ
ルトのままで良い
• メニューから,Help >
Activate > Create serial
number and register
(Free Edition)…を選択
• シリアル番号が表示され
るのでOKを押す
34
35. SUGAR SWEET ROBOTICS CO., LTD.
ユーザ登録
• LPC Xpressoがウェ
ブブラウザを開く
• 画面右側からログ
インする
• (未登録の場合は
Create new accout
を選択)
35
36. SUGAR SWEET ROBOTICS CO., LTD.
ユーザ登録
• Create New Accoutを選択したのち・・・
• 赤い*印がついた項目を選択して登録
• Username
• E-mail address
• Fullname
• CAPTCHA (画像認証)
• Create New Accoutボタンを押す
• NXPからメールが届く
36
37. SUGAR SWEET ROBOTICS CO., LTD.
ユーザ登録
• NXPから届いたメールのリンクを開
• http://www.lpcware.com/user/reset/**
• Log inボタンを押す
• 次の画面でpasswordを設定してsaveを押す
• 再度,LPC Xpressoからシリアル番号登録
を行う
37
38. SUGAR SWEET ROBOTICS CO., LTD.
Activation
• Register LPC Xpressoを押す
• 続く画面にActivation Keyが表じ
されるのでコピーする
• メニューからHelp > Activate
>Activate (Free Edition) を選択
• キーを入力して終了
• LPC XpressoをRestartする
38
40. SUGAR SWEET ROBOTICS CO., LTD.
Import Project(s)
• 左下のQuick Start
Panelからimport
project(s)を選択する
• Archiveの「Browse」
ボタンをクリックする
40
41. SUGAR SWEET ROBOTICS CO., LTD.
Import Project(s)
• LPCOpenフォルダを選
択し,
「lpcopen_**_1347.zip」
を選択する
• Nextボタンを選択
41
42. SUGAR SWEET ROBOTICS CO., LTD.
• インポートするプロジェ
クトをzipファイルの中
から選択できる.今回
はすべて選択してFinish
する
• 画面左上のProject panel
にたくさんのプロジェ
クトが追加されている
42
Import Project(s)
43. SUGAR SWEET ROBOTICS CO., LTD.
LEDチカチカ
• periph_systickプロジェ
クトを使う
• periph_systickプロジェ
クトを右クリックする
• 「Build Project」を選
択する
43
44. SUGAR SWEET ROBOTICS CO., LTD.
実行
• マイコンをつなぐ
• NXPの文字が左下になるよ
うにして左側がデバッガ
• デバッガをPCにつなぐ(デ
バッガがライターになる)
• デバッガをUSBでPC等につ
なぐと,バスパワーからマ
イコンに必要な電源を作成
してマイコンに供給できる
• USBケーブル一本で開発で
きる44
45. SUGAR SWEET ROBOTICS CO., LTD.
デバッグを開始
• periph_systickプロジェクト
を右クリックする
• Debug As > C/C++ (NXP
Semiconductors) MCU
Applicationを選択
• リストにLPC-Linkが選択され
ているをの確認してOK
• デバッグが開始され,プログ
ラムがメモリに書き込まれる
45
46. SUGAR SWEET ROBOTICS CO., LTD.
デバッグが開始されると
• main関数の1行目に右向き矢印が
表示される
• マイコンのプログラムがこの行
で止まっている印
• 開始ボタンを押してプログラムを
開始する
• LEDが点滅しますよね?
• すでにプログラムメモリに命令が
書き込まれているので,次からは
電源を入れればマイコンは普通に
命令を実行できます.
46
47. SUGAR SWEET ROBOTICS CO., LTD.
systick.c
• periph_systickサンプルのmain関
数はsystick.cにある
• 非常にシンプル
• TICKRATE_HZ1で定義される周
期でSysTick_Handler関数が呼ば
れる
• 10HzでToggleが呼ばれるの
で,5Hzで点滅する
• TICKRATE_HZ1の値を変更して
実行してみましょう
47
49. SUGAR SWEET ROBOTICS CO., LTD.
In circuit デバッグ
• 開発ボードを使うと,C言語のソースコード
を一行ずつ実行させることができる
• 実行中の状態を監視しながら開発できる
• マイコンを回路につないだままで,振る舞
いを確認しながら実行できる
• 通常は高価なツールが必要だが,LPC-Link
があれば安価にIn circuitデバッグができる
49
50. SUGAR SWEET ROBOTICS CO., LTD.
Break Pointの設定
• SysTick_Handler関数の
Board_LED_Toggle(0)の行
の行番号の左横をダブルク
リックする
• 青いまるい印がつく
• これをBreak Pointという
• プログラムがBreak Point
がある行に達すると止まる
50
51. SUGAR SWEET ROBOTICS CO., LTD.
プログラムが止まったらどうするか
• 全Break Pointを停止
• プログラムをスタート (次のBreak Pointまで)
• 一時停止
• 停止
• デバッガと切断
• ステップイン (今の行の関数の中に入る)
• ステップオーバー (今の行の関数を実行して次の行へ)
• ステップアウト (今実行中の関数を最後まで実行して
呼び出し元の関数に戻る)
51
52. SUGAR SWEET ROBOTICS CO., LTD.
ではデバッグを始めましょう
• 最初にmain関数の1行目で止まります
• 次のブレークポイントまで実行します
• Board_LED_Toggle(0)の行で止まります
• ステップオーバーするとLEDの状態が変化して
止まります
• また実行します
52
54. SUGAR SWEET ROBOTICS CO., LTD.
USB通信について
• USBは本来はかなり複雑なプロトコル
• ベンダIDとプロダクトID
• インターフェース・デスクリプタ
• バルク通信,コントロール通信…
• ドライバ開発・メンテナンスが非常に面倒
• CDCドライバを使いましょう
• オープンな規格
• ドライバは第3者がメンテナンスしている
• Virtual COM port driver (擬似COMポート)が使える
54
55. SUGAR SWEET ROBOTICS CO., LTD.
usbd_rom_cdc
• usbd_rom_cdcをビル
ドして実行
• 反対側のUSBコネク
タをPCに接続する
と,VCOMと認識さ
れる
55
56. SUGAR SWEET ROBOTICS CO., LTD.
VCOMドライバのインストール
• ドライバは
C:NXPLPCXpresso_***Driversの
中にあるので,デバイスマネージャ
からインストールする
• デバイスマネージャーからほか
のデバイス>VCOMを右クリック
• コンピュータを参照して・・・
を選択
• C:nxpLPCXpresso_7.4.0_229
Driversを選択してOK
• COM番号を覚えておく
56
57. SUGAR SWEET ROBOTICS CO., LTD.
Tera Termで確認
• Tera Termを起動する
• シリアルを選択
• COM** (LPC USB Vcom)を
選択
• Enterを押す
• Hello Worldと表示される
57
59. SUGAR SWEET ROBOTICS CO., LTD.
マイコンに命令を送る
• VCOMはCOMポートとして認識されるので,Tera
Termから文字列を送ることができる
• キャラクタベースプロトコル
• バイナリベースプロトコル
• マイコンはバイナリベース向き
• リアルタイム処理を行うマイコンにとって文字列か
らの数値読み取りの負荷が無駄
• 今回は簡単にキャラクタベースで通信しましょう
59
60. SUGAR SWEET ROBOTICS CO., LTD.
キャラクタプロトコル
• x*z
• *に入るのは数値
• 「1」ならばLED点灯して「OK」と返す
• 「0」ならばLED消灯して「OK」と返す
• それ以外ならば「FAIL」を返す
• 3文字目がzでない場合は「ERR」と返す
60
61. SUGAR SWEET ROBOTICS CO., LTD.
処理の流れ
• 1文字読み込みxだったら処理開始
• 2文字読み込み,最後がzでないなら「ERR」と返
して最初に戻る
• 2文字目の文字が「1」ならLED点灯して「OK」し
て最初に戻る
• 2文字目の文字が「2」ならLED消灯して「OK」し
て最初に戻る
• 「FAIL」を返して最初に戻る
61
62. SUGAR SWEET ROBOTICS CO., LTD.
62
if(接続中)
{
char
c
=
1文字読む;
if
(c
!=
‘x’)
{
continue;
}
char
d
=
1文字読む;
char
e
=
1文字読む;
if
(e
!=
‘z’)
{
送信
(“ERR”);
continue;
}
switch(d)
{
case
‘1’:
LED点灯;
文字列送信
(“OK”);
break;
case
‘2’:
LED消灯;
文字列送信(“OK”);
break;
default:
文字列送信(“FAIL”);
break;
}
}
63. SUGAR SWEET ROBOTICS CO., LTD.
実際に実装
• usbd_cdcプロジェクトを選択
• Ctrl+Cでコピーして,Ctrl+Pを押す
• プロジェクト名入力ダイアログが開くので,
「my_usb01」とする
• my_usb01 > example > src > cdc_main.c
を選択して編集
63
64. SUGAR SWEET ROBOTICS CO., LTD.
編集
• 下の部分を編集する (178行目付近)
64
while
(1)
{
/*
Check
if
host
has
connected
and
opened
the
VCOM
port
*/
if
((vcom_connected()
!=
0)
&&
(prompt
==
0))
{
vcom_write("Hello
World!!rn",
15);
prompt
=
1;
}
/*
If
VCOM
port
is
opened
echo
whatever
we
receive
back
to
host.
*/
if
(prompt)
{
rdCnt
=
vcom_bread(&g_rxBuff[0],
256);
if
(rdCnt)
{
vcom_write(&g_rxBuff[0],
rdCnt);
}
}
/*
Sleep
until
next
IRQ
happens
*/
__WFI();
}
この部分は,接続が確認
された場合にHello
World
と送信する命令
65. SUGAR SWEET ROBOTICS CO., LTD.
使う関数
• 接続中 ・・・ prompt == 1
• uint32_t vcom_bread (uint8_t *pBuf, uint32_t buf_len);
• pBufにbuf_lenの長さのデータを受信
• 返り値の数だけ受信成功
• uint32_t vcom_write (uint8_t *pBuf, uint32_t buf_len);
• pBufにあるデータをbuf_lenだけ送信
• 返り値の数だけ送信成功
• void Board_LED_Set(uint8_t LEDNumber, bool On)
• LEDNumberは0を指定
• Onがtrueならば点灯.falseならば消灯
65
68. SUGAR SWEET ROBOTICS CO., LTD.
機能モジュールを使う手順
• 通常は,機能モジュールは
オフ
• 機能モジュールにクロッ
クを加える
• 機能モジュールの初期設
定を行う
• モジュールと外部とを接
続するピンを選択する
68
モジュールA
モジュール
B
モジュールC
69. SUGAR SWEET ROBOTICS CO., LTD.
lpc_chip_13xxプロジェクト
• LPC13xxの基本的な機能モジュールを利用
するためのライブラリが収められている
• 各機能モジュールの使い方はincフォルダ内
のヘッダファイルを見ればわかる
• **_Init関数が用意されているので初期化処
理が簡単
69
71. SUGAR SWEET ROBOTICS CO., LTD.
GPIO
• General Purpose Input / Output (汎用入出
力 )
• ほとんどのピンが使用可能
• HIGH (3.3V) / LOW (0V) 入出力
• gpio_13xx_1.h, gpio_13xx_2.hを参照
71
73. SUGAR SWEET ROBOTICS CO., LTD.
A/D変換
• アナログ信号をデジタルデータに変換
• LPC1347には分解能12bitが搭載
• [0, 3.3V] を [0, 4095]のデータに
• 変換には数マイクロ秒かかる
• 変換終了までCPUが待たないといけない
• 変換終了時に割り込みをかけることもできる
• periph_adcプロジェクトを参照
73
75. SUGAR SWEET ROBOTICS CO., LTD.
タイマ・割り込み
• タイマで一定周期を作る
• 割り込みによって,現在実行中の処理を
中断して,別の処理を実行できる
• タイマ割り込みで周期的処理を行う
• periph_timerプロジェクト
75
77. SUGAR SWEET ROBOTICS CO., LTD.
EEPROM
• マイコンに内蔵された記憶領域にデータを
保存する
• 電源が落ちてもデータは保存される
• 設定値などで使用
• periph_eepromプロジェクト
77
79. SUGAR SWEET ROBOTICS CO., LTD.
DCモータのPID制御
• DCモータの角度制御
• 角度をポテンショメータで取得
• USB経由で目標値(司令)を受ける
• USB経由で現在角度を出力
79
80. SUGAR SWEET ROBOTICS CO., LTD.
モータを回す
• マイコンには数[A]という大きな電流を流す機能は
ない
• トランジスタを使う
• 正逆回転させるためには複数のトランジスタが必要
• モータ駆動用のICがある
• 今回はDCモータの正逆回転が可能なTA8428を使う
• マイコンからは2つのデジタル出力で制御
• [1,0]で正回転,[0, 1]で逆回転
• 回転数の調節にはPWMを使う
• パルス幅を指定すると自動的に出力
• パルス幅が広ければ回転数が高くなる
81. SUGAR SWEET ROBOTICS CO., LTD.
PWM
• Pulse Width Modulation
• 右図のように規定周期内のHIGH時間を制
御 (Duty比)
• CPUでHIGHとLOWのタイミングを制
御・・・無駄
• PWM専用の機能モジュールがあり,Duty
比を設定するだけで自動的にPWM信号を
出し続けてくれる
• LPC OpenライブラリはPWM非対応
• 下記URLでPWMサポートを追加したバージョ
ンを配布中
• http://sugarsweetrobotics.com/組み込み
プログラミング入門/
81
81
3.3V
0V
3.3V
0V
3.3V
0V
duty
=
75
%
duty
=
50
%
duty
=
25
%
82. SUGAR SWEET ROBOTICS CO., LTD.
角度取得
• ポテンショメータは可変抵抗
• 0-3.3Vの電圧信号になる
• 角度と比例した電圧が得られる
• A/D変換
• マイコンはA/D変換で使えるピンは
決まっている
3.3V
82
1.65V
82
83. SUGAR SWEET ROBOTICS CO., LTD.
ソフトウエア
• USBのメッセージをmain関数内で処理
• PCから目標値,制御ゲインを受け取る
• PCから要求があれば,現在のA/D値を送信
• A/D変換は割り込みで使う
• 割り込みハンドラ内ではA/D変換の値を保存するだけ
• タイマで割り込みして,目標値とA/Dの値を比較しながら制御
• PID制御
• 下記URLで配布中
• http://sugarsweetrobotics.com/組み込みプログラミング入門/
83
84. SUGAR SWEET ROBOTICS CO., LTD.
まとめ
• 下記のウェブサイトでサポート
• http://sugarsweetrobotics.com/組み込み
プログラミング入門/
• Facebook (本講義の受講者とおっしゃって
いただければ・・・)
• Twitter — @ysuga
84