hantas's blog

ブログ移転しました→ http://blog.taniho.net/

ライントレーサー完成

4月からのどかプラネタリウムの作業を始めると言ったな,あれは嘘だ!

すいませんまだ出来てません。

でも来週の定例会までの目標は宣言しちゃったから,絶対やろう。やるっきゃない!

さてさて,今日ようやくライントレーサーが動く状態にまで持って行けました。

ラインの両脇を挟んだセンサーが線にかかるとモーターが止まり,線を見ているセンサーが線から外れると後退をするだけの単純なタイプですが,なんやかんやで苦労したので要点をココにまとめておきます。

完全に飲み込んでいるわけでは無いので,間違っている可能性はなきにしもあらず。マイコンはSH7125を使いました。

1.全般

基本的にピンの設定をする際は,

・"PFC"から入出力の設定とマルチプレクサの設定

内部クロックを使用する場合は

・"STB"のスタンバイ解除

2.シリアル通信

ビットレートの値はマイコンの設定と端末の設定を同じ物にしましょう。はちゃめちゃな表示になります。

改行文字は"\n\r"です。必ず復帰文字とセットで記入しましょう。

3.MTU(PWMモード)

これは"MultiFunction"と言うだけあって,様々なモードを備えたユニットのようです。今回はPWMモード2しか使用していません。

TIOC0~1の任意の出力端子からPWM出力を出したい場合,PWMモード2が使えそうです。今回はチャネル0について書いておきます。

レジスタTGRA_0~TGRD_0がそれぞれコンペアマッチのタイミングを保持します。カウンタのTCNTが上記レジスタと等しい値になったタイミングで,TIORで設定した出力をします。このレジスタにはデューティー比を設定することになります。

出力するピンは,僕の場合TIOC0Bを使いました。レジスタとピンの対応表はデータシートの表9.45を参照してください。

このピンがPWM出力を行うピンになるわけですが,もう一つ,周期を持つレジスタが必要になります。空いている,もしくはマルチプレクサで他の機能を割り当てているチャネル0のピンを探しましょう。僕の場合はTIOC0Aを使いました。

対応するレジスタTGRA_0~TGRD_0の周期を設定します。ここにPWM出力のベース周期を設定しておきます。

もう一つ,TCRからTCNTのカウンタクリア要因を,このレジスタに設定しておきます。こうすることで,一定の周期でリセットをかけ,一定時間で出力を出し,リセットがかかり……,という流れでPWM出力に無事成功です。

その他具体的な設定内容は他サイトに上手くまとめられているのでそちらを参照してください。

なお,チャネル3と4だけは"TOER"から各ビットの出力可否設定をする必要があります。

4.A/D変換(シングルモード)

AD0,AD1について,同じチャネルの違うピンの値を読み込む際は,"CH"から読み込みたいピン番号を選択します。

ここで,まだ原因は確定していないのですが,シングルモードで値の読み取りを連続して行うと上手く動かないという現象が発生しました。

読み込みの合間に1000ステップ程度のウェイトを入れると無事動作してくれました。

もし,一部のセンサから正常な値が出ないと言う場合は一度試してみましょう。

 

さてさて,今日つまずいた部分はこれくらいです。次はA/D変換の連続モード,あとはモータの回転方向の処理を綺麗にしたり……,色々やることは多そうです。

のどかプラネタリウムの方は,何事もまず形からということでタイトル画面とシステムで使用するレイヤの管理方法について進めようと思っています。

夏までに間に合うのかなー……

ではまた。