<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
        首頁 新聞 工控搜 論壇 廠商論壇 產(chǎn)品 方案 廠商 人才 文摘 下載 展覽
        中華工控網(wǎng)首頁
          P L C | 變頻器與傳動(dòng) | 傳感器 | 現(xiàn)場(chǎng)檢測(cè)儀表 | 工控軟件 | 人機(jī)界面 | 運(yùn)動(dòng)控制
          D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場(chǎng)總線 | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測(cè)控 | 工業(yè)安全
          電 源 | 嵌入式系統(tǒng) | PC based | 機(jī)柜箱體殼體 | 低壓電器 | 機(jī)器視覺
        啟明智顯分享| ESP32學(xué)習(xí)筆記參考--LED PWM 控制器與MCPWM的配置
        深圳市啟明智顯科技有限公司
        收藏本文     查看收藏

        --提示:啟明智顯專為智能產(chǎn)品提供一站式彩屏顯示+連接+云端服務(wù)+APP軟件開發(fā)、維護(hù)等解決方案,幫廠商快速實(shí)現(xiàn)硬件的智能化。作為啟明云端旗下方案公司,我們用心整理了開發(fā)小伙伴在開發(fā)過程中可能會(huì)遇到的問題以及快速上手的簡明教程,同時(shí)也用心整理了連接+顯示應(yīng)用的新方案!希望你能第一時(shí)間了解并快速用上好的方案和產(chǎn)品!--

        ## 一、LED PWM 控制器

        ### 1、簡介

        LED 控制器 (LEDC) 主要用于控制 LED,也可產(chǎn)生 PWM 信號(hào)用于其他設(shè)備的控制。 該控制器有 16 路通道,可以產(chǎn)生獨(dú)立的波形來驅(qū)動(dòng) RGB LED 等設(shè)備。

        LEDC 通道共有兩組,分別為 8 路高速通道和 8 路低速通道。高速通道模式在硬件中實(shí)現(xiàn),可以自動(dòng)且無干擾地改變 PWM 占空比。低速通道模式下,PWM 占空比需要由軟件中的驅(qū)動(dòng)器改變。每組通道都可以使用不同的時(shí)鐘源。

        LED PWM 控制器可在無需 CPU 干預(yù)的情況下自動(dòng)改變占空比,實(shí)現(xiàn)亮度和顏色漸變。

        [參考](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html)

        設(shè)置 LEDC 通道在 [高速模式或低速模式](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#ledc-api-high-low-speed-mode) 下運(yùn)行,需要進(jìn)行如下配置:

        1. [定時(shí)器配置](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#ledc-api-configure-timer) 指定 PWM 信號(hào)的頻率和占空比分辨率。
        2. [通道配置](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#ledc-api-configure-channel) 綁定定時(shí)器和輸出 PWM 信號(hào)的 GPIO。
        3. [改變 PWM 信號(hào)](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#ledc-api-change-pwm-signal) 輸出 PWM 信號(hào)來驅(qū)動(dòng) LED。可通過軟件控制或使用硬件漸變功能來改變 LED 的亮度。

        另一個(gè)可選步驟是可以在漸變終端設(shè)置一個(gè)中斷。

        在解釋ESP32上的PWM功能之前,讓我們討論一些與PWM相關(guān)的術(shù)語。

        ●  **TON(導(dǎo)通時(shí)間)**:信號(hào)為高電平時(shí)的持續(xù)時(shí)間。

        ●  **TOFF(關(guān)斷時(shí)間)**:信號(hào)為低電平時(shí)的持續(xù)時(shí)間。

        ●  **周期**:PWM信號(hào)的導(dǎo)通時(shí)間和關(guān)斷時(shí)間之和。

        ●  **占空比**:PWM信號(hào)周期內(nèi)信號(hào)為高電平的時(shí)間百分比。

        ?    例如,如果總周期為10ms的脈沖保持 ON(高)5ms。然后,占空比將為:占空比 = 5/10 * 100 = 50%

        ●  **PWM的頻率:**PWM信號(hào)的頻率決定了PWM完成一個(gè)周期的速度。一個(gè)周期是一個(gè)PWM信號(hào)的完整ON和OFF,如上圖所示。

        ### 2、配置定時(shí)器

        要設(shè)置定時(shí)器,可調(diào)用函數(shù) [`ledc_timer_config()`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv417ledc_timer_configPK19ledc_timer_config_t),并將包括如下配置參數(shù)的數(shù)據(jù)結(jié)構(gòu) [`ledc_timer_config_t`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv419ledc_timer_config_t) 傳遞給該函數(shù):

        - 速度模式 [`ledc_mode_t`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv411ledc_mode_t)
        - 定時(shí)器索引 [`ledc_timer_t`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv412ledc_timer_t)
        - PWM 信號(hào)頻率
        - PWM 占空比分辨率
        - 時(shí)鐘源 [`ledc_clk_cfg_t`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv414ledc_clk_cfg_t)

        頻率和占空比分辨率相互關(guān)聯(lián)。PWM 頻率越高,占空比分辨率越低,反之亦然。如果 API 不是用來改變 LED 亮度,而是用于其它目的,這種相互關(guān)系可能會(huì)很重要。更多信息詳見 [頻率和占空比分辨率支持范圍](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#ledc-api-supported-range-frequency-duty-resolution) 一節(jié)。

        時(shí)鐘源同樣可以限制PWM頻率。選擇的時(shí)鐘源頻率越高,可以配置的PWM頻率上限就越高。
         

        時(shí)鐘名稱 時(shí)鐘頻率 速度模式 時(shí)鐘功能
        APB_CLK 80 MHz 高速 / 低速 /
        REF_TICK 1 MHz 高速 / 低速 支持動(dòng)態(tài)調(diào)頻(DFS)功能
        RTC8M_CLK ~8 MHz 低速 支持動(dòng)態(tài)調(diào)頻(DFS)功能,支持Light-sleep模式

        **通道配置**

        定時(shí)器設(shè)置好后,請(qǐng)配置所需的通道([`ledc_channel_t`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv414ledc_channel_t) 之一)。配置通道需調(diào)用函數(shù) [`ledc_channel_config()`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv419ledc_channel_configPK21ledc_channel_config_t)。

        通道的配置與定時(shí)器設(shè)置類似,需向通道配置函數(shù)傳遞包括通道配置參數(shù)的結(jié)構(gòu)體 [`ledc_channel_config_t`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv421ledc_channel_config_t) 。

        此時(shí),通道會(huì)按照 [`ledc_channel_config_t`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv421ledc_channel_config_t) 的配置開始運(yùn)作,并在選定的 GPIO 上生成由定時(shí)器設(shè)置指定的頻率和占空比的 PWM 信號(hào)。在通道運(yùn)作過程中,可以隨時(shí)通過調(diào)用函數(shù) [`ledc_stop()`](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/ledc.html#_CPPv49ledc_stop11ledc_mode_t14ledc_channel_t8uint32_t) 將其暫停。
         

        ### 3、示例

        ```c
        //1. ESP32 下面是一個(gè)呼吸燈的整理,可以直接使用,歡迎參考。
        #include <stdio.h>
        #include "freertos/FreeRTOS.h"
        #include "freertos/task.h"
        #include "driver/ledc.h"
        #include "esp_err.h"
        #define LEDC_HS_TIMER          LEDC_TIMER_0
        #define LEDC_HS_MODE           LEDC_HIGH_SPEED_MODE
        #define LEDC_HS_CH0_CHANNEL    LEDC_CHANNEL_0
        #define LEDC_HS_CH0_GPIO       (2)
        #define LEDC_TEST_DUTY         (4000)
        #define LEDC_TEST_FADE_TIME    (3000)
        void app_main(void)
        {
            //1. PWM: 定時(shí)器配置

            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_HS_MODE,           // timer mode
                .timer_num = LEDC_HS_TIMER,            // timer index
                .clk_cfg = LEDC_AUTO_CLK,              // Auto select the source clock
            };

            ledc_timer_config(&ledc_timer);
            //2. PWM:通道配置
            ledc_channel_config_t ledc_channel= {
                .channel    = LEDC_HS_CH0_CHANNEL,
                .duty       = 0,
                .gpio_num   = LEDC_HS_CH0_GPIO, //這里是SDK帶的呼吸燈案例,你看下能看懂不,我現(xiàn)在給你修改個(gè)引腳,你的燈就用上了, 2表示你板子上的那個(gè)燈 2引腳的那個(gè)
                .speed_mode = LEDC_HS_MODE,
                .hpoint     = 0,
                .timer_sel  = LEDC_HS_TIMER  
            };

            ledc_channel_config(&ledc_channel);
            //3.PWM:使用硬件漸變
            ledc_fade_func_install(0);
            //4. 輸出PWM信號(hào)控制燈

            while (1) {
                //燈:由滅慢慢變亮
                printf("1. LEDC fade up to duty = %d\n", LEDC_TEST_DUTY);
                ledc_set_fade_with_time(ledc_channel.speed_mode,
                        ledc_channel.channel, LEDC_TEST_DUTY, LEDC_TEST_FADE_TIME);
                ledc_fade_start(ledc_channel.speed_mode,
                        ledc_channel.channel, LEDC_FADE_NO_WAIT);
                vTaskDelay(LEDC_TEST_FADE_TIME / portTICK_PERIOD_MS);
                //燈:由亮慢慢變滅
                printf("2. LEDC fade down to duty = 0\n");
                ledc_set_fade_with_time(ledc_channel.speed_mode,
                        ledc_channel.channel, 0, LEDC_TEST_FADE_TIME);
                ledc_fade_start(ledc_channel.speed_mode,
                        ledc_channel.channel, LEDC_FADE_NO_WAIT);
                vTaskDelay(LEDC_TEST_FADE_TIME / portTICK_PERIOD_MS);
            }
        }
        ```

        ## 二、Motor Control Pulse Width Modulator(MCPWM)

        ### 1、簡介

        ESP32有兩個(gè)MCPWM單元,可用于控制不同類型的電機(jī)。每個(gè)單元有三對(duì)PWM輸出。

        **作用**:

        - PWM輸出
        - 每個(gè)單元還能夠收集諸如同步信號(hào)等輸入,檢測(cè)電機(jī)過電流或過電壓等故障信號(hào),
        - 以及在例如轉(zhuǎn)子位置上獲得捕獲信號(hào)的反饋。

        每個(gè)A/B對(duì)可由三個(gè)定時(shí)器中的任何一個(gè)MCPWM定時(shí)器0、1和2中的任何一個(gè)時(shí)鐘。(相同的定時(shí)器可用于時(shí)鐘多對(duì)PWM輸出)

        從上圖我們不難發(fā)現(xiàn),MCPWM具有的功能(上圖彩色的虛線框)有:

        - `OPERATOR `操作器模塊
        - `CAPTURE `狀態(tài)捕獲模塊
        - `FAULT DETECT`故障處理器模塊
        - `CLOCK/TIMER`時(shí)鐘、時(shí)鐘預(yù)分頻器模塊
          (黑色虛線框指的是GPIO矩陣 (GPIO Matrix))

        **1、操作器模塊 Operator**

        **操作員 (Operator) 用于操作連接到MCPWM單元的電機(jī)。**例如改變旋轉(zhuǎn)方向(順時(shí)針或逆時(shí)針),或改變轉(zhuǎn)速。

        ?      操作員輸出一共有 3 對(duì),我們可以對(duì)其施加控制信號(hào)。標(biāo)記為“A”和“B”的稱為一對(duì)。A、B均有自己對(duì)應(yīng)的名為“Generator”的子模塊來驅(qū)動(dòng)諸如PWM的輸出信號(hào)。

        ?      為了提供PWM信號(hào),每個(gè)Operator本身由三個(gè)可用的定時(shí)器(MCPWM Timer)中的任何一個(gè)進(jìn)行計(jì)時(shí)。  

        ?      為了簡化API,API會(huì) 自動(dòng)關(guān)聯(lián) 具有相同索引`Timer`以驅(qū)動(dòng)`Operator`。例如`Timer 0`與`Operator 0`關(guān)聯(lián)。

        **2、捕獲模塊 Capture**
              捕獲模塊在功能上相當(dāng)于由沿中斷控制的捕獲定時(shí)器

        ?      對(duì)于無刷直流電機(jī),控制的要求之一是感應(yīng)轉(zhuǎn)子位置。

        ?      為了完成這一任務(wù),每個(gè) MCPWM單元提供三個(gè)傳感輸入以及專用的硬件。該硬件能夠檢測(cè)輸入信號(hào)的邊緣,并測(cè)量信號(hào)之間的時(shí)間。

        ?       因此,控制軟件更簡單,CPU功率可能用于其他任務(wù)。

        注意:3個(gè)Capture可以在不使用PWM輸出時(shí)**單獨(dú)使用**,即只配置Capture實(shí)現(xiàn)邊緣捕獲功能。**因此MCPWM還可用于非電機(jī)外設(shè)**。例如,使用MCPWM的Capture0去捕獲**HC-SR04**超聲波模塊ECHO引腳的高電平時(shí)間,進(jìn)而實(shí)現(xiàn)測(cè)距。

        **3、故障處理器模塊 Fault Detect**
                MCPWM的每個(gè)單元都能夠感知外部信號(hào),包括有關(guān)電機(jī)、電機(jī)驅(qū)動(dòng)器或連接到MCPWM的任何其他設(shè)備的故障信息。每個(gè)單元有三個(gè)錯(cuò)誤輸入,可以路由到用戶可選擇的GPIO。當(dāng)接收到故障信號(hào)時(shí),MCPWM可以配置為對(duì)A/B輸出執(zhí)行四種預(yù)定義的動(dòng)作之一:

        - 鎖定輸出的當(dāng)前狀態(tài)

        - 設(shè)置低輸出

        - 設(shè)置高輸出

        - 開關(guān)輸出

          用戶應(yīng)確定電機(jī)可能的故障模式以及在檢測(cè)到特定故障時(shí)應(yīng)采取的行動(dòng)。

          例如:對(duì)有刷電機(jī)驅(qū)動(dòng)所有輸出為低,或?qū)Σ竭M(jìn)電機(jī)鎖定電流狀態(tài)等。這個(gè)動(dòng)作會(huì)使電機(jī)處于安全狀態(tài),以減少故障造成的損壞的可能性。

        **4、載波 Carrier和中斷 Interrupts**
               MCPWM有一個(gè)載波子模塊,如果使用互感原理(如通過變壓器)向電機(jī)驅(qū)動(dòng)傳遞A/B輸出信號(hào)(例如需要讓電機(jī)驅(qū)動(dòng)器輸入電流與ESP32 GPIO輸出電流相互隔離)。任何A和B輸出信號(hào)都可以100%占空,并且當(dāng)電機(jī)在滿載時(shí)需要穩(wěn)定運(yùn)行時(shí),信號(hào)不會(huì)改變。

        ?       通過調(diào)用`mcpwm_isr_register()`可以注冊(cè)MCPWM中斷處理程序。
        注意,如果使用了`mcpwm_capture_enable_channel()`,那么將安裝一個(gè)默認(rèn)的ISR例程來實(shí)現(xiàn)簡化API的回調(diào)。因此,如果使用了`mcpwm_capture_enable_channel()`,請(qǐng)不要再調(diào)用mcpwm_isr_register()這個(gè)函數(shù)來注冊(cè)中斷。

        ### 2、使用 MCPWM 輸出 PWM 信號(hào)

        #### 2.1 創(chuàng)建MCPWM

        初始化MCPWM需要的步驟:

        - 配置GPIO口

        - 在一個(gè)`mcpwm_config_t`結(jié)構(gòu)體中設(shè)置定時(shí)器頻率和初始任務(wù)的設(shè)置。

        - 非必須:設(shè)置定時(shí)器分辨率(默認(rèn)為10,000,000)。使用函數(shù)`mcpwm_group_set_resolution() `和 `mcpwm_timer_set_resolution()`
        - 使用上述參數(shù)調(diào)用mcpwm_init()以使配置生效。

        1,配置GPIO口:使用函數(shù)mcpwm_gpio_init()或函數(shù)mcpwm_set_pin()。

        兩者的區(qū)別是前者為指定的功能配置   GPIO,而后者是一次性配置所有的GPIO。

        **mcpwm_gpio_init()**  //初始化一個(gè)GPIO

        ```c
        esp_err_t mcpwm_gpio_init(mcpwm_unit_t mcpwm_num, mcpwm_io_signals_t io_signal, int gpio_num)    
        //mcpwm_num類型為:mcpwm_unit_t;MCPWM單元
        //io_signal類型為:mcpwm_io_signals_t;MCPWM功能signal,如MCPWM0A表示某MCPWM的A輸出
        //gpio_num類型為:int;表示想要配置為哪個(gè)GPIO
        ```

        **mcpwm_set_pin()**   //配置所有與MCPWM有關(guān)的GPIO

        ```c
        esp_err_t mcpwm_set_pin(mcpwm_unit_t mcpwm_num, const mcpwm_pin_config_t *mcpwm_pin)
        //mcpwm_num類型為:mcpwm_unit_t;表示MCPWM單元索引
        //*mcpwm_pin類型為:mcpwm_pin_config_t指針;表示一個(gè)結(jié)構(gòu)體,包含所有與MCPWM功能對(duì)于的GPIO
        ```

        2,配置mcpwm參數(shù)

        通過函數(shù)`mcpwm_init()`,傳遞一個(gè)`mcpwm_config_t`結(jié)構(gòu)體指針

        **mcpwm_init()**

        ```c
        esp_err_t mcpwm_init(mcpwm_unit_t mcpwm_num,
                             mcpwm_timer_t timer_num,
                             const mcpwm_config_t *mcpwm_conf)
        //mcpwm_num類型為:mcpwm_unit_t;表示MCPWM索引
        //timer_num類型為:mcpwm_timer_t;表示初始化哪個(gè)MCPWM定時(shí)器,對(duì)應(yīng)與其相同索引的Operator
        //*mcpwm_conf類型為:const mcpwm_config_t;表示配置結(jié)構(gòu)體指針
           
        typedef struct {
            uint32_t         frequency;//頻率
            float             cmpr_a;//A輸出的占空比
            float             cmpr_b;//B輸出的占空比
            mcpwm_duty_type_t        duty_mode;//占空比模式 (對(duì)應(yīng)高還是低)
            mcpwm_counter_type_t    counter_mode;//定時(shí)器計(jì)數(shù)方向
        }

        //示例
        mcpwm_config_t mcpwmConfig = {
            .frequency = 1000,
            .cmpr_a = 0,
            .cmpr_b = 0,
            .counter_mode = MCPWM_UP_COUNTER,
            .duty_mode = MCPWM_DUTY_MODE_0,
        };
        mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &mcpwmConfig);
        ```

        #### 2.2  PWM信號(hào)控制

        - **1、設(shè)置為全速(非PWM信號(hào))**
          我們可以使用`mcpwm_set_signal_high()`或`mcpwm_set_signal_low()`函數(shù)來驅(qū)動(dòng)特定的信號(hào)穩(wěn)定為高或低。這將使電機(jī)以最大速度旋轉(zhuǎn)或停止。

           **mcpwm_set_signal_high(或low) ()**   // 設(shè)置MCPWM的某個(gè)generator信號(hào)為高[或低]

          ```c
          esp_err_t mcpwm_set_signal_high(mcpwm_unit_t mcpwm_num,
                                          mcpwm_timer_t timer_num,
                                          mcpwm_generator_t gen)
          //mcpwm_num類型為:mcpwm_unit_t;表示MCPWM單元
          //timer_num類型為:mcpwm_timer_t;表示哪組MCPWM Operator
          //gen類型為:mcpwm_generator_t;表示對(duì)應(yīng)的A還是B
          ```

        - **2、設(shè)置PWM信號(hào)**
          若要更改PWM的占空比,調(diào)用`mcpwm_set_duty()`并以%為單位提供占空比的百分?jǐn)?shù)值。如果您希望以微秒為單位設(shè)置任務(wù),則可以選擇調(diào)用`mcpwm_set_duty_in_us()`。可以通過調(diào)用`mcpwm_set_duty_type()`來改變PWM占空比的模式(占空比數(shù)值對(duì)應(yīng)高還是對(duì)應(yīng)低)。

          **mcpwm_set_duty (in_us) ()** //設(shè)置占空比

          ```c
          esp_err_t mcpwm_set_duty(mcpwm_unit_t mcpwm_num,
                                   mcpwm_timer_t timer_num,
                                   mcpwm_generator_t gen,
                                   float duty)
          //mcpwm_num類型為:mcpwm_unit_t;表示MCPWM單元
          //timer_num類型為:mcpwm_timer_t;表示哪組MCPWM輸出
          //gen類型為:mcpwm_generator_t;表示A輸出還是B輸出
          //duty[_in_us]類型為:float;表示占空比百分?jǐn)?shù)%[或微秒]
          ```

        **mcpwm_set_duty_type()**   //設(shè)置占空比類型,并恢復(fù)PWM輸出

          ```c
          esp_err_t mcpwm_set_duty_type(mcpwm_unit_t mcpwm_num,
                                        mcpwm_timer_t timer_num,
                                        mcpwm_generator_t gen,
                                        mcpwm_duty_type_t duty_type)  
          //mcpwm_num類型為:mcpwm_unit_t;表示MCPWM單元
          //timer_num類型為:mcpwm_timer_t;表示哪組MCPWM輸出
          //gen類型為:mcpwm_generator_t;表示A輸出還是B輸出    
          //duty_type類型為:mcpwm_duty_type_t;表示占空比
          ```

        - **3、啟動(dòng)輸出**
          通過調(diào)用`mcpwm_start()`或`mcpwm_stop()`來驅(qū)動(dòng)PWM信號(hào)的輸出。 當(dāng)使用`mcpwm_init()`后,ESP32 會(huì)自動(dòng)調(diào)用`mcpwm_start()`啟動(dòng)電機(jī)

          **mcpwm_start(或stop)()** // 啟動(dòng)[或關(guān)閉]MCPWM輸出

          ```c
          esp_err_t mcpwm_start(mcpwm_unit_t mcpwm_num,
                                //mcpwm_num類型為:mcpwm_unit_t;表示MCPWM單元
                                mcpwm_timer_t timer_num)
                                //timer_num類型為:mcpwm_timer_t;表示哪組MCPWM
          ```

        ### 3、示例

        使用mcpwm驅(qū)動(dòng)直流電機(jī)

        ```c
        #include <stdio.h>
        #include "freertos/FreeRTOS.h"
        #include "freertos/task.h"
        #include "driver/mcpwm.h"

        #define GPIO_PWM0A_OUT 15 //設(shè)置 GPIO 15 作為 PWM0A
        #define GPIO_PWM0B_OUT 16 //設(shè)置 GPIO 16 作為 PWM0B

        //---------電機(jī)向前移動(dòng)
        static void brushed_motor_forward(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle)
        {
            mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B);
            mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_A, duty_cycle);
            mcpwm_set_duty_type(mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_1);
        }

        //--------- 電機(jī)向后移動(dòng)
        static void brushed_motor_backward(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle)
        {
            mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_A);
            //設(shè)置MCPWM的某個(gè)generator信號(hào)為高[或低]
            mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle);
            //設(shè)置占空比
            //mcpwm_num類型為:mcpwm_unit_t;表示MCPWM單元
            //timer_num類型為:mcpwm_timer_t;表示哪組MCPWM輸出
            //gen類型為:mcpwm_generator_t;表示A輸出還是B輸出
            //duty[_in_us]類型為:float;表示占空比百分?jǐn)?shù)%[或微秒]

            mcpwm_set_duty_type(mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_1);
            // 設(shè)置占空比類型,并恢復(fù)PWM輸出
        }

        //---------電機(jī)停止
        static void brushed_motor_stop(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num)
        {
            mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_A);
            mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B);
        }

        //---------為直流電機(jī)配置MCPWM
        static void mcpwm_task(void *arg)
        {
            //1. mcpwm gpio 初始化
            printf("initializing mcpwm gpio!\n");
            mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, GPIO_PWM0A_OUT); //配置GPIO口
            mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT);

            //2. 初始化 mcpwm 配置
            printf("Setting mcpwm!\n");
            mcpwm_config_t pwm_config = {
                .frequency = 1000,                //頻率 = 500Hz,
                .cmpr_a = 0,                      // PWMxA占空比 = 0
                .cmpr_b = 0,                      // PWMxB占空比 = 0
                .duty_mode = MCPWM_DUTY_MODE_0,   //占空比模式 (對(duì)應(yīng)高還是低)
                .counter_mode = MCPWM_UP_COUNTER, //定時(shí)器計(jì)數(shù)方向
            };
            mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config);

            while (1)
            {
                brushed_motor_forward(MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0);
                printf("正轉(zhuǎn)\n");
                vTaskDelay(2000 / portTICK_RATE_MS);
                brushed_motor_backward(MCPWM_UNIT_0, MCPWM_TIMER_0, 30.0);
                printf("逆轉(zhuǎn)\n");
                vTaskDelay(2000 / portTICK_RATE_MS);
                brushed_motor_stop(MCPWM_UNIT_0, MCPWM_TIMER_0);
                printf("停\n");
                vTaskDelay(2000 / portTICK_RATE_MS);
            }
        }

        void app_main(void)
        {
            printf("Testing motor !\n");
            xTaskCreate(mcpwm_task, "Mcpwm_task", 4096, NULL, 5, NULL);
        }
        ```


         

        狀 態(tài): 離線

        公司簡介
        產(chǎn)品目錄

        公司名稱: 深圳市啟明智顯科技有限公司
        聯(lián) 系 人: 楊楊
        電  話: 0755-22670222
        傳  真:
        地  址: 南山區(qū)國際創(chuàng)新谷6棟A座8樓
        郵  編: 518000
        主  頁:
         
         
        該廠商相關(guān)技術(shù)文摘:
        啟明智顯分享|如何通過matter協(xié)議實(shí)現(xiàn)燈亮滅控制
        樂鑫語音之文字轉(zhuǎn)語音(TTS)
        啟明云端邀您免費(fèi)申領(lǐng)ESP32-C2樣品
        啟明智顯分享|盤點(diǎn)86智能開關(guān)面板一季度行業(yè)頭號(hào)玩家們都發(fā)布了啥
        啟明智顯解決方案|基于ESP32-S386智能開關(guān)面板\溫控器,低成本解決方案
        啟明智顯分享| 2.4寸旋鈕串口屏在家用健身器材上的應(yīng)用
        啟明智顯低成本4.3寸串口屏解決案~兩輪電動(dòng)力儀表DEMO
        啟明智顯分享|4.3寸串口屏應(yīng)用于兩輪車儀表及充電樁
        更多文摘...
        立即發(fā)送詢問信息在線聯(lián)系該技術(shù)文摘廠商:
        用戶名: 密碼: 免費(fèi)注冊(cè)為中華工控網(wǎng)會(huì)員
        請(qǐng)留下您的有效聯(lián)系方式,以方便我們及時(shí)與您聯(lián)絡(luò)

        關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動(dòng)態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報(bào)
        工控網(wǎng)客服熱線:0755-86369299
        版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved

        主站蜘蛛池模板: 大香伊蕉在人线国产最新2005 | 办公室强奷漂亮少妇视频| 亚洲人成网线在线播放VA| 久久人人97超碰a片精品| 国产suv精品一区二区五| 欧美肥老太wbwbwbb | 国产精品无码一区二区三区电影| 亚洲色大18成人网站www在线播放| 亚洲免费视频一区二区三区| 亚洲国产精品成人无码区| 91在线精品麻豆欧美在线| 精品少妇人妻av无码专区| 欧美老人巨大XXXX做受视频| 青草精品在线视频观看| 国产不卡在线一区二区| 亚洲老女人区一区二视频| 日韩一区二区三区在线视频| 亚洲精品美女一区二区| 国产亚洲久久久久久久| 女人被爽到高潮视频免费国产| 午夜性做爰电影| 99RE8这里有精品热视频| 综合亚洲网| 亚洲 中文 欧美 日韩 在线| 日本边吃奶边摸边做在线视频| 亚洲国产欧美在线人成AAAA| 国产在线播放专区av| 久久久久99人妻一区二区三区| 99热精品毛片全部国产无缓冲| 国产精品一区二区av交换| 精品一区精品二区制服| 少妇无码AV无码专区| 国产精品理论片在线观看| 亚洲国产成人综合精品| 亚洲人成小说网站色在线| 亚洲国产精品一区二区久| 免费人成黄页网站在线观看国产 | 精品无码午夜福利理论片 | 成人欧美一区二区三区在线观看| 最近中文字幕完整版| 激情国产一区二区三区四区|