ブラシDCモーターを動かす

relay
名詞は/ーれイ/
動詞は/ーれイ/または/リイ/

トランジスタ技術 2020年 5月号, pp.128-130

テキストはリレーとトランジスタとでモータードライバーを組み立てているが、ここではモータードライバーIC「BD6211F」(のブレークアウトボード)を使って楽をする。したがってOUTする信号の組み合わせもテキストとは違う。これでテキストは終わり。

使用部品:

f:id:ti-nspire:20201201075000p:plain:h315

#include "CPU1738_external.h"

/*
ニモニック(のようなもの)一覧:
※ ジャンプ命令は1クロック、それ以外は2クロック。HALTは状態を保持して停止。
LD_A(Data)    : A ← [Data]
LD_B(Data)    : B ← [Data]
LD_AB         : A ← B
LD_BA         : B ← A

ADD_AB        : A ← A + B
SUB_AB        : A ← A - B
ADD_A(Data)   : A ← A + [Data]
SUB_A(Data)   : A ← A - [Data]

OUT_A         : OUT ← A
OUT_B         : OUT ← B
OUT(Data)     : OUT ← [Data]
IN_A          : A ← IN

JUMP(Address) : PC ← [Address]
JNC(Address)  : PC ← [Address] if NOT Carry
JNZ(Address)  : PC ← [Address] if NOT Zero

HALT          : HALT
*/

int main(void){
    
    // 両輪を前転して(前進して)、
    _[0] = OUT(0b1010);
    
    // 何かにぶつかってマイクロスイッチが押されるまで(0が入力されるまで)その状態を続けて、
    _[1] = IN_A;
    _[2] = SUB_A(0);
    _[3] = JNZ(1);
    
    // 何かにぶつかったら(スイッチが押されたら)両輪を後転して(後進して)、
    _[4] = OUT(0b0101);
    
    // 少しの間、その状態を続けて、
    _[5] = LD_A(7);
    _[6] = SUB_A(1);
    _[7] = JNZ(6);
    
    // 両輪にブレーキをかけて、
    _[8] = OUT(0b1111); // OUT(0b0000)にすればブレーキではなく空転。ただしwormギヤなのでどちらでもほぼ関係ない。
    
    // 少しの間、その状態を続けて、
    _[9] = LD_A(3);
    _[10] = SUB_A(1);
    _[11] = JNZ(10);
    
    // 右輪前転、左輪後転して(左回転して)、
    _[12] = OUT(0b0110);
    
    // 少しの間、その状態を続けて、
    _[13] = LD_A(9);
    _[14] = SUB_A(1);
    _[15] = JNZ(14);
    
    // 0番地に戻って同じことを繰り返す。


    // CPU1738用の制御回路を有効化する。
    // 第1引数: PD7から出力するクロック周波数Hz。範囲は8~32767Hz。
    // 第2引数: それを何分周してPD6から出力するか。範囲は1~65535分周。
    // ※第2引数を指定しない場合はPD6から1Hzが出力される。
    enable_CPU1738_external(20);


    return 0;
}