數(shù)字電源控制器高速PWM更新模式探討
dsPIC33CH/dsPIC33CK系列數(shù)字電源控制器芯片,在目前諸多典型應(yīng)用中都得到了廣泛使用。在閉環(huán)控制中,尤其是電壓模式控制中,對PWM數(shù)據(jù)寄存器進(jìn)行實時更新是必要的一個動作,本文主要就這一話題做一些分析和討論。
一.PWM DATA緩存寄存器功能的說明
所謂PWM模塊的BUFFER寄存器,就是PWM模塊在以當(dāng)前寄存器值運行時,允許其SFR特殊功能寄存器值進(jìn)行改寫,這些值先緩存在寄存器中,在后續(xù)的某一個時刻會應(yīng)用在PWM模塊的輸出中。在芯片中允許進(jìn)行BUFFER的寄存器及寄存器位如圖1所示。
圖1 具有BUFFER的PWM數(shù)據(jù)寄存器
從上圖來看,具有BUFFER的寄存器包括常見的周期,相位,占空比,觸發(fā)點,TRIGA,TRIGB,TRIGC等,也包含死區(qū),交換功能,軟件改寫值位及使能位等。
二.PWM數(shù)據(jù)寄存器的更新模式及寄存器說明
數(shù)據(jù)更新的方式有哪些呢?具體說來,包含三種典型的方式,它們都可以事先用PWM模塊來指定其更新方式。
首先,PWM模塊可以允許在下一個周期初始時刻,將PWM寄存器的數(shù)據(jù)緩存值加載到PWM的內(nèi)部數(shù)據(jù)寄存器中,這種方式較為簡單明了。其次,PWM數(shù)據(jù)寄存器的值也可以被要求立即生效,這就是所謂的立即更新方式,這種情況會復(fù)雜一些,后面我們會詳細(xì)描述這種更新方式涉及到的一些問題。最后,PWM數(shù)據(jù)寄存器的緩存值可以被HOLD OFF在緩存中,而等待外部事件去驅(qū)動一個更新動作,這個外部事件可以是其它PWM模塊的更新動作。
圖2 PWM數(shù)據(jù)更新模式相關(guān)寄存器說明1
圖3 PWM數(shù)據(jù)更新模式相關(guān)寄存器說明2
圖4 PWM數(shù)據(jù)更新模式相關(guān)寄存器說明3
圖5 PWM數(shù)據(jù)更新模式相關(guān)寄存器說明4
涉及到PWM數(shù)據(jù)更新的問題,有三個寄存器位不得不提,那就是UPDMOD,UPDATE bit及UPDREQ bit,如圖2,3,4,5所示。
UPDMOD控制位決定了寄存器的更新模式,分為立即更新和SOC更新,及Client的立即更新和Client的SOC更新,后續(xù)我們會詳細(xì)說明。
UPDATE bit的值可以讓用戶看到PWM數(shù)據(jù)更新處于什么狀態(tài),例如,UPDATE=0時,說明PWM數(shù)據(jù)更新已經(jīng)結(jié)束,此時可以允許用戶寫入新的PWM寄存器值,從而開啟新一次的更新,而UPDATE=1時,說明PWM數(shù)據(jù)更新正在Pending,此時用戶不能寫入新的PWM寄存器值,只能等硬件對UPDTAE清零后才能允許下一次的更新。
UPDREQ bit是允許用戶寫入1,寫入1表示PWM模塊鎖定了寫入的PWM寄存器新值,此時用戶不能再改變PWM寄存器的值,一直到PWM更新結(jié)束后硬件清零了這個位。注意,UPDREQ bit讀取的值永遠(yuǎn)為0.
圖6 自動更新PWM數(shù)據(jù)寄存器說明1
圖7 自動更新PWM數(shù)據(jù)寄存器說明2
默認(rèn)狀態(tài)下,用戶必須要在UPDREQ中寫1才能允許PWM寄存器更新,但是在實際的使用中,往往希望能夠減小CPU的負(fù)擔(dān),所以使用自動更新的方式,那么,觸發(fā)自動更新的動作,用戶可以根據(jù)需要設(shè)定,如圖6,7寄存器設(shè)置位UPDREQ.
PGxDC是通常使用的寄存器更新的觸發(fā)方式,一旦寫入PGxDC寄存器值就認(rèn)為PWM模塊設(shè)置了更新命令。在變相位應(yīng)用中,可以使用PGxTRIGA,PGxPHASE等進(jìn)行觸發(fā)更新設(shè)置。值得注意的是,這里被選擇作為觸發(fā)更新的寄存器一定要是最后一個更新的寄存器,更新了這個寄存器就認(rèn)為所有寄存器都進(jìn)行了值的更改。
三.同步多個PWM產(chǎn)生器的BUFFER更新
dsPIC33CH/dsPIC33CK中允許不同的PWM產(chǎn)生同步更新數(shù)據(jù)BUFFER寄存器,具體而言,采用對MSTEN bit進(jìn)行設(shè)置,MSTEN設(shè)置為1,則允許當(dāng)前PWM產(chǎn)生器對其它PWM產(chǎn)生器進(jìn)行廣播更新要求及SOC信號,其UPDREQ和UPDATE bit可以廣播給其它的PWM產(chǎn)生器。
如果其它的PWM產(chǎn)生器,也設(shè)置為了合適的接收模式,可參考圖7所示表格,那么一旦它接收到了主PWM產(chǎn)生的更新信號,則它會將Local 自己PWM產(chǎn)生器的UPDREQ位設(shè)置為1,UPDATE位也會變?yōu)?/span>1.當(dāng)Local PWM產(chǎn)生器進(jìn)行了更新之后,UPDATE位自動被硬件清零。
圖8 PWM數(shù)據(jù)更新模式分類
圖8中給出了幾種PWM數(shù)據(jù)的模式,其中SOC更新和立即更新是針對獨立的PWM產(chǎn)生而言。Slaved SOC更新和Slaved立即更新是針對處于slave狀態(tài)的PWM產(chǎn)生器接收主PWM更新信號后的PWM更新模式。
圖9 PWM數(shù)據(jù)寄存器更新的注意事項
在圖8所示的更新模式中,一個值得注意的地方,我們放在圖9所示,針對SOC更新,UPDREQ的置位時刻需要和下一個PWM周期的邊界保持一定的時間間隔,這樣才能使得更新生效,否則數(shù)據(jù)更新將會被delay到接下來的一個PWM周期中。
圖10 PWM定時周期和PWM數(shù)據(jù)更新的關(guān)系
由于PWM的運行模式及I/O輸出模式會導(dǎo)致每一個PWM周期由不同個數(shù)的PWM定時器周期組成,那么在數(shù)據(jù)更新上也會有一定的區(qū)別,如圖10所示,給出了不同PWM模式下的對應(yīng)的PWM定時器周期個數(shù),及定時器周期中斷和數(shù)據(jù)寄存器更新的個數(shù)。
四.立即更新模式討論
有些時候,為了PWM下達(dá)更新命令后盡可能快的去應(yīng)用這個更新,那么可以選擇立即更新模式,以避免不希望的事情在期間發(fā)生。
當(dāng)進(jìn)行PWM周期PGxPER更新時,這個更新會立即生效,但是,當(dāng)需要更新的新的周期值小于現(xiàn)有周期PGxPER時,需要注意一下。存在一種情況,如果PWM定時器計時已經(jīng)超過了這個新的變小的PGxPER,那么定時計數(shù)器就會計時到0xFFFF,然后Rollover,這必然會造成一個長的周期。遇到這種情況,一個比較安全的方式,是捕捉到發(fā)生更新的PWM時基值,然后寫入一個安全的最小的PWM周期。
圖11 對占空比的立即更新
對占空比的立即更新,有兩種情況需要說明。一種情況是,更新命令發(fā)生時,PWM脈沖寬度已經(jīng)結(jié)束,那么這個立即更新會延時到下一個周期生效。
另外一種情況是,新的脈沖較小,PWM計時周期已經(jīng)超過了它,而此時發(fā)生了PWM立即更新命令,那么PWM的下降沿會消失,所以產(chǎn)生一個100%占空比的當(dāng)前PWM周期。
當(dāng)進(jìn)行相位更新時,新的PWM正在進(jìn)行,若新的PWM相位大于現(xiàn)有的PWM相位,則PWM相位更新立即生效。
特殊的情況需要注意,當(dāng)相位偏移減小或者脈寬變長時,如果需要立即更新,則最好對PWM發(fā)生更新的時基捕捉,然后去更新占空比和相位,一個安全的相位可以寫入。
當(dāng)新的相位小于現(xiàn)有相位時,而PWM計時定時器已經(jīng)超過了這個新相位,那么在當(dāng)前PWM周期中,會產(chǎn)生占空比為0%的周期。
五.PWM死區(qū)的更新的簡單討論
如果在PWM波形中,死區(qū)正在進(jìn)行,如果針對死區(qū)需要立即更新,那么死區(qū)時間在更新后將會加長。這是因為若死區(qū)未結(jié)束時,死區(qū)計數(shù)器會在立即更新后重新裝載,那么就會變?yōu)楦L的死區(qū)。不過,在下一個周期中會變?yōu)楦潞蟮恼K绤^(qū)。