TI的文档SPRA589A逆变程序分析:PI补偿后算出的误差与pwm寄存器

[复制链接]
3417|4
 楼主| snakeemail 发表于 2008-2-15 13:56 | 显示全部楼层 |阅读模式
LACC&nbsp;Uniinv_H_0&nbsp;;Q11<br />SUB&nbsp;Upi_i_o&nbsp;;Q11<br />sacl&nbsp;epi_i_o&nbsp;;Q11<br />ltepi_i_o&nbsp;;Q11<br />mpy&nbsp;Kcorr_iinv&nbsp;;Q13<br />pac&nbsp;;Q24<br />lt&nbsp;En0_iinv&nbsp;;Q15<br />mpy&nbsp;K1_iinv&nbsp;;P&nbsp;&lt-&nbsp;K1*En1,&nbsp;Q9*Q15<br />apac&nbsp;;Q24<br />ADD&nbsp;Un_iinv,13&nbsp;;Q24<br />rpt&nbsp;#2<br />norm&nbsp;*&nbsp;;q27<br />sach&nbsp;Un_iinv&nbsp;;Q11 <font color=#FF0040>这里算出的Q27,他只取高11为,低15位都不要了?why</font><br /><font color=#FF0040>这是个逆变器程序,频率在20MHz,载波为20kHz(50uS),&nbsp;updown计数,所以周期寄存器定时25uS,那么周期寄存器T=25000nS/50nS=500,</font><br /><br />;Convert&nbsp;Q11&nbsp;value&nbsp;to&nbsp;an&nbsp;absolute&nbsp;Q0&nbsp;for&nbsp;use&nbsp;in&nbsp;Compare&nbsp;reg.<br />spm&nbsp;3<br />LT&nbsp;Uniinv_H_0&nbsp;;&nbsp;(Q11)<br />MPY&nbsp;#1000&nbsp;;P&nbsp;=&nbsp;1000*U&nbsp;=&nbsp;2T*U<br />PAC&nbsp;;&nbsp;<font color=#FF0040>ACC&nbsp;=&nbsp;2T*U/64&nbsp;=&nbsp;(T/2)*(U/16),&nbsp;max&nbsp;U=16,&nbsp;T=500,就是这个公式不明白是啥意思?<br /></font>rpt&nbsp;#4<br />norm&nbsp;*<br />SACH&nbsp;GPR0<br />最后从ACC&nbsp;=&nbsp;2T*U/64&nbsp;=&nbsp;(T/2)*(U/16),&nbsp;max&nbsp;U=16,这个公式可以看出,pwm寄存器的最大为250,这个逆变器是双极性的,如果是开环双极性SPWM推动逆变器,可以发现开环双极性SPWM公式,最大的pwm寄存器也是250,那么我想,无论最后的PI补偿结果算出来是什么,最后都要小于250,<br />即U&nbsp;×&nbsp;待定系数&lt=250<br />因为U是Q11有符号,即U的绝对值最大为16,<br />但是前面的P&nbsp;=&nbsp;1000*U&nbsp;=&nbsp;2T*U不知道是如何得来的?特别是2T,其中的T是否是我估计的周期寄存器值。
 楼主| snakeemail 发表于 2008-2-16 20:27 | 显示全部楼层

问题2,U是如何规格化的

计算PI结果时,<br />norm&nbsp;*&nbsp;;q27<br />sach&nbsp;Un_iinv&nbsp;;Q11<br />他只取高11为,低15位都不要了,似乎是在忽略小数部分,也许是因为后面的小数太小了,不起作用了。<br />可是我对于norm的作用不清楚,查了半天也没有找到相关的资料,这个应该是和补码的乘法有关,估计是去掉多余的符号位,但是介绍的资料太少了<br />
 楼主| snakeemail 发表于 2008-2-17 23:41 | 显示全部楼层

截断尾数

TI程序分析<br />1.&nbsp;&nbsp;&nbsp;&nbsp;debug_data&nbsp;.set&nbsp;7626h&nbsp;;&nbsp;(65Hz,7FFFh)(60Hz,7626h)(45Hz,589ch)<br />int(60/65&nbsp;*&nbsp;2^15)这是个Q15值,最大为65Hz,<br /><br />;&nbsp;Set&nbsp;frequency&nbsp;to&nbsp;radian&nbsp;frequency&nbsp;conversion&nbsp;ratio<br />;&nbsp;65*2*pi&nbsp;=&nbsp;408.407045<br />;&nbsp;7FFFh&nbsp;corresponds&nbsp;to&nbsp;65Hz=408.407045&nbsp;rad/sec<br />2.&nbsp;F_W_&nbsp;.set&nbsp;26138&nbsp;;&nbsp;Q6&nbsp;&nbsp;26138/64=65*2*pi&nbsp;=&nbsp;408.407045&nbsp;????<br />;&nbsp;Minimum&nbsp;radian&nbsp;frequency<br />;&nbsp;min_F*2*pi=45*2*pi&nbsp;=&nbsp;282.7433<br />;&nbsp;min_F=45Hz&nbsp;is&nbsp;the&nbsp;minimum&nbsp;frequency&nbsp;input<br />min_W_&nbsp;.set&nbsp;9048&nbsp;;&nbsp;Q5<br /><br />2.&nbsp;&nbsp;&nbsp;&nbsp;SPLK&nbsp;#F_W_,F_W&nbsp;;&nbsp;Q6,&nbsp;set&nbsp;F&nbsp;to&nbsp;angular&nbsp;speed&nbsp;ratio<br />//F_W=26138&nbsp;即Q6&nbsp;&nbsp;26138/64=65*2*pi&nbsp;=&nbsp;408.407045<br /><br />A.;Set&nbsp;the&nbsp;desired&nbsp;output&nbsp;frequency<br />SPLK&nbsp;#debug_data,set_F&nbsp;//set_F=60Hz<br />;----------------------------------------------------------------------<br />;&nbsp;Calculate&nbsp;set&nbsp;angular&nbsp;speed&nbsp;based&nbsp;set&nbsp;F<br />;--------------------------------------------------------------------&nbsp;S_W&nbsp;=&nbsp;set_F&nbsp;*&nbsp;F_W&nbsp;&nbsp;即60/65*2^15*2PI*65&nbsp;=&nbsp;60Hz&nbsp;*&nbsp;2PI<br />tag1:&nbsp;LT&nbsp;set_F&nbsp;;&nbsp;set&nbsp;F&nbsp;-&gt&nbsp;T:&nbsp;Q15<br />MPY&nbsp;F_W&nbsp;;&nbsp;Q15*Q6=Q21<br />PAC&nbsp;;<br />SACH&nbsp;S_W&nbsp;;&nbsp;-&gt&nbsp;set&nbsp;angular&nbsp;speed:&nbsp;Q5<br />SUBH&nbsp;min_W&nbsp;;&nbsp;Q5,compare&nbsp;W&nbsp;with&nbsp;its&nbsp;upper&nbsp;limit<br />BGZ&nbsp;W_in_limit&nbsp;;&nbsp;continue&nbsp;if&nbsp;within&nbsp;limit<br />LACC&nbsp;min_W&nbsp;;&nbsp;saturate&nbsp;if&nbsp;not<br />SACL&nbsp;S_W&nbsp;;<br />W_in_limit<br />
IceAge 发表于 2008-2-19 01:36 | 显示全部楼层

sach Un_iinv ;Q11

应该是扔掉了低&nbsp;11&nbsp;位,取高&nbsp;16&nbsp;位&nbsp;&lt--&gt&nbsp;Q15
 楼主| snakeemail 发表于 2008-2-20 17:06 | 显示全部楼层

问题2的答案

我觉得这位程序员将U看成了Msinwt
您需要登录后才可以回帖 登录 | 注册

本版积分规则

547

主题

1909

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部