日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

啟明智顯分享丨ESP32學(xué)習(xí)筆記參考

QiMingZhiXian ? 來源:QiMingZhiXian ? 作者:QiMingZhiXian ? 2022-03-22 17:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

--提示:啟明智顯專為智能產(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è)中斷。

pYYBAGI5mFuAc6fOAABw7swroKI099.png圖1

在解釋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%

pYYBAGI5mLyAegNRAABb1_Plw7Q491.png圖2

● **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
#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輸出)

poYBAGDUrDuAGICVAADbYmZt8Wc001.png圖3

從上圖我們不難發(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ū)?a href="http://m.sdkjxy.cn/tags/步進(jìn)電機(jī)/" target="_blank">步進(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
#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);
}
```
審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    244

    文章

    24740

    瀏覽量

    692876
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    116

    文章

    5896

    瀏覽量

    226854
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    還在為內(nèi)置 DDR 主控芯片缺貨煩惱?啟明智 T153 核心板徹底解決缺貨難題!

    芯片缺貨、交期拉長、成本飆升……不少工業(yè)項(xiàng)目卡在內(nèi)置DDR主控芯片供應(yīng)鏈上,研發(fā)停滯、量產(chǎn)受阻、交付遙遙無期?現(xiàn)在,啟明智T153工業(yè)級(jí)核心板強(qiáng)勢(shì)登場(chǎng),以全國產(chǎn)化供應(yīng)鏈+穩(wěn)定量產(chǎn)交付+專屬技術(shù)支持
    的頭像 發(fā)表于 04-29 18:03 ?299次閱讀
    還在為內(nèi)置 DDR 主控芯片缺貨煩惱?<b class='flag-5'>啟明智</b><b class='flag-5'>顯</b> T153 核心板徹底解決缺貨難題!

    樂鑫科技新品ESP32-H4亮點(diǎn)速遞!

    近期,樂鑫科技新品發(fā)布節(jié)奏持續(xù)加快。作為樂鑫科技一級(jí)代理商,啟明云端為您帶來最新芯片產(chǎn)品ESP32-H4的詳細(xì)解讀。ESP32-H4隸屬于樂鑫科技ESP32-H系列,在低功耗物聯(lián)網(wǎng)應(yīng)用
    的頭像 發(fā)表于 04-16 18:05 ?528次閱讀
    樂鑫科技新品<b class='flag-5'>ESP32</b>-H4亮點(diǎn)速遞!

    【新品抽獎(jiǎng)】ESP32-P4+ESP32-C61雙芯核心板正式發(fā)布! 啟明云端樂鑫代理及方案商

    正式推出WT01P461-S1核心板。這款模組采用ESP32-P4+ESP32-C61雙芯片架構(gòu),將高性能處理與新一代無線通信合二為一,為智能家居、工業(yè)控制及人機(jī)交
    的頭像 發(fā)表于 03-12 18:13 ?454次閱讀
    【新品抽獎(jiǎng)】<b class='flag-5'>ESP32-P4+ESP32</b>-C61雙芯核心板正式發(fā)布! <b class='flag-5'>啟明</b>云端樂鑫代理及方案商

    ESP32里的AI Agent:EmbedClaw上手教程!啟明云端樂鑫代理及方案商

    EmbedClawEmbedClaw是啟明云端開源的一個(gè)可以跑在ESP32上的AIAgent項(xiàng)目。這個(gè)項(xiàng)目最有意思的地方,不是“能聊天”,而是它把幾個(gè)最容易纏在一起的模塊拆開了:LLM:現(xiàn)在接的是千
    的頭像 發(fā)表于 03-11 18:13 ?1699次閱讀
    <b class='flag-5'>ESP32</b>里的AI Agent:EmbedClaw上手教程!<b class='flag-5'>啟明</b>云端樂鑫代理及方案商

    再升級(jí)!啟明智5G CPE專屬APP即將來襲!

    好消息要開門見山!啟明智5GCPE專屬APP,它真的來了!啟明智的CPE,要真正實(shí)現(xiàn)“隨時(shí)隨地,盡在掌握”了!1回顧來時(shí)路:云端管理與無感升級(jí)的基石此前,我們通過遠(yuǎn)程WEB管理平臺(tái)
    的頭像 發(fā)表于 02-10 18:03 ?864次閱讀
    再升級(jí)!<b class='flag-5'>啟明智</b><b class='flag-5'>顯</b>5G CPE專屬APP即將來襲!

    啟明智5G CPE解決方案:支持快速OEM貼牌,一鍵打造自主品牌

    在競爭激烈的5GCPE市場(chǎng)中,如何快速推出有競爭力的自主品牌產(chǎn)品?對(duì)于眾多OEM客戶而言,擁有一套成熟可靠、支持深度定制且能快速上市的解決方案至關(guān)重要。啟明智5GCPE解決方案,正是為賦能品牌而生
    的頭像 發(fā)表于 01-27 18:24 ?650次閱讀
    <b class='flag-5'>啟明智</b><b class='flag-5'>顯</b>5G CPE解決方案:支持快速OEM貼牌,一鍵打造自主品牌

    Wi-Fi/藍(lán)牙無線通信!樂鑫ESP32-S3方案3.5寸觸摸串口彩屏,支持LVGL低代碼UI開發(fā)!

    快速、高效、穩(wěn)定的HMI方案來了!啟明智SC01Plus3.5寸觸摸串口屏,基于ESP32-S3方案打造,支持RS485通訊接口以及Wi-Fi/藍(lán)牙無線通信,簡直是為嵌入式交互而生的HMI解決方案
    的頭像 發(fā)表于 01-16 18:18 ?1474次閱讀
    Wi-Fi/藍(lán)牙無線通信!樂鑫<b class='flag-5'>ESP32</b>-S3方案3.5寸觸摸串口彩屏,支持LVGL低代碼UI開發(fā)!

    樂鑫科技ESP-AMP框架詳解!兩款已支持的ESP32-P4C5開發(fā)板推薦!啟明云端樂鑫科技代理

    操作系統(tǒng),并提供完整的核間通信機(jī)制。啟明云端旗兩款高性能開發(fā)板——WT99P4C5-S1與WTDKP4C5-S1,搭載樂鑫科技ESP32-P4芯片和ESP32-C5芯
    的頭像 發(fā)表于 12-18 18:02 ?2221次閱讀
    樂鑫科技<b class='flag-5'>ESP</b>-AMP框架詳解!兩款已支持的<b class='flag-5'>ESP32</b>-P4C5開發(fā)板推薦!<b class='flag-5'>啟明</b>云端樂鑫科技代理

    LVGL實(shí)戰(zhàn)指南:手把手教你玩轉(zhuǎn)ESP32-S3 2.8寸串口屏UI開發(fā)

    ,讓你在最短時(shí)間內(nèi),親眼看到LVGL界面在啟明智ESP32-S32.8寸屏上流暢運(yùn)行。無需痛苦的摸索,跟著我們的步驟,從零到一,全程暢通無阻。搭建ESP-IDF環(huán)境
    的頭像 發(fā)表于 10-30 18:04 ?2929次閱讀
    LVGL實(shí)戰(zhàn)指南:手把手教你玩轉(zhuǎn)<b class='flag-5'>ESP32</b>-S3 2.8寸串口屏UI開發(fā)

    啟明智彩屏產(chǎn)品重磅合集:全尺寸、多接口,一站式賦能智能設(shè)備升級(jí)

    在智能化浪潮席卷全球的今天,顯示技術(shù)作為人機(jī)交互的核心載體,正以前所未有的深度融入各行各業(yè)。啟明智彩屏產(chǎn)品系列覆蓋0.96至55英寸全尺寸范圍,基于ESP32系列及Model3C、Model3A等
    的頭像 發(fā)表于 09-11 18:03 ?1230次閱讀
    <b class='flag-5'>啟明智</b><b class='flag-5'>顯</b>彩屏產(chǎn)品重磅合集:全尺寸、多接口,一站式賦能智能設(shè)備升級(jí)

    啟明智5G CPE,咖啡連鎖店鋪的云端智能管理中樞

    在連鎖零售、餐飲等行業(yè),分散的門店管理是核心痛點(diǎn)。傳統(tǒng)網(wǎng)絡(luò)依賴?yán)W(wǎng)線和本地調(diào)試,總部難以統(tǒng)一管控設(shè)備。啟明智5GCPE的云端設(shè)備管理平臺(tái),讓某咖啡品牌總部擁有“云端指揮中心”,打破地域限制,實(shí)現(xiàn)
    的頭像 發(fā)表于 07-23 18:02 ?1278次閱讀
    <b class='flag-5'>啟明智</b><b class='flag-5'>顯</b>5G CPE,咖啡連鎖店鋪的云端智能管理中樞

    啟明智5G CPE 重磅升級(jí):云端設(shè)備管理與遠(yuǎn)程OTA全面上線!

    啟明智旗下5GCPE產(chǎn)品迎來重要升級(jí),核心聚焦于云端設(shè)備管理與高效OTA升級(jí)功能。此次升級(jí)打破了傳統(tǒng)設(shè)備管理的地域限制,為用戶提供遠(yuǎn)程化、集中化的設(shè)備管控能力,顯著提升運(yùn)維效率與靈活性。核心
    的頭像 發(fā)表于 07-15 18:07 ?1427次閱讀
    <b class='flag-5'>啟明智</b><b class='flag-5'>顯</b>5G CPE 重磅升級(jí):云端設(shè)備管理與遠(yuǎn)程OTA全面上線!

    你說性能強(qiáng)就強(qiáng)嗎?啟明智5G CPE直接用實(shí)測(cè)數(shù)據(jù)說話!

    誰家賣產(chǎn)品都會(huì)說自己的產(chǎn)品有多厲害,但是拿到手就翻車,也就那么回事。我們也經(jīng)常說啟明智5GCPE性能有多頂,性價(jià)比有多高。光說也說服不了人,不如上家伙實(shí)測(cè)一下!看看到底有多頂。本次我們拿出啟明智
    的頭像 發(fā)表于 07-01 18:03 ?2573次閱讀
    你說性能強(qiáng)就強(qiáng)嗎?<b class='flag-5'>啟明智</b><b class='flag-5'>顯</b>5G CPE直接用實(shí)測(cè)數(shù)據(jù)說話!

    啟明智CPE系列固件升級(jí)至 6.5.1,功能再拓展?

    近日,啟明智宣布其CPE系列固件迎來重大升級(jí),新版本6.5.1在原有功能基礎(chǔ)上,新增了多項(xiàng)實(shí)用特性,為用戶帶來更為出色的網(wǎng)絡(luò)體驗(yàn)。啟明智CPE系列產(chǎn)品憑借其強(qiáng)大的功能,在市場(chǎng)上已獲
    的頭像 發(fā)表于 06-25 18:01 ?1175次閱讀
    <b class='flag-5'>啟明智</b><b class='flag-5'>顯</b>CPE系列固件升級(jí)至 6.5.1,功能再拓展?

    啟明智5G CPE重磅升級(jí)!全線支持原生OpenWrt 24.10.1!

    啟明智5GCPE系列再度迎來升級(jí)!即日起,全系5GCPE產(chǎn)品支持OpenWrt24.10.1系統(tǒng),以更強(qiáng)大的內(nèi)核、更極致的兼容性,重塑智能網(wǎng)絡(luò)體驗(yàn)新標(biāo)準(zhǔn)!OpenWrt24.10.1:自由拓展無邊
    的頭像 發(fā)表于 06-24 18:04 ?1526次閱讀
    <b class='flag-5'>啟明智</b><b class='flag-5'>顯</b>5G CPE重磅升級(jí)!全線支持原生OpenWrt 24.10.1!
    阳泉市| 丽江市| 株洲县| 陆川县| 九龙坡区| 海城市| 武汉市| 北辰区| 瑞安市| 洛阳市| 望城县| 禹城市| 开江县| 博罗县| 竹溪县| 岳普湖县| 中方县| 彰化县| 康定县| 衡南县| 临泽县| 苏尼特左旗| 外汇| 报价| 司法| 济源市| 白河县| 福泉市| 安义县| 科技| 临邑县| 镇雄县| 施秉县| 大竹县| 绥阳县| 灯塔市| 清苑县| 敦化市| 大连市| 辉南县| 黄骅市|