https://www.raspberrypi.org/forums/viewtopic.php?t=36670
import RPi.GPIO as GPIO
import time
PWMA = 18
AIN1 = 22
AIN2 = 27
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(PWMA,GPIO.OUT)
GPIO.setup(AIN1,GPIO.OUT)
GPIO.setup(AIN2,GPIO.OUT)
L_Motor = GPIO.PWM(PWMA,500) // #펄스폭변조 세팅 핀,주파수
L_Motor.start(0)
try:
while True:
GPIO.output(AIN1,0)
GPIO.output(AIN2,1)
L_Motor.ChangeDutyCycle(10)
time.sleep(1.0)
GPIO.output(AIN1,0)
GPIO.output(AIN2,1)
L_Motor.ChangeDutyCycle(50)
time.sleep(1.0)
GPIO.output(AIN1,0)
GPIO.output(AIN2,1)
L_Motor.ChangeDutyCycle(100)
time.sleep(1.0)
GPIO.output(AIN1,0)
GPIO.output(AIN2,1)
L_Motor.ChangeDutyCycle(0)
time.sleep(1.0)
except KeyboardInterrupt:
pass
GPIO.cleanup()
출처: 앤서북 홈페이지
ㅇ PWM(Pulse Width Modulation)
PWM(Pulse Width Modulation: 펄스 폭 변조) - 디지털 출력으로 아날로그 회로를 제어하는 기법
- 전압의 on(high)/off(low)를 이용해 가변 전압을 얻기 위한 기술
- GPIO핀은 디지털이기 때문에 PWM을 이용하여 아날로그 신호를 제어
- Duty Cycle(사용률): 주기에 대한 on/off 시간의 비
- 예를 들어 Duty Cycle 20%는 high 20, low 80
- Duty: 한주기 동안 HIGH가 차지하는 비율
- Duty Cycle=50%이면 2.5v의 효과를 낼수있다
- 주파수(frequency) : 1초에 몇 개의 cycle이 반복되는가. 단위는 Hz.
- 1Hz => 1초에 period 1번 반복 (1s, 1000ms)
- 100Hz => 1초에 100번 반복. 이 때 1 pulse는 1/100 초 (0.01s, 10ms)
- 같은 주파수 100Hz에서 하나의 pulse에 low, high 조절하여 속도 조절 가능.
- high구간이 더 길수록 속도가 더 빨라짐.
GPIO.setmode(GPIO.BCM) #GPIO모드 세팅
GPIO.setup(pin, GPIO.OUT) #모터출력
pi=GPIO.PWM(pin, 50) #펄스폭변조 세팅 핀,주파수
pi.start(0)
pi.ChangeDutyCycle(2.5) #0도
time.sleep(0.5)
pi.ChangeDutyCycle(6) #90도
time.sleep(0.5)
pi.ChangeDutyCycle(9.5) #180도
time.sleep(0.5)
ㅇ GPIO 기본 모드 설정
GPIO.setmode(GPIO.BOARD) : GPIO 핀번호를 라즈베리파이 보드(BOARD) 번호로 설정
GPIO.setmode(GPIO.BCM) : GPIO 핀번호를 BCM(Broadcom chip-specific pin numbers) 모드 번호로 설정
GPIO.setup(pin, GPIO.IN) : GPIO 핀을 입력 모드로 설정
GPIO.setup(pin, GPIO.OUT) : GPIO 핀을 출력 모드로 설정
GPIO.output(pin, GPIO.HIGH) : 디지털 출력을 HIGH로 설정
GPIO.output(pin, GPIO.LOW) : 디지털 출력을 LOW로 설정
GPIO.input(pin) : GPIO 핀의 디지털 값을 읽음.
GPIO.cleanup() : GPIO 모듈의 점유 리소스를 해제
참조:
https://battlewithmyself.tistory.com/51
https://sourceforge.net/p/raspberry-gpio-python/wiki/PWM/
https://reviseomatic.org/help/x-Raspberry-Pi/RasPi%20GPIO-PWM.php
'1. SW 개발 & IT 트렌드' 카테고리의 다른 글
초보자를 위한 Get started with Raspberry Pi - raspberrypi.org (0) | 2021.09.01 |
---|---|
IoT 플랫폼 기반 - 원격제어 자동차 조립 (0) | 2021.08.31 |
[조립기] AI 인공지능 자율주행 자동차-Raspberry Pi (0) | 2021.08.29 |
책과 실습키트 - Raspberry Pi: AI 인공지능 자율주행 자동차 (0) | 2021.08.28 |
Raspberry Pi Zero를 활용한 최고의 프로젝트는 ? (0) | 2021.08.26 |
댓글