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)
나는 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의 전원 공급 장치 독립에 걸려 있습니다 여기에
모터를 제어하는 코드의 일부입니다. 올바른 방향으로 도움이나 조언을 주시면 감사하겠습니다.두 개의 핀을 동시에 LOW와 2에서 HIGH로 설정하는 방법이 있습니까? 내 코드는 한 핀을 로우로 설정 한 후에 다른 핀을 하이로 설정한다. 내가 한 걸음 다 할 수 있는지 알고 싶다. 나는 그것을 알아낼 수 없습니다.