PWM 이란??
PWM은 Pulse Width Modulation 즉 펄스폭변조의 약자입니다
이를 이용해 디지털 신호를 아날로그 같이 사용할 수 있다고 합니다
디지털 출력은 원래 0 아니면 5V 이런식으로 되고 1.4, 3.1 이런 값이 없는데
이러한 실수의 변화를 사용할 수 있습니다
펄스 폭: 전원이 on 되는 시간
펄스 폭을 조정함으로써 on과 off 사이의 전압을 흉내낼 수 있습니다
위치나 진폭을 조정하는 방법도 있습니다(PAM / PPM)
라즈베리파이 4b의 데이터 시트를 보면 gpio 12, 13, 18, 19번이 PWM을 사용할 수 있는 GPIO 핀인것 같습니다
https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711/rpi_DATA_2711_1p0_preliminary.pdf
위의 데이터 시트를 참고하였습니다.
gpio 18,19 번은 ALT5 목록에 써있어서 되나 해봤는데 18번 핀은 됩니다 19번도 될것 같습니다
gpio readall 명령어를 통해 보면 다음과 같이 ALT5라 잡히네요
pwm으로 led 밝기 제어하기
우선 코드는 다음과 같습니다
LED는 wpi 1번에 연결하였습니다.
pwm을 사용하기 위해서는 mode를 PWM_OUTPUT으로 설정합니다
그리고 while문을 돌면서
그리고 pwmWrite를 통해 pwm 값을 줘서 밝기를 조절합니다
LED 회로구성
+쪽은 wpi 1번 핀에, -는 저항(220옴)을 연결하고 GND에 연결합니다
그리고 컴파일 합니다.
컴파일하고 sudo 명령으로 실행하지 않으면 에러가 나므로 sudo로 실행합니다
$ gcc -o pwmex pwmex.c -lwiringPi
$ sudo ./pwmex
위와 같이 잘 동작하는 것을 볼 수 있습니다