728x90
반응형
1. DC 모터
- 고정자로 영구자석을 사용하고, 회전자(전기자)로 코일을 사용하여 구성한 것
- 전기자에 흐르는 전류의 방향을 전환함으로써 자력의 반발, 흡인력으로 회전력을 생성시키는 모터
- 모형 자동차, 무선조정용 장난감 등을 비롯하여 여러 방면에서 가장 널리 사용되고 있는 모터
1-1. 장점
- 시동 토크가 크다
- 동일한 출력의 교류 모터보다 출력이 크고 효율이 좋다
- 교류 모터와 비교해 저 전압 사양 및 절연의 간소화가 가능하다
- 가격이 저렴하다
1-2. 단점
- Brush가 있어 수명에 한계가 있음
- 노이즈가 발생함
- 저속에서 원활한 회전을 하기가 힘
2. 모터 드라이버(L298N 모터 드라이버)
- 외형
- 회로도
- 단자 설명
- DC Motor A/B output : 모터에 전압을 가해주는 부분으로 DC 모터를 각 연결하거나 4선 스텝 모터를 연결
- ENA/ENB : 모터 A/B 쪽 동작시키거나 멈추게 하는 단자
- IN1 / IN2 / IN3 / IN4 : 모터 방향과 속도를 결정해주는 단자
3. 라즈베리파이 연결 및 테스트 코드
- 라즈베리파이 연결도
- 라즈베리파이 파이썬 코드
import RPi.GPIO as GPIO
from time import sleep
# 모터 상태
STOP = 0
FORWARD = 1
BACKWORD = 2
# 모터 채널
CH1 = 0
CH2 = 1
# PIN 입출력 설정
OUTPUT = 1
INPUT = 0
# PIN 설정
HIGH = 1
LOW = 0
# 실제 핀 정의
#PWM PIN
ENA = 26 #37 pin
ENB = 0 #27 pin
#GPIO PIN
IN1 = 19 #37 pin
IN2 = 13 #35 pin
IN3 = 6 #31 pin
IN4 = 5 #29 pin
# 핀 설정 함수
def setPinConfig(EN, INA, INB):
GPIO.setup(EN, GPIO.OUT)
GPIO.setup(INA, GPIO.OUT)
GPIO.setup(INB, GPIO.OUT)
# 100khz 로 PWM 동작 시킴
pwm = GPIO.PWM(EN, 100)
# 우선 PWM 멈춤.
pwm.start(0)
return pwm
# 모터 제어 함수
def setMotorContorl(pwm, INA, INB, speed, stat):
#모터 속도 제어 PWM
pwm.ChangeDutyCycle(speed)
if stat == FORWARD:
GPIO.output(INA, HIGH)
GPIO.output(INB, LOW)
#뒤로
elif stat == BACKWORD:
GPIO.output(INA, LOW)
GPIO.output(INB, HIGH)
#정지
elif stat == STOP:
GPIO.output(INA, LOW)
GPIO.output(INB, LOW)
# 모터 제어함수 간단하게 사용하기 위해 한번더 래핑(감쌈)
def setMotor(ch, speed, stat):
if ch == CH1:
#pwmA는 핀 설정 후 pwm 핸들을 리턴 받은 값이다.
setMotorContorl(pwmA, IN1, IN2, speed, stat)
else:
#pwmB는 핀 설정 후 pwm 핸들을 리턴 받은 값이다.
setMotorContorl(pwmB, IN3, IN4, speed, stat)
# GPIO 모드 설정
GPIO.setmode(GPIO.BCM)
#모터 핀 설정
#핀 설정후 PWM 핸들 얻어옴
pwmA = setPinConfig(ENA, IN1, IN2)
pwmB = setPinConfig(ENB, IN3, IN4)
#제어 시작
# 앞으로 80프로 속도로
setMotor(CH1, 80, FORWARD)
setMotor(CH2, 80, FORWARD)
#5초 대기
sleep(5)
# 뒤로 40프로 속도로
setMotor(CH1, 40, BACKWORD)
setMotor(CH2, 40, BACKWORD)
sleep(5)
# 뒤로 100프로 속도로
setMotor(CH1, 100, BACKWORD)
setMotor(CH2, 100, BACKWORD)
sleep(5)
#정지
setMotor(CH1, 80, STOP)
setMotor(CH2, 80, STOP)
# 종료
GPIO.cleanup()
[출처] 라즈베리파이(RaspberryPi) 기본 API로 L298n(모터 드라이버) 제어하기 (파이썬)|작성자 천동이
728x90
'Real Cart 프로젝트' 카테고리의 다른 글
[EP.5] 라즈베리파이에서 컬러 센서(TCS230) 제어 (0) | 2023.02.19 |
---|---|
[EP.4] 라즈베리파이에서 Servo 모터 제어 (0) | 2023.02.15 |
[EP.2] 라즈베리파이의 apt 패키지 다운로드 주소 변경 (0) | 2023.02.15 |
[EP.1] 라즈베리파이 VNC를 통한 원격 접속 (0) | 2023.02.15 |
[EP.0] 라즈베리파이 구조와 OS (0) | 2023.02.15 |