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

組み込み入門

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