SlideShare una empresa de Scribd logo
1 de 84
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのこと
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
 
どうして昔の人は八進数でしゃべるのか?
どうして昔の人は八進数でしゃべるのか?どうして昔の人は八進数でしゃべるのか?
どうして昔の人は八進数でしゃべるのか?
 
リンク機構を有するロボットをGazeboで動かす
リンク機構を有するロボットをGazeboで動かすリンク機構を有するロボットをGazeboで動かす
リンク機構を有するロボットをGazeboで動かす
 
ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
ロボット・ソフトウェア開発環境ROSとは何か? (in Japanese)
ロボット・ソフトウェア開発環境ROSとは何か? (in Japanese)ロボット・ソフトウェア開発環境ROSとは何か? (in Japanese)
ロボット・ソフトウェア開発環境ROSとは何か? (in Japanese)
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?
 
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
 
AIシステムの要求とプロジェクトマネジメント-前半:機械学習工学概論
AIシステムの要求とプロジェクトマネジメント-前半:機械学習工学概論AIシステムの要求とプロジェクトマネジメント-前半:機械学習工学概論
AIシステムの要求とプロジェクトマネジメント-前半:機械学習工学概論
 
MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
 
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
 
OSSはどこまで産業用機器に使えるか_20230520.pdf
OSSはどこまで産業用機器に使えるか_20230520.pdfOSSはどこまで産業用機器に使えるか_20230520.pdf
OSSはどこまで産業用機器に使えるか_20230520.pdf
 
ROSによる今後のロボティクスのあり方
ROSによる今後のロボティクスのあり方ROSによる今後のロボティクスのあり方
ROSによる今後のロボティクスのあり方
 

Destacado

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
 
数理的に組み込みソフトを開発する方法入門
数理的に組み込みソフトを開発する方法入門数理的に組み込みソフトを開発する方法入門
数理的に組み込みソフトを開発する方法入門
Toshiyuki Fujikura
 
C++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいかC++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいか
Tsuyoshi Kato
 
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
 

Destacado (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
 
ネットワーク通信入門
ネットワーク通信入門ネットワーク通信入門
ネットワーク通信入門
 

Similar a 組み込み入門

クラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へクラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へ
Cybozucommunity
 

Similar a 組み込み入門 (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
 

Más 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」
 

Último

Último (7)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

組み込み入門

  • 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