ESP32의 경우 PWM을 만들기가 아주 쉽습니다.
PWM이 아닌 LED용 PWM 을 사용하면 됩니다.
그리고 ESP32에는 총 16개의 PWM채널이 있습니다.(Timer 3개)
만약 resolution이나 주파수가 다르다면 다른 타이머의 pwm채널을 사용하는것을 권장합니다.
사용방법은 간단합니다.
ledcSetup(PWM채널,주파수,분해능);
ledcAttachPin(포트번호,PWM채널);
ledcWrite(PWM채널,PWM값);
Line 1~2는 설정을 하는부분이고, Line 3이 PWM출력을 내보내는 부분입니다.
Line 1에서 PWM채널은 위 그림의 16개의 PWM 채널중에 선택을 하시면 됩니다.
주파수는 PWM 총 주기인데 보통 5000을 많이 사용하는듯 합니다.
분해능은 비트를 적으면 되는데 예제에는 8비트를 많이 사용하고 있습니다.
Line 2의 포트번호는 PWM을 실제 출력할 GPIO번호를 적으면 되는데
참고할 점은 GPIO 34이후로는 PWM출력이 되지 않습니다.
PWM채널은 Line 1에서 설정하신 PWM채널을 넣어주시면 됩니다.
Line 3은 실제 PWM이 출력되는 코드인데, 주의할 점은 PWM 출력포트가 아닌
PWM채널 번호를 적어줘야 합니다.
ledcSetup(0,5000,8);
ledcAttachPin(21,0);
ledcSetup(3,5000,9);
ledcAttachPin(19,3);
ledcWrite(0,testval);
ledcWrite(3,testval);
testval++;
if(testval>255)
testval=0;
포트 21번에는 PWM 0번채널 8분해능으로 출력을 하였고,
포트 19번으로는 PWM 3번 9분해능으로 출력을 하였습니다.
그리고 PWM값이 8분해능일경우 255면 duty 100%가 되고,
9분해능일 경우 duty 50%밖에 되지 않습니다만,
비교를 위해 다르게 설정하였습니다.
결과입니다.
위 파형그래프에서 노란색이 9분해능이고, 파란색이 8분해능입니다.
같은 PWM값을 입력했지만 duty가 2배차이가 나는것을 확인할 수 있습니다.
'Study > ESP8266(WIFI),ESP32(BLE,WIFI)' 카테고리의 다른 글
ESP32 타이머 인터럽트 (2) | 2019.12.13 |
---|---|
ESP32 하드웨어 시리얼 변경 (0) | 2019.12.13 |
ESP8266 OTA(Over The Air) 사용하기 - 업데이트하기 (11) | 2019.03.18 |
ESP8266-arduino Serial(UART) 통신시 유의점 (0) | 2019.02.21 |
ESP8266에서 I2C 사용하기 (2) | 2018.11.06 |