<progress id="jlsnq"><code id="jlsnq"></code></progress>

<strong id="jlsnq"><del id="jlsnq"></del></strong>
    <mark id="jlsnq"></mark>

    <legend id="jlsnq"><table id="jlsnq"></table></legend>
    <small id="jlsnq"></small>
  • <ruby id="jlsnq"><table id="jlsnq"></table></ruby>

      <strong id="jlsnq"></strong>

      24小時聯系電話:18217114652、13661815404

      中文

      您當前的位置:
      首頁>
      電子資訊>
      公司新聞>
      如何在 ESP32 中使用 ...

      公司新聞

      如何在 ESP32 中使用 PWM


      如何在 ESP32 中使用 PWM

      脈寬調制 ( PWM ) 是一種廣泛使用的電力傳輸技術。ESP32 有專用的 PWM 硬件。信號或電源的脈寬調制 (PWM) 是一種修改周期信號(例如正弦信號或方波信號)的占空比的技術。周期信號的占空比是其正部分相對于周期的相對寬度。

      PWM 電路的典型結構是使用具有兩個輸入和一個輸出的比較器來實現的。其中一個輸入連接到鋸齒波振蕩器,而另一個可用于調制信號。在輸出端,頻率通常等于鋸齒信號的頻率,占空比是載波的函數。PWM 電路的主要缺點是可能存在射頻干擾。通過將控制器靠近負載并過濾電源,可以最大限度地減少這些問題。

      ESP32 PWM 可以驅動 LED、電機(普通直流電機、無刷電機)、智能燈等。典型的 PWM 信號具有 PWM 頻率、PWM 分辨率和 PWM 占空比。如果我們改變 PWM 的占空比參數,那么脈沖的寬度也會改變。分辨率是一種衡量標準,可讓我們了解我們可以控制多少個離散的占空比級別。PWM 分辨率 = log2(級別數)。分辨率越高,對占空比的控制就越精細。

      Arduino中我們使用該analogWrite()函數來實現PWM。但模擬寫入功能尚未在 ESP32 Arduino 版本中實現。而是ledcWrite()引入了一個名為的新函數。使用引腳 5 連接 LED 并使用以下代碼進行測試:

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      #define LED_GPIO   5

      #define PWM1_Ch    0

      #define PWM1_Res   8

      #define PWM1_Freq  1000

       

      int PWM1_DutyCycle = 0;

       

      void setup()

      {

        ledcAttachPin(LED_GPIO, PWM1_Ch);

        ledcSetup(PWM1_Ch, PWM1_Freq, PWM1_Res);

      }

       

      void loop()

      {

        while(PWM1_DutyCycle < 255)

        {

          ledcWrite(PWM1_Ch, PWM1_DutyCycle++);

          delay(10);

        }

        while(PWM1_DutyCycle > 0)

        {

          ledcWrite(PWM1_Ch, PWM1_DutyCycle--);

          delay(10);

        }

      }

      這是帶電位器的伺服電機的測試代碼:

      #include <ESP32Servo.h>

      Servo servo1; // create a servo object

      #define potWiper 36

      #define servoPin 19

      #define twoTo12th 4095

      #define delay1 150

       

      int intValue;

       

      void setup() {

       

      servo1.attach(servoPin); // attach the servo to servoPin

       

      Serial.begin(9600); // setup display monitor (work at 9600 baud) }

       

      void loop() {

      intValue = analogRead(potWiper); // read value at pin potWiper pin

      intValue = map(intValue, 0, twoTo12th, 0, 180); // convert value read to value from 0 to 180

      servo1.write(intValue); // move the servo to position intValue

      Serial.print("Servo Angle = "); // display the

      Serial.println(intValue); // servo angle on display monitor

      delay(delay1); // allow the servo time to get to position

      }

      這是一個非常短的片段/草圖,您可以將其用于直流電機和鍋:

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      const byte led_pin = 15;

      const byte pot_pin = 4;

      void setup() {

      ledcAttachPin (led_pin,0);

      ledcSetup(0,5000,8); // channel 0, pwm freq 5 khz, Resolution 8 bits

      }

       

      void loop() {

      ledcWrite(0,analogRead(pot_pin);

      }

      一個 L293 板/模塊可以控制 2 個直流電機并提供 500ma 電流。為控制每臺電機2組控制,提供引腳。您可以將此模塊與上述代碼一起使用來構建基本的機器人汽車。

      請輸入搜索關鍵字

      確定
      色鲁99热99re超碰精品_91精品一区二区三区无码吞精_亚洲国产欧洲综合997久久_一级a性色生活片久久无
      <progress id="jlsnq"><code id="jlsnq"></code></progress>

      <strong id="jlsnq"><del id="jlsnq"></del></strong>
        <mark id="jlsnq"></mark>

      <legend id="jlsnq"><table id="jlsnq"></table></legend>
      <small id="jlsnq"></small>
    1. <ruby id="jlsnq"><table id="jlsnq"></table></ruby>

        <strong id="jlsnq"></strong>