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

前回の内容 マイクロコンピュータにおけるプログラミング PC上で作成 コンパイル マイコンに転送 実行 プログラムを用いて外部の装置を動作させる LED turnonled turnoffled LCD printf プログラムを用いて外部の装置の状態を読み取る プッシュスイッチ getpushsw

N/A
N/A
Protected

Academic year: 2021

シェア "前回の内容 マイクロコンピュータにおけるプログラミング PC上で作成 コンパイル マイコンに転送 実行 プログラムを用いて外部の装置を動作させる LED turnonled turnoffled LCD printf プログラムを用いて外部の装置の状態を読み取る プッシュスイッチ getpushsw"

Copied!
28
0
0

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

全文

(1)

ものづくり基礎工学(情報工学分野)

(2)

前回の内容

マイクロコンピュータにおけるプログラミング

PC上で作成,コンパイル→マイコンに転送,実行

プログラムを用いて外部の装置を動作させる

LED:turnOnLed,turnOffLed

LCD:printf

プログラムを用いて外部の装置の状態を読み取る

●プッシュスイッチ:

getPushSW

●ディップスイッチ:

getDipSw

●スイッチの状態によって関数の戻り値が変わる

●戻り値の値を変数に代入する

状態に応じて動作を変える

if文

int dip;  ・  ・  ・

(3)

今回の内容

物理量を読み取る装置の利用

A/D変換器

●距離センサ

プログラムを用いて外部の装置を動作させる

●モータ

状態に応じて動作を変える

2つ以上の場合に分ける

外部の状況に応じた機器の制御

マイコンに内蔵されている

(4)

H8/3048F–ONE

マイコン

A/D変換器を用いた電圧計

A/D変換器

0 1 ・ ・ ・ 1022 1023

乾電池   

LCD

●マイコンに内蔵された

A/D変換器

を利用する.

●得られた整数値をプログラムで電圧値に変換して

LCDに表示する.

距離センサ

  

 

電圧値に変換

0.00~5.00

(5)

A/D変換器

A/D変換器

A/D =

A

nalog to

D

igital

電圧値

(アナログ)

(ディジタル)

整数値

とびとび(離散) 連続 範囲内のどのような値も取り得る   →無限大の情報量 プログラムで利用できない 0~1023の範囲の値   →210通り=10[bit]の分解能 プログラムで利用できる

入力された電圧値に応じた整数値を出力する

センサ(電圧を出力する)からの 情報を受け取って処理できる

(6)

A/D変換器を用いた電圧計

-リスト

4.2.1(06battery.c)-

引数で指定した回数変換し,平均を取る. ●細かな変動を取り除く. ●1000と記述されているのと同じ. ●電圧値をA/D変換する.A/D変換値を電圧値に変換 する. ●電圧値を返す. LCDに表示 電圧(実数)を保存 するための変数の宣言 #define avNum 1000 void main(void) { double v; initMicon(); clearScreen(); while(1){ v=getVoltage(avNum); gotoxy(0,0); printVoltage(v); } } #define avNum 1000

(7)

CN1,CN2,CN3は外部の装置 とマイコンの間で信号(小さな 電流を伴う電圧の変化)のやり 取りを行なうために用いる 電源用コネクタ

マザーボード上のコネクタ

CN2 この位置は16番ピン CN2–16と表わす ピン番号 1 2 19 20 10 CN2 GND 5V CN3 外部の装置に電源を供給する  GND:電圧の基準  5V :GNDに対して5[V]を出力する CN1 (コネクタ1)

(8)

電池ケースの接続

ー課題

4.1(1) ー

赤色の導線はここに 12番ピン:CN2–12 ピン番号 単3形乾電池 +極 −極 1 2 19 20 10 CN2 GND 5V 黒色の導線はこの列のいずれかに 電池 ケース

(9)

距離センサの接続

ー課題

4.1(2) ー

緑色の導線はここに 12番ピン:CN2–12 1 2 19 20 10 CN2 GND 5V 黒色の導線はこの列のいずれかに 赤色の導線はこの列のいずれかに

(10)

距離センサの入出力端子と動作

距離に応じた電圧が 出力される 反射された 赤外線を受ける 赤外線が出ている 携帯電話のカメラや ディジタルカメラで見ると 光って見える 受光された赤外線の位置 から距離を計算する 動作用の電圧を 加える 入出力電圧の基準 = GND 5V Vo

(11)

測定の方法

ー課題

4.1(2) ー

距離センサ

A4版の紙

実験テキストも

同じ大きさ

(12)

誤差と誤差率の計算

ー課題

4.1(2)[iv]ー

誤 差

(誤差)=(測定値)-(真の値)

誤差率

(誤差)

(真の値)

×100

(測定値)-(真の値)

(真の値)

×100

(誤差率)

[%] =

=

正の誤差(率)= 測定値が真の値より大きい

負の誤差(率)= 測定値が真の値より小さい

課題4.1(2)では A4長辺の長さ=29.7[cm]

誤差と誤差率には符号がつくことに注意する

測定値と真の値の大小関 係によって符号が変わる

(13)

有効数字

有効数字

 信頼の置けない桁以下を四捨五入し,打ち切って表した値

 

2.85=真の値は2.845以上2.855未満の範囲にある

有効数字の桁数

2.85 = 有効数字3桁

0.0285 = 有効数字3桁,先頭の0は有効数字ではない

0.002850 = 有効数字4桁,末尾の0は有効数字である

有効数字の桁数は,小数点以下の桁数とは意味が異なる

.

信頼の置ける桁数 相対的な誤差の大きさ 絶対的な誤差の大きさ

(14)

誤差を含む値の計算

和と差

誤差が最も大きい数値を調べ,その末位よりも

1位下まで

計算し,最後の桁を四捨五入する.

 例

1.89−0.523 = 1.367 = 1.37 有効数字の 桁数を0.5に 合わせる=1桁

積と商

有効数字の桁数が最も少ない数値を調べ,それよりも桁数が

1

桁余分になるように計算し,最後の桁を四捨五入する.

 例

31.4÷29.7 = 1.057 = 1.06 0.5÷29.7 = 0.016 = 0.02 誤差が最も大きい値 (小数第3位は信用できない) 有効数字の桁数を 31.4(29.7)に 四捨五入 一旦,1.89を1.890と みなして計算 一旦,1桁余分に計算 四捨五入

(15)

課題

4.1(2)における計算

電圧から計算される距離

小数第

1位まで求める.

誤 差

計算した距離,真の値とも小数第

1位まで求められている

ので,小数第

1位まで求める.

誤差の大きさによって有効数字の桁数が変わる.

誤差率

求めた誤差によって有効数字の桁数が変わる.

この課題では,真の値は有効数字

3桁であるので,

  誤差が有効数字

2桁→誤差率も有効数字2桁となる

  誤差が有効数字

1桁→誤差率も有効数字1桁となる

例 誤差が1.2[cm]:有効数字2桁   誤差が0.8[cm]:有効数字1桁

(16)

距離センサと

A/D変換器を用いた距離計

●距離センサによって,距離に応じた電圧を生成させる.

●マイコンに内蔵された

A/D変換器を利用する.

●測定された電圧から距離を計算する.

  (メーカ発行のデータシートによる)

H8/3048F–ONE

マイコン

A/D変換器

0 1 ・ ・ ・ 1022 1023

LCD

距離センサ

  

 

電圧値に変換

0.00~5.00

距離に変換

電圧を出力

(17)

距離センサと

A/D変換器を用いた距離計

ーリスト

4.2.2(07distance.c)-

電圧値から距離を 求める処理 この部分はリスト4.2.1と同じ 1000回A/D変換をして電圧の 平均値をLCDに表示する 計算して求めた距離をLCDに表示する #define avNum 1000 void main(void) { int i,data,distance; double v; initMicon(); clearScreen(); while(1){ v=getVoltage(avNum); gotoxy(0,0); printVoltage(v); distance=calcDistance(v); gotoxy(0,1); printf("distance:%4d cm",distance); } } この部分はリスト4.2.1と同じ 1000回A/D変換をして電圧の 平均値をLCDに表示する 距離センサの 出力電圧

(18)

これらの電圧の組み合わせで モータを制御する

モータ実験基板

IN1 モータ制御用信号1 IN2 モータ制御用信号2 5V モータ,モータコント ロールIC ,ロータリー エンコーダ用の電源 GND モータ実験基板 モータコントロールIC (モータドライバ) ●モータの回転を制御する. ●モータを駆動するための ロータリーエンコーダ (回転角度センサ) ●モータの回転角度を 検出する. モータ

(19)

モータ実験基板の接続

IN1:CN3–15 IN2:CN3–16 5V:5V GND:GND モータ実験基板 正転 (CW) 逆転 (CCW)

(20)

高速正転

モータの制御

(1)

-リスト

4.2.3(08motor1.c)-

void main(void) { initMicon2(); while(1){ /*Motor0 高速正転と停止*/ gotoxy(0,0); printf("Motor0: 100"); drive(0,100); waitms(1000); gotoxy(0,0); printf("Motor0: 0"); drive(0,0); waitms(1000); } 高速正転したまま待つ 停止 停止したまま待つ

(21)

モータ制御関数

drive(モータ実験基板の番号,

モータの出力

);

−100~100の範囲の整数で指定  符号:回転の向き    正の値:正転    負の値:逆転  絶対値:回転の速度      (0は停止) 制御するモータ実験基板の番号 0:IN1とIN2をCN3–15とCN3–16に接続 1:IN1とIN2をCN3–17とCN3–18に接続 正転(CW) 逆転(CCW)

回転の向きの定義

(22)

ディップスイッチによるモータの制御

-リスト

4.2.5(10motor3.c)-

void main(void) { int dip; initMicon2(); while(1){ dip=getDipSw(); drive(0,dip); gotoxy(0,0); printf("dip=%3d",dip); } } ディップスイッチの状態を 記憶するための変数の宣言 ディップスイッチの 状態を読み取り dipには0~255の整数 値が代入される dipの値に応じて回転 この場合正転または停止

(23)

if文

2つの場合に分けて処理を行なう

if~else-

if~elseのひな形

if(

条件式

) {

条件が満たされた場合の処理

} else {

条件が満たされない場合の処理

}

条件が満たされ ない場合は何も しない 条件の判断 条件が満たされ 条件が満たされた 場合の処理

(24)

3つ以上の場合に分けて処理を行なう

if~else if~else-

if~else if~elseのひな形

if(

条件式1

) {

条件式1が満たされた場合の処理

} else if( 条件式2 ) {

条件式1が満たされず,

条件式2が見たされた場合の処理

} else if( 条件式3 ) {

条件式1,2が満たされず,

条件式3が見たされた場合の処理

}

} else {

上記の条件がすべて

満たされない場合の処理

}

if~else if文

(25)

課題

4.5のプログラム例1

ヒント(1) ヒント(2) ヒント(4) void main(void) { int dip; プッシュスイッチの状態を記憶するための変数を宣言 initMicon2(); while(1){ プッシュスイッチの状態を読み込み dip=getDipSw(); if( S0のみが押された ) { モータ0をdipで指定された速度で正転 } else if( S2のみが押された ) { モータ0をdipで指定された速度で逆転 } else { モータ0停止 } gotoxy(0,0); printf("dip=%3d",dip); } } ヒント(3) ヒント(4) ヒント(5) ヒント(5) ヒント(5)

(26)

課題

4.5のプログラム例2

void main(void) { int dip,speed;  プッシュスイッチの状態を記憶するための変数を宣言 initMicon2(); while(1){ プッシュスイッチの状態を読み込み dip=getDipSw(); if( S0のみが押された ) { dipで指定された速度で正転するよう speedの値を設定 } else if( S2のみが押された ) { dipで指定された速度で逆転するよう speedの値を設定 } else { 停止するようspeedの値を設定 } モータ0をspeedの値に応じて回転させる gotoxy(0,0); printf("dip=%3d speed=%3d",dip,speed);

(27)

課題

4.6

表のようにまとめる

スイッチを押す前のモータの状態 正 転 逆 転 停 止 S0 S1

●スイッチを押してから離したとき,モータの動作はどのように

変わるか.

●スイッチを押す前と比較する.

スイッチを押し続けたとき スイッチを押してから離したとき S2 S3

●表のようにスイッチを操作したとき,モータの動作はどう

なるか.

●あらかじめモータを回転させておく.

powerが・・・ という解答は 不可 変数の値の変化 を問うているの ではない

(28)

モータ基板1 距離センサ GND:GND

2個のモータ実験基板と距離センサの接続

ーリスト

4.2.7(12distanceMotor.c)ー

モータ基板0 IN1:CN3–15 モータ基板0 IN2:CN3–16 モータ基板0 5V:5V モータ基板0 GND:GND モータ実験基板0 モータ基板1 IN1:CN3–17 モータ基板1 5V:5V モータ基板1 モータ実験基板1 距離センサ 5V:5V 距離センサ VoCN2–12 距離センサ

参照

関連したドキュメント

前章 / 節からの流れで、計算可能な関数のもつ性質を抽象的に捉えることから始めよう。話を 単純にするために、以下では次のような型のプログラム を考える。 は部分関数 (

テューリングは、数学者が紙と鉛筆を用いて計算を行う過程を極限まで抽象化することに よりテューリング機械の定義に到達した。

チューリング機械の原論文 [14]

累積誤差の無い上限と 下限を設ける あいまいな変化点を除 外し、要求される平面 部分で管理を行う 出来形計測の評価範

(注)本報告書に掲載している数値は端数を四捨五入しているため、表中の数値の合計が表に示されている合計

システムであって、当該管理監督のための資源配分がなされ、適切に運用されるものをいう。ただ し、第 82 条において読み替えて準用する第 2 章から第

、肩 かた 深 ふかさ を掛け合わせて、ある定数で 割り、積石数を算出する近似計算法が 使われるようになりました。この定数は船

現状では、3次元CAD等を利用して機器配置設計・配 管設計を行い、床面のコンクリート打設時期までにファ