C言語

ロボットカーの制御仕様と設計概要

これから、ロボットカーを動かすプログラミングをしていきますが、その前に、今回作成するロボットカーの制御仕様を考えていきます。

ロボットカーの概要

赤外線リモコンの 上下左右のボタンを使用して、ロボットカーを操作します。

ロボットカーの動作

赤外線リモコンのボタンにより、ロボットカーの動作は次のようにします。
上ボタンを押すと、4輪がすべて前進します。
下ボタンを押すと、4輪がすべて後退します。
どのボタンも、PWM方式のデューティ50%で動作することとします。

右ボタンを押すと、右側の2輪が後退し、左側の2輪が前進することにより、右側に旋回します。
左ボタンを押すと、右側の2輪が前進し、左側の2輪が後退することにより、左側に旋回します。

ロボットカーは、赤外線リモコンのボタンが押されっぱなしの間、動作します。ボタンを離すと、動作が停止することとします。

赤外線リモコン

使用するリモコンは、NECフォーマットに従います。他のフォーマットは今回の仕様では対象外とします。
赤外線リモコンは、上下左右のボタンのみ使用します。
他のボタンが押された場合は、無視します。また、他のボタンを押しながら上下左右のボタンを押した場合、上下左右のボタンは無効とします。
また、上下左右のボタンを押したまま、他の上下左右のボタンを押した場合、最初に押し続けているボタンが優先されて動作します。例えば、上ボタンを押しながら、下ボタンを押すと上ボタンの動作は継続し、下ボタンは無視されます。
ただし、このとき、下ボタンを押したまま上ボタンを離すと、下ボタンの動作を開始します。

スリープ機能

30秒間、赤外線リモコンから操作が何もない場合、マイコンのスタンバイ機能のHALTモードになることとします。
HALTモードとは、CPUの動作クロックを停止させるモードです。ただし、クロック発振回路が動作している場合は、発振を継続します。STOPモードほど動作電流の低減はありませんが、すぐに処理を再開させたいので、HALTモードとしました。

異常監視機能

プログラムの暴走を検出するため、ウォッチドッグ・タイマ機能を使用します。
タイムアウト時間は、17.25kHz(MAX)とした場合、29.68ms(min)とします。これは、main処理の1周期の時間を10msとした場合、タイムアウト時間として、3倍ほど見込めばよいだろうと考えてこの時間に設定しました。どうしてもこの時間でなければいけないわけではありませんが、今回は、仕様として、29.68ms(min)とします。
また、ウインドウ・オープン期間は100%とします。特に、ウォッチドッグクリアをしていけない区間は想定していないため、100%としました。

マイコンの安全機能

高速CRC、汎用CRCを用いてROMチェックを行います。
RAMパリティ・エラー検出機能を用いてRAMチェックを行います。
不正メモリ・アクセス検出を行います。

このほかの異常監視としては、未使用のROMにアクセスを監視することにします。この未使用というのは、読み書きできる領域で、使用しない領域を示します。

設計概要

メイン処理は、32MHzで動作させます。
赤外線センサの受信を信号の立ち下がりの割り込み処理で行います。割り込み処理では、受信した信号を解析して、受信データに格納します。
なにのボタンが押されたかは、メイン処理で行います。
メイン処理は、10ms周期で赤外線センサからの受信をチェックします。受信がある場合は、受信データを解析し、ボタンに応じてモータを制御します。
処理が複雑になることから、多重割り込みは禁止とします。

簡単ではありますが、ロボットカーの仕様としては以上となります。

-C言語