ジャンル不定の日記です。

モータードライバ買った

Orange Pi Zeroと MOSFET でのモーター制御ができたが、
次の段階として今回は5V駆動したんで12V駆動のために2.54mm化のDCジャックを注文して、
N-MOSFETだけだとモーター1つにGPIO4ピン使うが半分P-MOSFETならGPIOx2で制御できるはず。
というわけでP-MOSFETを買おうと思ったんだが、
デュアルMOSFETなるものを知った。

デュアルMOSFETはそのまんまMOSFETが2つのIC?なんだが、N+Pのものがある。
NのデュアルとPのデュアルに部品を分けた方が1個で電流を1本流せるが、
今回SOT-23のMOSFET使ってわかったが、肉眼で印字が見えないからNとPの2種類あったらどっちかわからん。
N+PのデュアルMOSFET使えば部品が1種で済むから見分ける必要がない。
というわけで、AO4606ってSOIC-8(SOP-8とは幅が違うぽい)のデュアルMOSFETを買おうかと思った。
SOT-23のシングルMOSFET50個分の値段で10個入りくらいの価格。
L9110SってフルブリッジのモータードライバICと似たような価格。
L9110は12V0.8Aしか流せないんでギリギリな感じだがAO4606は30V6Aまででかなり大電流が流せる。

が、よく考えるとフルブリッジのモータードライバはMOSFET4個分なんだよね。
ということに気づいたんでL9110買ってみることにした。
SOP-8だとAO4606と大差ない価格だったが、
変換基板につけるのもめんどいし勿体無いから、テスト用にL9110HってDIPパッケージのやつを5個にした。
本番ではSOP-8のL9110Sを別途買うつもり。

MOSFETでモーターを動かす前にLEDで実験

昨日タクトスイッチとMOSFETを使ってLEDを1個光らせる実験をしたが、
Orange Pi ZeroでMOSFET8個を制御する実験やった。

#include <unistd.h>
#include <fcntl.h>

int main(void){
    char phase[4][4]={
        {'1','0','0','1'},
        {'1','0','1','0'},
        {'0','1','1','0'},
        {'0','1','0','1'}
    };
    int gpio[4];
    gpio[0]=open("/sys/class/gpio/gpio12/value",O_WRONLY);
    gpio[1]=open("/sys/class/gpio/gpio11/value",O_WRONLY);
    gpio[2]=open("/sys/class/gpio/gpio6/value",O_WRONLY);
    gpio[3]=open("/sys/class/gpio/gpio1/value",O_WRONLY);
    int i,j,p;
    for(i=0;i<100;i++){
        p=i%4;
        for(j=0;j<4;j++){
            write(gpio[j],&phase[p][j],1);
        }
        sleep(1);
    }
    char b='0';
    for(j=0;j<4;j++){
        write(gpio[j],&b,1);
    }
    close(gpio[0]);
    close(gpio[1]);
    close(gpio[2]);
    close(gpio[3]);
    return(0);
}
↑ソースコードはこんな感じ。


1秒毎に2個ずつ光るLEDが変わる。
ミニブレッドボード4個は全部同じでハーフブリッジ回路?にした。
MOSFETは8個だが2個は同時にON/OFFするんでGPIOは4本。
12,11,6,1のGPIO使った。6と1の間にはGNDがあるんで1ピン飛ぶ。
MOSFETは全部Nチャネルだが、半分Pチャネルにすれば2本で制御できると思ってる。