next up previous contents
: A/D入力のプログラム : マイコンプログラム : コマンドの受信およびコマンドの処理   目次

モータ制御プログラム

ADuC814が固有にもつ機能を使うには、全ての処理においてSFR(スペシャルファンクションレジスタ)と呼ばれるレジスタを操作する必要がある。SFRはマイコンの動作を決定したり、動作状態を調べたりするために用いられ、通常のデータメモリの領域の一部にある。よって、それぞれのレジスタにはアドレスが割り当てられており、メモリへのデータ読み書きと同じ要領でレジスタの操作が可能である。

モータ制御においては、FETブリッジ駆動回路への信号線にマイコンのピンからの出力を使用している。これは本来、外部入力割り込み(INT割り込み)や、タイマ/カウンタの操作など、別の用途に用いられるものであるが、それらに対応するレジスタの値を書き換えれば出力に利用する事もできる。よってSFRを操作する事でモータ制御を行うことになる。

モータ制御に関係するSFRは図7.2に示されるP3というレジスタである。この図では左側を上位ビットにしているが、モータ駆動に用いる2bitのうち上位ビットをFETブリッジ回路のIN2に、下位ビットをIN1に接続している。例えば、モータ1を正転させたい時はINT1をL、INT0をHにする。

図 7.2: モータ制御に使用するSFR
\includegraphics[scale=1.0]{images/registerP3.eps}

レスクロ専用のモータ制御コマンドならば単にa3〜a0のビットを見て必要なモータを動かすだけである。しかし、モータの機能ごとのコマンドでは2byte目に処理対象のモータの指定があるので、2byte目をparamという引数に代入したとすると、例えば正転のプログラムは以下のようになる。「byte」はtypedefされたunsigned char型である。

// 正転
void motorFront(byte param)
{
    if (param == 0) { // 全モータが対象
        P3 |= 0x54;
        P3 &= 0x57;
        return;
    }
    if (param & 1) {  // モータ1
        P3 |= 0x04;
        P3 &= 0xF7;
    }
    if (param & 2) {  // モータ2
        P3 |= 0x10;
        P3 &= 0xDF;
    }
    if (param & 4) {  // モータ3
        P3 |= 0x40;
        P3 &= 0x7F;
    }
}



Deguchi Lab. 平成20年3月5日