Processor

【라즈베리파이】 wiringPi C 언어 : DC모터 제어 - L298 모터 드라이버 모듈 사용

작성자 임베디드코리아 작성일26-02-17 18:05 조회109회 댓글0건
◆ 라즈베리파이에서 DC모터를 제어하기 위해서 일단 DC모터가 저전류 모터여야 한다.
◆ 모터를 외부 전압을 사용하여 모터의 실제 허용 전류를 맞추어 주기 위해선  모듈을 사용한다.
◆  L298N 모터 드라이버 모듈을 사용한다.

■ L298N 모터 드라이브의  사양
   입출력 채널 : 2개 → 2개의 모터 제어 가능
   모터 구동 입력 전압 : 5 Volt 또는 12 Volt
   최대 전력 : 25W
   최대 허용 전류 : 2A(모터 당)


■ DC 모터의 회전 방향을 제어 방법
   DC 모터는 전류가 흐르는 방향에 따라 모터의 회전 방향이 변경된다.
   +에서 -로 흐르는 전류의 방향을 -에서 +로 변경하면 회전 회전 방향이 반대가 된다.


■  DC 모터의 속도를 제어하는 방법
   전압의 크기로 DC 모터의 속도를 변경할 수 있다.
   입력 전압이 높으면 모터의 속도가 빨라지고 입력 전압이 낮으면 모터의 속도가 느려진다.
   전압의 크기를 가변 할 수 있는 PWM를 이용한다.

--->>> 예제  DC-Motor_L298N.c  <<<------------------------
#include <stdio.h>
#include <wiringPi.h>
 
#define MOTOR_PLUS 4    // BCM_GPIO 23
#define MOTOR_MINUS 5    // BCM_GPIO 24
 
int main (void)
{
  if (wiringPiSetup () == -1)
  return 1 ;
 
  pinMode (MOTOR_PLUS, OUTPUT) ;    // 기본이 input 이므로 output 초기화 필요
  pinMode (MOTOR_MINUS, OUTPUT) ;
 
  for (;;)
  {
    digitalWrite (MOTOR_PLUS, 1) ;    // 앞으로  돌기
    digitalWrite (MOTOR_MINUS, 0) ;
 
    delay (1000) ; // ms
 
    digitalWrite (MOTOR_PLUS, 0) ;    // 뒤로 돌기
    digitalWrite (MOTOR_MINUS, 1) ;
 
    delay (1000) ; // ms
 
    digitalWrite (MOTOR_PLUS, 0) ;    // 멈추기
    digitalWrite (MOTOR_MINUS, 0) ;
 
    delay (1000) ; // ms
  }
    return;
}
---------------------------------------------------------------------------------
$ gcc  -o  DC-Motor_L298N  DC-Motor_L298N.c  -lwiringPi
$ sudo  ./DC-Motor_L298N


---> 예제  DC-Motor_L293D.c  <<<-------------------------
/*
    L293D 모터 드라이버 칩을 통한 서보형 DC모터 제어
    gcc -o 실행파일명 소스명 -lwiringPi
*/
 
#include <stdio.h>
#include <wiringPi.h>
 
#define MOTOR_PLUS 4    // BCM_GPIO 23
#define MOTOR_MINUS 5    // BCM_GPIO 24
 
int main (void)
{
  if (wiringPiSetup () == -1)
  return 1 ;
 
  pinMode (MOTOR_PLUS, OUTPUT) ;    // 기본이 input 이므로 output 초기화 필요
  pinMode (MOTOR_MINUS, OUTPUT) ;
 
  for (;;)
  {
    digitalWrite (MOTOR_PLUS, 1) ;    // 앞으로 돌기
    digitalWrite (MOTOR_MINUS, 0) ;
 
    delay (1000) ; // ms
 
    digitalWrite (MOTOR_PLUS, 0) ;        // 멈춰주는 부분이 필요
    digitalWrite (MOTOR_MINUS, 0) ;    // + - 전환이 너무 빠르면 보드 전원이 나간다
 
    delay (1000) ; // ms
 
    digitalWrite (MOTOR_PLUS, 0) ;    // 뒤로 돌기
    digitalWrite (MOTOR_MINUS, 1) ;
 
    delay (1000) ; // ms
 
    digitalWrite (MOTOR_PLUS, 0) ;        // 멈춰주는 부분이 필요
    digitalWrite (MOTOR_MINUS, 0) ;    // + - 전환이 너무 빠르면 보드 전원이 나간다
 
    delay (1000) ; // ms
  }
 
    return;
}
---------------------------------------------------------------------------------
$ gcc  -o  DC-Motor_L293D  DC-Motor_L293D.c  -lwiringPi
$ sudo  ./DC-Motor_L293D