パルス幅変調(PWM)は、波の周波数を一定に保ちながらパルスの幅を変化させる手法です。PWM技術は、主にLEDの輝度、DCモーターの速度の制御、サーボモーターの制御、またはデジタルソースを使用してアナログ信号を生成する必要があるその他の場合に使用されます。前回の記事でPWMについて詳しく説明しました。
このチュートリアルでは、ESP32開発ボードのPWM(パルス幅変調)ピンについて説明します。ESP32開発ボードのすべてのGPIOピン(電源、GND、Tx、Rx、およびENを除く)を使用して、PWM信号を取得できます。ESP32 PWM例、我々は、簡単な回路構築しますPWM信号に応じてLEDの明るさを変更します。
必要なコンポーネント
- ESP32
- 導いた
- 330Ω抵抗
- 10kポット
- ブレッドボード
PWM生成
ESP32でのPWM生成について説明する前に、PWMに関連するいくつかの用語について説明しましょう。
TON(オンタイム):信号がハイの時間。
TOFF(オフ時間):信号が低い時間の長さ。
周期: PWM信号のオン時間とオフ時間の合計です。
TotalPeriod = T ON + T OFF
デューティサイクル: PWM信号の期間中に信号がハイであった時間のパーセンテージ。
デューティサイクル= T ON / T合計* 100
たとえば、合計周期が10msのパルスが5msの間オン(ハイ)のままである場合。次に、デューティサイクルは次のようになります。
デューティサイクル= 5/10 * 100 = 50%デューティサイクル
この回路には、単一のLED、抵抗、および10Kポテンショメータが含まれています。LEDの負のピンは、330Ωの抵抗を介してESP32のGNDに接続されています。230Ωから500Ωまでの任意の抵抗値を使用できます。LEDのプラスピンをGPIO16に接続し、ポットの信号ピンをESP32のADC1(VP)ピンに接続します。
ESP32PWMのコード説明
完全なコードはページの最後にあります。
このコードはライブラリを必要としないため、LEDが接続されているピンを定義することからコードを開始します。私の場合、GPIO16を使用してLEDを接続しました。
const int ledPin = 16; // 16はGPIO16に対応します
その後、次の行でPWM信号のプロパティを設定します。PWM周波数を9000に設定し、分解能を10に設定しました。これを変更して、さまざまなPWM信号を生成できます。ESP32ボードは、1ビットから16ビットまでのPWM分解能をサポートします。また、PWMチャネルを選択する必要があります。ESP32には、合計16(0〜15)のPWMチャネルがあります。
const int freq = 9000; const int ledChannel = 0; constint解像度= 10;
ここで、 void setup() 関数内で、 ledcSetup() 関数を使用して前に設定したプロパティで LEDPWMを構成し ます。次の行で、LEDが接続されているGPIOピンを定義します。 ledcAttachPin() 関数は、GPIOピンと信号を生成しているチャネルを定義するために使用されます。私の場合、GPIO 16であるledPinと、チャネル0に対応するledChannelを使用しました。
void setup(){Serial.begin(9600); ledcSetup(ledChannel、freq、resolution); ledcAttachPin(ledPin、ledChannel); }
ボイドループ、 ポットが接続されているアナログピンを読み取り、という変数に読み取りを格納する 「デューティサイクル」 。LEDの輝度は、ポテンショメータの回転に応じて増減します。 ledcWriteは() と非常によく似ています )(analogWrite。
void loop(){dutyCycle = analogRead(A0); ledcWrite(ledChannel、dutyCycle); delay(15); }
ESP32PWM信号のテスト
ESP32 PWM信号をテストするには、回路図に従ってLEDとポテンショメータを接続し、コードをESP32にアップロードします。正しいボードとCOMポートが選択されていることを確認してください。次に、ポテンショメータを回転させて、LEDの輝度を増減します。
完全な作業は、以下のビデオに示されています。また、リンクをたどって、他のESP32ベースのプロジェクトを確認してください。