测试第7课,补一补基本的PWM控制器的测试。
说明一下,ESP32-C3没有MCPWM硬件,所以测试只有LEDPWM,
如果想用ESP32-C3控制电机,可以考虑使用 RMT,后期有机会测试一下。
コンテンツ
序文
次のESP32-C3機能テストは、自社で設計した開発ボードに基づいています。
ESP32-C3の開発ボードを自分で作成します(Lichuang EDAを初めて使用する場合)(PCBが利用可能です)
開発環境は、VScodeプラグインに基づいて構築されたEspressifの公式ESP-IDFです。
ESP32-C3 VScode開発環境が構築されています(Espressifの公式ESP-IDF-WindowsとUbuntuのデュアル環境に基づいています)
次の図に示すように、開発ボードでは、テストに必要なものは比較的単純であり、ユーザーLEDのみを使用する必要があります。
1.LEDPWMコントローラーの基本的な紹介
1.1基本的な紹介
ESP32-C3汎用タイマーの紹介については、Espressifの公式ウェブサイトの説明リンクは次のとおりです。
Espressifの公式ESP32-C3LEDPWM部品の説明
ESP32C3テクニカルリファレンスマニュアルは第26章にあります:LED PWMコントローラー(LEDC)
PWMの基本的な知識はあまり紹介されていません。データのスクリーンショットで表されています。PWM
の段階的な変化についてはLpointn
、値を変更することでデューティサイクルの勾配がオンになりLpointn
、カウンタがオーバーフローした後に値が増加します。固定回数(構成可能)またはデクリメント(構成可能)、勾配値も構成できます:
1.2使用手順
私のように、PWMを使用する手順を見て、サンプルコードに従ってそれを分析してテストしましょう。
-
タイマーを構成し、
ledc_timer_config
関数を使用すると、パラメーターはledc_timer_config_t
構造体になります。
この例では、次の構成があります。
注:PWM周波数が高いほど、デューティサイクルの分解能は低くなり、その逆も同様です。対応する関係は次のとおりです。
-
チャネル
ledc_channel_config
を構成します。パラメーターはledc_channel_config_t
構造です。
この例では、次の構成があります。例としてチャネルを取り上げます
。ESP32-C3には6つのチャネルしかないことに注意してください。
-
上記の設定が完了したら、対応する操作でLEDグラデーションを制御できます。ここでソフトウェアまたはハードウェアを使用できます。ハードウェアグラデーションは追加の介入を必要とせず、
ledc_fade_func_install(0);
enableを使用するだけです。
サンプルプログラムのコードは次のとおりです。
2.LEDPWMサンプルテスト
公式ルーチンでは、参照するサンプルプログラムは次のledc
とおりです。
2.1基本テスト
公式ルーチンでは、4つの出力が使用されますが、LEDライトを制御するためのボード上のIOはそれほど多くなく、ルーチンはいくつかのマクロ定義を使用するため、ボードにはLED IOポートGPIO1が1つだけあり、1つだけです。 LEDライトにより、ルーチンがよりシンプルで直感的になります。変更されたコードは次のとおりです。
void app_main(void)
{
ledc_timer_config_t ledc_timer = {
.duty_resolution = LEDC_TIMER_13_BIT, // resolution of PWM duty
.freq_hz = 5000, // frequency of PWM signal
.speed_mode = LEDC_LOW_SPEED_MODE, // timer mode
.timer_num = LEDC_TIMER_0, // timer index
.clk_cfg = LEDC_AUTO_CLK, // Auto select the source clock
};
ledc_timer_config(&ledc_timer);
ledc_channel_config_t ledc_channel= {
.channel = LEDC_CHANNEL_1,
.duty = 0,
.gpio_num = 1,
.speed_mode = LEDC_LOW_SPEED_MODE,
.hpoint = 0,
.timer_sel = LEDC_TIMER_0
};
ledc_channel_config(&ledc_channel);
// Initialize fade service.
ledc_fade_func_install(0);
while (1) {
ledc_set_fade_with_time(ledc_channel.speed_mode,ledc_channel.channel, 8000, 3000);
ledc_fade_start(ledc_channel.speed_mode,ledc_channel.channel, LEDC_FADE_NO_WAIT);
vTaskDelay(3000 / portTICK_PERIOD_MS);
}
}
上記の例は、チャネル出力、LEDライト、初期化時のデューティサイクルは0、LEDライトは最初は最も明るく、次に目標デューティサイクルは8000(解像度LEDC_TIMER_13_BIT
、最大8192)で、3000ms以内に設定されます。勾配を完了します。 。
上記の例をプログラムすると、LEDライトが3秒以内に明るい色から暗い色に変わり、消えないことがわかります。完全に消えるには、8192に設定する必要があります。
上記は1回だけ実行されるため、毎回オンとオフを切り替える必要があります。次のように、勾配の前にデューティサイクルを0に設定する必要があります。
上記のテストによると、完成した呼吸光プログラムは次のようになります。
2.2ESP32-C3とESP32LEDCの違い
これらの違いはすべて、サンプルコードをテストし、構成を変更し、基盤となるドライバーを確認することで判断されるため、ここで違いがあるのはなぜですか。
2.2.1チャネル数
前の基本的な紹介で述べたように、ESP32-C3には6つのPWMチャネルしかなく、 ESP32には8つのチャネルがあります。これは、ESP32C3テクニカルリファレンスマニュアルにも記載されています。
2.2.2速度モード
例の元のプログラムでは、ESP32-C3が使用されている場合、すべてLEDC_LOW_SPEED_MODE
低速モードでありledc_mode_t
、構造の定義を確認できます。
高速モードは公式ウェブサイトの紹介で言及されていました
が、ESP32C3テクニカルリファレンスマニュアルには高速モードについての説明がありません(私はそれを見つけられませんでした= =!)、そしてテスト中に私は試しました速度モードを高速に設定するには:
.speed_mode = LEDC_HIGH_SPEED_MODE, // timer mode
それは確かにエラーです。基本的な手順ESP32-C3のPWMは高速モードをサポートしていません
次に、ESP32チップの構成ファイルの下に定義があります。彼は実際に高速チャネルを使用できます(コードドライバーが公式に提供されているため、コードから判断すると、チップのマニュアルに従って作成する必要があります)
。 ESP32-C3構成ファイル関連するマクロ定義はありません。
2.2.3解決策
解像度構造ledc_timer_bit_t
の場合、チップごとにサポートされる解像度も異なります。
現在使用しているESP32-C3の場合、最大14ビットしかサポートできませんが
、ESP32は最大20ビットをサポートできます。