SlideShare une entreprise Scribd logo
1  sur  84
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Ruby で書く! Quine aa
Ruby で書く! Quine aaRuby で書く! Quine aa
Ruby で書く! Quine aa誠 小林
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...NTT DATA Technology & Innovation
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paiza
 
SATySFi 最近の発展と目下実装中の変更
SATySFi 最近の発展と目下実装中の変更SATySFi 最近の発展と目下実装中の変更
SATySFi 最近の発展と目下実装中の変更T. Suwa
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミングUnity Technologies Japan K.K.
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?京大 マイコンクラブ
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)Hiroki Nakahara
 
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法Shunji Umetani
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要Toshihiro Kamishima
 
Deflate
DeflateDeflate
Deflate7shi
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私Atsushi Odagiri
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
YoctoでLTSディストリを作るには
YoctoでLTSディストリを作るにはYoctoでLTSディストリを作るには
YoctoでLTSディストリを作るにはwata2ki
 

Tendances (20)

Ruby で書く! Quine aa
Ruby で書く! Quine aaRuby で書く! Quine aa
Ruby で書く! Quine aa
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺
 
SATySFi 最近の発展と目下実装中の変更
SATySFi 最近の発展と目下実装中の変更SATySFi 最近の発展と目下実装中の変更
SATySFi 最近の発展と目下実装中の変更
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
 
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
 
Deflate
DeflateDeflate
Deflate
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
YoctoでLTSディストリを作るには
YoctoでLTSディストリを作るにはYoctoでLTSディストリを作るには
YoctoでLTSディストリを作るには
 

En vedette

組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )Junpei Tsuji
 
Speed Control of PMBLDC Motor using LPC 2148 – A Practical Approach
Speed Control of PMBLDC Motor using  LPC 2148 – A Practical Approach  Speed Control of PMBLDC Motor using  LPC 2148 – A Practical Approach
Speed Control of PMBLDC Motor using LPC 2148 – A Practical Approach IJEEE
 
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編OESF Education
 
SIerによるSIerのためのRaspberry Pi 入門
SIerによるSIerのためのRaspberry Pi 入門SIerによるSIerのためのRaspberry Pi 入門
SIerによるSIerのためのRaspberry Pi 入門catmoney
 
数理的に組み込みソフトを開発する方法入門
数理的に組み込みソフトを開発する方法入門数理的に組み込みソフトを開発する方法入門
数理的に組み込みソフトを開発する方法入門Toshiyuki Fujikura
 
C++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいかC++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいかTsuyoshi Kato
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 sandai
 
ROSによるロボットソフトウェアの開発
ROSによるロボットソフトウェアの開発ROSによるロボットソフトウェアの開発
ROSによるロボットソフトウェアの開発Yuji Yamauchi
 
LED-Camp2「組込みシステム開発の勘所と実践」
LED-Camp2「組込みシステム開発の勘所と実践」LED-Camp2「組込みシステム開発の勘所と実践」
LED-Camp2「組込みシステム開発の勘所と実践」Hideki Takase
 
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -Kishi Shundo
 
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)kozossakai
 
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-Toyohiko Komatsu
 
組み込み開発の現場とRedmine
組み込み開発の現場とRedmine組み込み開発の現場とRedmine
組み込み開発の現場とRedmine健造 後藤
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Yoshifumi Kawai
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...Yoshifumi Kawai
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCYoshifumi Kawai
 
ネットワーク通信入門
ネットワーク通信入門ネットワーク通信入門
ネットワーク通信入門Yuki Suga
 

En vedette (20)

組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
 
Speed Control of PMBLDC Motor using LPC 2148 – A Practical Approach
Speed Control of PMBLDC Motor using  LPC 2148 – A Practical Approach  Speed Control of PMBLDC Motor using  LPC 2148 – A Practical Approach
Speed Control of PMBLDC Motor using LPC 2148 – A Practical Approach
 
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
 
CentOS 7 入門
CentOS 7 入門CentOS 7 入門
CentOS 7 入門
 
SIerによるSIerのためのRaspberry Pi 入門
SIerによるSIerのためのRaspberry Pi 入門SIerによるSIerのためのRaspberry Pi 入門
SIerによるSIerのためのRaspberry Pi 入門
 
数理的に組み込みソフトを開発する方法入門
数理的に組み込みソフトを開発する方法入門数理的に組み込みソフトを開発する方法入門
数理的に組み込みソフトを開発する方法入門
 
Dns primer
Dns primerDns primer
Dns primer
 
C++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいかC++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいか
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
 
ROSによるロボットソフトウェアの開発
ROSによるロボットソフトウェアの開発ROSによるロボットソフトウェアの開発
ROSによるロボットソフトウェアの開発
 
LED-Camp2「組込みシステム開発の勘所と実践」
LED-Camp2「組込みシステム開発の勘所と実践」LED-Camp2「組込みシステム開発の勘所と実践」
LED-Camp2「組込みシステム開発の勘所と実践」
 
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
 
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
 
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-
 
組み込み開発の現場とRedmine
組み込み開発の現場とRedmine組み込み開発の現場とRedmine
組み込み開発の現場とRedmine
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
 
ネットワーク通信入門
ネットワーク通信入門ネットワーク通信入門
ネットワーク通信入門
 

Similaire à 組み込み入門

OpenRTM-aist入門
OpenRTM-aist入門OpenRTM-aist入門
OpenRTM-aist入門Yuki Suga
 
RTミドルウエア講習会2015
RTミドルウエア講習会2015RTミドルウエア講習会2015
RTミドルウエア講習会2015Yuki Suga
 
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)Yuki Suga
 
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナーサーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナーSPIRAL Inc.
 
Jslug2 nagoya-shibata
Jslug2 nagoya-shibataJslug2 nagoya-shibata
Jslug2 nagoya-shibataNaoki Shibata
 
Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下Koyo Takenoshita
 
クラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へクラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へCybozucommunity
 
機械図面の基礎
機械図面の基礎機械図面の基礎
機械図面の基礎Yuki Suga
 
Infrastructure as Codeの取り組みと改善
Infrastructure as Codeの取り組みと改善Infrastructure as Codeの取り組みと改善
Infrastructure as Codeの取り組みと改善Takashi Honda
 
【20-E-5】実践!Infrastructure as a Codeの取り組みと改善
【20-E-5】実践!Infrastructure as a Codeの取り組みと改善【20-E-5】実践!Infrastructure as a Codeの取り組みと改善
【20-E-5】実践!Infrastructure as a Codeの取り組みと改善Developers Summit
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider貴志 上坂
 
The Power of Virtual Network: Infrastructure as a Service Cloud Computing - W...
The Power of Virtual Network: Infrastructure as a Service Cloud Computing - W...The Power of Virtual Network: Infrastructure as a Service Cloud Computing - W...
The Power of Virtual Network: Infrastructure as a Service Cloud Computing - W...axsh co., LTD.
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたYou&I
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!Masaki Muranaka
 
Co-Simulation mechatronics and software
Co-Simulation mechatronics and softwareCo-Simulation mechatronics and software
Co-Simulation mechatronics and softwareKeiju Anada
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
Microservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on AzureMicroservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on AzureTsukasa Kato
 
はじめての UWP アプリ開発
はじめての UWP アプリ開発はじめての UWP アプリ開発
はじめての UWP アプリ開発hiyohiyo
 
アトリエ秋葉原 Choregraphe WS#4
アトリエ秋葉原 Choregraphe WS#4アトリエ秋葉原 Choregraphe WS#4
アトリエ秋葉原 Choregraphe WS#4Atelier Akihabara
 

Similaire à 組み込み入門 (20)

OpenRTM-aist入門
OpenRTM-aist入門OpenRTM-aist入門
OpenRTM-aist入門
 
RTミドルウエア講習会2015
RTミドルウエア講習会2015RTミドルウエア講習会2015
RTミドルウエア講習会2015
 
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
 
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナーサーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
 
Jslug2 nagoya-shibata
Jslug2 nagoya-shibataJslug2 nagoya-shibata
Jslug2 nagoya-shibata
 
Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下
 
クラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へクラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へ
 
機械図面の基礎
機械図面の基礎機械図面の基礎
機械図面の基礎
 
Infrastructure as Codeの取り組みと改善
Infrastructure as Codeの取り組みと改善Infrastructure as Codeの取り組みと改善
Infrastructure as Codeの取り組みと改善
 
【20-E-5】実践!Infrastructure as a Codeの取り組みと改善
【20-E-5】実践!Infrastructure as a Codeの取り組みと改善【20-E-5】実践!Infrastructure as a Codeの取り組みと改善
【20-E-5】実践!Infrastructure as a Codeの取り組みと改善
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
 
The Power of Virtual Network: Infrastructure as a Service Cloud Computing - W...
The Power of Virtual Network: Infrastructure as a Service Cloud Computing - W...The Power of Virtual Network: Infrastructure as a Service Cloud Computing - W...
The Power of Virtual Network: Infrastructure as a Service Cloud Computing - W...
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
Softlayer勉強会#2
Softlayer勉強会#2Softlayer勉強会#2
Softlayer勉強会#2
 
Co-Simulation mechatronics and software
Co-Simulation mechatronics and softwareCo-Simulation mechatronics and software
Co-Simulation mechatronics and software
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
Microservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on AzureMicroservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on Azure
 
はじめての UWP アプリ開発
はじめての UWP アプリ開発はじめての UWP アプリ開発
はじめての UWP アプリ開発
 
アトリエ秋葉原 Choregraphe WS#4
アトリエ秋葉原 Choregraphe WS#4アトリエ秋葉原 Choregraphe WS#4
アトリエ秋葉原 Choregraphe WS#4
 

Plus de Yuki Suga

適応アルゴリズムとコミュニケーションロボット
適応アルゴリズムとコミュニケーションロボット適応アルゴリズムとコミュニケーションロボット
適応アルゴリズムとコミュニケーションロボットYuki Suga
 
RTミドルウエア活用について
RTミドルウエア活用についてRTミドルウエア活用について
RTミドルウエア活用についてYuki Suga
 
Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Yuki Suga
 
組み込み入門
組み込み入門組み込み入門
組み込み入門Yuki Suga
 
SI2008 RT-middleware Contest
SI2008 RT-middleware ContestSI2008 RT-middleware Contest
SI2008 RT-middleware ContestYuki Suga
 
Wasanbonの開発
Wasanbonの開発Wasanbonの開発
Wasanbonの開発Yuki Suga
 
RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」Yuki Suga
 

Plus de Yuki Suga (8)

適応アルゴリズムとコミュニケーションロボット
適応アルゴリズムとコミュニケーションロボット適応アルゴリズムとコミュニケーションロボット
適応アルゴリズムとコミュニケーションロボット
 
RTミドルウエア活用について
RTミドルウエア活用についてRTミドルウエア活用について
RTミドルウエア活用について
 
Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2
 
組み込み入門
組み込み入門組み込み入門
組み込み入門
 
SI2008 RT-middleware Contest
SI2008 RT-middleware ContestSI2008 RT-middleware Contest
SI2008 RT-middleware Contest
 
RTC-scilab
RTC-scilabRTC-scilab
RTC-scilab
 
Wasanbonの開発
Wasanbonの開発Wasanbonの開発
Wasanbonの開発
 
RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」
 

Dernier

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Dernier (10)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

組み込み入門

  • 1. SUGAR SWEET ROBOTICS CO., LTD. 組み込みプログラミング入門 菅 佑樹 (株式会社SUGAR SWEET ROBOTICS代表取締役) (早稲田大学ヒューマノイド研究所招聘研究員) (芝浦工業大学SIT研究所客員研究員) (東京大学情報理工学系研究科大学発新産業創出拠点 プロジェクト 特任研究員) 1
  • 2. SUGAR SWEET ROBOTICS CO., LTD. 目標 • 組み込み開発工程の流れを知る • マイコンの選び方を知る • 組み込み機器を併用した現在のロボットシ ステムのトレンドを知る • 組み込みにおける通信を知る 2
  • 3. SUGAR SWEET ROBOTICS CO., LTD. 組み込みとは何か 3
  • 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
  • 8. SUGAR SWEET ROBOTICS CO., LTD. マイコンの選び方 8
  • 9. SUGAR SWEET ROBOTICS CO., LTD. マイコンの選択肢 • PICーMicrochip • 国内でホビーユーザーが多い • 種類が豊富で、DSPを積んだものなどもある • AVRーAtmel • 小型で使いやすい。Arduinoで採用されている • PSoCーCypress • デジタル、アナログ機能モジュールを柔軟に組み合わせて使える • H8, SHなどールネサス • カーエレではまだ根強いか • ARMマイコンーTI, Motorola, STmicro, NXP, Atmelなど • 世界で最も使われているマイコン9
  • 10. SUGAR SWEET ROBOTICS CO., LTD. マイコンの選び方 • 機能モジュールの種類と数 • 開発環境 • 価格 10
  • 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
  • 14. SUGAR SWEET ROBOTICS CO., LTD. 入門者向け組み込み機器のトレンド 14
  • 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
  • 23. SUGAR SWEET ROBOTICS CO., LTD. 組み込みとロボットシステム 23
  • 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
  • 28. SUGAR SWEET ROBOTICS CO., LTD. 実習 28
  • 29. SUGAR SWEET ROBOTICS CO., LTD. 開発環境の整備 29
  • 30. SUGAR SWEET ROBOTICS CO., LTD. LPCXpressoのダウンロード • 公式ウェブ • http://www.lpcware.com/lpcxpresso 30
  • 31. SUGAR SWEET ROBOTICS CO., LTD. 31 LPCXpressoのダウンロード 2. toolを選ぶ 1. LPCXpressoを選ぶ 3. Filterボタンを押す 4. Toolsをクリック 5. LPCXpresso Windows Installerを選択
  • 32. SUGAR SWEET ROBOTICS CO., LTD. LPCXpressoのダウンロード 32 LPCXpresso v7.4.0を選択
  • 33. SUGAR SWEET ROBOTICS CO., LTD. LPCXpresso_*.exeを実行 • インストールする • すべてのドライバをイ ンストールすること 33
  • 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
  • 39. SUGAR SWEET ROBOTICS CO., LTD. サンプルを動作させる 39
  • 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
  • 48. SUGAR SWEET ROBOTICS CO., LTD. デバッグする 48
  • 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
  • 53. SUGAR SWEET ROBOTICS CO., LTD. USBで通信する 53
  • 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
  • 58. SUGAR SWEET ROBOTICS CO., LTD. 独自の命令を実装する 58
  • 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
  • 66. SUGAR SWEET ROBOTICS CO., LTD. 機能モジュールの使いこなし 66
  • 67. SUGAR SWEET ROBOTICS CO., LTD. ARMアーキテクチャの機能モジュール 67
  • 68. SUGAR SWEET ROBOTICS CO., LTD. 機能モジュールを使う手順 • 通常は,機能モジュールは オフ • 機能モジュールにクロッ クを加える • 機能モジュールの初期設 定を行う • モジュールと外部とを接 続するピンを選択する 68 モジュールA モジュール B モジュールC
  • 69. SUGAR SWEET ROBOTICS CO., LTD. lpc_chip_13xxプロジェクト • LPC13xxの基本的な機能モジュールを利用 するためのライブラリが収められている • 各機能モジュールの使い方はincフォルダ内 のヘッダファイルを見ればわかる • **_Init関数が用意されているので初期化処 理が簡単 69
  • 70. SUGAR SWEET ROBOTICS CO., LTD. デジタル入出力 70
  • 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
  • 72. SUGAR SWEET ROBOTICS CO., LTD. A/D変換 72
  • 73. SUGAR SWEET ROBOTICS CO., LTD. A/D変換 • アナログ信号をデジタルデータに変換 • LPC1347には分解能12bitが搭載 • [0, 3.3V] を [0, 4095]のデータに • 変換には数マイクロ秒かかる • 変換終了までCPUが待たないといけない • 変換終了時に割り込みをかけることもできる • periph_adcプロジェクトを参照 73
  • 74. SUGAR SWEET ROBOTICS CO., LTD. タイマと割り込み 74
  • 75. SUGAR SWEET ROBOTICS CO., LTD. タイマ・割り込み • タイマで一定周期を作る • 割り込みによって,現在実行中の処理を 中断して,別の処理を実行できる • タイマ割り込みで周期的処理を行う • periph_timerプロジェクト 75
  • 76. SUGAR SWEET ROBOTICS CO., LTD. EEPROM 76
  • 77. SUGAR SWEET ROBOTICS CO., LTD. EEPROM • マイコンに内蔵された記憶領域にデータを 保存する • 電源が落ちてもデータは保存される • 設定値などで使用 • periph_eepromプロジェクト 77
  • 78. SUGAR SWEET ROBOTICS CO., LTD. 作成例 78
  • 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