MCXA153 脈衝寬度調變 (PWM) 控制類別
更多...
#include <CorePulseWidth.h>
|
enum struct | Select : unsigned char { CTIMER0 = 0
, CTIMER1 = 1
, CTIMER2 = 2
} |
| CTIMER 定時器選擇枚舉 更多...
|
|
enum struct | Channel : unsigned char { MAT0 = 0
, MAT1 = 1
, MAT2 = 2
, MAT3 = 3
} |
| CTIMER 匹配通道選擇枚舉 更多...
|
|
MCXA153 脈衝寬度調變 (PWM) 控制類別
CorePulseWidth 類別提供基於 MCXA153 微控制器 CTIMER 模組的 PWM 信號產生功能。 支援多通道 PWM 輸出,可用於馬達控制、LED 調光、類比信號合成等應用。 實作了標準的 hal::counter::PulseWidth 介面。
主要功能:
- 可配置的 PWM 頻率 (週期設定)
- 多通道占空比控制 (0% 到 100%)
- 硬體定時器精確控制
- 同步多通道輸出
- 啟動/停止控制
硬體支援:
- 基於 CTIMER0/1/2 硬體定時器
- 每個定時器支援 4 個匹配通道 (MAT0-MAT3)
- 16位元解析度計數器
- 可變預分頻器支援寬頻率範圍
技術特性:
- PWM 頻率範圍:1Hz 到 MHz 級別
- 占空比解析度:依頻率和時鐘而定
- 輸出極性:可透過硬體配置控制
- 死區時間:支援互補輸出應用
典型應用:
- 馬達速度控制 (直流馬達、伺服馬達)
- LED 亮度調節和 RGB 顏色控制
- 音頻信號產生和揚聲器驅動
- 電源管理 (DC-DC 轉換器控制)
- 類比信號模擬 (透過低通濾波)
使用流程:
- 建構函數指定定時器和週期通道
- 調用 init() 初始化硬體
- 設定 PWM 頻率 setPeriod()
- 配置各通道占空比 setPercent()
- 啟動 PWM 輸出 start()
使用範例:
CorePulseWidth::Channel::MAT3);
pwm.init();
pwm.setPeriod(1000.0f);
pwm.setPercent(0, 50.0f);
pwm.setPercent(1, 25.0f);
pwm.start(true);
MCXA153 脈衝寬度調變 (PWM) 控制類別
Definition CorePulseWidth.h:103
效能考量:
- 較高頻率會降低占空比解析度
- 多通道同步輸出,無相位差
- 硬體實作,CPU 負載極低
- 支援中斷驅動的週期事件
重要限制:
- 同一定時器的所有通道共享相同頻率
- 週期通道不可用於 PWM 輸出
- 頻率變更會影響所有通道的輸出
- 某些極端頻率可能無法精確達成
- 參閱
- hal::counter::PulseWidth PWM 介面定義
-
Select 定時器選擇枚舉
-
Channel 通道選擇枚舉
- 警告
- 頻繁變更 PWM 設定可能產生輸出毛刺
- 註
- 繼承自 ufm::lang::Object 和 hal::counter::PulseWidth
◆ Channel
CTIMER 匹配通道選擇枚舉
用於選擇 CTIMER 模組中的匹配輸出通道。每個 CTIMER 提供 4 個匹配通道, 其中一個被指定為週期通道 (控制 PWM 頻率),其餘可用於 PWM 輸出。
枚舉值說明:
- MAT0: 匹配通道 0
- 暫存器:CTIMERx_MR0
- 輸出引腳:依 CTIMER 而定
- 常用作週期控制通道
- MAT1: 匹配通道 1
- 暫存器:CTIMERx_MR1
- 輸出引腳:依 CTIMER 而定
- 可用於 PWM 輸出
- MAT2: 匹配通道 2
- 暫存器:CTIMERx_MR2
- 輸出引腳:依 CTIMER 而定
- 可用於 PWM 輸出
- MAT3: 匹配通道 3
- 暫存器:CTIMERx_MR3
- 輸出引腳:依 CTIMER 而定
- 常用作週期控制通道
通道功能配置:
- 週期通道:設定 PWM 的基礎頻率和週期
- PWM 通道:產生可變占空比的輸出信號
- 所有通道共享相同的時基計數器
- 匹配事件可觸發中斷或 DMA
引腳對應 (典型配置):
- CTIMER0_MAT0 → P0.5 或其他可選引腳
- CTIMER0_MAT1 → P0.6 或其他可選引腳
- CTIMER0_MAT2 → P0.7 或其他可選引腳
- CTIMER0_MAT3 → P0.8 或其他可選引腳
使用原則:
- 週期通道不可用於 PWM 輸出
- PWM 通道的占空比 = MATx_value / Period_value
- 建議使用 MAT3 作為週期通道 (最高優先級)
- 註
- 通道選擇影響可用的 PWM 輸出數量
- 警告
- 週期通道變更會影響所有 PWM 輸出
- 參閱
- Select CTIMER 選擇枚舉
◆ Select
CTIMER 定時器選擇枚舉
用於選擇 MCXA153 微控制器中的哪一個 CTIMER 模組作為 PWM 產生器。 MCXA153 提供三個獨立的 CTIMER 模組,每個都可以獨立配置為 PWM 控制器。
枚舉值說明:
- CTIMER0: 第一個定時器模組
- 基礎位址:0x40004000
- 中斷號:CTIMER0_IRQn
- 適合通用 PWM 應用
- CTIMER1: 第二個定時器模組
- 基礎位址:0x40008000
- 中斷號:CTIMER1_IRQn
- 可與其他模組獨立運行
- CTIMER2: 第三個定時器模組
- 基礎位址:0x4000C000
- 中斷號:CTIMER2_IRQn
- 提供額外的 PWM 通道資源
設計考量:
- 每個 CTIMER 支援 4 個匹配輸出通道
- 所有通道共享相同的時基和頻率
- 可同時使用多個 CTIMER 產生不同頻率的 PWM
- 各 CTIMER 間相互獨立,無干擾
應用分配建議:
- CTIMER0: 主要馬達控制
- CTIMER1: LED/顯示控制
- CTIMER2: 音頻/信號產生
- 註
- 選擇後在物件生命週期內不可變更
- 參閱
- Channel 通道選擇枚舉
◆ CorePulseWidth()
mcxa153::core::CorePulseWidth::CorePulseWidth |
( |
Select | select, |
|
|
Channel | periodChannel ) |
建構 CorePulseWidth PWM 控制物件
建立一個新的 PWM 控制器實例,指定使用的 CTIMER 模組和週期控制通道。 建構後需要調用 init() 方法才能開始使用 PWM 功能。
- 參數
-
select | 選擇的 CTIMER 定時器模組
- CTIMER0: 第一個定時器模組 (0x40004000)
- CTIMER1: 第二個定時器模組 (0x40008000)
- CTIMER2: 第三個定時器模組 (0x4000C000)
|
periodChannel | 用於週期控制的匹配通道
- MAT0: 匹配通道 0 (通常用於 PWM 輸出)
- MAT1: 匹配通道 1 (通常用於 PWM 輸出)
- MAT2: 匹配通道 2 (通常用於 PWM 輸出)
- MAT3: 匹配通道 3 (推薦用於週期控制)
|
建構過程:
- 根據 select 設定 vBase 硬體基礎位址
- 儲存 periodChannel 作為週期控制通道
- 初始化基礎類別 (Object 和 PulseWidth)
- 準備硬體控制介面
資源配置:
- 確定硬體定時器對應關係
- 建立暫存器存取介面
- 預留必要的系統資源
- 設定物件狀態為未初始化
設計考量:
- 週期通道選擇影響可用的 PWM 輸出數量
- 推薦使用 MAT3 作為週期通道
- 這樣 MAT0-MAT2 可用於 3 個 PWM 輸出
- 不同應用可能需要不同的通道配置
使用範例:
CorePulseWidth::Channel::MAT3);
CorePulseWidth::Channel::MAT1);
後續操作:
- 調用 init() 初始化硬體
- 設定 PWM 頻率 setPeriod()
- 配置通道占空比 setPercent()
- 啟動 PWM 輸出 start()
- 註
- 建構函數不會初始化硬體,需要明確調用 init()
- 警告
- 確保選擇的定時器未被其他功能佔用
- 參閱
- init() 硬體初始化方法
-
Select 定時器選擇枚舉
-
Channel 通道選擇枚舉
◆ ~CorePulseWidth()
virtual mcxa153::core::CorePulseWidth::~CorePulseWidth |
( |
void | | ) |
|
|
overridevirtual |
銷毀 CorePulseWidth PWM 控制物件
清理 PWM 控制器資源,確保硬體定時器正確關閉和資源釋放。 在物件生命週期結束時自動調用。
銷毀過程:
- 檢查硬體初始化狀態
- 如果已初始化,自動調用 deinit()
- 停止所有 PWM 輸出信號
- 關閉定時器時鐘
- 重設定時器暫存器
- 釋放系統資源
- 調用基礎類別解構函數
硬體清理:
- 停用定時器運行
- 清除所有匹配暫存器
- 重設預分頻器
- 停用中斷源
- 復原引腳配置 (如果需要)
安全特性:
- 確保不會產生意外的輸出信號
- 避免硬體資源洩漏
- 防止干擾其他功能模組
- 支援多次建構/銷毀循環
輸出狀態:
- 所有 PWM 輸出立即停止
- 輸出引腳回到預設狀態
- 不會產生額外的邊緣信號
- 確保系統狀態清潔
使用注意:
- 銷毀前確保相關應用已安全停止
- 馬達控制應用需要考慮慣性影響
- LED 控制會立即關閉所有輸出
- 音頻應用可能產生爆音
典型使用場景:
{
pwm.init();
pwm.setPeriod(1000.0f);
pwm.start(true);
}
- 註
- 虛擬解構函數,支援多型操作
- 警告
- 銷毀會立即停止所有 PWM 輸出
- 參閱
- deinit() 硬體反初始化方法
-
ufm::lang::Object 基礎類別
◆ deinit()
virtual bool mcxa153::core::CorePulseWidth::deinit |
( |
void | | ) |
|
|
overridevirtual |
PWM 控制器硬體反初始化
停用 CTIMER 硬體模組,清除所有設定,並釋放相關系統資源。 反初始化會立即停止所有 PWM 輸出信號。
- 傳回值
- true 反初始化成功,硬體已正確關閉
-
false 反初始化失敗,可能原因:
反初始化步驟:
- 檢查目前初始化狀態
- 停用定時器運行 (TCR.CEN = 0)
- 清除所有匹配暫存器 (MR0-MR3)
- 重設預分頻器 (PR = 0)
- 停用所有中斷 (MCR = 0)
- 清除外部匹配設定 (EMR = 0)
- 停用定時器時鐘
- 更新初始化狀態標誌
硬體狀態變化:
- 計數器停止運行
- 所有 PWM 輸出停止
- 匹配事件停止產生
- 中斷源被停用
- 時鐘消耗降至最低
輸出行為:
- PWM 信號立即停止
- 輸出引腳保持最後狀態
- 不產生額外的邊緣變化
- 消除潛在的毛刺信號
安全考量:
- 馬達應用:立即停止可能損壞機械系統
- LED 應用:所有輸出立即關閉
- 音頻應用:突然停止可能產生爆音
- 電源控制:需要考慮系統穩定性
使用時機:
- 系統關機前
- 切換到其他控制方式
- 錯誤處理和恢復
- 低功耗模式進入
範例使用:
if (pwm.isInit()) {
pwm.start(false);
delay_ms(100);
if (!pwm.deinit()) {
}
}
- 註
- 反初始化後需要重新調用 init() 才能恢復功能
- 警告
- 立即停止 PWM 可能對某些應用造成影響
- 參閱
- init() 硬體初始化方法
-
isInit() 狀態檢查方法
實作 hal::Base.
◆ getPercent()
virtual bool mcxa153::core::CorePulseWidth::getPercent |
( |
int | channel, |
|
|
float & | result ) |
|
overridevirtual |
查詢指定通道的 PWM 占空比
讀取特定 PWM 輸出通道的目前占空比設定值。 返回的是軟體設定值,而非即時測量值。
- 參數
-
channel | 目標 PWM 輸出通道編號 範圍:0 到 3 (對應 MAT0-MAT3) 限制:週期通道會返回錯誤 |
result | 用於儲存查詢結果的浮點數參考 輸出:占空比百分比 (0.0% 到 100.0%) 精度:依硬體解析度和計算精度而定 |
- 傳回值
- true 查詢成功,result 包含有效值
-
false 查詢失敗,可能原因:
- 硬體未初始化
- 通道編號無效
- 指定通道為週期控制通道
- 硬體狀態異常
查詢原理:
- 讀取通道匹配暫存器值
- 讀取週期匹配暫存器值
- 計算:percent = (Match_Value * 100) / Period_Value
- 返回計算後的百分比
數值精度:
- 受硬體暫存器位數限制
- 可能與原始設定值略有差異
- 由於整數運算的舍入誤差
- 通常精度足以滿足大多數應用
使用場景:
- 系統狀態監控和顯示
- 閉環控制的回授檢查
- 配置驗證和除錯
- 系統診斷和記錄
使用範例:
float current_duty;
if (pwm.getPercent(0, current_duty)) {
printf("馬達速度: %.1f%%\n", current_duty);
} else {
printf("查詢失敗\n");
}
for (int ch = 0; ch < 3; ch++) {
if (ch != periodChannel && pwm.getPercent(ch, current_duty)) {
log_channel_state(ch, current_duty);
}
}
即時性考量:
- 返回的是目前的暫存器設定值
- 不是即時的輸出電平測量
- 如果正在動態調整,可能與實際輸出有短暫差異
- 查詢速度快,適合高頻監控
錯誤處理:
float duty;
if (!pwm.getPercent(channel, duty)) {
if (!pwm.isInit()) {
} else if (channel == periodChannel) {
} else {
}
}
- 註
- 返回的是設定值,非實際輸出測量值
- 參閱
- setPercent() 占空比設定方法
-
isInit() 初始化狀態檢查
實作 hal::counter::PulseWidth.
◆ init()
virtual bool mcxa153::core::CorePulseWidth::init |
( |
void | | ) |
|
|
overridevirtual |
PWM 控制器硬體初始化
配置並啟用 CTIMER 硬體模組,準備 PWM 信號產生功能。 初始化會設定定時器基礎配置,但不會立即開始 PWM 輸出。
- 傳回值
- true 初始化成功,硬體已準備就緒
-
false 初始化失敗,可能原因:
- 硬體已經初始化
- 定時器資源被其他功能佔用
- 系統時鐘未正確配置
- 硬體故障或異常
初始化步驟:
- 檢查重複初始化
- 啟用 CTIMER 時鐘源
- 重設定時器暫存器
- 設定定時器為計數模式 (Timer Mode)
- 配置週期通道匹配設定
- 設定外部匹配行為 (EMR)
- 配置匹配控制 (MCR)
- 清除計數器 (TC = 0)
- 更新初始化狀態標誌
硬體配置:
- 計數模式:向上計數
- 時鐘源:系統時鐘或分頻時鐘
- 預分頻器:根據需求設定
- 匹配行為:重設計數器 (週期通道)
- 外部輸出:準備 PWM 波形產生
預設狀態:
- 定時器停止運行
- 所有匹配值為 0
- PWM 輸出未啟動
- 準備接受頻率和占空比設定
資源需求:
- CTIMER 硬體模組獨占使用
- 適當的系統時鐘配置
- 足夠的系統功耗預算
- 相關 GPIO 引腳配置 (另外處理)
後續操作:
- 調用 setPeriod() 設定 PWM 頻率
- 使用 setPercent() 配置占空比
- 調用 start() 啟動 PWM 輸出
- 根據需要調整參數
使用範例:
if (pwm.init()) {
pwm.setPeriod(1000.0f);
pwm.setPercent(0, 50.0f);
pwm.start(true);
} else {
}
錯誤處理:
- 檢查返回值確認初始化狀態
- 失敗時檢查資源佔用情況
- 確認系統時鐘配置正確
- 考慮重試機制
- 註
- 初始化不會立即開始 PWM 輸出
- 警告
- 重複初始化會返回 false
- 參閱
- deinit() 硬體反初始化方法
-
isInit() 狀態檢查方法
實作 hal::Base.
◆ isInit()
virtual bool mcxa153::core::CorePulseWidth::isInit |
( |
void | | ) |
|
|
overridevirtual |
檢查 PWM 控制器初始化狀態
查詢 CTIMER 硬體模組是否已正確初始化並準備運行。 用於驗證硬體狀態和診斷系統問題。
- 傳回值
- true PWM 控制器已初始化且可用
-
false PWM 控制器未初始化或異常
檢查項目:
- 內部初始化狀態標誌
- CTIMER 時鐘是否啟用
- 定時器暫存器配置
- 硬體模組回應性
狀態判定:
- 初始化標誌為真
- 硬體暫存器可正常存取
- 定時器配置符合預期
- 無硬體錯誤狀態
典型使用場景:
- 功能調用前的安全檢查
- 系統診斷和除錯
- 錯誤恢復流程
- 狀態監控和報告
使用範例:
if (pwm.isInit()) {
pwm.setPeriod(frequency);
pwm.start(true);
} else {
if (!pwm.init()) {
}
}
除錯應用:
void diagnosticPWM() {
if (!pwm.isInit()) {
log("PWM not initialized");
return;
}
}
效能考量:
- 此方法執行速度很快
- 主要檢查軟體狀態標誌
- 可頻繁調用而無顯著開銷
- 不會影響硬體運行狀態
- 註
- 返回 true 並不保證所有 PWM 功能完全正常
- 參閱
- init() 硬體初始化方法
-
deinit() 硬體反初始化方法
實作 hal::Base.
◆ setPercent()
virtual bool mcxa153::core::CorePulseWidth::setPercent |
( |
int | channel, |
|
|
float | percent ) |
|
overridevirtual |
設定指定通道的 PWM 占空比
配置特定 PWM 輸出通道的占空比百分比,控制高電平時間比例。 占空比變更會立即生效,但建議在適當時機進行調整。
- 參數
-
channel | 目標 PWM 輸出通道編號 範圍:0 到 3 (對應 MAT0-MAT3) 限制:週期通道不可用於 PWM 輸出 |
percent | 占空比百分比 範圍:0.0% 到 100.0%
- 0.0%: 完全關閉 (持續低電平)
- 50.0%: 對稱方波 (高低電平時間相等)
- 100.0%: 完全開啟 (持續高電平) 精度:依 PWM 頻率和定時器解析度而定
|
- 傳回值
- true 占空比設定成功
-
false 設定失敗,可能原因:
- 硬體未初始化
- 通道編號無效
- 指定通道為週期控制通道
- 占空比參數超出範圍
占空比計算:
- Match_Value = (Period_Value * percent) / 100
- High_Time = Match_Value / Timer_Clock
- Low_Time = (Period_Value - Match_Value) / Timer_Clock
- Duty_Cycle = High_Time / (High_Time + Low_Time)
解析度特性:
- 實際解析度 = Period_Value + 1
- 例:Period = 999,解析度 = 1000 (約 0.1%)
- 高頻率時解析度可能降低
- 低頻率時可達到極高解析度
輸出極性:
- 預設:高電平為有效狀態
- 可透過硬體配置反相
- 0% = 持續無效電平
- 100% = 持續有效電平
通道獨立性:
- 每個通道可獨立設定占空比
- 所有通道共享相同頻率
- 通道間相位同步 (同時開始週期)
- 互不干擾的占空比控制
動態調整:
- 運行中可安全變更占空比
- 變更在下一個週期開始時生效
- 避免產生毛刺或異常脈衝
- 支援平滑的占空比變化
應用範例:
pwm.setPercent(0, 50.0f);
pwm.setPercent(1, 50.0f);
pwm.setPercent(2, 50.0f);
pwm.setPercent(0, 80.0f);
pwm.setPercent(1, 60.0f);
pwm.setPercent(2, 40.0f);
float speed = getDesiredSpeed();
pwm.setPercent(0, speed);
特殊值處理:
- 0.0%: 確保完全關閉輸出
- 100.0%: 確保完全開啟輸出
- 中間值:線性對應到匹配暫存器
- 負值:自動限制為 0%
- 超過100:自動限制為 100%
- 註
- 週期控制通道不能設定占空比
- 警告
- 頻繁變更占空比可能增加系統負載
- 參閱
- setPeriod() 頻率設定方法
-
getPercent() 占空比查詢方法
實作 hal::counter::PulseWidth.
◆ setPeriod()
virtual int mcxa153::core::CorePulseWidth::setPeriod |
( |
float | hz | ) |
|
|
overridevirtual |
設定 PWM 信號頻率
配置 PWM 信號的基礎頻率,影響所有輸出通道的週期時間。 頻率變更會重新計算定時器預分頻器和週期匹配值。
- 參數
-
hz | PWM 頻率 (赫茲) 範圍:約 1Hz 到 1MHz (依系統時鐘而定) 常用值:
- 馬達控制:1kHz - 20kHz
- LED 調光:100Hz - 1kHz
- 音頻合成:20Hz - 20kHz
- 開關電源:20kHz - 100kHz
|
- 傳回值
- int 設定結果狀態碼 0: 設定成功 -1: 硬體未初始化 -2: 頻率參數無效 (≤0 或過大) -3: 硬體無法達成指定頻率
頻率計算原理:
- System_Clock = 系統主時鐘頻率
- Timer_Clock = System_Clock / (Prescale + 1)
- PWM_Frequency = Timer_Clock / (Period + 1)
- Period = Timer_Clock / PWM_Frequency - 1
自動預分頻:
- 算法會自動選擇最佳預分頻值
- 在頻率精度和解析度間取得平衡
- 最大化占空比的可調節範圍
- 避免計數器溢位問題
解析度影響:
- 更低頻率 = 更高占空比解析度
- 更高頻率 = 更低占空比解析度
- 典型解析度:8位元到16位元
頻率精度:
- 受定時器時鐘和預分頻限制
- 某些頻率可能無法精確達成
- 會選擇最接近的可實現頻率
- 誤差通常小於 1%
系統影響:
- 頻率變更會瞬間影響所有通道
- 可能產生短暫的波形異常
- 建議在停止狀態下變更頻率
- 變更會重設所有計數器
使用範例:
int result = pwm.setPeriod(10000.0f);
if (result != 0) {
printf("頻率設定失敗: %d\n", result);
}
pwm.setPeriod(1000.0f);
頻率選擇建議:
- 馬達控制:10-20kHz (避免聽覺範圍)
- LED/背光:200-2kHz (避免閃爍)
- 電源轉換:50-100kHz (提高效率)
- 音頻應用:依音頻需求選擇
效能考量:
- 較高頻率增加開關損失
- 較低頻率可能產生可聞雜音
- EMI 特性隨頻率變化
- 功耗隨開關頻率增加
- 註
- 頻率變更會影響所有 PWM 通道的輸出
- 警告
- 運行中變更頻率可能產生波形異常
- 參閱
- setPercent() 占空比設定方法
-
start() PWM 啟動控制
實作 hal::counter::PulseWidth.
◆ start()
virtual bool mcxa153::core::CorePulseWidth::start |
( |
bool | enable | ) |
|
|
overridevirtual |
啟動或停止 PWM 輸出
控制 PWM 信號的整體輸出狀態,影響所有已配置的通道。 提供統一的啟動/停止控制,確保多通道同步操作。
- 參數
-
enable | PWM 輸出控制
- true: 啟動 PWM 輸出 (開始產生波形)
- false: 停止 PWM 輸出 (停止波形產生)
|
- 傳回值
- true 控制操作成功
-
false 控制操作失敗,可能原因:
啟動操作 (enable = true):
- 檢查硬體初始化狀態
- 驗證 PWM 參數設定 (頻率、占空比)
- 清除定時器計數器 (TC = 0)
- 啟動定時器運行 (TCR.CEN = 1)
- 開始產生 PWM 波形
- 所有配置的通道同時開始輸出
停止操作 (enable = false):
- 停用定時器運行 (TCR.CEN = 0)
- 保持目前的匹配暫存器設定
- 所有 PWM 輸出立即停止
- 輸出引腳保持最後狀態
- 定時器計數器停止更新
同步特性:
- 所有通道同時啟動/停止
- 確保相位關係正確
- 避免通道間的時序差異
- 適合多相系統應用
輸出狀態:
- 啟動:根據占空比設定產生波形
- 停止:輸出保持在停止瞬間的電平
- 不會產生額外的邊緣變化
- 確保信號完整性
應用場景:
pwm.setPeriod(10000.0f);
pwm.setPercent(0, 0.0f);
pwm.start(true);
for (float speed = 0; speed <= 100; speed += 1) {
pwm.setPercent(0, speed);
delay_ms(10);
}
pwm.start(false);
RGB LED 控制:
pwm.setPercent(0, red_intensity);
pwm.setPercent(1, green_intensity);
pwm.setPercent(2, blue_intensity);
pwm.start(true);
pwm.start(false);
安全考量:
- 馬達應用:停止前考慮減速過程
- 電源控制:避免突然中斷可能損壞負載
- 音頻應用:停止時可能產生爆音
- LED 控制:停止會立即關閉輸出
效能影響:
- 啟動會開始定時器計數和中斷
- 停止會停止所有定時器活動
- 功耗隨運行狀態變化
- CPU 負載主要來自中斷處理
狀態管理:
- 可多次調用啟動/停止
- 重複操作不會造成錯誤
- 內部狀態管理確保正確性
- 支援快速的開關控制
- 註
- 停止不會清除 PWM 參數設定
- 警告
- 某些應用需要優雅的啟動/停止程序
- 參閱
- init() 硬體初始化方法
-
setPeriod() 頻率設定方法
-
setPercent() 占空比設定方法
實作 hal::counter::PulseWidth.
◆ vBase
void* const mcxa153::core::CorePulseWidth::vBase |
CTIMER 硬體基礎位址指標
指向選定的 CTIMER 硬體模組基礎位址的常數指標。 用於直接存取 CTIMER 暫存器和控制硬體行為。
位址對應:
- CTIMER0: 0x40004000
- CTIMER1: 0x40008000
- CTIMER2: 0x4000C000
暫存器存取:
- TC (Timer Counter): 目前計數值
- PR (Prescale Register): 預分頻設定
- MR0-MR3 (Match Register): 匹配比較值
- CCR (Capture Control): 捕捉控制
- EMR (External Match Register): 外部匹配控制
- MCR (Match Control Register): 匹配控制
- TCR (Timer Control Register): 定時器控制
存取特性:
- 32位元對齊存取
- 硬體暫存器映射
- 即時生效的配置變更
- 需要適當的時鐘啟用
安全考量:
- 為 const 指標,防止意外修改
- 確保指向有效的硬體位址
- 存取前需確認硬體已初始化
- 註
- 物件建構時設定,生命週期內保持不變
- 警告
- 直接存取暫存器需要深入了解硬體規格
- 參閱
- Select 定時器選擇影響此指標值
◆ vPeriodChannel
const Channel mcxa153::core::CorePulseWidth::vPeriodChannel |
PWM 週期控制通道
指定哪一個匹配通道用於控制 PWM 信號的基礎週期 (頻率)。 週期通道的匹配值決定了所有 PWM 輸出通道的共同頻率。
功能說明:
- 設定 PWM 信號的基礎週期時間
- 控制計數器的重設點
- 決定所有通道的共同頻率
- 影響占空比的解析度
週期計算:
- PWM_Period = (MR_Period + 1) / Timer_Clock
- PWM_Frequency = Timer_Clock / (MR_Period + 1)
- Timer_Clock = System_Clock / (Prescale + 1)
解析度影響:
- 更大的週期值 = 更高的占空比解析度
- 更小的週期值 = 更高的 PWM 頻率
- 需要在頻率和解析度間取得平衡
通道限制:
- 週期通道不可用於 PWM 輸出
- 其匹配事件觸發計數器重設
- 所有其他通道的輸出都基於此週期
典型配置:
- MAT3 作為週期通道 (推薦)
- MAT0, MAT1, MAT2 用於 PWM 輸出
- 提供最多 3 個獨立的 PWM 輸出
使用範例:
- 註
- 物件建構時設定,生命週期內不可變更
- 警告
- 變更週期通道設定會影響所有 PWM 輸出
- 參閱
- Channel 通道定義
-
setPeriod() 頻率設定方法
此類別(class) 文件是由下列檔案中產生: