Beaglebone Black用のデバイスドライバを書いただけで、ULN2003Aボードを介して接続された28BJY-48ステッピングモータが回転します。すべて正常に動作しますが、モーターは回転しますが、信号を「キャプチャ」するために各ピンがHIGHに切り替わった後にmsleep(1)
を使用する必要があることがわかりました。私がループをスリープ時間なしで動かせるようにすれば、モーターは何も起こりません。Beaglebone Blackステッピングモータを非常にゆっくり動かしているGPIOコントロール。どうすればスピードを上げることができますか?
私がやっていることは、モーターの回転をスピードアップすることです。
私のロジックは、信号が速すぎて応答することができないということです。私は、モーターコイルと直列のLEDが点灯するので、信号が送信されていることを知っています。
私はデータシートとElegoo found here for refereneが提供する説明書を読みました。
がGPIO11 - IN1 - BLUE wire (coil 4)
GPIO12 - IN2 - PINK wire (coil 3)
GPIO15 - IN3 - YELLOW wire (coil 2)
GPIO16 - IN4 - ORANGE wire (coil 1)
IがのGPIOを制御していた方法によりある:私はコントロールとしてP8の次のGPIOを割り当てた
:
は、理解を容易にするために、私は配線図を添付しioremap()
を使用してください。ここで
は、モータを制御するコードの一部です:
static ssize_t motor_rotate(int i) { //0 rotates right, 1 rotates left
int c = 0;
motor_stop();
while(c < 2000)
{
*gpio_dataout_addr |= PIN11;
//msleep(1);
*gpio_dataout_addr &= (0xFFFFFFFF^PIN16);
*gpio_dataout_addr |= PIN12;
//msleep(1);
*gpio_dataout_addr &= (0xFFFFFFFF^PIN11);
*gpio_dataout_addr |= PIN15;
//msleep(1);
*gpio_dataout_addr &= (0xFFFFFFFF^PIN12);
*gpio_dataout_addr |= PIN16;
//msleep(1);
*gpio_dataout_addr &= (0xFFFFFFFF^PIN15);
c++;
}
motor_stop();
return 0;
}
static ssize_t motor_stop(void){
*gpio_dataout_addr &= (0xFFFFFFFF^(PIN11 | PIN12 | PIN15 | PIN16));
return 0;
}
私はモーターがBeagleboneの5V電源は独立にはまっています。適切な方向への助けや指導をいただければ幸いです。
2つのピンを同時にLOWと2からHIGHに設定する方法はありますか?私のコードは、別の高を設定する前に1つのピンを低く設定します。私は両方を一つのステップで行うことができるかどうかを知りたいと思います。私はそれを理解していないようです。