본문 바로가기
1. SW 개발 & IT 트렌드

PWM(Pulse Width Modulation) : 라즈베리파이

by soosun 2021. 8. 31.

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

 

댓글