使用IQmath定点运算调试TI官方的软件锁相环
时间:2023-09-06 11:37:02
最近,由于项目的需要,我计划使用它TI官方软件锁相环实现了三相逆变器的锁相,其中坑基本,在此分享。
因为我用的是F2812的DSP,比较辣鸡,没有浮点操作引擎,所以为了提高浮点操作速度,配合TI的IQmath定点运算库 (关于IQmath,不懂的小伙伴可以Q私自1062057308,或者去TI搜索官网) 与对应的太阳能库相结合,该库集成了大多数常用的电力电子算法,如坐标变换、PID、滤波器,锁相环等,而且TI浮点、定点和定点都很贴心。CLA这个库在三个版本controlSUITE可在里面找到。PS:如果用的DSP应该有浮点运算引擎(28335以上型号)…),建议直接用浮点数计算,真的省去了很多蛾子和未知Bug!
TI软件锁相环,有官方应用文件使用C2000 ? 三相并网软件锁相环设计的微控制器,而且是中文的,官网也可以直接找到。
我使用最基本、最简单的同步基准框锁相环(SRF-SPLL),其锁相原理文档也有详细的描述,简而言之,就是三相电压ABC-DQ变换,通过PLL控制Q轴的电压等于0,即实现锁相。
需要在这里使用DQ变换和SPLL太阳能库里有这两种算法。
实现算法的步骤:
1.收集电网电压并进行DQ变换,获得Q轴的电压Vq;
这里需要注意,因为最终只需要控制Vq=可以,原则上经AD采集的三相电压只要相序正确,三相对称,即输入dq变换单元的三相电压不一定等于实际电压,如实际电压220V,我通过AD采集电压为150V,锁相也可以完成。这一特点为提高程序运行速度提供了可能性:例如,根据调节电路,电压缩小约38.7596倍送入DSP,因此,为了计算精确的电压,必须计算AD寄存器值除以38.7596。我们知道除法,尤其是浮点除法,非常昂贵CPU的。既然不需要精确的电压,就可以通过移位缩放,右移5位,相当于32,38.7596差别不大,可以在一定程度上提高运算速度(没有办法,DSP必须找到充分利用计算资源的方法…)。当然,如果需要精确的电压值,还是需要循序渐进。
还需要注意的是,虽然不需要准确的电压倍数,但最好不要有直流偏置,否则会影响锁相效果,所以提前校准AD的零漂。
2、Vq传入SPLL结构参数,spll1.v_q[0] = abc_dq0_pos1.q;
注意,调用spll锁相函数必须先更新v_q本文还强调了[0]。
*3、调用函数 SPLL_3ph_SRF_IQ_FUNC(SPLL_3ph_SRF_IQ spll_obj),寻求锁相角度theta.
这个角度就是DQ变换用到的theta,因为DQ因此,在锁相之前进行变换DQ变换用到的是上一个控制周期计算的角度,也就是延迟一个周期。这样的话,控制频率不能太低,在SoliaLib文档中,官员表示,最低控制频率不应低于200k,但是我用的控制频率是10k,锁起来感觉效果还不错hhh。下图是用CCS的示波器观测的锁相正弦值。
注意事项:
需要使用锁相PI,其离散控制参数不需要自行计算,TI已经提供了一个Excel表格专门计算参数。这个表格也在Solar文件夹。只需填写稳定时间、阻尼比、误差带范围、控制周期(频率)即可自动计算B0、B1.如有必要,请自己吃
链接:https://pan.baidu.com/s/18-vipsBYJkWpk2kCezrVcA
提取码:4igw
2、SoliaLib使用手册还提到,传入SPLL的q轴电压Vq范围为(-1,1)归一化!!!这一点很重要,我个人的理解是PI需要处理的对象应该有足够小的偏差。如果太大,调整效果不够,需要处理Vq其实归一化只需要缩小100倍左右。
3、对于使用IQ注意定点操作,SPLL默认的使用IQ21格式,如果外部程序使用其他格式,并避免数据溢出。另外,建议不要用太低的IQ锁相格式,官方默认IQ21是合理的,IQ如果太低,小数位太少,计算精度大大降低。有人可能存在疑问,如果用IQ21格式,整数只剩下10位(对32位)MCU),最大计算数据只有2^10 -1= 1023,容易溢出吗?不用担心,我们电网电压的峰值一般在300以上V,正如前面提到的,电压Vq需要归一化,肯定不会溢出。(对于IQ math我将在另一篇文章中详细介绍使用情况)
4、ABCtoDQ0坐标变换一般有两种坐标对齐方式,即D轴与A轴对齐,超前A轴90°对齐(aligned 90 degrees behind A axis),这两种对齐方不同,具体可以看Simulink里abc to dq0模块的Help,有详细的解释。
5、可配合matlab一对一模拟可以发现一些逻辑和语法错误。
左图为A相电压IQ格式,右侧是锁相的相位正弦值,正好相差1/4工频周期。
为什么会有相位差?打开锁相环的程序,仔细阅读就会发现,TI这个abc/dq变换不是d轴根据a相电压定向的,而是d轴超过a相90°定向!!所以锁相环锁的相位超过A相90°!!
您可以看到定向的详细解释simulink里面的abc to dq0模块的Help,介绍非常详细。
知道这一点,很容易做到。有两种解决方案:
1.输出锁相环的角度θ减去pi再次反馈DQ变换模块;
2、修改DQ对于改变模块的程序,反馈仍然是θ不变,但我们知道θ比A相的θ超前了pi/2,所以在程序中计算dq值时,将θ减去pi/2。
原来的dq计算公式为
d = alpha·sin(wt) beta·cos(wt);
q = beta·cos(wt) - alpha·sin(wt);
根据诱导公式,修改后dq计算公式为
d = -alpha·cos(wt) beta·sin(wt);
q = beta·sin(wt) alpha·cos(wt);
通过以上两种方法,锁定的相位与A相完全对应~