ライントレーサの作製

4 年情報工学実験Ⅲ
ライントレーサの作製
2003年11月 初 版 小坂 2006年 4月 第2版 西村
2006年 5月 第3版 西村 2007年 4月 第4版 西村
2008年 4月 第5版 西村 2009年 4月 第6版 西村(2009年5月修正)
2010年 7月 第7版 西村 2011年 4月 第8版 西村
2012年 5月 第9版 西村 2013年 4月 第10版 西村
2014年 4月 第11版 西村 2015年4月 第12版 西村
1.ライントレーサ
1.1 概 要
ライントレーサとは,図1のように,平面上に
引かれた線の上を自動追尾して移動する車輪駆動
ロボットである.本実験では,2個のモータを左
右に持ち,その回転数によって進行方向を制御す
る車輪駆動ロボットを作製する.
1.2 実現のための方法
1.1で述べたライントレーサを実現するためには,
図 1 走行中のライントレーサ
以下の機能を実現しなければならない.
(1) 線に対するライントレーサの位置の検出
線に沿って走行させるためには,ライントレーサの現在位置を知る必要がある.
(2) モータの回転数の制御
本実験で作製するライントレーサはステアリングの機能を持たない.そのため,進行方向を左
や右に曲げるためには,左右の車輪の回転数を変化させて実現する必要がある.また,平面上の
線の曲率によって走行速度を変化させることにより,確実かつ素早い動作を実現できそうである.
(1)の機能を実装するためにはセンサが必要である.また,ライントレーサが線上から外れかかって
いる場合の方向を検出するため,2個のセンサが必要となる.
センサは,その直下が黒線の場合と白色面の場合で異なる反応を示さなければならない.色の違い
は光の反射率の違いであるから,何らかの光を照射したときの反射光の強さによって,反応の異なる
素子である光センサを用いればよい.
(2)の機能を実現するためには,モータに加える電圧を左右独立に変化させる必要がある.モータの
回転数は印加電圧によって制御できるが,直流電圧を変化させるのは容易ではない.そこで,マイコ
ンを用いたPWM制御を行うこととする.
図2に作製するライントレーサの概念図を示す.
–1/38–
4 年情報工学実験Ⅲ ライントレーサの作製
車輪
モータ
進行方向
光センサ
黒い線
光センサ
図 2 ライントレーサの概念図
1.3 モータの PWM 制御
モータに電源電圧E の50%の直流電圧を加えることを考える.これを実現するためには,以下の2通
りの方法が考えられる.
(1) 電源電圧からE/2の直流電圧を生成する.
(2) 電圧E をある時間加え,引き続き0 Vの電圧を同じ時間加える動作を周期的に繰り返す.
(2)は厳密な意味の直流ではないが,平均値としてE/2の直流を生成する方法である.ここでEと0 Vを
加える時間が十分に長ければ,その都度モータは回転と停止を繰り返すが,モータには慣性があるの
で,その間隔を短くすれば,E/2の直流電圧を加えたかのような一定の回転をする.
モータに加える電圧を短い周期の周期的なパルス信号とし,更にそのパルス信号のデューティ比を
変化させれば,モータの回転数を制御することができる.このように,生成したい電圧に比例した
デューティ比を持つパルス信号を生成し,それを用いて電圧を変化させることと同様な制御をする方
法を PWM 制御という.PWM とは,Pulse Width Modulation(パルス幅変調)の頭文字を取ったもので
ある.
1.4 マイクロコンピュータの利用
本実験では,センサ の出力に応じたPWM信号を生成する手段として,マイクロコンピュータ
H8/3664Fを用いることとする.H8/3664Fは,A/D変換器とPWM信号を生成するタイマ機能を持つ.す
なわち,線を検出する回路によって出力された電圧をA/D変換器を通じてマイコンで読み取り,それに
応じたPWM信号を生成して,モータを回転させることができる.
–2/38–
4 年情報工学実験Ⅲ ライントレーサの作製
2.全体の構成
2.1 全体像
本実験で作製するライントレーサの例および主な構成要素の名称を図 3 に示す.
RS-232C
コネクタ
H8/3664F マイコン
圧着コネクタ
主基板
モータドライバ
電池ボックス
電源基板
ボールキャスタ
センサ基板取り付け位置
ギヤボックス
図 3 作製するライントレーサの例と各要素の名称
2.2 構成要素
本実験で作製するライントレーサは,表1に示す構成要素からなる.
表 1 作製するライントレーサの構成要素
構成要素
概 要
モータおよびギヤボックスに接続された車輪 1 組と動力を持たない
シャーシ
キャスタ 1 個が 1 枚のプラスチック板に取り付けられる.モータの最大
定格電圧は 3 V であり,モータドライバによって駆動される.
マイコンおよびその入出力端子に接続される回路のほか,電源ス
主基板
イ ッ チ , DC ジ ャ ッ ク , RS–232C コ ネ ク タ な ど が 実 装 さ れ る . DC
ジャックまたは電源基板から直流 5 V の供給を受け,これを電源電圧と
してマイコンおよび周辺回路を動作させる.
電源基板
センサ基板
電池ボックス
電池より直流電圧の供給を受け,マイコンと周辺回路を動作させる
ための直流 5 V を生成する回路が実装される.
光センサが 2 チャネル分実装される.電源は主基板より供給される.
単 4 形電池 6 本を搭載し,電源基板に直流電圧を供給する.
各要素間で電源または信号を授受する導線は,圧着コネクタを介して接続する.図 4に各要素の接続
の関係を示す.
–3/38–
4 年情報工学実験Ⅲ ライントレーサの作製
圧着コネクタは頻繁ではないが着脱の必要がある接続をする場合に用いられ,基板や導線の間を圧
着端子を用いて接続するものである.基板と導線を接続する圧着コネクタの一例を図 5に示す.図5(a)
に示すベースが基板にはんだ付けされ,同図(b)のハウジングには,先端に端子を圧着した導線が取り
付けられる.ベースとハウジングを組み合わせることにより,基板と導線(またはそれが接続された
基板)が接続されることになる.
右モータ
ベース
電池
ボックス
電源
基板
主基板
センサ
基板
ハウジング
導線
左モータ
図 4 各要素の接続
(b) ハウジング
(a) ベース
図 5 圧着コネクタの一例(日本圧着端子製造 XA シリーズカタログより)
2.3 走行面
走行面は,白色面に黒色で線が描かれたものであり,線の幅は25 mmである.
–4/38–
4 年情報工学実験Ⅲ ライントレーサの作製
3.センサ基板の仮作製とシャーシの組み立て
センサ基板には,あらかじめ作製されたものを用いる.図 6 にセンサ基板の裏面(はんだ付け面)
から見たパターンを,図 7 に表面(部品実装面)から見たパターンを示す.この基板は片面の銅張積
層板を加工したものであり,フォトリフレクタを 25 mm の間隔で 2 個,LED 用の保護抵抗を 2 個実装
するように設計されている.電源,GND,センサ出力は主基板と導線を介して接続される.通常はす
べての部品を表面に実装するが,本実験においてはフォトリフレクタを裏面に,その他の部品と導線
を表面に実装する.
図 6 裏面から見たセンサ基板のパターン
図 7 表面から見たセンサ基板のパターン
実験 1 センサ基板の仮作製
フォトリフレクタ1個をセンサ基板に仮に実装する.特性測定ができるよう,はんだ付け後の
フォトリスレクタのピンを切らず,表面に突き出したままにする.
実装上の注意
センサ基板の裏面には,パッド(端子や導線をはんだ付けする銅箔)や配線パターン
以外の回路として使用しない部分の間にも導通のある部分がある.そのため,素子や導
線をはんだ付けする際に,はんだがパッドやパターンからはみ出して周辺の部分と短絡
すると,思いもよらぬ端子同士が短絡することがある.
実験 2 シャーシの組み立てとセンサ基板の取り付け
主基板および電源基板の取り付け位置を考慮し,ギヤボックス,ボールキャスタ,仮作製し
たセンサ基板をプラスチック板に取り付ける.
プラスチック板等の構成要素間の固定にはねじとナットを用い,粘着テープは用いない.
–5/38–
4 年情報工学実験Ⅲ ライントレーサの作製
4.線検出回路の設計と特性測定
実験 3 線検出回路の設計と特性測定(1)
実験1で仮作製したセンサ基板を用いてさまざまな測定を行い,フォトリフレクタ TPR–105を
用いた線検出回路を設計する.
報告事項
(1) 動作条件
(2) 出力すべき電圧の範囲
その根拠
(3) センサ基板の取り付け条件
決定するために検討すべき事項,検討するための方法
(4) 回路図
(5) 素子値
設計に用いた資料,設計の過程,決定するために行うべき測定の方法と測定条件,測定
の結果
–6/38–
4 年情報工学実験Ⅲ ライントレーサの作製
5.電源回路
5.1 概 要
本実験で作製するライントレーサにおいて,モータの駆動用電源は直流 3 V,それ以外の部分の電源
は直流 5 V とし,最終的には電池で供給する.しかし,電池だけでは必要とする電圧が得られるとは限
らない.このためには,どのような回路を使用すべきであろうか.
モータであれ,マイコンであれ,回路を動作させるためには,電源から回路に対して電流(負荷電
流)を流す必要がある.直流安定化電源を用いて供給する場合には,最大負荷電流以外に大きな問題
はないが,電池を用いて供給する場合には,これ以外に,負荷電流の大きさによって出力電圧が変動
することにも注意しなければならない.
出力電圧が変動した場合,回路は設計とは異なる動作をし,マイコンは誤動作を起こすおそれがあ
る.本実験の場合はモータを駆動するため,負荷電流の変動がとくに大きくなる.直流安定化電源で
は,負荷電流が変動しても出力電圧が変動しないような回路構成となっているが,電池を用いる場合
には,安定した出力電圧を得るための回路を加える必要がある.
5.2 三端子レギュレータ
電圧が変動する電源から安定した電圧を得るための方法の一つとして,三端子レギュレータの使用
が挙げられる.三端子レギュレータは,基本的に入力,出力,GNDの3本の端子からなるICであり,外
付け素子をいくつか接続することによって,安定した出力電圧を簡単に得ることができる.三端子レ
ギュレータには,よく使われる固定の電圧を出力するものや,出力電圧が可変のものがある.ただし
いずれの場合にも,入力端子には出力電圧より高い電圧を加える必要がある.
本実験では2系統の電源が必要であるが,モータに供給する電源については,後述するモータドライ
バの機能を利用して供給する.それ以外の部分の電源については,NJU7223F50を用いて供給する.
NJU7223F50は,入出力電圧差が0.4 V程度でも動作する,低飽和型の三端子レギュレータである.
5.3 三端子レギュレータ回路の特性測定
実験 4 5 V 生成回路の負荷特性の測定
図8において,Vi = 7.2 Vとする.負荷電流Io が50,100,200,300,400 mAとなるように負荷
に抵抗を接続したとき,それぞれ出力電圧Vo を測定する.
実験 5 5 V 生成回路の入出力特性の測定
図8において,出力電圧Vo が5 Vのときに負荷電流Io が200 mAとなるよう,負荷に抵抗を接続
する.Vi を4.0,5.0,5.5,8.0 Vにしたとき,それぞれ出力電圧Vo を測定する.
–7/38–
A
B
4 年情報工学実験Ⅲ
ライントレーサの作製
VIN
GND
1
Io
VOUT
NJU7223F50
Vi
負
0.1 mF
0.1 mF
Vo
荷
図 8 NJU7223F50 測定回路
2
A
B
–8/38–
4 年情報工学実験Ⅲ ライントレーサの作製
6.モータドライバ
モータドライバは,制御信号によって,モータに正転,逆転,停止などの動作をさせる回路である.
回路の例を図 9 に示す.
A
Q1
D1
B
D3
I CW
Q3
VS
M
1
Q2
D2
I CCW
D4
Q4
図 9 モータドライバ回路
図 9 の回路において,トランジスタ Q1 および Q4 を ON とし,Q2 および Q3 を OFF とすれば,回路に
は電流 Icw が流れ,モータは正転する.逆に,Q2 および Q3 を ON とし,Q1 および Q4 を OFF とすれば,
回路には電流 Iccw が流れ,モータは逆転する.
すべてのトランジスタを OFF とした場合,モータは電源 VS から切り離され,回転時とは逆方向の電
流がダイオードを通じて電源に流れた後,モータは停止する.
本実験ではモータドライバに TA7291P を用いる.TA7291P はモータに正転,逆転,停止,ブレーキ
2
の動作をさせることができる.また,制御電源によって,モータに対する出力電圧を制御することが
できる.
実験 6 モータドライバ回路の設計
TA7291Pを用いて,以下の仕様でモータを制御する回路を設計し,回路図を作成する.
● ロジック側電源VCC は5.0 Vとする.
A
● 出力側電源VS は7.2 Vとする.
B
● 制御電源Vref は3.7 Vとし,ロジック側電源から抵抗を用いた回路によって生成する.
実験 7 モータドライバの負荷特性の測定
実験6で設計した回路において,入力端子IN1にデューティ比可変,最大値Vm = 5.0 V,周波数
f = 1 kHzの方形波を加える.入力端子IN2はGNDに接続し,モータのPWM制御を行えるように
する.
IN1に加える方形波のデューティ比を80 %,60 %,40 %,20 %としたとき,それぞれ出力電
圧Vo および出力電流Io を測定する.また,IN1に直流5.0 Vを加えたときについても同様に測定す
る.
実験 8 モータドライバの入出力特性の測定
実験7の回路において,IN1に加える方形波のデューティ比を80 %とする.このとき,出力側
電源電圧VS を3.0,4.0,5.0,6.0 Vとし,それぞれ出力電圧Vo および出力電流Io を測定する.
–9/38–
4 年情報工学実験Ⅲ ライントレーサの作製
7.実装前の準備
A
7.1 周辺回路の設計
これまでに触れた線検出回路(センサ基板時実装される
1
部品を除く),モータ駆動回路のほかに,主基板には以下
の回路を実装する.
TXD
2
RXD
3
(RS-232Cレベル)
(1) 電源スイッチおよびパイロットランプ回路
(2) マイコン動作確認用LED点灯回路
1
(RS-232Cレベル)
(3) 通信部回路
6
7
8
4
9
5
RS-232C
コネクタ
これらのうち,(3)の通信部回路を図10に示す.ここで,
RXD(RS–232Cレベル),TXD(RS–232Cレベル)は,本
図 10 通信部回路
実験で使用するH8/3664Fマイコン基板の端子記号である.
実験 9 電源スイッチおよびパイロットランプ回路の設計
電源スイッチおよびパイロットランプ回路を以下の仕様で設計し,回路図および後述する各電源
供給モードにおけるジャンパの接続図を作成する.
● DCジャックには図11に示すものを用いる.同図(a)において,端子1が中心の電極を,端子2
が外周の電極を表す.端子3は,DCプラグが接続されていない状態では端子2と短絡してい
るが,接続された状態では切り離される.
2
● 本実験においてDCジャックに接続するACアダプタのDCプラグは,中心の電極を+極(5
V),外周の電極を−極(GND)とする.
● 電源スイッチは主基板上の5 V共通パターンに供給される電源のON/OFFを行う.
● 電源スイッチには単極双投(1回路2接点,SPDT)のトグルスイッチを用いる.
● パイロットランプにはLEDを用い,電源スイッチに連動して点灯または消灯させる.
● モータドライバの出力側電源共通パターンとそれ以外の部分に供給する電源を表2のように
A
切り替えられるようにする.二つのモードは,3個×2列で構成されるピンヘッダにジャンパ
を接続することで切り替える.
回路図は図12に示した各要素間を接続したものになる.また,ジャンパの接続図は図13のように
作成し,電源スイッチおよびパイロットランプ回路の回路図に加える.
表 2 電源供給モード
A
1
3
2
B
モード
2
1
(a) 回路図記号 (b) 外観
1
図 11 DC ジャック
3
A
B
電源の供給元
モータドライバの
出力側電源共通
パターン
C
5 V共通パターン
DC ジャック
電源基板(7.2 V)
電源基板(5 V)
(次頁に続く)
–10/38–
4 年情報工学実験Ⅲ ライントレーサの作製
A
電源基板との
接続に用いる
圧着コネクタ
7.2 V,5 V,GND
1
5V
GND
B
1
2
3
1
3
5
1
3
2
トグル
スイッチ
2
4
6
C
(前頁の続き)
モータドライバ
出力側電源
共通パターン
5 V 共通パターン
切り替え用
ピンヘッダ
DCジャック
GND共通パターン
図 12 設計する回路(これらの要素間を接続し,必要な回路を加える)
A
1
2
1
3
5
2
4 Mode A
6
1
3
5
2
4 Mode B
6
B
図 13 ジャンパの接続図の例
実験 10 動作確認用 LED 点灯回路の設計
マイコン動作確認用LED点灯回路を以下の仕様で設計し,回路図を作成する.
● トランジスタやFETなど,スイッチングのための半導体素子は用いない.
● 表9に示すI/Oポートの中から,前記の条件を満たしてLEDを点灯させることのできるも
A
B
C
のを二つ選ぶ.各ポートにつき,出力がHレベルのときに1個のLEDを点灯させる.
7.2 電源基板のパターン設計
2
電源基板については,まず,基板パターンを設計し,それに基づいて基板加工機で基板を作製する.
実験 11 電源基板のパターン設計
表3に示す仕様で電源基板のパターンを設計する.
A
–11/38–
B
4 年情報工学実験Ⅲ ライントレーサの作製
表 3 電源基板の仕様
● 電池ボックスから直流 7.2 V の供給を受ける.電池ボックスとの接続は,2 端子の圧着
コネクタ(ベース)を用いる.
● 出力は 7.2 V と 5 V の 2 系統とする.二つの系統の GND は共通とする.
● 出力は先端に 3 端子の圧着コネクタ(ハウジング)が取り付けられた導線を用いて引
き出し,主基板に供給する.
● 5 V の出力は図 8 の回路を利用して生成する.ただし,負荷の部分には圧着コネクタ
を介して主基板が接続される.
● シャーシなどに基板を固定するためのねじ穴を 2 個以上設ける.
● ジャンパ線は極力用いない.
7.3 部品配置図の作成
主基板には,あらかじめ作製された基板を用いる.図 14 に外形寸法および取り付け穴の位置を,図
15 および図 16 に表面および裏面から見たパターンを示す.この基板は,部品の配置をある程度考えて
作製されている.
実験 12 部品配置図の作成
主基板,電源基板およびセンサ基板のそれぞれについて,部品を配置した図を作成する.主
基板上の記号は,表 4 に示す部品を取り付けることを想定している.
40.0
50.0
72.1
11.0
図 17 に部品を配置した図の例を示す.
90.0
117.8
5.6
11.0
22.2
図 14 主基板の外形寸法および取り付け穴の位置(表面から見た図,単位:mm)
–12/38–
4 年情報工学実験Ⅲ ライントレーサの作製
図 15 表面から見た主基板のパターン
図 16 裏面から見た主基板のパターン
–13/38–
4 年情報工学実験Ⅲ ライントレーサの作製
表 4 基板上の記号と実装部品との対応
記 号
H8/3664
実 装 部 品
H8/3664F マイコン基板用コネクタ(メス)
OP
MD
TA7291P
PLED
パイロットランプ用 LED
LED
マイコン動作確認用 LED
VRs,VRf
半固定抵抗
Ri,Ro,RL,Rp,RM,Rr 抵抗
CM
コンデンサ
SW
5 V 電源用トグルスイッチ
DJ
DC ジャック(中心電極端子直径 2.1 mm)
Src
電源基板用圧着コネクタ(ベース)
Sns
センサ基板用圧着コネクタ(ベース)
M
モータ回路駆動回路用圧着コネクタ(ベース)
PH
電源切替用ピンヘッダ
COM
RS–232C コネクタ
図 17 部品の配置例
–14/38–
4 年情報工学実験Ⅲ ライントレーサの作製
7.4 部品番号の決定と部品表の作成
実験 13 部品表の作成
主基板,電源基板およびセンサ基板上に実装する部品について,部品番号を決定し,部品名,
型番および規格との対応づけがわかるような部品表を作成する.
部品番号決定上の注意
● 主基板とマイコン基板を接続するコネクタについては,マイコン基板上の標記との整
合をとるため,部品番号を CN1 および CN2 とする.
● 電源切替ジャンパについては,マイコン基板上の標記との整合をとるため,部品番号
を JP4 とする.
● 表 4 に示した主基板上の記号は,部品番号には用いない.
7.5 接続先端子番号のまとめ
実験 14 接続先端子番号のまとめ
表 5 は,マイコン基板に接続される回路について,マイコン基板の端子記号とコネクタおよ
び端子番号との対応をまとめたものである.以下の点に留意して表の空欄を埋め,表を完成さ
せる.
● 動作確認用LED点灯回路と接続されるマイコン基板の端子は,実験10で選択したものを
記入する.
● FTIOBおよびFTIOCはPWM信号の出力に用いる.これらをモータの回転方向が適切にな
るよう,モータドライバの一方の入力端子に接続する.もう一方の入力端子には,使用
可能なI/Oポートを割り当てる.
7.6 全体回路図の作成
実験 15 全体回路図の作成
基板上で構成することになるすべての回路,すべてのコネクタを含んだ回路図を作成する.
このとき,すべての部品に実験 13 で決定した部品番号を記入する.また,すべての部品のすべ
ての端子(端子数が多い場合は代表的な端子のみ)に,端子番号または端子記号を記入する.
–15/38–
4 年情報工学実験Ⅲ ライントレーサの作製
表 5 使用するマイコン基板の端子
接続される回路
マイコン基板の端子記号
電源
VCC
GND
VSS
コネクタおよび端子番号
RXD
(RS–232C レベル)
通信部回路
TXD
(RS–232C レベル)
動作確認用 LED 点灯回路(1)
動作確認用 LED 点灯回路(2)
線検出回路(左)
AN0
線検出回路(右)
AN1
FTIOB
モータドライバ(左)
FTIOC
モータドライバ(右)
7.7 実装図の作成
実験 16 実装図の作成
実験 12 で作成した部品配置図および実験 3 で作成したセンサ基板の実装図に実験 13 で決定
した部品番号を記入し,実装図を作成する.このとき,すべての部品のすべての端子(端子数
が多い場合は代表的な端子のみ)に,端子番号または端子記号を記入する.
この段階で,
● 実装図
● 部品表
● 全体回路図
が完成していることになる.これらを常に傍らに置きながら実装や回路のチェックをす
ることになる.
–16/38–
4 年情報工学実験Ⅲ ライントレーサの作製
8.基板の作製(1)
8.1 マイコン基板の作製
配布する H8/3664F マイコン基板に対して,次の加工を行う必要がある.
● ピンヘッダのはんだ付け
● ジャンパJP1の切断
図18および図19に加工を終了したマイコン基板を示す.加工上の注意点は次のとおりである.
● ピンヘッダは,CPUが実装されていない面に取り付ける.
● ピンヘッダは,長さの短い方をはんだ付けする.長い方は主基板に取り付けたコネクタに差し
込むことになる.
● ピンヘッダは,まず対角線の両端2点の端子のみはんだ付けし,基板から浮いていないか調べ
る.浮いていたらはんだ付け箇所を再加熱し,基板から浮かないよう修正する.そして,残り
の端子をはんだ付けする.はんだ付け箇所が2点程度であれば,まだ再加熱で修正可能である
が,多数の端子をはんだ付けした後では,全部の端子のはんだを除去しなければ修正できない.
● 付属のジャンパピンは,マイコンのブートモードと通常動作モードを切り替えるために用いる
ので,紛失しないようにする.
マイコン基板に用いられている基板は,部品をはんだ付けするパッドが両面にあり,
それらパッドの間にも導体がある,スルーホール基板である.一度はんだ付けすると,
はんだが穴の中にも流れ込み,除去が困難となるので,注意が必要である.
図 18 完成した H8/3664F マイコン基板の表面
図 19 完成した H8/3664F マイコン基板の裏面
図 20 にマイコン基板表面から見たコネクタおよびジャンパの位置を,図 21 に JP1 の切断の様子を示
す.
このパターン
を削り・・・
JP1
CN1
このようにする
JP2
CN2
JP3
図 20 マイコン基板表面上のジャンパの位置
実験 17 マイコン基板の作製
H8/3664F マイコン基板を作製する.
–17/38–
図 21 JP1 の切断
4 年情報工学実験Ⅲ ライントレーサの作製
8.2 主基板の作製(1)
ここでは,マイコンを動作させるために最低限必要となる部品を主基板に実装する.表 6 はそれら
を示したものである.
表 6 マイコンを動作させるために必要な部品
部品名
用途,備考
マイコン基板用コネクタ
LED
パイロットランプ
マイコン動作確認
抵抗
パイロットランプおよびマイコン動作確認
用 LED 点灯回路電流制限
トグルスイッチ
5 V 電源スイッチ
ピンヘッダ
電源切り替え
DC ジャック
5 V 電源供給用
(中心電極端子直径 2.1 mm)
RS–232C コネクタ
プログラムのダウンロード
データ送受信
実装上の注意
●
センサ基板と同様に,主基板裏面の回路として使用しない部分の間にも導通のある部
分がある.そのため,素子や導線をはんだ付けする際に,はんだがパッドやパターン
からはみ出して周辺の部分と短絡すると,思いもよらぬ端子同士が短絡することがあ
る.
●
主基板上のマイコン基板および回路の 5 V 電源端子は,5 V 共通パターンに接続する.
実験 9 で設計した回路の電源スイッチは,5 V 共通パターンへの電源の接続を ON/OFF
するために用いる.
●
主基板上の回路およびマイコン基板の GND 端子は,GND 共通パターンに接続する.
実験 18 主基板の実装(1)
表 6 に示した部品を主基板に実装する.
電源投入前の確認事項
電源を投入する前に,次のことについて確認する.
● 回路図の接続箇所がすべて導通しているか.
● 隣接する端子間が短絡していないか.
● 信号線の端子が GND または電源と短絡していないか.
● 電源と GND が短絡していないか.
–18/38–
4 年情報工学実験Ⅲ ライントレーサの作製
9.マイクロコンピュータにおけるプログラミング
9.1 概 要
本実験では,制御用マイコンとして, H8/3664Fを用いる.通常のマイコンでは,ROMに機械語を書
き込んで利用するが,このマイコンでは,機械語プログラムをフラッシュメモリに書き込むため,
ROMが不要である.
H8/3664Fの持つ機能のうち,本実験では,以下のものを利用する.
(1) I/Oポート
(2) シリアルコミュニケーションインタフェース
(3) タイマを用いた割り込み
(4) A/D変換器
(5) タイマを用いたPWM出力
使用法はおよそ以下のとおりである.
(1) WindowsPC のエディタを用いて,C言語でプログラムを記述する.
(2) クロスCコンパイラ(Cプログラムを別のCPU上で実行する機械語プログラムに変換するコン
パイラのこと)でコンパイルする.
(3) H8/3664FCPUへシリアル通信で機械語プログラムを転送し,フラッシュメモリ( ROMに相当
する)に書き込む.
フラッシュメモリに書き込まれた機械語プログラムは,電源をOFFにしても消えない.
–19/38–
4 年情報工学実験Ⅲ ライントレーサの作製
9.2 コンパイル手順
H8/3664F マイコン用プログラムは,表 7 の手順でコンパイルおよび転送できる.本実験においては,
コンパイラに gcc を用いる.
表 7 コンパイル手順
PC 側の操作
0
マイコン側の操作
電源を AC アダプタで供給する場合,電
次のファイルを用意する.
● ltrc_build_gcc_COM1.cmd または
圧とプラグの極性に注意する.実験室には
ltrc_build_gcc_selectport.cmd
同じプラグを用いるものの,極性の異なる
● H8_3664F_LinkerScript.x
AC アダプタがある.
● H8_3664F_startup.s
● ソースファイル
1
COM ポートを使用しているアプリケー
H8/3664F マイコン基板は,電源スイッチ
ションが動作している場合は,それらを終
が ON になった瞬間に,JP2 および JP3 の状
了させる.
態を検査し,動作モードを決定するので,
以下の(1)~(3)の手順が必要である.
(1) 5 V電源スイッチをOFFにする.
(2) マイコン基板上のJP2およびJP3をジャ
ンパによって短絡し,ブートモードに
する(図22).ブートモードとは,
H8/3664FがPCからプログラムコードを
受け取り,フラッシュメモリに書き込
むモードのことである.
図 22 2 個のジャンパ
(ブートモード,横から見た図)
(3) 5 V電源スイッチをONにする.
2
ソースファイルのアイコンを
「ltrc_build_gcc.cmd」のアイコン上にド
ラッグアンドドロップする.
コンパイル,リンク,変換が行われた後
に,H8/3664Fのフラッシュメモリへ,実行
プログラムが書き込まれる.
(次頁に続く)
–20/38–
4 年情報工学実験Ⅲ ライントレーサの作製
表 7(続き) コンパイル手順
PC 側の操作
マイコン側の操作
3
(1) 転送が終了したら、5 V 電源スイッチを
OFF にする.
(2) マイコン基板上の JP2 および JP3 を開放
し,通常動作モードにする(図 23).
図 23 2 個のジャンパ
(通常動作モード,横から見た図)
4
必要に応じて,PC 側でシリアル通信用の
ターミナルエミュレータを起動する.
5 V 電源スイッチを ON にする.
5
9.3 I/O ポートの利用
9.3.1 ポートとレジスタの構成
H8/3664F マイコンでは,汎用入出力ポートとして,ポート 1,2,5,7,8,汎用入力ポートとして,
ポート B が利用できる.これらの各ポートは 8 bit で構成されるが,一部のビットについては予約され
ており,I/O ポートとしては利用できない.また,多くは各種の入出力端子と兼用になっている.表 9
に I/O ポートとして使用可能なビットの一覧および入出力端子との兼用の状況を示す.
これらのポートの機能を選択し,また,利用するためには,表 8 に示すレジスタ群を用いる.レジ
スタの初期値,設定値の意味については,ハードウェアマニュアルを参照する必要がある.
表 8 H8/3664F マイコンの I/O ポートを制御するレジスタ
名 称
記号
該当ポート
機 能
機能を選択する.このほか,周辺モ
ポートモードレジスタ
PMR
1 ,2,5
ジュールに含まれるレジスタの設定が必
要な場合がある.
ポートコントロールレジスタ
PCR
B 以外
ポートプルアップ
コントロールレジスタ
PUCR
1,5
ポートデータレジスタ
PDR
すべて
–21/38–
入力用または出力用のどちらに利用する
か設定する.
プルアップの状態を設定する.
データの入出力に用いる.
4 年情報工学実験Ⅲ ライントレーサの作製
表 9 I/O ポートと兼用する機能
ポート名 ビット名
P10
共用機能
共用端子記号
タイマ A
TMOW
備考
P11
P12
ポート 1
P14
P15
IRQ0
IRQ1
割り込み入出力
P16
P17
IRQ2
IRQ3
TRGV
タイマ V
P20
ポート 2
P21
SCK3
SCI3
RXD
P22
TXD
P50
WKP0
P51
WKP1
P52
P53
ポート 5
WKP2
ウェイクアップ割り込み
WKP3
P54
P55
P56
WKP4
WKP5
A/D 変換器
ADTRG
I2C バス
出力の H レベルが異なる
P57
P74
ポート 7
P75
ポート 8
TMIRV
TMCIV
タイマ V
P76
TMOV
P80
FTCI
P81
FTIOA
P82
通信用 IC との接続あり
FTIOB
タイマ W
P83
FTIOC
P84
FTIOD
P85
PWM 出力に使用する
ブートモード設定に使用する
P86
P87
(次ページに続く)
–22/38–
4 年情報工学実験Ⅲ ライントレーサの作製
表 9(続き) 汎用入出力ポートと兼用する機能
ポート名 ビット名
ポート B
共用機能
共用ポート名
PB0
AN0
PB1
AN1
PB2
AN2
PB3
AN3
PB4
A/D 変換器
AN4
PB5
AN5
PB6
AN6
PB7
AN7
備考
これらのうち,2 チャネルを使
用する.
9.3.2 手順
I/O ポートを利用するためには,まず,使用するポートによって,ポートモードレジスタ,ポートコ
ントロールレジスタ,ポートプルアップコントロールレジスタのうち,必要なレジスタに値を書き込
み,機能の選択と入出力の設定-初期化-を行う.その後,ポートデータレジスタを用いてデータを
やり取りする.
これらのレジスタはメモリマップ上にマッピングされ,プログラムからはアドレスを指定してアク
セスする.本実験における開発環境上で C 言語を用いてプログラミングを行う場合,表 8 に示したレ
ジスタ群は,ヘッダファイルによって st_io 構造体として,また,各レジスタは,st_io 構造体のメ
ンバとして実装されている.更に,st_io 構造体へのポインタとして,シンボル IO にアドレスがマク
ロ定義され,具体的なアドレスを意識することなくプログラム上で各レジスタにアクセスできるよう
になっている.リスト 1 に,st_io 構造体の宣言のうち,ポート 5 に関する部分のみを抜粋して示す.
9.3.3 プログラミング例
リスト 2 に,ポート 5 の第 3 ビット(P53)および第 4 ビット(P54)を出力に設定し,これらの値を
1 または 0 に設定するプログラムの例を示す.
ポートコントロールレジスタ以外のレジスタについては,共用体として宣言することにより,バイ
トアクセスとビットアクセスの双方を行うことができるようになっている.
ポート 5 を使用するためには,最初にポート 5 のポートモードレジスタ(PMR5),ポートコント
ロールレジスタ(PCR5),ポートプルアップコントロールレジスタ(PUCR5)を設定する必要がある.
これらの各レジスタの各ビットの設定については,ハードウェアマニュアルを参照されたい.
なお,本実験で用いる開発環境において,int は short int を意味するので,注意が必要である.
–23/38–
4 年情報工学実験Ⅲ ライントレーサの作製
struct st_io {
union {
unsigned char BYTE;
struct {
unsigned char wk:2;
unsigned char B5:1;
unsigned char B4:1;
unsigned char B3:1;
unsigned char B2:1;
unsigned char B1:1;
unsigned char B0:1;
} BIT;
} PUCR5;
union {
unsigned char BYTE;
struct {
unsigned char B7:1;
unsigned char B6:1;
unsigned char B5:1;
unsigned char B4:1;
unsigned char B3:1;
unsigned char B2:1;
unsigned char B1:1;
unsigned char B0:1;
} BIT;
} PDR5;
union {
unsigned char BYTE;
struct {
unsigned char wk :2;
unsigned char WKP5:1;
unsigned char WKP4:1;
unsigned char WKP3:1;
unsigned char WKP2:1;
unsigned char WKP1:1;
unsigned char WKP0:1;
} BIT;
} PMR5;
unsigned char PCR5;
};
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
struct IO
PUCR5
Byte Access
Bit Access
Bit 7,6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PDR5
Byte Access
Bit Access
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PMR5
Byte Access
Bit Access
WKP5
WKP4
WKP3
WKP2
WKP1
WKP0
PCR5
#define IO (*(volatile struct st_io *)0xFFD0)
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
/* IO Address */
リスト 1 ポート 5 に関するレジスタにアクセスする構造体の宣言
–24/38–
4 年情報工学実験Ⅲ ライントレーサの作製
#include <3664F.h>
int main(void)
{
/* 初期化 */
IO.PMR5.BYTE&=0xe7;
IO.PCR5|=0x18;
/* P53 と P54 を汎用入出力ポートに設定 */
/* P53 と P54 を出力ポートに設定 */
/* 値の設定 */
IO.PDR5.BYTE|=0x08;
IO.PDR5.BYTE&=0xef;
/* P53 のセット:バイトアクセス */
/* P54 のクリア:バイトアクセス */
IO.PDR5.BIT.B3=0;
IO.PDR5.BIT.B4=1;
/* P53 のクリア:ビットアクセス */
/* P54 のセット:ビットアクセス */
}
リスト 2 I/O ポートにアクセスするプログラムの例 9.4 volatile 修飾子
プログラムをコンパイルする際には,コンパイラによって最適化が行われる.マイコン上のプログ
ラミングにおいては,最適化によって意図した動作を実現できない場合がある.volatile 修飾子は,最
適化を抑止し,意図した動作をさせたい場合に用いられる.本節では,volatile 修飾子が必要とな
る場合について述べる.
(1) 時間待ちの繰り返しをさせる場合
リスト 3 のプログラムは,
汎用ポートに接続した 2 個
の LED を交互に点滅させる
目的で作製したプログラム
である.for 文によって時
#include <3664F.h>
int main(void)
{
unsigned int i;
LED を接続した端子を出力ポートに設定する
while(1) {
間稼ぎをし,LED の点滅の
周期を長くすることを意図
している.しかしながら,
LED1 を点灯させる
このプログラムを動作させ
LED2 を消灯させる
ても,LED は点滅している
for(i=0;i<65000;i++) {
}
ようには見えない.
これは,変数 i が for 文
LED1 を消灯させる
の制御以外に利用されるこ
LED2 を点灯させる
とがないため,コンパイラ
によって最適化され,for
for(i=0;i<65000;i++) {
}
文に相当する処理が実行さ
れなくなったことが原因で
}
}
ある.これを抑止するには, リスト 3 2 個の LED を交互に点滅させる目的で作製したプログラム例
変数 i をリスト 4 のように
volatile unsigned int i;
宣言する.
リスト 4 volatile 修飾子を用いた変数の宣言
–25/38–
4 年情報工学実験Ⅲ ライントレーサの作製
(2) 割り込み関数で変数の値を変化させる場合
リスト 5 は,割り込み関数が実行されるたびに LED の状態を反転させる目的で作成したプログラム
である.割り込み関数 intfunc によってグローバル変数 i の値を変化させ,それを main 関数内で利
用しているが,main 関数内で変数 i の値を変化させる部分がないため,値の評価が 1 回しかされず,
意図した動作をしない.
この場合も,volatile 修飾子をつけて変数 i を宣言することによって問題が解消する.
#include <3664F.h>
unsigned int i=0;
/* 割り込み関数 */
#pragma interrupt
void intfunc(void)
{
i++;
}
int main(void)
{
LED を接続した端子を出力ポートに設定する
while(1) {
if(i%2==1) {
LED1 を点灯させる
LED2 を消灯させる
} else {
LED1 を消灯させる
LED2 を点灯させる
}
}
}
リスト 5 割り込み関数を用いて 2 個の LED を交互に点滅させる目的で作製したプログラム例
–26/38–
4 年情報工学実験Ⅲ ライントレーサの作製
実験 19 時間待ち関数の作製
関数 msecWait を表 10 の仕様で作製する.リスト 6 のプログラムを動作させ,LED1 が接続
されたポートの出力電圧波形を観測することによって,作製した関数の動作を検証する.また,
この電圧波形を記録する.
表 10 関数 msecWait の仕様
プロトタイプ
void msecWait(unsigned int length);
機 能
呼び出されてから length[ms]経過後に呼び出し元に戻る.関数内では時間を経過
させる処理以外のことをしない.
引 数
length この関数が呼び出されてから呼び出し元に戻るまでの時間.単位は ms
である.
#include <3664F.h>
void msecWait(unsigned int length)
{
/* 時間待ちをする処理 */
}
int main(void)
{
/* LED1 が接続された端子を出力ポートに設定する */
while(1) {
/* LED1 が接続された端子の出力をセットする */
msecWait(1);
/* LED1 が接続された端子の出力をクリアする */
msecWait(1);
}
}
リスト 6 msecWait 関数の検証プログラム
–27/38–
4 年情報工学実験Ⅲ ライントレーサの作製
9.5 シリアル通信
PC と H8/3664F は,シリアルコミュニケーションインタフェー
表 11 通信の設定
ス 3(SCI3)を用いたシリアル通信によってデータをやり取りす
項 目
設定値
伝送速度
38400 bps
データビット数
8
パリティ
なし
ストップビット
1
る.シリアル通信を行う際には,PC 側でシリアル通信用のター
ミナルエミュレータを動作させる.本実験において,通信の設
定は表 11 のとおりとする.
本実験の開発環境においては,シリアル通信によって文字列
をターミナルエミュレータに出力するため,表12から表16の関
数群を用意してある.
これらの関数を利用してターミナルエミュレータに文字列を
出力するプログラムの例をリスト 7 に示す.
表 12 関数 initSCI3 の仕様
プロトタイプ
void initSCI3(void);
機 能
以下の通信モードで SCI3 の設定をし,データ送信の準備をする.
通信方式
: 調歩同期式
クロックソース
: 内部ボーレートジェネレータ
クロック
: (システムクロック,周波数は 16 MHz)
: 8 bit
データ長
パリティ
: なし
ストップビット長 : 1 bit
ビットレート
: 38400 bps
c
表 13 関数 terminateSCI3 の仕様
プロトタイプ
void terminateSCI3(void);
機 能
SCI3 の使用を停止し,P22 を汎用出力ポートに設定する.
表 14 関数 SCI3putchar の仕様
プロトタイプ
void SCI3putchar(char c);
機 能
1 文字を送信する.引数値が'\n'の場合は,引き続いて'\r'を送信する.
引 数
c
送信する文字
–28/38–
4 年情報工学実験Ⅲ ライントレーサの作製
表 15 関数 SCI3puts の仕様
プロトタイプ
void SCI3puts(const char *str);
機 能
文字列を送信する.str の終端は'\0'でなければならない.
引 数
str
送信する文字列
表 16 関数 csprintf の仕様
プロトタイプ
void csprintf(char *str,char *fmt,...);
機 能
指定されたデータを用い,指定された書式で文字列を生成する.データは*fmt 以降にカンマ
で区切って列挙する.str は呼び出し元で確保された領域を参照していなければならない.fmt
の書式は sprintf と同様であるが,浮動小数点数は利用できない.
引 数
str
生成した文字列の書き込み先へのポインタ
fmt
書き込む書式文字列
#include <3664F.h>
#include "ltrc_lib.h"
int main(void)
{
unsigned int i=0;
char str[80];
initSCI3();
csprintf(str,"\n------------------------------\n");
SCI3puts(str);
while(1) {
csprintf(str,"i=%5u %04x %016b\n",i,i,i);
SCI3puts(str);
i++;
}
}
リスト 7 SCI3 を利用したプログラムの例
–29/38–
4 年情報工学実験Ⅲ ライントレーサの作製
実験 20 LED の点滅とシリアル通信
2 個の動作確認用 LED を表 17 の組み合わせの順に繰り返して点灯または消灯させ,同時にそ
のときの LED が接続された出力ポートのデータレジスタの値をシリアル通信により出力させる
プログラムを作製する.ただし,それぞれの組み合わせにおける動作の継続時間は 1 s とする.
表 17 本実験で実現する LED の点灯または消灯の組み合わせ
項番
LED1
LED2
1
OFF
OFF
2
ON
OFF
3
OFF
ON
4
ON
ON
9.6 割り込み関数
通常の関数は,プログラム中で関数を呼び出したときに起動される.これに対して,割り込み関数
は,要求信号により起動される.割り込み関数が起動すると,それまでに実行していた処理が一時的
に停止される.割り込み関数の処理が終了すると,それまで実行していた処理の続きに戻る.C 言語で
割り込み関数を記述するためは,通常のプログラミングとは異なる以下の手順が必要である.
(1) 割り込みベクタの記述
(2) 割り込みマスクのクリア
(3) 割り込み関数の記述
以下,それぞれについて説明する.
(1) 割り込みベクタの記述
割り込み要求が発生すると,割り込み要因ごとに決まっているベクタアドレス-次節で述べるタイ
マ A であれば H'0026~H'0027(0x26~0x27)-に記述されたコードが実行される.割り込みベクタの
記述は,割り込みの要因と割り込みが発生した際に実行される関数名を関連付けることである.
この手続きの方法は複数あるが,本実験では,リンカスクリプトに記述することで行う.リンカス
クリプトは,作製したプログラムをコンパイルすることによって生成されるオブジェクトファイルや
スタートアップルーチン(C 言語で記述したプログラムの実行に先立って実行する必要がある処理をア
センブリ言語で記述したもの),ライブラリをリンクして実行用のファイルを生成する際に用いられ,
割り込みベクタや変数のメモリ上の配置などを記述したものである.本実験で用いるリンカスクリプ
トにおいて,割り込みベクタを記述した部分をリスト 8 に示す.
リスト 8 において,
SHORT(DEFINED(_int_timera)?ABSOLUTE(_int_timera):ABSOLUTE(_start))
と記述された部分でタイマ A による割り込み要求が発生したときに実行される関数名を定義している.
この場合では,int_timera という関数が定義されていれば,それがタイマ A からの割り込み要求に
よって起動される割り込み関数となる.
–30/38–
4 年情報工学実験Ⅲ ライントレーサの作製
SECTIONS
{
.vectors : {
SHORT(ABSOLUTE(_start))
SHORT(ABSOLUTE(_start))
SHORT(ABSOLUTE(_start))
SHORT(ABSOLUTE(_start))
SHORT(ABSOLUTE(_start))
SHORT(ABSOLUTE(_start))
SHORT(ABSOLUTE(_start))
SHORT(DEFINED(_int_nmi)?ABSOLUTE(_int_nmi):ABSOLUTE(_start))
SHORT(DEFINED(_int_trap0)?ABSOLUTE(_int_trap0):ABSOLUTE(_start))
SHORT(DEFINED(_int_trap1)?ABSOLUTE(_int_trap1):ABSOLUTE(_start))
SHORT(DEFINED(_int_trap2)?ABSOLUTE(_int_trap2):ABSOLUTE(_start))
SHORT(DEFINED(_int_trap3)?ABSOLUTE(_int_trap3):ABSOLUTE(_start))
SHORT(DEFINED(_int_break)?ABSOLUTE(_int_break):ABSOLUTE(_start))
SHORT(DEFINED(_int_sleep)?ABSOLUTE(_int_sleep):ABSOLUTE(_start))
SHORT(DEFINED(_int_irq0)?ABSOLUTE(_int_irq0):ABSOLUTE(_start))
SHORT(DEFINED(_int_irq1)?ABSOLUTE(_int_irq1):ABSOLUTE(_start))
SHORT(DEFINED(_int_irq2)?ABSOLUTE(_int_irq2):ABSOLUTE(_start))
SHORT(DEFINED(_int_irq3)?ABSOLUTE(_int_irq3):ABSOLUTE(_start))
SHORT(DEFINED(_int_wkp)?ABSOLUTE(_int_wkp):ABSOLUTE(_start))
SHORT(DEFINED(_int_timera)?ABSOLUTE(_int_timera):ABSOLUTE(_start))
SHORT(ABSOLUTE(_start))
SHORT(DEFINED(_int_timerw)?ABSOLUTE(_int_timerw):ABSOLUTE(_start))
SHORT(DEFINED(_int_timerv)?ABSOLUTE(_int_timerv):ABSOLUTE(_start))
SHORT(DEFINED(_int_sci3)?ABSOLUTE(_int_sci3):ABSOLUTE(_start))
SHORT(DEFINED(_int_iic)?ABSOLUTE(_int_iic):ABSOLUTE(_start))
SHORT(DEFINED(_int_adi)?ABSOLUTE(_int_adi):ABSOLUTE(_start))
} > vectors
リスト 8 リンカスクリプトにおける割り込みベクタの記述
(2) 割り込みマスクのクリア
割り込み要求を発生させるためには,CPU 内部にあるコンディションコードレジスタ(CCR)の I
ビットをクリアする必要がある.これはアセンブリ言語で行う必要があり,スタートアップルーチン
で記述するか,C 言語のプログラムの途中で部分的にアセンブリ言語を記述すること-これをインライ
ンアセンブラという-によって実現する.
本実験では後者の方法を利用する.C 言語のプログラム中にアセンブリ言語を記述するには,リスト
9 のようにする.
asm("code");
リスト 9 C 言語のプログラム中でアセンブリ言語を記述する方法
CCR の I ビットのセットおよびクリアは,アセンブリ言語ではリスト 10 のように記述する.
orc.b #0x80,CCR;
andc.b #0x7f,CCR
(a) セット (b)クリア
リスト 10 アセンブリ言語による CCR の I ビットの操作
–31/38–
4 年情報工学実験Ⅲ ライントレーサの作製
C 言語のプログラムの冒頭でリスト 11 のようにマクロを定義すると,関数を呼び出すような記述で
CCR の I ビットのセットまたはクリアができる.volatile 修飾子は,9.4 で述べた変数宣言における
利用と同じ目的で用いている.すなわち,最適化によって意図した位置以外でインラインアセンブラ
で記述したコードが実行されることを抑止させる.
/* 割り込みマスクのセット:割り込み無視 */
#define setCCR_I() asm volatile("orc.b #0x80,CCR")
/* 割り込みマスクのクリア:割り込み許可 */
#define clearCCR_I() asm volatile("andc.b #0x7f,CCR")
リスト 11 CCR の I ビットを設定するマクロ
(3) 割り込み関数の記述
C言語で割り込み関数を記述する場合は,関数名の前にプリプロセッサ指令である
#pragma interruptをつける.これによって,汎用レジスタの退避や復旧など,割り込みで必要な
処理が実行されるようになる.リスト8のようなリンカスクリプトを用いる場合であれば,タイマAか
らの割り込み要求によって起動される割り込み関数はリスト12のように記述することになる.
割り込み関数内では,シリアル通信などの長い時間を要する処理をしてはならない.
#include <3664F.h>
/* 割り込みマスクのセット:割り込み無視 */
#define setCCR_I() asm volatile("orc.b #0x80,CCR")
/* 割り込みマスクのクリア:割り込み許可 */
#define clearCCR_I() asm volatile("andc.b #0x7f,CCR")
#pragma interrupt
void int_timera(void)
{
/* 割り込み時に実行する処理 */
}
int main(void)
{
clearCCR_I();
/* 割り込み許可 */
/* そのほかに実行する処理 */
}
リスト 12 割り込み関数の記述
–32/38–
4 年情報工学実験Ⅲ ライントレーサの作製
9.7 タイマ割り込み
9.7.1 概 要
タイマ割り込みとは,CPUのタイマユニットにより,一定の間隔で割り込み要求信号を発生させ,
割り込み関数を実行することである.
H8/3664FにはタイマA,タイマV,タイマWの三つのタイマ機能がある.
9.7.2 タイマ A の動作と割り込み
タイマAはインターバルタイマおよび時計用タイムベース機能を内蔵した 8 bitのタイマである.設定
されたクロックによって,8 bitのアップカウンタであるタイマカウンタA(TCA)がカウントアップさ
れ,オーバーフローしたときに割り込み要求を発生させることができる.また,オーバーフローする
とTCAの値は0に戻り,再びカウントアップされる.したがって,256回のクロック入力につき1回,す
なわち,クロックの256分の1の周波数で割り込み要求を発生させることができる.
TCAをカウントするクロックは,タイマモードレジスタA(TMA)によって設定し,システムク
ロックを入力として利用するプリスケーラSの出力またはサブクロックを入力として利用するプリス
ケーラWの出力のいずれかから選択する.プリスケーラSを利用する場合にはシステムクロックからの
分周比を,プリスケーラWを利用する場合にはTCAのオーバーフロー周期を設定する.本実験で用い
るマイコン基板では,システムクロックの周波数は 16 MHz,サブクロックの周波数は32.768 kHzであ
る.
9.7.3 タイマ A で割り込み要求を発生させるための設定
タイマAで割り込み要求を発生させるためには,TMAによってタイマAの動作を設定するだけではな
く,CPU内部のレジスタおよび割り込みを制御するレジスタの設定をする必要がある.表18にタイマA
で割り込み要求を発生させるために用いるレジスタおよび対象となるビットを示す.CCRとTMAは既
に触れたものを再掲している.
IRR1のIRRTAは,TCAがオーバーフローするとセットされる.このときにIENR1のIENTAがセットさ
れていれば,割り込み要求が発生する.次にTCAがオーバーフローしたときにも割り込み要求を発生
させるためには,割り込み関数においてIRRTAをクリアする必要がある.
表 18 タイマ A で割り込み要求を発生させるために利用するレジスタおよびビット
レジスタ名称
記号
ビット
機 能
コンディションコードレジスタ
CCR
I
割り込みのマスクを設定する.C 言語の構
文ではアクセスできない.(9.6(2)参照)
割り込みイネーブルレジスタ 1 IENR1 IENTA
割り込みフラグレジスタ 1
IRR1
タイマモードレジスタA
TMA
IRRTA
タイマ A などの割り込み要求を可能にす
る.
タイマ A などの割り込み要求の状態が設
定される.
動作モード,分周クロック出力,入力ク
ロックを設定する.(9.7.2 参照)
–33/38–
4 年情報工学実験Ⅲ ライントレーサの作製
実験 21 タイマ割り込みを用いた LED の点灯
3 秒ごとにデューティ比を変化させながら,2 個の動作確認用 LED を以下の仕様で点灯させ
るプログラムを作製する.また,表 19 の各項番において,動作確認用 LED が接続された二つ
のポートの出力電圧波形を同期を取って記録する.
● タイマAを用いて,周波数7.8125 kHzで割り込みを発生させる.
● 割り込み回数を数え,その回数に応じて LEDを点灯または消灯させることによって
デューティ比を調整する.
● LEDは周波数78.125 Hzで点滅させる.
● デューティ比は表19の順で繰り返し変化させる.
● 表19の各項番において,2個のLEDの点滅のデューティ比をシリアル通信によって出力
する.
表 19 本実験で実現する LED のデューティ比
項番
LED1
LED2
1
20 %
90 %
2
50 %
50 %
3
80 %
10 %
10.基板の作製(2)
実験 22 主基板の実装(2)
線検出回路,モータドライバ,圧着コネクタなど,残った部品を主基板に実装し,主基板を
完成させる.
実験 23 電源基板およびセンサ基板の実装
電源基板およびセンサ基板の全部品を実装し,ライントレーサのハードウェアを完成させる.
–34/38–
4 年情報工学実験Ⅲ ライントレーサの作製
11.線検出回路および A/D 変換器の動作確認
11.1 A/D 変換器の利用
H8/3664Fは,8チャネルのA/D変換器を持つ.利用する手順はおよそ以下のとおりである.
(1) A/D コントロール/ステータスレジスタ(ADCSR)により,動作モード,クロック,入力チャ
ネル,割り込み要求発生の有無を設定する.
(2) A/D 変換を開始する.
(3) 1 回(単一モードの場合は 1 チャネル,スキャンモードの場合は設定した入力チャネル分)の
A/D 変換が終わるまで待つ.
(4) A/D データレジスタ(ADDRA,ADDRB,ADDRC,ADDRD)から変換データを読み取る.
実験 24 A/D 変換プログラムの作製
AN0 および AN1 に加えられた電圧を A/D 変換し,その結果をシリアル通信によって出力する
プログラムを以下の仕様で作製する.
● A/D変換時間は70ステートとする.
● 1秒ごとに2チャネルのA/D変換を連続して行う.
● 左チャネルのA/D変換値が右チャネルの変換値より大きい場合は,動作確認用LED1を,
右チャネルの変換値が大きい場合はLED2を点灯させる.左右両チャネルの変換値が等
しい場合は,LED1およびLED2を点灯させる.
11.2 動作の確認
実験 25 A/D 変換器の特性調査
A/D 変換器の分解能および出力される数値の範囲を調べる.
A/D 変換器への出力が 0.5~4.5 V 程度の範囲で変化するように,半固定抵抗を調整する.なお,光-
電圧変換回路の半固定抵抗の調整法については,実験 13 で検討している.
実験 26 線検出回路の特性測定(2)
光センサが黒線上,白色面上,黒線と白色面の境界線上にあるとき,表 20 に示す電圧を測定
し,実験 24 で作製したプログラムを用いて A/D 変換値を求める.調整が必要な場合は,左セン
サおよび右センサ回路の両方について,個別に調整する.
表 20 センサ位置による各部の出力電圧の変化
センサ方向
センサ位置
光-電圧変換
回路出力[V]
白色面上
左
境界線上
黒線上
白色面上
右
境界線上
黒線上
–35/38–
A/D 変換器への
出力[V]
A/D 変換値
4 年情報工学実験Ⅲ ライントレーサの作製
12. PWM 信号の生成とモータの制御
PWM 信号の生成には,タイマ W を用いる.タイマ W はアウトプットコンペア機能,インプット
キャプチャ機能を持つ 16 bit タイマであり,最大 4 本のパルス入出力が可能であるほか,出力端子を
PWM モードにすることによって,最大 3 相の PWM 信号を生成させることができる.この PWM 信号
は,次のような特徴を持つ.
● 立ち上がりまたは立ち下がりのいずれかが同期している.
● 周期はタイマカウンタ(TCNT)に入力するクロックと周期レジスタによって設定でき,すべ
て等しい.
● デューティ比を個別に設定できる.
PWM モードの場合,タイマ W は以下のように動作する.
● TCNT は 16 bit のカウンタであり,タイマコントロールレジスタ(TCRW)によって設定される
クロックによってカウントアップされる.
● TCNT の値が周期レジスタとして使用するジェネラルレジスタ A(GRA)と等しくなる(コン
ペアマッチ A)と,TCNT がクリアされ,PWM モードに出力された端子の出力がクリアまたは
セットされる.
● TCNT の値がジェネラルレジスタ B(GRB)の値と等しくなったとき(コンペアマッチ B)に
は FTIOB 端子の出力が,ジェネラルレジスタ C(GRC)の値と等しくなったとき(コンペア
マッチ C)には FTIOC 端子の出力が,ジェネラルレジスタ D(GRD)の値と等しくなったとき
(コンペアマッチ D)には FTIOD 端子の出力がコンペアマッチ A が発生したときとは逆にセッ
トまたはクリアされる.
● コンペアマッチ B,C,D が発生するまでの出力端子の出力値を個別に設定することができる.
● ジェネラルレジスタの値はいつでも変更することができる.すなわち,発生する PWM 信号の
周期と各出力端子から出力される信号のデューティ比はいつでも変更することができる.
PWM 信号を発生させる手順はおよそ以下のとおりである.
(1) FTIOB,FTIOC,FTIOD 端子のうち,PWM 信号を出力させる端子を PWM モードに設定する.
(2) コンペアマッチ A によって TCNT がクリアされるようにする.
(3) TNCT に入力するクロックを設定する.
(4) 最初のコンペアマッチ B,C,D が発生するまでの出力端子の出力値を設定する.
(5) 必要なジェネラルレジスタの値を設定する.
(6) カウントを開始する.
–36/38–
4 年情報工学実験Ⅲ ライントレーサの作製
実験 27 PWM 信号の生成
3 秒ごとにデューティ比が変化する 2
相の PWM 信号を生成するプログラムを
表 21 本実験で実現する PWM 信号の
以下の仕様で作製する.また,すべての
デューティ比
FTIOB
FTIOC
項番
組み合わせにおいて,出力された PWM
1
100 %
0%
2
80 %
20 %
3
50 %
50 %
● 出 力 さ れ る PWM 信 号 の デ ュ ー
4
20 %
80 %
ティ比を0 %から100 %の間で設
5
0%
100 %
信号波形を同期を取って記録する.
● 発 生 す る PWM 信 号 の 周 波 数 は
4 kHzとする.
定する関数を作製して利用する.
関数名および引数リストは任意
であるが,1チャネルずつ設定できるようにする.
● デューティ比は表21の順で繰り返し変化させる.
● 表21の各項番において,両チャネルのデューティ比をシリアル通信によって出力する.
実験 28 モータの PWM 制御
左右のモータそれぞれに対して,デュー
表 22 本実験で実現するモータの動作
ティ比を指定した正転,停止(デューティ
項番
左
右
時間
比 0 %),ブレーキの指令を与える関数を
1
停止
停止
1 ms
作製する.これを利用して,表 22 の動作を
2
100 %正転
100 %正転
2s
3
100 %正転
停止
2s
4
停止
100 %正転
2s
与える関数については,一つの関数
5
50 %正転
50 %正転
2s
ですべてを実現する必要はない.
6
停止
停止
1 ms
● 表22において,正転とは,ライント
7
ブレーキ
ブレーキ
2s
レーサが前進するようにモータを回
8
停止
停止
1 ms
9
100 %正転
100 %正転
2s
FTIOC端子に出力されるPWM信号
10
停止
停止
1 ms
のデューティ比を表すものとする.
11
ブレーキ
ブレーキ
2s
順に繰り返すプログラムを以下の仕様で作
製する.
● 各チャネルのモータに対して指令を
転させることを示すものとする.
● 正 転 時 の 百 分 率 は , FTIOB ま た は
表 22 において,項番 1,6,8,10 にある
1 ms の停止動作は,動作切り替え時(正転⇔逆転,正転/逆転⇔ブレーキ)にモータドライバ
に貫通電流が流れることを防止するために入れてあるものである.
–37/38–
4 年情報工学実験Ⅲ ライントレーサの作製
13.ライントレーサプログラミング
実験 29 ライントレーサプログラミング
ライントレーサプログラムを作製し,ライントレーサを完成させる.考慮する点として以下
のようなことが挙げられる.
● A/D変換の周期およびモータへの指令値を与える周期をどうするか.
● タイマ割り込みを用いるか否か.
● 光センサ出力値(A/D変換値)の時間変化率を考慮するか否か.
以 上
–38/38–