ESP32-C3入門チュートリアルの基本(7. LEDC-LED PWMコントローラー)

测试第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を使用する手順を見て、サンプルコードに従ってそれを分析してテストしましょう。

ここに画像の説明を挿入

  1. タイマーを構成し、ledc_timer_config関数を使用すると、パラメーターはledc_timer_config_t構造体になります。
    ここに画像の説明を挿入
    この例では、次の構成があります。
    ここに画像の説明を挿入
    注:PWM周波数が高いほど、デューティサイクルの分解能は低くなり、その逆も同様です。対応する関係は次のとおりです。
    ここに画像の説明を挿入

  2. チャネルledc_channel_configを構成します。パラメーターはledc_channel_config_t構造です。
    ここに画像の説明を挿入
    この例では、次の構成があります。例としてチャネルを取り上げます
    ここに画像の説明を挿入
    。ESP32-C3には6つのチャネルしかないことに注意してください。
    ここに画像の説明を挿入

  3. 上記の設定が完了したら、対応する操作で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ビットをサポートできます。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_42328389/article/details/122618065