DCモーター / Hブリッジで正転、反転を切り換える

pp.307-314
Hブリッジを使う。ICは使わずにディスクリートで組んだ。モーターはタミヤソーラーモーター02を使った。DCモーター / 回転速度をpwmで制御する -のときは1.5Vで駆動したがそれではIRF530/9530が動作しないため今回は5Vで駆動した。ただしAVR側の電源とは別にした。タミヤの説明書には1.5Vまでしか書かれていないがマブチの説明(RF-500TB-14415|マブチモーター株式会社 製品検索)によれば動作電圧は9Vまでとの由。
f:id:ti-nspire:20191114083458p:plain:h250

#include <avr/io.h>
#include <util/delay.h>

#define DELAY 500
#define LEFT  PD5
#define RIGHT PD6

void setBridgeState(char bridgeA, char port0, char bridgeB, char port1){
    bridgeA ? PORTD |=  (1 << port0):
              PORTD &= ~(1 << port0);
            
    bridgeB ? PORTD |=  (1 << port1):
              PORTD &= ~(1 << port1);
}

int main(){

    DDRD |= (1 << LEFT) | (1 << RIGHT);

    while(1){
        setBridgeState(1, LEFT, 0, RIGHT); _delay_ms(DELAY); // 正転、全速。        
        setBridgeState(0, LEFT, 0, RIGHT); _delay_ms(DELAY); // 停止。(1, 1)でもよい。
        setBridgeState(0, LEFT, 1, RIGHT); _delay_ms(DELAY); // 反転、全速。
        setBridgeState(1, LEFT, 1, RIGHT); _delay_ms(DELAY); // 停止。(0, 0)でもよい。
    }

    return 0;
}

f:id:ti-nspire:20191114084422p:plain:w500