ESP32개발환경을 설치하고난 후  아두이노 다른 프로그램을 그대로 Load하여 컴파일하면 대부분 에러없이 진행되나 PWM출력을 위한 analogWrite 문장에서 에러가 발생된다. 이는 ESP32에서는 다양한 방식의 PWM출력을 지원하기 위해 PWM채널이라는 개념이 추가되어 호출방법이 달라졌기 때문이다.

 

 PWM 채널 설정

 

1. ESP32에서는 16개의 독립적인 PWM채널을 사용할 수 있게 되었으며 어느 채널을 사용할 지 선택해야 한다.

 

2 사용하고자 하는 채널의 PWM 주파수를 지정해 주어야 한다. 즉 1초에 몇번 ON/OFF를 반복할 것인지를 지정해야 하는데 통상 LED밝기 조절의 경우 5000Hz 정도면 충분하고, 참고로  아두이노 우노의 경우 490 Hz 또는 980 Hz이다.

 

3. PWM해상도를 지정해 주어야 한다. 아누이노 우노에서는 8 bit 해상도 이었기 때문에 0~255까지의 숫자로 세기를 지정할 수 있었는데 ESP32환경에서는 1bit에서 16 비트까지 임의로 지정해서 사용할 수 있다. 예를 들어 16bit로 지정하면 0~65535까지 좀더 정밀하게 세기를 지정할 수 있게 된다.

 

ESP32에서 채널의 설정은 다음과 같은 문장으로 지정한다.

 

ledcSetup(ch, freq, resolution);   // ch: PWM channel (0~15), freq: PWM 주파수, resolution: PWM  해상도

 

PWM신호 출력하기

 

1. PWM채널을 설정했으면 setup함수에서 PWM신호를 출력할 ESP32 핀번호를 지정한다.

 

     ledcAttachPin(gpio, ch);   // gpio : GPIO 핀 번호,  ch : PWM channel

 

2. 실제 PWM신호를 출력하고자 할 때에 analogWrite문장 대신 다음과 같이 ledcWrite문장으로 지정하면 된다.

 

     ledcWrite(ch, duty); // ch : PWM channel, duty : Duty cycle

 

샘플프로그램

 

 

2 line : 0번 채널에 5000 Hz, 해상도 8bit( 0~255 )를 설정한다.

3 line : GPIO 15번 핀에 PWM 0번 채널을 할당한다.

6~9 line : PWM신호세기를 0~255까지 바꿔가며 출력한다.

+ Recent posts