• 検索結果がありません。

ed 手引pdf 最近の更新履歴 mbed4adrobo

N/A
N/A
Protected

Academic year: 2018

シェア "ed 手引pdf 最近の更新履歴 mbed4adrobo"

Copied!
41
0
0

読み込み中.... (全文を見る)

全文

(1)

千葉工業大学

未来 学科

実習用制御回路

mbed4adrobo

2017 年 5 月

千葉工業大学

未来 学科

(2)

目次

.実習用制御回路 関

. 未来 学科実習用 mbed

. mbed 関

. mbed4adrobo 回路図, ン配置

. 環境 構築

. ン ー

. MDK-ARM ン ー

. teraterm-4.86 ン ー

. ン ン ー 動作確認

. 環境構築 Q&A

. 環境 使い方

. ン

. LED 点灯

. 時間 制御

. 入力

. USB 介 通信

. ー 制御

. ー ー 制御

. A/D 変換 セン 値 取得

. GPIO 使用 入出力

. ー ン ー ン

.最後

(3)

.実習用制御回路 関

. 未来 学科実習用 mbed (mbed4adrobo)

未来 学科 ,学生実習用 独自 制御回路 開発

提供 い .mbed(mbed4adrobo) 呼 本 ー ,

身 回 多く使用 い ARM いう CPU 使用 ,自動的

制御 機械 製作 簡易的 体験 う い .

本 ー ,主 以下 特徴 あ .

・ 開発 比較的簡単 .

mbed標準 環境 開発

・様々 外部機器 接続 利用 .

接続 機器 ,主 以下 通

・LED 個 実装済

個 実装済

・RC 用 ー ー 個

・ ー 個

・汎用入出力 個

・セン 出力 個

・SPI 個

・I2C 個

ARM

ー ンや ー

機 様々

使用 い .

(4)

. mbed

mbed ARM ン 用ワン ー

ン びそ ン 環境 指 .

多く mbed 制御 ,種類 増え い .mbed 使

用 開発 ,様々 電子機器 制御 基本 学

ぶ . 上 資料や ン 多数あ

,是非覗い い う.

参考

http://mbed.org/

(5)

. mbed4adrobo 回路図, ン配置

(6)
(7)

. 環境 構築

. ン ー

開発環境構築 必要 ン ー 行い .

以下 セ ン ー 行 く い. ,

以下 動作確認 行 ー ン ,最新 ー ン 動

作 思い .

Keil uVision5 (720MB)

http://www.keil.com/download/product/ MDK523.EXE

※途中 Legacy Support

指示 あ . ン ー 下 い.

teraterm-4.94

http://sourceforge.jp/projects/ttssh2/releases/ teraterm-4.94.exe

https://sites.google.com/site/mbed4adrobo/download/ mbed_projectXXXXXX.zip (XXXXXX 日付)

MDK v4 Legacy Support (340MB) http://www2.keil.com/mdk5/legacy/ MDKCM523.EXE

ソ ン ー 時間程度 あ

. 注意下 い.

mbed 標準的 開発 環境 ,無料 使用

通信用 ー

ン .

実習用 作成 環

境 ン

. 改造

独自 作

成 .

(8)

. MDK-ARM ン ー

MDK-ARM mbed 開発環境 ,C++言語 作成 ,

,転送 行う .

URL 入力 い.

http://www.keil.com/download/product/

ン ー [MDK-ARM] く い.

質問 回答 く い.

入力 [Submit] く い.

590MB ほ あ

, ン ー 時間

大学 情報 以下

Company:

"Chiba Institute of Technology"

Address:

" 2-17-1, Tsudanuma"

City:

"Narashino, Chiba"

ZIP/Postal Code:

"275-0016"

(9)

" MDK523.EXE" ン ー 下 い.

ン ー " MDK523.exe" 下 い.

ン ー 起動 ,適宜質問 回答 ,[Next>>]

押 く い.

(10)

ン ー 開始 .

ン ー 終了 ,"KEIL uVision5" ー 下 い.

開発環境 起動 確認 下 い. 起動 確認

ソ 終了

下 い.

(11)

. teraterm-4.94 ン ー

teraterm 通信 く使用 実習

mbed 通信 使用

URL 入力 い.

http://sourceforge.jp/projects/ttssh2/

ン ー [Tera Term 4.94] 下 い.

[teraterm-4.94.exe]

通信 ,mbed 計

測 ー 直接観

察 .

ー ン

構い .

(12)

ン ー " teraterm-4.90.exe " い.

ー ン 制御 い 選択 下 い.

ン ー 言語 選 下 い.

ー 起動 ,質問 回答 ン ー 開始

日本語以外 構い

(13)

[標準 ン ー ] 選択 下 い.

"Tera Term" 下 い.

開発環境 起動 確認 下 い.以上 ,Tera

Term 終了

起動 確認 ,

ソ 終了

下 い.

(14)

. ン ン ー 動作確認

本実習 使用 mbed , 実習 独自 開発 .

そ ,開発環境 少 特別 . , ン

書 込 ン ー 動作 確

認 .

URL 入力 下 い.

http://sites.google.com/site/mbed4adrobo/download/

[ ン ー ] 下 い.

圧縮 展開

圧縮 mbed_project.zip 展開 下 い.

Windows 標準機能

展開 ,別 ソ

使用

展開 構い .

(15)

展開 確認 . ,以下

[mbed_project.uvproj]

KEIL 起動

[Install Legacy Support] 関連付け う くい

い い 起動

い あ .

関連付け 行う 起

動 う

[main.cpp]

見 う.

(16)

[Download Legacy Support for Cortex-M Devices]

"MDKCM523" 下 い.

ー ン 制御 い 選択 下 い.

(17)

ン ー 起動 ,適宜質問 回答 ,[Next>>]

押 く い.

以下 [Build] ン ,[F7] 押

く い.

ン ー mbed USB ー 接続 下 い.赤い LED

ン 点灯 確認 う.

正常 完了

, 下 [Build Output]

[0 Error(s), 0 Warning(s)]

出 .

初 接続 時

ー 行い .

ー いう

セー 待 次

進 下 い.

, 時 ー

ン ー 開始

い場合 ,以下 ン

(18)

以下 [Download] ン 下 い.

以下 う ン 表示 ,書 込 始 . セー

示 い場合 ,次

[環境構築 Q&A]

[ 書 込

い場合]

進 下 い.

(19)

次 以下 う ,Tera Term 起動 , セー 表示

以上 開発環境 準備 完了 .途中 問題 発生 場合 ,

次 ー 参考 対処 下 い.

う セー

表示 い場合

,次 ー

[環境構築 Q&A] [Tera Term 起動 場合]

進 下 い.

(20)

. 環境構築 Q&A

, 環境 構築時 起 や い問題 関 Q&A

示 .

. . 書 込 い場合

前節 . う 書 込 い場合 対処法 示 .

[Window]+[r] 下 い.

[ 名 指定 実行] ,"cmd" 入

力 ,[OK] 押 下 い.

ン ン 起動 ,"mode" 入力 ,改行

下 い.

[Window]

mode 通信関

連 機器

ン .

(21)

"COM[数字]" いう う 通信 ー あ く い. ,

mbed USB 抜 差 ,そ 変化 見 下 い.

例 mbed USB ー 抜い 場合

例 mbed ー 挿 場合

変化 い場合 , 問題 発生 い そ あ

PC 再起動 下 い.

そ 問題 解決 い場合 ,TA 呼 下 い.

接続前 COM 表示

あ .

抜 差 前後 COM

新 追加 い

通信 条件

時,複数 COM

ー あ 場合 ,

追加 COM

番号 最 大 値

COM 数字 一桁

,書 込 条件

. 条件 満 い場合 ,[

ネー ] COM 番号

最大 う 変

更 下 い.

(22)

. . Tera Term 起動 い場合

前節 . う TeraTerm 起動 い場合 対処法 示

ン ー 展開 [mbed_project] auto_write.bat

帳 開 .

以下 Tera Term ン ー 変更 . 実 行

ttpmacro.exe 変更 い 下 い.

(23)

, ン ー 探 方 ,一般的 c

[Program Files] く ,[Program Files (x86)] あ ,開 い 見 け 下 い.

完了 . 通信 い場合 TA 呼 下

い.

(24)

. 環境 使い方

現在作成中

(25)

. ン

習う 慣 面 あ , ン 入力

,動作 確認 いく 重要 . ,基本

ン 示 ,mbed4adrobo 動作 確認

い う.

. LED 点灯

,LED 点灯 ン .

1-1 LED1点灯

LED1 点灯 思い ,次 隣 LED2 点灯

う.

1-2 LED点灯 緑色

LED2 点灯 思い ,次 隣 LED3 点灯

う.LED 2進数 ON/OFF 表 注意 ,LED

自由 点灯 う う.

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4);

int main() { led = 1; return 0; }

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4);

int main() { led = 2; return 0; }

(26)

. 時間 制御

点灯 ,次 時間 点滅 作 .

0.5秒毎 LED ON OFF 繰 返 行い

2-1 LED点滅

0.5 停止 ,LED ON OFF 繰 返 う ,時

間 使 制御 簡単 .

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4);

int main() { while(1){ led = 1; wait(0.5); led = 0; wait(0.5); }

}

(27)

. 入力

入力 LED 点滅 う.

3-1 LED 点灯・消灯

入力 ON/OFF LED 点灯 い . ,

離 点灯 ,押 消灯 分 思い .

実 mbed4adrobo 基板上 い時 High(1) ,押

Low(0) . 電子回路 学ぶ 再度

解説 ,普段 感覚 逆 覚え い 下 い.

, 関連 ,

sw.mode(PullUp);

いう行 あ . 押 い時 上(Up) 引 張

(Pull) いう い い時 ,入力 確

High う 必要 命令 .

う , 入力 出力信号 間 以下 関係 あ

SW1

ON OFF

SW2 ON 2進数 00 (=0) 2進数 01 (=1)

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4); BusIn sw(SW1, SW2);

int main() { sw.mode(PullUp); while(1){

led = sw; }

}

(28)

次 ,SW1 押 LED1 点灯 う う. ,SW1

ON 0 ,以下 う 条件分岐 良い

分 .SW 使用 い宣言 い 気 け く

い.

3-2 LED 点灯・消灯

う ,周辺機器 接続 く mbed4adrobo け 学

く あ . ン 基 ,LED

使用 いく 作 う.

課題

SW1 右 ,SW2 LED 光 流

う 作 う.

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4); BusIn sw(SW1);

int main() { sw.mode(PullUp); while(1){

if (sw == 0){ led = 1; } else { led = 0; }

} }

(29)

. USB 介 通信

セー 表示 う. ,USB 通

通信 ,文字列 ー 送受信 行い .

4-1 セー 送信

,上記 ,LED 使い ,初期設定

行 い .使わ い時 初期設定 い 問題 発生

あ ,本 ン 常 初期設定 行う う

う.

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4);

int main() { led = 0;

printf("Hello World\r\n"); return 0;

}

(30)

そ , 応用 , 状態 表示 う う.

4-2 状態 表示

, ンソー 入力 セー ー

う. 文字 入力 Enter 押 表示 .

4-3 受信 セー 送信

実行 入力 文字 表示 け 思う ,

一度 mbed 送 ,そ ー 表示 い .

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4); BusIn sw(SW1, SW2);

int main() { int state = -1; led = 0;

sw.mode(PullUp); while(1) {

if (state != sw) {

if (sw & 0x01) printf("SW1 OFF "); else printf("SW1 ON ");

if (sw & 0x02) printf("SW2 OFF\r\n"); else printf("SW2 ON\r\n");

state = sw; }

} }

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4);

int main() { char buf[100]; led = 0; while(1) {

scanf("%s", buf); printf("%s\r\n", buf); }

}

(31)

, ンソー 入力 数字 LED 点滅 う.

4-4 受信 LED 点灯・消灯

1 4 数字 入 ,そ 対応 LED 点灯,消灯

. う ,USB 介 遠隔操作 行う .

遠隔操作 方法 ,そ 遠隔操作 使用

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4);

int main() { char buf[100]; led = 0; while(1) {

scanf("%s", buf); printf("%s\r\n", buf); int n = atoi(buf);

if (n > 0) led = led ^ (1 << (n - 1)); }

}

(32)

. ー 制御

ー 制御 行い .MOTOR1A 端子 ー 接続 下 い.

,本 ン ,外付け 部品 必要 ..

5-1 制御

,Motor ,最大出力(motor = 1 時) 電源 25%

出力 い設定 い . 変更 ,

setMaxRatio(float max_ratio)

ratio: 比 最大値(0.0 1.0, 初期設定 0.25)

いう ソ あ ,問題 い場合 そ 使用 く

い.

, 個 ー 使用 場合 ,

Motor motor2(MOTOR2_IN1, MOTOR2_IN2, MOTOR2_PWM);

定義 下 い.

変数名 motor2 自由 設定 頂い 構い

#include "mbed.h"

#include "Motor.h"

BusOut led(LED1, LED2, LED3, LED4);

Motor motor1(MOTOR1_IN1, MOTOR1_IN2, MOTOR1_PWM);

int main() { led = 0;

float delta = 0.1f, i = 0.0f; while(1) {

i += delta;

if (fabs(i) >= 1.0f) delta *= -1.0f; printf("%f\r\n", i);

motor1 = i; wait(0.5); }

}

(33)

. ー ー 制御

SERVO1 接続 動作 確認 . ー

初期位置 個々 異 ,適正 値 調整 下 い.

6-1 制御

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4); PwmOut servo1(SERVO1);

int main() { led = 0;

servo1.period_ms(20); while(1) {

for(int i = 1000; i <= 2000; i += 100){ printf("%d\r\n", i);

servo1.pulsewidth_us(i); wait(0.5);

} } }

(34)

次 初期位置 角度 ン 使 調 う.

6-2 初期位置 調査

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4); BusIn sw1(SW1), sw2(SW2);

PwmOut servo1(SERVO1);

int main() {

int val = 1500, val0 = 0; led = 0;

servo1.period_ms(20); sw1.mode(PullUp); sw2.mode(PullUp); while(1) {

if (!sw1) val += 10; if (!sw2) val -= 10; if (val != val0){

servo1.pulsewidth_us(val); printf("%d[us]\r\n", val); val0 = val;

}

wait(0.02); }

}

(35)

. A/D 変換 セン 値 取得

入力 値 取得 う.PSD 距離セン 接続 ,

値 変化 確認 下 い.

7-1 A/D変換 結果 表示

PSD 距離セン ー 制御 組 合わ ,あ 一定距離 保

.以下 ン 示 .

#include "mbed.h"

BusOut led(LED1, LED2, LED3, LED4); AnalogIn ad[] = {AD0};

int main() { led = 0; while(1) {

printf("%f\r\n", ad[0].read()); wait(0.2);

} }

#include "mbed.h"

#include "Motor.h"

BusOut led(LED1, LED2, LED3, LED4); AnalogIn ad[] = {AD0};

Motor motor1(MOTOR1_IN1, MOTOR1_IN2, MOTOR1_PWM); Motor motor2(MOTOR2_IN1, MOTOR2_IN2, MOTOR2_PWM);

int main() { led = 0; while(1) {

float val = ad[0].read(); printf("%f\r\n", val);

float i = (0.6 - val) * 3.0f; motor1 = i;

motor2 = -i; wait(0.5); }

}

ー 制御

呼 制御系

val 前 数字 変更 距離 変更

(36)

. GPIO 使用 入出力

GPIO 使用 音楽 演奏 う.GPIO 1 番目 端子

(P1_5) 圧電 接続 ,以下 実行

う. (SW1)LED 点滅 ,音 流 .

8-1 GPIO 使用 音楽 演奏

#include "mbed.h"

#include "Sound.h"

BusOut led(LED1, LED2, LED3, LED4); BusIn sw(SW1);

Sound sound(GPIO1);

int main() {

int sound_data[] = {C4, D4, E4, F4, G4, A4, B4, C5}; sw.mode(PullUp);

while(1){ led = 0; while(sw);

for(int i = 0; i < (sizeof(sound_data)/sizeof(int)); i ++){ led = 1 << (i & 3);

sound = sound_data[i]; wait(0.4);

sound = 0; wait(0.1); }

} }

GPIO

General Purpose Input / Output 略 ,汎用入出 力 呼

(37)

PSD 連動 ,距離 応 音 LED 変化 装置 ン

示 .

8-2 距離 応 周波数 変化

#include "mbed.h"

#include "Sound.h"

BusOut led(LED1, LED2, LED3, LED4); AnalogIn ad[] = {AD0};

Sound sound(GPIO1);

int main() { led = 0; while(1) {

float val = ad[0].read(); printf("%f\r\n", val);

led = 0x0f >> (int)((0.9f - val) * 4); sound = 880 * val;

wait(0.2); }

}

(38)

. ー ン ー ン

ー ン ー 回転角度セン 読 取 う.GPIO

番 番 端子 ー ン ー 出力 接続 ,以下

ン 実行 う. ー 回転 ー

ン ー A相,B 相 出力信号 LED 点滅 確認 . ,

ー 回転時 計測 数 出力 .

9-1 ン ー

#include "mbed.h"

#include "QEI.h"

BusOut led(LED1, LED2, LED3, LED4); BusIn in(GPIO1, GPIO2, GPIO3, GPIO4);

QEI qei(GPIO1, GPIO2, NC, 48, QEI::X4_ENCODING); QEI qei2(GPIO3, GPIO4, NC, 48, QEI::X4_ENCODING);

int main() { in.mode(PullUp); while(1) {

printf("%d\r\n", qei.getPulses(), qei2.getPulses()); for(int i = 0; i < 100; i ++){

led = in; wait(0.01); }

} }

(39)

. 動作 用

10-1 ン ー

#include "mbed.h"

#include "Motor.h"

BusOut led(LED1, LED2, LED3, LED4); BusIn sw(SW1, SW2);

BusIn in(GPIO1, GPIO2, GPIO3, GPIO4);

Motor motor_left(MOTOR1_IN1, MOTOR1_IN2, MOTOR1_PWM); Motor motor_right(MOTOR2_IN1, MOTOR2_IN2, MOTOR2_PWM);

int main() { in.mode(PullUp); sw.mode(PullUp);

motor_left.setMaxRatio(1.0); motor_right.setMaxRatio(1.0); while(1) {

motor_left = 0.5 * !sw[0]; motor_right = 0.5 * !sw[1]; led = in;

wait(0.001); }

}

(40)

. 速度制御

PWM制御 ー ン ー 組 合わ 速度 制御

行い う.PI 制御 使用 , ー 速度 一定 保 .

#include "mbed.h"

#include "Motor.h"

#include "QEI.h"

BusOut led(LED1, LED2, LED3, LED4); Ticker control;

Motor motor_left(MOTOR1_IN1, MOTOR1_IN2, MOTOR1_PWM); Motor motor_right(MOTOR2_IN1, MOTOR2_IN2, MOTOR2_PWM); BusIn in(GPIO1, GPIO2, GPIO3, GPIO4);

QEI qei_left(GPIO1, GPIO2, NC, 48, QEI::X4_ENCODING); QEI qei_right(GPIO3, GPIO4, NC, 48, QEI::X4_ENCODING);

double speed_left_ref = 0.2, speed_right_ref = 0.2; double speed_left_lpf = 0.0, speed_right_lpf = 0.0; const double sampling_time = 0.020;

const double move_per_pulse = 0.0005; double i_left = 0.0, i_right = 0.0; const double ki = 10.0, kp = 1.0;

double low_pass_filter(double val, double pre_val, double gamma) { return gamma * pre_val + (1.0 - gamma) * val;

}

void control_handler() {

int enc_left = qei_left.getPulses(); int enc_right = qei_right.getPulses(); qei_left.reset();

qei_right.reset();

double speed_left = move_per_pulse * enc_left / sampling_time; double speed_right = move_per_pulse * enc_right / sampling_time; speed_left_lpf = low_pass_filter(speed_left, speed_left_lpf, 0.4); speed_right_lpf = low_pass_filter(speed_right, speed_right_lpf, 0.4); double delta_speed_left = speed_left_ref - speed_left_lpf;

double delta_speed_right = -speed_right_ref - speed_right_lpf; i_left += delta_speed_left * sampling_time;

i_right += delta_speed_right * sampling_time; motor_left = kp * delta_speed_left + ki * i_left; motor_right = kp * delta_speed_right + ki * i_right; }

int main() { in.mode(PullUp);

motor_left.setMaxRatio(1.0); motor_right.setMaxRatio(1.0);

control.attach(&control_handler, sampling_time); led = 1;

while(1){

led = (led << 1) | (led == 0x08); wait(0.5);

} }

ー 回転方向

ー ン ー 値

増加 方向 逆

場合 最大速度 回転

. ,向

一致 い 確認

実行 う く

い.

(41)

.最後

ン ー 制御 基本 学 い ,い

う .案外簡単 電子機器 操作 , 感 人 多い

い う .現在, ン ー 制御 世界 進化

,使いや い ー 世 中 生 出 い .そ 中

mbed 注目 開発環境 ,情報や ン 多く存在

.自発的 学ぶ 比較的容易 環境 思い ,是非

授業 け く,自分 色々 挑戦 い け 思い .

参照

関連したドキュメント

保安業務に係る技術的能力を証する書面 (保安業務区分ごとの算定式及び結果) 1 保安業務資格者の数 (1)

最近一年間の幹の半径の生長ヰま、枝葉の生長量

・条例第 37 条・第 62 条において、軽微なものなど規則で定める変更については、届出が不要とされ、その具 体的な要件が規則に定められている(規則第

タッチON/OFF判定 CinX Data Registerの更新 Result Data 1/2 Registerの更新 Error Status Registerの更新 Error Status Channel 1/2 Registerの更新 (X=0,1,…,15).

エリアP 雑固体廃棄物 焼却設備 処理設備     瓦礫保管エリア     伐採木保管エリア

廃棄物の処理及び清掃に関する法律の改正に伴い、令和元年 12 月 14 日から「成年被後見人又は被

島出土の更新世人骨の 3 次元形態解析やミトコンドリア DNA