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