使用IQmath定点运算调试TI官方的软件锁相环
最近因項目需要,打算使用TI官方的軟件鎖相環(huán)實現(xiàn)三相逆變器的鎖相,其中坑基本都踩過,在此分享一下。
由于我用的是F2812的DSP,比較辣雞,沒有浮點運算引擎,因此為了提高浮點運算的速度,配合TI的IQmath定點運算庫 (關于IQmath,不了解的小伙伴可以Q私我1062057308,或者去TI官網(wǎng)搜一下) 和對應的太陽能庫,這個庫集成了大部分電力電子常用的算法,比如坐標變換、PID、濾波器、鎖相環(huán)等,而且TI很貼心的做了浮點、定點和CLA三個版本,這個庫在controlSUITE里可以找到。PS:如果用的DSP有浮點運算引擎(28335以上型號應該都有…),建議直接用浮點數(shù)運算,真的省了很多幺蛾子和未知的Bug!
TI的軟件鎖相環(huán),有一個官方的應用文檔《使用C2000 ? 微控制器針對三相并網(wǎng)應用的軟件鎖相環(huán)設計》,并且是中文的,官網(wǎng)也可直接找到。
我用的是最基本最簡單的同步基準框鎖相環(huán)(SRF-SPLL),其鎖相原理文檔中也有詳細描述,簡而言之,就是把三相電壓進行ABC-DQ變換,通過PLL控制Q軸的電壓等于0,即實現(xiàn)了鎖相。
這里需要用到DQ變換和SPLL這兩個算法,太陽能庫里都有。
算法實現(xiàn)的步驟:
1、采集電網(wǎng)電壓,并進行DQ變換,得到Q軸的電壓Vq;
這里需要注意,因為最終只需要控制Vq=0即可,原則上經(jīng)AD采集的三相電壓只要相序正確、三相對稱,就能正常運算,也就是說,輸入dq變換單元的三相電壓并不一定非常精確的與實際電壓相等,比如實際電壓220V,我通過AD采集求出的電壓是150V,也能完成鎖相。這個特點為提高程序運算速度提供了可能:比如,根據(jù)調(diào)理電路,電壓被縮小了約38.7596倍送入DSP,所以要想計算精確的電壓,必須把AD寄存器值除以38.7596。我們知道作除法,特別是浮點除法是很耗費CPU的。既然不需要精確的電壓,就可以通過移位來實現(xiàn)縮放,右移5位,即相當于除以32,跟除以38.7596差別不大,這樣可以一定程度提高運算速度(沒辦法,DSP太垃圾,必須想辦法充分利用計算資源…)。當然如果需要精確的電壓值還是需要按部就班的求。
還有一點要注意,雖然不要求電壓倍數(shù)精確,但最好不要有直流偏置,否則影響鎖相效果,所以提前校準好AD的零漂。
2、Vq傳入SPLL結(jié)構(gòu)體參數(shù),spll1.v_q[0] = abc_dq0_pos1.q;
這里注意,調(diào)用spll鎖相的函數(shù)時,一定要先更新v_q[0],這個文檔中也強調(diào)了。
*3、調(diào)用函數(shù) SPLL_3ph_SRF_IQ_FUNC(SPLL_3ph_SRF_IQ spll_obj),求取鎖相角度theta.
這個角度就是DQ變換用到的theta,因為DQ變換在鎖相之前,所以DQ變換用到的是上一個控制周期計算的角度,也就是延遲一個周期。這樣的話,控制頻率不能太低,在SoliaLib文檔中,官方說最低控制頻率不能低于20k,但我用的控制頻率是10k,鎖出來感覺效果也不差hhh。下圖是用CCS的示波器觀測的鎖相正弦值。
注意事項:
1、鎖相需要用到PI,其離散化控制參數(shù)不需要自己計算,TI已經(jīng)提供了一個Excel表格專門計算參數(shù)。這個表格也在Solar文件夾里。計算時,只需填入穩(wěn)定時間、阻尼比、誤差帶范圍、控制周期(頻率),就可以自動計算B0、B1。有需要的請自行食用
鏈接:https://pan.baidu.com/s/18-vipsBYJkWpk2kCezrVcA
提取碼:4igw
2、SoliaLib使用手冊還提到,傳入SPLL的q軸電壓Vq范圍為(-1,1),即需要歸一化!!!這一點很重要,我個人理解是PI需要處理的對象要有足夠小的偏差,如果太大了其調(diào)節(jié)效果就不夠了,所以需要把Vq歸一化,實際上只需要縮小大概100倍就可以了。
3、對于使用IQ定點運算,要注意,SPLL默認的使用IQ21格式,如果外部程序使用其他的格式,一定要轉(zhuǎn)換和避免數(shù)據(jù)溢出。另外建議不要用太低的IQ格式進行鎖相,官方默認IQ21是有道理的,IQ太低的話,小數(shù)位太少,計算精度大打折扣。有人可能存在疑問,如果用IQ21格式,則整數(shù)位只剩下10位(對32位MCU而言),最大計算的數(shù)據(jù)只有2^10 -1= 1023,是否容易溢出?這個不必擔心,我們電網(wǎng)電壓一般峰值也就300多V,而且前面提到了,電壓Vq需要歸一化,肯定不會溢出。(對于IQ math的使用,我會在另一篇文章里詳細講一下)
4、ABCtoDQ0的坐標變換,一般有兩種坐標對齊方式,即D軸與A軸對齊和超前A軸90°對齊(aligned 90 degrees behind A axis),兩種對齊方式是有區(qū)別的,具體可以看一下Simulink里abc to dq0模塊的Help,里面有詳細的解釋。
5、可配合matlab進行一比一仿真,能發(fā)現(xiàn)一些邏輯和語法錯誤。
左圖是A相電壓IQ格式,右邊是鎖相的相位正弦值,正好相差1/4工頻周期。
為什么會有相位差呢?我們打開鎖相環(huán)的程序,仔細閱讀就會發(fā)現(xiàn),TI這個abc/dq變換不是d軸按照A相電壓來定向的,而是d軸超前于A相90°來定向的!!所以鎖相環(huán)鎖出的相位超前于A相90°!!
關于定向的詳細解釋,大家可以看simulink里面的abc to dq0模塊的Help,里面介紹的很詳細。
知道這一點,就很好辦了。解決辦法有兩個:
1、將鎖相環(huán)輸出的角度θ減去pi/2,再反饋到DQ變換模塊;
2、修改DQ變換模塊的程序,反饋進來的還是θ不變,但是我們知道這個θ比A相的θ超前了pi/2,所以在程序中計算dq值時,將θ減去pi/2。
原來的dq計算公式為
d = alpha·sin(wt) + beta·cos(wt);
q = beta·cos(wt) - alpha·sin(wt);
根據(jù)誘導公式,修改后的dq計算公式為
d = -alpha·cos(wt) + beta·sin(wt);
q = beta·sin(wt) + alpha·cos(wt);
通過上面兩種方法,鎖出來的相位跟A相就完全對應了~
總結(jié)
以上是生活随笔為你收集整理的使用IQmath定点运算调试TI官方的软件锁相环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LaTex 有用的表格集锦
- 下一篇: xiuno开发文档_觅道文档开始支持富文