此前關于TI的C2000系列DSP的移相功能模塊導致部分周期出現驅動脈沖丟失的現象,已經寫了兩篇文章了,其中第一篇提出這個現象并分析這種情況產生的原因,第二篇給出了一種可以在一定范圍內規避脈沖丟失的方法。這種方法的思路是使用額外的ePWM2模塊作為中繼,產生一個固定的移相角,通過接力的方式,使ePWM1與ePWM3之間得到一個較大的移相角。雖然各種方式可以得到一個絕對值較大的移相角,但移相角的變化范圍依然受到比較值的限制。以雙有源橋為例,每一個開關管均為50% 占空比,所以比較值CMP等于周期值PRD的一半,由于ePWM3模塊的移相值不能與自身的比較值發生跨越,因此可用的移相范圍依然只是180度,當然這個移相范圍對于雙有源橋已經足夠了,但這種方法需要消耗更多的硬件資源,對于復雜移相調制的雙有源橋來說,可能需要多大4組互補且相位可調的PWM驅動信號,在加上所需要的中繼模塊,很可能超過DSP的片上資源總量,即使不超過這也是硬件資源的極大浪費,只能作為一種臨時的解決方案。
本文根據ePWM模塊的使用手冊,給出另一種移相方法,在節省硬件資源的前提下實現較大范圍的移相。
上回書說到PWM移相是通過傳遞同步信號實現的,每個ePWM模塊都有個同步信號的輸入端SYNCI和同步信號的輸出端SYNCO,同步信號的產生有三種方式,分別是:
直接透傳SYNCI的信號到SYNCO,作為下一個模塊SYNCI,這種方式也是我當年的畢業設計用應用的,這樣可以避免途經的模塊移相角對后面的模塊相位的影響。
CTR=0時產生SYNCO脈沖,這種方式假設模塊1與模塊2之間的相位發生變換,模塊3也會隨之變化,導致模塊之間的移相同步值存在耦合,增加計算復雜度。
CMPB=CTR 這種方法可以在模塊不使用CMPB時獲得比較自由的移相方式,但也具有第2中方式的缺點,累計移相角的問題。
產生同步脈沖后,后一個模塊接收到同步脈沖,會將PHS寄存器的值直接寫到計數器CRT中,相當于為計數器賦初值,改變這個初值就會改變該計數器與前一個計數器的相位差。
上篇文章是針對方式2提出的方法,本篇文章針對方式3給出一種不用額外硬件資源作為中繼就可以實現大范圍移相的方法。
首先需要了解的是每個ePWM模塊有兩個比較值CMPA和CMPB,對于互補輸出只需要使用一個CMP比較值寄存器,另一個閑置就可以了。因為死區模塊可以根據CMPA自動生成兩路互補帶死區的驅動信號,那么閑置CMPB就可以用于產生移相同步脈沖,而且不會影響到自己模塊的發波。根據上面的第三種同步信號產生方式,可以使用ePWM模塊中的比較值CMPB與計數器CTR匹配的事件來產生同步信號輸出SYNCO,通過調整CMPB寄存器的值調整SYNCO與SYNCI的延遲相位。
以上圖為例,設定兩個ePWM模塊均為周期100,ePWM1的CMPB寄存器為30,ePWM2模塊的PHS寄存器為0,得到的效果就是當模塊1計數到30的時候,將模塊2清零。這里面的CMPB用于產生移相角,移相角變化范圍可以在0到360度之間。當然這個移相角的變換并非沒有限制,假設在一個周期內移相角變化過大,超過180度,同樣可能造成驅動脈沖的丟失。
上圖給出了一個實例,移相角從80一下子改成了20,超過了半周期50,那么下一周期的ePWM2模塊的計數只到40就再次歸零了,沒有機會與CMPA發生匹配(見紅色虛線圈出的部分),因此這個周期的驅動脈沖無翻轉。這種方法需要使用者注意:調整移相角要每個周期逐漸調整,設定一個最大調整步長。當然這個步長最好設定為遠小于半周期,因為單次調整及時不超過半周期,也會導致驅動脈沖畸變,原本互補50% 占空比的PWM會變成非50%。造成變壓器磁偏。較小的磁偏可以通過回路寄生電阻自行矯正,如果一個周期產生很大的磁偏,無法及時矯正,就可能導致變壓器飽和。
值得注意的是這種移相方法獲得的移相角是滯后的,而原本通過改寫PHS寄存器得到的移相角是超前的。用戶可以根據需要同時使用本文提出的移相方法和通過PHS寄存器賦初值的方法,這樣可以獲得更靈活的應用。但切記PHS的變化范圍一定不能與比較值CMP發生跨跨越。
到此為止,關于C2000系列移相功能缺陷的分析與解決的文章就要告一段路了,接下來我準備了一塊LCD板子,打算做一個串口屏,帶觸摸按鍵和一些存儲外設,然后寫寫代碼。此后屏幕可以作為更大的系統的HMI,例如數控電源顯示與調節面板,電池模組的顯示單元等等。我將會把串口屏的軟硬件設計經驗分享出來。
-
dsp
+關注
關注
554文章
8059瀏覽量
349747 -
模塊
+關注
關注
7文章
2730瀏覽量
47644 -
PWM
+關注
關注
114文章
5196瀏覽量
214494 -
脈沖
+關注
關注
20文章
897瀏覽量
95706 -
串口屏
+關注
關注
8文章
546瀏覽量
37521
發布評論請先 登錄
相關推薦
評論