ESP32 MCPWM 使用指南與範例
引言
ESP32 是一款功能強大的微控制器,其中 MCPWM (Motor Control Pulse Width Modulation) 模組是一個非常實用的功能,特別適合用於電機控制等 應用。本文將詳細介紹 ESP32 的 MCPWM 功能,並提供具體的程式碼範例,包括基本的 PWM 輸出和步進電機控制。
ESP32 引腳功能推薦
在開始使用 MCPWM 之前,我們先來了解一下 ESP32 的引腳功能。合理選擇引腳可以讓您的項目更加穩定高效。
通用 GPIO (輸入/輸出)
以下引腳沒有特殊功能限制,可以安全地用於大多數項目:
- GPIO 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33
這些引腳適合用於一般的數位輸入/輸出操作,如控制 LED、讀取按鈕狀態等。
ADC (類比數位轉換)
ESP32 提供兩組 ADC,推薦使用以下引腳:
- ADC1: GPIO 36, 39, 32, 33, 34, 35
- ADC2 (僅在 Wi-Fi 未啟用時可用): GPIO 4, 0, 2, 15, 13, 12, 14, 27, 25, 26
ADC 用於讀取類比信號,如感測器輸出、電池電壓等。注意 ADC2 在使用 Wi-Fi 時可能不可用。
DAC (數位類比轉換)
ESP32 有兩個 DAC 通道,僅限以下引腳:
- GPIO 25, 26
DAC 可以輸出類比電壓,適用於音頻輸出或控制類比設備。
PWM (脈衝寬度調變)
除了 GPIO 34-39 和 SPI flash 引腳 (6-11) 外,所有輸出引腳都可用於 PWM。推薦使用:
- GPIO 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33
PWM 可用於 LED 亮度控制、馬達速度控制等應用。
MCPWM (高級 PWM)
ESP32 有兩個 MCPWM 單元(MCPWM0 和 MCPWM1),每個單元有 3 個定時器和 6 個輸出。
- MCPWM0 和 MCPWM1 可用引腳:GPIO 0, 2, 4, 5, 12, 13, 14, 15, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33
- 推薦使用:GPIO 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33
MCPWM 特別適合用於複雜的電機控制應用,如無刷直流電機、步進電機等。
互補輸出
每個 MCPWM 單元的 6 個輸出被分為 3 對,每對可以輸出互補信號。互補對可以分配到幾乎任意 GPIO 組合。對於互補輸出,您需要選擇同一 MCPWM 單元中的一對輸出。例如:
- MCPWM0:
- PWM0A - PWM0B
- PWM1A - PWM1B
- PWM2A - PWM2B
- MCPWM1 同理
互補輸出在控制 H 橋電路時特別有用,可以確保兩個開關不會同時導通。
I2C
默認引腳如下:
- SDA:GPIO 21
- SCL:GPIO 22
可配置為其他引腳,但推薦使用默認值以保持一致性。I2C 用於與各種感測器和顯示器通信。
SPI
ESP32 支持兩組 SPI 引腳:
- VSPI (默認):
- MOSI:GPIO 23
- MISO:GPIO 19
- CLK:GPIO 18
- CS:GPIO 5
- HSPI:
- MOSI:GPIO 13
- MISO:GPIO 12
- CLK:GPIO 14
- CS:GPIO 15
SPI 用於高速數據傳輸,如讀寫 SD 卡、控制顯示屏等。
UART
ESP32 有三個 UART 模組,引腳配置如下:
- UART0 (默認):
- TX:GPIO 1
- RX:GPIO 3
- UART1:
- TX:GPIO 10
- RX:GPIO 9
- UART2:
- TX:GPIO 17
- RX:GPIO 16
UART 用於串列通信,如與電腦通信或連接 GPS 模組等。
電容式觸摸傳感器
推薦使用以下引腳,避免使用 Strapping 引腳:
- GPIO 13, 14, 27, 32, 33
這些引腳可用於創建觸摸感應界面。
RTC GPIO (深度睡眠模式可用)
以下引腳在深度睡眠模式下仍然可用:
- GPIO 0, 2, 4, 12-15, 25-27, 32-39
這些引腳可用於在低功耗模式下喚醒設備。
模擬霍爾傳感器
僅限以下引腳:
- GPIO 36, 39
這些引腳專門用於連接霍爾效應感測器,用於檢測磁場。