引 言
本指南旨在幫助開(kāi)發(fā)者快速掌握如何使用 PWMV2 外設(shè)進(jìn)行編程和應(yīng)用開(kāi)發(fā)。本文內(nèi)容注重簡(jiǎn)潔明了,旨在讓讀者輕松理解關(guān)鍵概念和基本操作。對(duì)于更高級(jí)的功能和詳細(xì)配置,請(qǐng)參閱后續(xù)的系列文檔以獲取深入指導(dǎo)。
PWMV2系列文章主要從以下幾個(gè)方向介紹先楫PWM外設(shè)的應(yīng)用方法:
主要功能
波形輸出
中心對(duì)稱(chēng)PWM
邊沿對(duì)齊PWM
- 左側(cè)邊沿
- 右側(cè)邊沿
- Burst輸出
- 指定輸出多少個(gè)PWM脈沖后,pwm停止輸出,最大支持65535個(gè)脈沖
- 互補(bǔ)PWM輸出
- 帶死區(qū)控制
- 故障保護(hù)功能
- 同步保護(hù)
- 異步保護(hù)
特色功能
通用計(jì)算單元
根據(jù)dac的輸入值或者當(dāng)前計(jì)數(shù)器值,計(jì)數(shù)器重載值以及預(yù)設(shè)的參數(shù)計(jì)算出一個(gè)結(jié)果,用于更新比較器的值
使用硬件計(jì)算相關(guān)參數(shù),運(yùn)算速度快
支持PWM占空比硬件限幅
支持PWM頻率硬件限幅
- 支持關(guān)鍵寄存器加鎖
- 支持調(diào)試模式
使用調(diào)試器進(jìn)行調(diào)試時(shí)可以設(shè)置PWM輸出為配置的電平狀態(tài)
高精度PWM
進(jìn)階篇
在準(zhǔn)備PWM(脈寬調(diào)制)系列的高級(jí)功能配置文檔時(shí),我們重點(diǎn)關(guān)注以下幾個(gè)關(guān)鍵特性:
1. PWM信號(hào)同步
同步PWM信號(hào)確保了多個(gè)PWM通道之間或與外部時(shí)鐘和事件的時(shí)間一致性。對(duì)于多相系統(tǒng)中的精確相位對(duì)齊至關(guān)重要。
2. PWM信號(hào)移相
移相技術(shù)允許調(diào)整PWM信號(hào)相對(duì)于參考點(diǎn)或其他PWM信號(hào)的相位角。這對(duì)于三相電機(jī)控制和其他需要精密相位調(diào)節(jié)的應(yīng)用尤為重要。通過(guò)硬件或軟件實(shí)現(xiàn)的移相可以提供靈活且精確的控制。
3. 固定占空比下的頻率調(diào)整
有時(shí)應(yīng)用需求保持固定的占空比,同時(shí)調(diào)整PWM信號(hào)的頻率。這種配置要求PWM生成器能夠精準(zhǔn)地維持設(shè)定的占空比,即使頻率發(fā)生變化。
4. 事件驅(qū)動(dòng)與中斷管理
高效的事件檢測(cè)和中斷觸發(fā)機(jī)制使得PWM控制器能夠在特定事件發(fā)生時(shí)即時(shí)響應(yīng),如周期結(jié)束或比較匹配。良好的事件和中斷管理是實(shí)現(xiàn)實(shí)時(shí)操作的關(guān)鍵,提升了系統(tǒng)的響應(yīng)速度和整體效率。
5. 斬波功能
PWM斬波將連續(xù)的PWM信號(hào)分割成一系列短脈沖,以降低音頻噪聲或優(yōu)化電源效率。通過(guò)調(diào)整PWM信號(hào)的開(kāi)啟和關(guān)閉時(shí)間來(lái)實(shí)施斬波,為某些應(yīng)用場(chǎng)景提供了額外的優(yōu)勢(shì)。
6. 故障保護(hù)和強(qiáng)制輸出功能
PWMv2模塊提供了全面的故障保護(hù)機(jī)制,能夠在檢測(cè)到異常情況時(shí)迅速采取措施,防止?jié)撛诘挠布p壞或危險(xiǎn)發(fā)生。主要特性包括同步和異步故障輸入,故障響應(yīng)模式,故障恢復(fù)機(jī)制。
強(qiáng)制輸出功能允許用戶(hù)在必要時(shí)直接控制PWM輸出的狀態(tài),而不依賴(lài)于正常的PWM波形生成邏輯。可提供硬件強(qiáng)制輸出和軟件強(qiáng)制輸出。
時(shí)鐘配置
先楫PWM的時(shí)鐘和電機(jī)系統(tǒng)共用一個(gè)時(shí)鐘源,因此不需要單獨(dú)進(jìn)行PWM系統(tǒng)的時(shí)鐘分頻設(shè)置,簡(jiǎn)化用戶(hù)的設(shè)計(jì)。使用如下接口可以獲取PWM的頻率
freq = clock_get_frequency(clock_mot0);
引腳配置
使用PWM輸出,需要配置引腳的功能為PWM,代碼如下所示,設(shè)置PE08引腳功能為PWM1的P0引腳:
HPM_IOC->PAD[IOC_PAD_PE08].FUNC_CTL = IOC_PE08_FUNC_CTL_PWM1_P_0;
影子寄存器
影子寄存器包含一組與工作寄存器相對(duì)應(yīng)的寄存器,這些寄存器可以被直接讀寫(xiě),但其內(nèi)容不會(huì)立即生效。只有當(dāng)滿(mǎn)足特定條件時(shí),影子寄存器中的值才會(huì)被復(fù)制到相應(yīng)的工作寄存器中,從而對(duì)PWM輸出產(chǎn)生影響。
在修改影子寄存器之前,需要先解鎖它們。這通常通過(guò)向UNLOCK寄存器寫(xiě)入一個(gè)特定的密鑰來(lái)完成。
修改完成后,可以通過(guò)設(shè)置鎖定位來(lái)重新鎖定影子寄存器,防止意外更改。
每個(gè)PWMV2外設(shè)含有28個(gè)獨(dú)立的影子寄存器,可關(guān)聯(lián)到PWMV2的4個(gè)通道的任意通道中,在特定的時(shí)機(jī)將影子寄存器的值更新到工作寄存器中。
影子寄存器可用于配置reload補(bǔ)償值、compare、通用計(jì)算單元補(bǔ)償值以及私有計(jì)算單元門(mén)限補(bǔ)償值。
影子寄存器在一定程度上保證了多數(shù)據(jù)更新的一致性。更新影子寄存器如下
pwmv2_enable_shadow_lock_feature(PWM);pwmv2_shadow_register_unlock(PWM);// set shadow registerspwmv2_shadow_register_lock(PWM);
在更新時(shí)機(jī)選擇為軟件方式更新的情況下,影子寄存器中的值可以通過(guò)軟件觸發(fā)更新到工作寄存器中
pwmv2_issue_shadow_register_lock_event(PWM);
生效時(shí)機(jī)
輸出極性取反配置更新
軟件更新
reload值重載更新
fault的恢復(fù)時(shí)機(jī)
立即恢復(fù)(在PWMV2時(shí)鐘的下一個(gè)周期)
reload值重載恢復(fù)
FAULT_REC_SEL選擇的觸發(fā)信號(hào)恢復(fù)
軟件寫(xiě)入FAULT_CLEAR寄存器恢復(fù)
force mode更新至工作寄存器時(shí)機(jī)
軟件更新
指定compare值更新
reload值重載更新
FORCE_TRIG_SEL選中的輸入信號(hào)更新
force mode工作時(shí)機(jī)
立刻生效
reload值重載時(shí)生效
FORCE_ACT_SEL選擇的觸發(fā)信號(hào)到來(lái)生效
關(guān)閉force mode
通道reload值更新時(shí)機(jī)
軟件更新
指定的compare值更新
reload值重載時(shí)更新
RLD_TRIG_SEL的輸入信號(hào)到來(lái)更新
比較點(diǎn)compare值更新時(shí)機(jī)
軟件更新
立即更新(在pwmv2時(shí)鐘的下一個(gè)周期)
關(guān)聯(lián)計(jì)數(shù)器reload值重載更新
CMP_TRIG_SEL選擇的觸發(fā)源信號(hào)到來(lái)更新
RLD_CMP_SEL0選擇的比較值與計(jì)數(shù)值匹配時(shí)更新
RLD_CMP_SEL1選擇的比較值與計(jì)數(shù)值匹配時(shí)更新
計(jì)數(shù)器數(shù)值更新時(shí)機(jī)
當(dāng)選定的觸發(fā)源信號(hào)到來(lái)時(shí),將通用計(jì)算單元的值更新到計(jì)數(shù)器值
PWMV2外部輸入與對(duì)外輸出
外部輸入
QEO輸出的數(shù)據(jù),用來(lái)硬件生成SPWM或者SVPWM波形
來(lái)自普通IO的輸入捕獲信號(hào)
PWM[x]_TRIG_IN[x]輸入進(jìn)來(lái)的硬件信號(hào)。PWMV2可以通過(guò)truggermux將支持的外部信號(hào)引入PWMV2模塊中,用作觸發(fā)輸入
對(duì)外輸出
PWMV2支持匹配compare值向外部輸出電平,在匹配compare值后,拉高電平,在關(guān)聯(lián)的通道計(jì)數(shù)器到達(dá)reload值后,清除信號(hào)需要通過(guò)triggermux的PWM[x]TRGO[x]向外進(jìn)行輸出。
PWM生成
PWMV2計(jì)數(shù)器是PWM模塊的核心組件之一,它決定了PWM信號(hào)的時(shí)間基準(zhǔn)和波形特性。
計(jì)數(shù)器的基本概念
- 計(jì)數(shù)模式:HPM6E00的PWMv2僅提供上升計(jì)數(shù)模式,即計(jì)數(shù)器從0開(kāi)始遞增直到達(dá)到預(yù)設(shè)的最大值(重載值),然后重新從0開(kāi)始。
- 周期:計(jì)數(shù)器的周期由重載值決定
計(jì)數(shù)器的主要功能
時(shí)間基準(zhǔn):為PWM信號(hào)生成提供時(shí)間參考,決定了PWM信號(hào)的周期和占空比。
事件觸發(fā):當(dāng)計(jì)數(shù)值匹配某個(gè)比較值時(shí),可以觸發(fā)中斷或其他事件,如改變PWM輸出狀態(tài)或啟動(dòng)其他外設(shè)操作。
重載機(jī)制:當(dāng)計(jì)數(shù)器到達(dá)最大值時(shí)會(huì)發(fā)生重載事件,此時(shí)計(jì)數(shù)器會(huì)恢復(fù)到0,并可以根據(jù)需要更新某些寄存器的內(nèi)容。
PWMV2 支持 4 個(gè) PWM 生成子模塊,每個(gè)子模塊包含一個(gè) 32 位計(jì)數(shù)器和 4 個(gè) 32 位比較值,并支持輸出 2路獨(dú)立或者 1 對(duì)互補(bǔ)的 PWM 輸出,計(jì)數(shù)器的值和比較值的關(guān)系,決定了 初始 PWM 的輸出波形。
盡管某些MCU的計(jì)數(shù)器支持上升、下降及雙向計(jì)數(shù)模式,HPM系列MCU中的PWMv2模塊只提供上升計(jì)數(shù)功能。這種設(shè)計(jì)選擇不僅簡(jiǎn)化了PWM信號(hào)的生成過(guò)程,而且在性能和功能性方面絲毫不遜色于其他復(fù)雜計(jì)數(shù)模式的MCU,甚至在某些方面展現(xiàn)出更強(qiáng)的優(yōu)勢(shì)。下文會(huì)通過(guò)中心對(duì)齊PWM的配置,說(shuō)明上升計(jì)數(shù)在性能上沒(méi)有任何問(wèn)題。
為了幫助開(kāi)發(fā)者快速上手,以下將重點(diǎn)介紹一些關(guān)鍵配置項(xiàng),使PWM外設(shè)能夠迅速投入工作。對(duì)于更復(fù)雜的定制化需求,參考進(jìn)階篇獲取詳細(xì)指導(dǎo)。
- 每一個(gè)PWM外設(shè)有四個(gè)計(jì)數(shù)器,每個(gè)計(jì)數(shù)器有cmp0-cmp3四個(gè)比較器。一般情況下,cmp0和cmp1,cmp2和cmp3成對(duì)使用輸出CHN0-1兩路PWM。
- 因?yàn)镃HN0-1兩路PWM共用一個(gè)計(jì)數(shù)器,所以這兩路PWM頻率一致
- 互補(bǔ)PWM輸出時(shí)候,CHN0-1成對(duì)使用,cmp0-cmp1有效,cmp2-cmp3無(wú)效
- cmp0的值為a,cmp1的值為b,計(jì)數(shù)器的重載值為T(mén),a和b的值可以在0-2T之間配置,組成各種不同的波形。一般情況下a和b的值在0-T之間配置,且a的值小于b即可滿(mǎn)足基本需求。此時(shí)當(dāng)計(jì)數(shù)器的值在a和b之間時(shí)(包含a和b)輸出高電平,其他情況輸出低電平。
- 四點(diǎn)模式下,CHN0的電平變化由a、b、c、d組點(diǎn)位決定,按照兩點(diǎn)模式下大小關(guān)系生成對(duì)應(yīng)的波形,再根據(jù)預(yù)設(shè)的PWM_LOGIC寄存器所設(shè)置的模式將兩組波形進(jìn)行邏輯組合后輸出。CHN1此時(shí)可使用互補(bǔ)模式進(jìn)行輸出。
- 為了保證比較寄存器和計(jì)數(shù)器更新的一致性,使用影子寄存器更新實(shí)際工作用的寄存器。當(dāng)選擇的影子寄存器更新時(shí)刻匹配時(shí),影子寄存器的值會(huì)被更新到實(shí)際工作用的寄存器
代碼配置
一般情況下,遵守如下流程就可以正確配置PWM輸出波形
- 調(diào)用deinit函數(shù)復(fù)位PWMV2外設(shè)
- 解鎖PWM影子寄存器
- 配置影子寄存器的值
- 計(jì)數(shù)器選擇需要使用的影子寄存器(也可以選擇值來(lái)自于計(jì)算單元)。此時(shí)選擇的影子寄存器中的值就是計(jì)數(shù)器的重載值。
- 設(shè)置計(jì)數(shù)器重載值生效的時(shí)刻如下代碼設(shè)置生效時(shí)刻為reload點(diǎn),這也是常用的影子寄存器生效時(shí)刻配置。
pwmv2_set_reload_update_time(PWM, pwm_counter_0, pwm_reload_update_on_reload);
6.選擇比較單元使用的影子寄存器(也可以選擇值來(lái)自計(jì)算單元)7. 開(kāi)啟PWM輸出pwmv2_channel_enable_output(PWM, BOARD_APP_PWM_OUT1);
8. 開(kāi)啟定時(shí)器pwmv2_enable_counter(PWM, pwm_counter_0);
9. 通過(guò)影子寄存器更新占空比或者頻率pwmv2_shadow_register_unlock(PWM);pwmv2_set_shadow_val(PWM, PWMV2_SHADOW_INDEX(1), reload - duty, 0, false);pwmv2_issue_shadow_register_lock_event(PWM)
中心對(duì)齊PWM
中心對(duì)齊的PWM(脈寬調(diào)制)波形因其對(duì)稱(chēng)性而被廣泛應(yīng)用于電機(jī)控制、音頻信號(hào)處理等領(lǐng)域。與邊緣對(duì)齊PWM不同,中心對(duì)齊PWM在一個(gè)周期內(nèi)的高電平和低電平時(shí)間是關(guān)于周期中點(diǎn)對(duì)稱(chēng)分布的。
影子寄存器方法
為了生成中心對(duì)齊的PWM波形,可以通過(guò)配置PWM模塊中的兩個(gè)比較單元來(lái)實(shí)現(xiàn)。具體來(lái)說(shuō),需要設(shè)置兩個(gè)影子寄存器,分別對(duì)應(yīng)于PWM波形的上升沿和下降沿位置。通過(guò)將這兩個(gè)寄存器值設(shè)為以下表達(dá)式,可以確保PWM波形的中心對(duì)齊:
上升沿位置(即PWM波形開(kāi)始變?yōu)楦唠娖降奈恢茫?/p>
CMP0=Reload?Duty2CMP0=2Reload?Duty
下降沿位置(即PWM波形恢復(fù)為低電平的位置):
CMP1=Reload+Duty2CMP1=2Reload+Duty
其中:
Reload是PWM周期結(jié)束時(shí)重新加載的計(jì)數(shù)值,決定了PWM的頻率。
Duty是PWM的占空比,表示高電平持續(xù)時(shí)間對(duì)應(yīng)的計(jì)數(shù)值。
上述配置確保了PWM信號(hào)在一個(gè)周期內(nèi)的高電平和低電平時(shí)間是對(duì)稱(chēng)分布的,從而產(chǎn)生精確的中心對(duì)齊波形。這種方法不僅提高了PWM輸出的精度,而且對(duì)于降低電磁干擾(EMI)和提高系統(tǒng)的整體性能具有重要作用。
此外,當(dāng)調(diào)整Duty值以改變PWM占空比時(shí),CMP0和CMP1會(huì)相應(yīng)地更新,保持波形始終關(guān)于周期中點(diǎn)對(duì)齊。這使得即使在動(dòng)態(tài)調(diào)整占空比的情況下,也能維持波形的對(duì)稱(chēng)性和穩(wěn)定性。
計(jì)算單元方法
使用影子寄存器生成中心對(duì)稱(chēng)的波形,需要修改兩個(gè)寄存器,如果想只修改一個(gè)值就生成中心對(duì)稱(chēng)PWM,可以使用計(jì)算單元進(jìn)行操作。
- Cal_t_index, 從4個(gè)計(jì)數(shù)器計(jì)算單元輸出值(reload_new)中選擇一個(gè)
- Cal_in_index,從4個(gè)dac輸入值和4個(gè)計(jì)數(shù)器當(dāng)前值中選擇一個(gè)
- Cal_in_off從28個(gè)shadow寄存器中選擇一個(gè)作為偏移量,選擇后四個(gè)為0,無(wú)偏移。
- Cal_lim_up/cal_lim_lo,也是從28個(gè)shadow寄存器中選擇一個(gè)作為計(jì)算上下限的偏移量。
- Cal_lu_en/cal_ll_en上下限使能位
- 以_param結(jié)尾的是五位有符號(hào)參數(shù),所有從shadow寄存器中選的數(shù)都作為有符號(hào)數(shù)處理。
- 下圖中圓圈中的X或者+代表當(dāng)前運(yùn)算時(shí)乘法或者加法
所以cal_t_index選擇當(dāng)前使用的計(jì)數(shù)器,cal_t_param配置為4,此時(shí)相當(dāng)于reload/2,cal_in_index選擇dac輸入,此時(shí)CMP1對(duì)應(yīng)的計(jì)算單元值cal_d_param配置為-4,CMP2對(duì)應(yīng)的計(jì)算單元的值cal_d_param配置為+4。dac的值配置為duty即可。
邊沿對(duì)齊PWM
邊沿對(duì)齊PWM(脈寬調(diào)制)是一種常見(jiàn)的波形生成方式,廣泛應(yīng)用于各種控制和調(diào)節(jié)系統(tǒng)中。與中心對(duì)齊PWM不同,邊沿對(duì)齊PWM的高電平或低電平時(shí)間不是關(guān)于周期中點(diǎn)對(duì)稱(chēng)分布的,而是相對(duì)于一個(gè)固定的邊沿(上升沿或下降沿)進(jìn)行調(diào)整。這種方式簡(jiǎn)化了硬件設(shè)計(jì),并且在某些應(yīng)用中提供了更好的靈活性。
左邊沿對(duì)齊
左邊沿對(duì)齊PWM是指PWM波形的每個(gè)周期都從同一個(gè)固定的時(shí)間點(diǎn)開(kāi)始,即所有周期的上升沿是同步的。在這個(gè)模式下,占空比的變化只影響PWM波形的結(jié)束位置(下降沿),而起始位置保持不變。所以CMP0配置為0,CMP1配置為占空比即可。
右邊沿對(duì)齊
右邊沿對(duì)齊PWM則是在每個(gè)周期結(jié)束時(shí)保持同步,即所有周期的下降沿是同步的。在這種模式下,占空比的變化會(huì)影響PWM波形的開(kāi)始位置(上升沿),而結(jié)束位置保持不變。
CMP0=Reload?Duty
CMP1=Reload
結(jié) 語(yǔ)
本文提供了從硬件功能介紹到軟件實(shí)現(xiàn)的一整套流程,幫助開(kāi)發(fā)者快速上手HPM芯片PWMV2外設(shè)的使用。希望這些信息能夠?yàn)槟愕捻?xiàng)目提供有價(jià)值的指導(dǎo)。一旦掌握了基礎(chǔ),就可以探索更復(fù)雜的PWM應(yīng)用,比如電機(jī)控制、電源等。不同硬件平臺(tái)的PWM實(shí)現(xiàn)細(xì)節(jié)可能會(huì)有所不同,但HPM系列芯片提供了功能強(qiáng)大的PWM外設(shè)實(shí)現(xiàn)各種復(fù)雜功能。同時(shí)也可以參考我們提供的例程以及解決方案深入了解PWMV2的使用方法。希望這些信息能幫助你快速入門(mén)PWM技術(shù)。如果有特定的應(yīng)用場(chǎng)景,可以通過(guò)留言進(jìn)行討論,以便給出更加詳細(xì)的建議。
-
編碼器
+關(guān)注
關(guān)注
45文章
3785瀏覽量
137500 -
PWM
+關(guān)注
關(guān)注
116文章
5437瀏覽量
218583 -
應(yīng)用開(kāi)發(fā)
+關(guān)注
關(guān)注
0文章
63瀏覽量
9699
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論