본문 바로가기

Raspberry Pi Pico (W5100S-EVB-Pico) PWM 사용하기

by rudals.kim 2022. 3. 26. 댓글 개
반응형
Adafruit CircuitPython 7.2.0 / Raspberry Pi Pico with rp2040 에서 테스트 되었습니다.

 

Raspberry Pi Pico (W5100S-EVB-Pico) 보드를 사용하여 PWM 테스트를 해 보았습니다.

PWM이란 Pulse Width Modulation으로 Pulse의 duty를 변경하여 출력 값을 조절하는 방법을 말합니다.

자세한 내용은 아래 테스트를 참고하시기 바랍니다.


회로는 간단히 LED를 GP14에 연결한 후 PWM 제어를 통해 LED의 밝기가 변화되도록 구성하였습니다.

위와 같이 회로를 구성 후 아래 소스를 사용하여 테스트 해 봅니다.

만약 "ValueError: All timers for this pin are in use"와 같은 에러가 발생되면 GP14를 사용하지 않는 다른 핀으로 변경하시면 됩니다.

import board
import analogio
import pwmio
import time

led = pwmio.PWMOut(board.GP14, frequency=1000)

while True:
    for duty in range(0, 65535, 100):
        led.duty_cycle = duty        
    time.sleep(1)
    
    for duty in range(65534, 0, -100):
        led.duty_cycle = duty
    time.sleep(1)

 

CircuitPython의 pwmio 라이브러리의 PWMOut을 사용하여 해당 포트(board.GP14)로 1KHz의 PWM을 출력해 봅니다.

 

LED의 duty값이 0 ~ 65535 값으로 증가 및 감소가 되면서 동시에 LED의 밝기가 환해졌다 어두워졌다를 반복합니다.

 

PWM 출력이 제대로 나오는지를 알아보기위해 가지고 있는 저렴한 Logic Analyzer로 측정해 보았습니다.

코드상에 PWM을 1KHz로 설정하였지만 실제 측정된 값은 985.7Hz로 작게 측정이 되었습니다. 

Logic Analyzer로 한 3초정도 PWM 시그널을 덤프 해 보았습니다. (한 줄에 다 캡처가 안되어 4개로 나눠 놓았습니다.)

아래 그림을 보면 펄스 폭이 점점 커지는것을 알 수 있습니다. 펄스폭이 커지면 출력되는 값이 점 점 커지면서 LED의 밝기는 환해집니다.

위 그림에서는 펄스값이 커지는 것만 캡처해 놨는데 반대로 펄스폭이 작아지면 출력 전압이 줄어들어 LED의 밝기는 점 점 어두워집니다. 

 

Raspberry Pi Pico를 사용하여 PWM을 테스트 해 보았는데 잘 동작되는 것으로 보입니다.

한 가지 의문점은 왜 주파수가 설정된 값으로 설정이 안 되는지는 좀 더 확인해 봐야겠습니다.

반응형

댓글