図1.1 ライントレーサ |
図2.1 ライントレーサの構想 |
図2.2 ライントレーサ製作例 |
図4.1 光センサCDSと照明用LED | 図4.2 照明用LED |
図4.3 光センサ |
ADコンバータとは,入力電圧をコンピュータの扱える数値に変換する素子であり,これから使用するH8/3664には内蔵されている。0Vから5Vまでの入力が,0から65535までの数値(設定によっては0から255の数値)に変換される。
と
ころが,CDSの見かけの抵抗値は使用状況によって変化するので,増幅率可変の電圧増幅を行なうようにしておくと,後の調整が楽になる。そこで,オペアン
プを用いた電圧増幅を5倍程度行なうことにする。また中央点は5Vの半分の2.5Vとし,図4.4に示す回路とする。Rbを調節すると増幅率が変化する。
図4.4 中央点2.5Vで可変増幅率の反転増幅器 |
図4.5 見かけ上の入力抵抗が大きく,増幅率1倍のボルテイジフォロア回路 |
参考 オペアンプを用いた反転増幅器は,図4.6のように2つの抵抗を持っている。この回路の増幅率は-Rb/Raであり,±が反転している。
図4.4の反転増幅器も増幅率は-Rb/Raであるが,
中央電圧が0Vでなく電圧Vrefを中心として電圧増幅が行なわれる。
入力電圧をVin,出力電圧をVoutとすると図4.6,図4.4ではそれぞれ次のようになる。
→さらに詳しい反転増幅器の解説
Vout-Vref=-Rb/Ra・(Vin-Vref) |
Vout=-Rb/Ra・Vin |
図4.4 中央点2.5Vで可変増幅率の反転増幅器 | 図4.6 基本的な反転増幅器 |
図4.7 光センサの完成 |
図4.8 オペアンプの例LM660 |
光センサ回路の出力の測定
ブレッドボードで適当な抵抗値を用いて以下の測定を行いなさい。
設定のポイント
(1)図4.7においてV1が2.5Vを中心として等幅に振れるようにR0を設定する。
(2)図4.7において,V2=V1となり,V3が2.5Vを中心に0.5V~4.5V程度に振れるようにRa,Rbを設定する。
設定抵抗値
R0=( , kΩVR)
Ra=( kΩ)
Rb=( , kΩVR)
黒地 (V1= V,V2= V,V3= V)
白地 (V1= V,V2= V,V3= V)
研
究 CDS光センサは使いやすいが,光の強さに対する応答が遅いとされている。フォトトランジスタは応答が速いといわれている。図4.9のように使うと,
何らかの出力があるはずである。敏感なライントレースを実現するためにはフォトトランジスタの方が良いらしい。トライしたい学生は申し出ること。
図4.9 フォトトランジスタの利用 | 図4.10 フォトトランジスタTPS603A |
電圧で制御されるスイッチと考えればよい ソースに対してゲート電圧が約3V以上になるとON,0VではOFFになる 図4.11 MOSFETの動作 |
ゲイトに5Vを加え,MOSFETをON ゲイトに0Vを加え,MOSFETをOFF 図4.12 MOSFETはゲイト電圧制御のスイッチだ |
図4.13 MOSFETを用いたモータ駆動部 |
H8/3664fCPUカードがマザーボードに載っている これは,実装の一例であり,今回製作するものではない 図5.1 マイクロコンピュータH8/3664F |
(ピンの向きを間違えない,ジャンパをなくさない) 図6.1 H8/3664F表側 |
図6.2 H8/3664F裏側 |
図6.3 H8/3664FのジャンパJP1カット |
図6.4 H8/3664Fのマザーボード製作 |
図6.5 DSUB9の取り付けの工夫 |
図6.6 電源部とパイロットLED | 図6.7 RS232C通信用DSUB9コネクタ部と動作チェック用LED |
5V用:ピン径2.1mm(中心が+5V,周りがGND) 3V用:ピン径2.5mm(中心が+3V,周りがGND) 図6.8 電源ジャック |
図6.9 製作例途中(現段階はここまで) |
リスト1 LEDを0.5秒ごとに点滅させるプログラム |
/*LED点灯プログラム*/ #include "H8_3664.h" void msecwait(int msec) /*mesc間なにもしない時間稼ぎ関数*/ { int i,j; for (i=0;i<msec;i++) { for (j=0;j<1588;j++); /*1588は実測によって求めた値*/ } } main() { initLed(); /*LEDの初期化*/ while (1) { turnOnLed(0); /*LED0の点灯*/ turnOffLed(1); /*LED1の消灯*/ msecwait(500); turnOnLed(1); /*LED1の点灯*/ turnOffLed(0); /*LED0の消灯*/ msecwait(500); } } |
パソコン側 |
マイコンH8側 | |
(1) |
もしハイパーターミナルなどCOMポートを使用しているソフトがパソコン上で動作している時はそれらのソフトを中止します。 |
注意:H8は,電源スイッチONの瞬間に,状態選択スイッチの状態を検査しますので,必ず<1><2><3>の手順が必要です <1>AKI-H8/3664f用の5Vの電源スイッチをOFFにします。 <2>AKI-H8/3664fカード上の状態選択ショートバー(2個)をショートし,ライト(Write)モードにします。ライトモードとはマイコンH8/3664fがパソコンからプログラムコードを受け取り,フラッシュメモリに書き込むモードのことです。 ←図6.2の2つのジャンパ <3>AKI-H8/3664f用の5Vの電源スイッチをONにします。 |
(2) |
ソースファイル(ledtest.c)のアイコンを「h8_3664.cmdへの ショートカット」のアイコン上にドラッグアンドドロップします。「コンパイル」~「リンク」~「コンバート」が行なわれた後に,H8のフラッシュメモリ へ,実行プログラムの書き込みが行なわれます。 | |
(3) |
<1>転送が終了したら、AKI-H8/3664f用の5Vの電源スイッチをOFFにします。 <2>AKI-H8/3664fカード上の状態選択ショートバー(2個)をオープンし,ラン(Run)モードにします。 ←図6.2の2つのジャンパ | |
(4) |
必要ならパソコン側で「to_H8.ht」をダブルクリックしてターミナルアプリケーション「ハイパーターミナル」を立ち上げます。 | |
(5) | AKI-H8/3664f用の5Vの電源スイッチをONにします。 |
リスト2 シリアル通信でホストと交信するプログラム |
/*シリアル通信でホストと交信する*/ #include "H8_3664.h" main() { int ch; initSCI(); /*シリアル通信インタフェイスの初期化 38400baud, Async, 8bit , NoParity, stop1*/ SCI_printf("****** SCI test ******\n"); SCI_printf("Hit any character key\n"); while (1) { ch=getCharSCI(); /*1文字取得*/ putCharSCI(ch+1); /*1文字送信*/ SCI_printf(" test %d %d %x\n",1234,9876,ch); SCI_printf(" %c %s %lx\n",'#',"hello",0x80804040L); SCI_printf(" %s %c %lx\n","hello",'#',0x80804040L); } } |
リスト3 タイマ割り込みを用いて,LEDの点滅を行なうプログラム |
/*タイマー割り込みを起動し,LEDの点滅制御を行なう*/ #include "H8_3664.h" volatile int cnt=0; main() { initLed();/*LEDの初期化*/ initTimerAInt(2); /*タイマAによる約30Hz割り込み*/ E_INT(); /*CPU 割り込み動作許可*/ startTimerAInt(); /*タイマA起動*/ while (1) { if (cnt<15) { turnOnLed(0); turnOffLed(1); } else { turnOnLed(1); turnOffLed(0); } } } /*割り込み関数 関数名は変更してはならない*/ void interrupt_cfunc(void) { cnt++; if (cnt==30) cnt=0; } |
図7.1 光センサ回路 |
図7.2 車体裏側(左側が前) |
図7.3 光センサー部(遮光覆いがついている) |
図7.4 照明LEDとセンサの移動面よりの高さ |
図7.4-2 照明LEDとセンサの取り付け (1)CDSの足には配線の被覆を履かせて,足同士がショートしないように工夫してある。 |
図7.4-3 照明LEDとセンサの取り付け |
(2)モータドライバ回路
モータドライバへの入力をCPUのPWM出力へ接続する。図7.5を参照のこと。
パワーMOSFETのゲイト入力に対しては電流が流れ込まないため,CPUの出力ピンを直接つなぐことができる。
なおCN2の11,12の位置に,オシロスコープの針で触れやすいように,表側にピンを引き出しておくと良い。
使用したパワーMOS
FETの型番とソース,ゲイト,ドレインがどの足に対応するのか調べなさい。
FET型番
( )
FETを前から見て
左側から( ),( ),( ) (ソース,ゲイト,ドレインの文字を埋めなさい)
使用したダイオードの型番を調べなさい。
( )
図7.5 モータドライバ回路 |
(3)シャーシとモータの取り付け
シャーシにモータ,制御回路を組み込み,ライントレーサを完成させなさい。
注意 出来た回路に電源を入れる前に電源のDCジャックから見て,5VラインとGNDがショートしていないかテスタで検査しなさい。3VラインとGNDも同様に検査し,ショートの有無を確かめなさい。3Vラインと5Vライン間も同様にショートの有無を確かめなさい。
図7.6 製作例(今回はここを追加) |
図7.7 部品配置例 |
調節結果の報告調整の方法(CDSの場合)
(1) 調整したい方のセンサを黒ラインと白地に交互に置き,光センサ出力(オペアンプ初段への入力,図7.1のオペアンプ5番ピン10番ピン)が2.5Vを中心に振れるようにRcを調整する。(2.0Vから3.0Vとか1.8Vから3.2Vのようにする)
(2) 調整したい方のセンサを黒ラインと白地に交互に置き,光センサ増幅回路の出力(ADコンバータへの入力位置,図7.1のオペアンプ1番ピン14番ピン)が2.5Vを中心に振れ,最大で4.5V,最小で0.5V程度になるようにRbを調整する。
センサ位置 |
実測値 |
実測値 |
CDSの場合の理想値 | フォトトランジスタの場合の理想値 |
右センサ 黒ラインの上 |
( )V | ( )V | 0~1V | 4~5V |
右センサ 白地の上 |
( )V | ( )V | 4~5V | 0~1V |
左センサ 黒ラインの上 |
( )V | ( )V | 0~1V | 4~5V |
左センサ 白地の上 |
( )V | ( )V | 4~5V | 0~1V |
リスト4 ADコンバータテストプログラム |
/*シングルモードでADコンバータから信号を得る*/ /*シングルモードでは初期化は不要*/ #include "H8_3664.h" void msecwait(int msec) /*mesc間なにもしない時間稼ぎ関数*/ { int i,j; for (i=0;i<msec;i++) { for (j=0;j<1588;j++); /*1588は実測によって求めた値*/ } } main() { unsigned int v0,v1; int i; initSCI(); putStringSCI("ADC single mode\n"); while (1) { v0=getADCValue(0); /*ADCch0から入力*/ v1=getADCValue(1); /*ADCch1から入力*/ SCI_printf("ch0,1 ="); SCI_printf(" %4u",v0); SCI_printf(" %4u",v1); SCI_printf("\n"); msecwait(1000); /*1秒間おやすみ*/ } } |
右側センサ位置 | ADCチャンネル( ) | ADCへの入力電圧 |
黒ライン | 変換値( ) | ( )V |
白地 | 変換値( ) | ( )V |
中間 | 変換値( ) | ( )V |
左側センサ位置 | ADCチャンネル( ) | |
黒ライン | 変換値( ) | ( )V |
白地 | 変換値( ) | ( )V |
中間 | 変換値( ) | ( )V |
リスト5 PWMテストプログラム |
/*「TimerW」を用いた2系統PWM出力*/ #include "H8_3664.h" void msecwait(int msec) /*mesc間なにもしない時間稼ぎ関数*/ { int i,j; for (i=0;i<msec;i++) { for (j=0;j<1588;j++); /*1588は実測によって求めた値*/ } } main() { initSCI(); initTimerWPWM(1000); /*TimerWの2系統PWM出力の初期化*/ /*約2kHzの周期のPWM信号が発生される16MHz/8÷1000*/ while (1) { setPWMValueB(1000); /*B系統に1000/1000*/ setPWMValueC(1000); /*C系統に1000/1000*/ putStringSCI("PWM 1000/1000\n"); msecwait(3000); setPWMValueB(1000); /*B系統に1000/1000*/ setPWMValueC(0); /*C系統に0/1000*/ putStringSCI("PWM 1000,0/1000\n"); msecwait(3000); setPWMValueB(0); /*B系統に0/1000*/ setPWMValueC(1000); /*C系統に1000/1000*/ putStringSCI("PWM 0,1000/1000\n"); msecwait(3000); setPWMValueB(700); /*B系統に700/1000*/ setPWMValueC(700); /*C系統に700/1000*/ putStringSCI("PWM 700/1000\n"); msecwait(3000); setPWMValueB(400); /*B系統に400/1000*/ setPWMValueC(400); /*C系統に400/1000*/ putStringSCI("PWM 400/1000\n"); msecwait(3000); } } |
リスト6 シンプルなアウトライン |
#include "H8_3664.h" main() { int adc0=0; /*ADC0 左側センサの値*/ int adc1=0; /*ADC1 右側センサの値*/ int pwmB=0; /*PWMB 右側モータへの指令値*/ int pwmC=0; /*PWMC 左側モータへの指令値*/ initTimerWPWM(1000); /*TimerWの2系統PWM出力の初期化*/ /*約16kHzの周期のPWM信号が発生される16MHz÷1000*/ while (1) { adc0=getADCValue(0); adc1=getADCValue(1); /*--------------------------------------*/ /*ここで2つのモータへの出力値を計算する*/ /* adc0,adc1 → pwmB,pwmC */ /*--------------------------------------*/ setPWMValueB(pwmB); setPWMValueC(pwmC); } } |
リスト7 光センサ出力値の時間変化率をも考慮したアウトライン |
#include "H8_3664.h" main() { int adc0=0; /*ADC0 左側センサの値*/ int adc1=0; /*ADC1 右側センサの値*/ int pwmB=0; /*PWMB 右側モータへの指令値*/ int pwmC=0; /*PWMC 左側モータへの指令値*/ initTimerWPWM(1000); /*TimerWの2系統PWM出力の初期化*/ /*約16kHzの周期のPWM信号が発生される16MHz÷1000*/ while (1) { adc0=getADCValue(0); adc1=getADCValue(1); /*--------------------------------------*/ /*ここで2つのモータへの出力値を計算する*/ /* adc0,adc1 → pwmB,pwmC */ /*--------------------------------------*/ setPWMValueB(pwmB); setPWMValueC(pwmC); } } |
10.レポートとタイムアタック競技,プレゼンテーション
(1)各自ライントレーサ製作に関するレポートを提出すること。ただし,レポート採点者はこの指導書の存在は知らない立場で採点する。自分がどの部分に貢献したのかを含めること。レポートはMicrosoftWordを用いて作成し,指示する方法で電子提出すること
(2)タイムアタック競技を行なう。
(3)レポートをもとにプレゼンテーションを行なう。
11.資料
(1)LED L-513LE1T
赤色5φ超高輝度LED
波長625nm、輝度1200mcd(IF=20mA)、指向角15°
アノード(+)からカソード(-)へ電流を流す
足の長い方がアノード(+)
切欠きのある方がカソード(-)
(2)フォトトランジスタ TPS603A
TPS603A
(3)オペレーショナルアンプ LMC660
LMC660
(4)パワーMOSFET 2SK2956
2SK2956
(5)パワーMOSFET 2SK2231
2SK2231
(6)ショットキーダイオード 1S10
モータのノイズ減少のためモータ駆動部につける
1S10
ショットキーダイオードの特徴は,高速,高周波の信号を整流することができること,順方向電圧降下が小さい(0.2V~0.3V,一般のダイオードでは0.6V程度)ことである。
(7)プログラムサンプル
H8/3664のプログラムサンプル
ヘッダファイルH8_3664.h
ヘッダファイル3664F.H
(8)H8/3664の使い方
ここで解説しているマザーボードはCPUカードへの電源供給が7~12Vになっているところが異なる
H8/3664
(9)H8/3664のハードウェアマニュアル
j602223_h83664.pdf
(10)アルミシャーシスピードタイプ
山崎教育システム
(11)実装図テンプレート
実装図テンプレート(PPTファイル)