본문 바로가기
Study/ESP8266(WIFI),ESP32(BLE,WIFI)

ESP32 PWM사용하기

by Answer Choi 2019. 12. 11.
반응형

ESP32의 경우 PWM을 만들기가 아주 쉽습니다.

 

PWM이 아닌 LED용 PWM 을 사용하면 됩니다.

 

그리고 ESP32에는 총 16개의 PWM채널이 있습니다.(Timer 3개)

 

<출처   espressif >

 

 

만약 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배차이가 나는것을 확인할 수 있습니다.

 

 

 

반응형

인기글