打印

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

[复制链接]
2459|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
snakeemail|  楼主 | 2008-2-15 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LACC Uniinv_H_0 ;Q11
SUB Upi_i_o ;Q11
sacl epi_i_o ;Q11
ltepi_i_o ;Q11
mpy Kcorr_iinv ;Q13
pac ;Q24
lt En0_iinv ;Q15
mpy K1_iinv ;P <- K1*En1, Q9*Q15
apac ;Q24
ADD Un_iinv,13 ;Q24
rpt #2
norm * ;q27
sach Un_iinv ;Q11 这里算出的Q27,他只取高11为,低15位都不要了?why
这是个逆变器程序,频率在20MHz,载波为20kHz(50uS), updown计数,所以周期寄存器定时25uS,那么周期寄存器T=25000nS/50nS=500,

;Convert Q11 value to an absolute Q0 for use in Compare reg.
spm 3
LT Uniinv_H_0 ; (Q11)
MPY #1000 ;P = 1000*U = 2T*U
PAC ; ACC = 2T*U/64 = (T/2)*(U/16), max U=16, T=500,就是这个公式不明白是啥意思?
rpt #4
norm *
SACH GPR0
最后从ACC = 2T*U/64 = (T/2)*(U/16), max U=16,这个公式可以看出,pwm寄存器的最大为250,这个逆变器是双极性的,如果是开环双极性SPWM推动逆变器,可以发现开环双极性SPWM公式,最大的pwm寄存器也是250,那么我想,无论最后的PI补偿结果算出来是什么,最后都要小于250,
即U × 待定系数<=250
因为U是Q11有符号,即U的绝对值最大为16,
但是前面的P = 1000*U = 2T*U不知道是如何得来的?特别是2T,其中的T是否是我估计的周期寄存器值。

相关帖子

沙发
snakeemail|  楼主 | 2008-2-16 20:27 | 只看该作者

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

计算PI结果时,
norm * ;q27
sach Un_iinv ;Q11
他只取高11为,低15位都不要了,似乎是在忽略小数部分,也许是因为后面的小数太小了,不起作用了。
可是我对于norm的作用不清楚,查了半天也没有找到相关的资料,这个应该是和补码的乘法有关,估计是去掉多余的符号位,但是介绍的资料太少了

使用特权

评论回复
板凳
snakeemail|  楼主 | 2008-2-17 23:41 | 只看该作者

截断尾数

TI程序分析
1.    debug_data .set 7626h ; (65Hz,7FFFh)(60Hz,7626h)(45Hz,589ch)
int(60/65 * 2^15)这是个Q15值,最大为65Hz,

; Set frequency to radian frequency conversion ratio
; 65*2*pi = 408.407045
; 7FFFh corresponds to 65Hz=408.407045 rad/sec
2. F_W_ .set 26138 ; Q6  26138/64=65*2*pi = 408.407045 ????
; Minimum radian frequency
; min_F*2*pi=45*2*pi = 282.7433
; min_F=45Hz is the minimum frequency input
min_W_ .set 9048 ; Q5

2.    SPLK #F_W_,F_W ; Q6, set F to angular speed ratio
//F_W=26138 即Q6  26138/64=65*2*pi = 408.407045

A.;Set the desired output frequency
SPLK #debug_data,set_F //set_F=60Hz
;----------------------------------------------------------------------
; Calculate set angular speed based set F
;-------------------------------------------------------------------- S_W = set_F * F_W  即60/65*2^15*2PI*65 = 60Hz * 2PI
tag1: LT set_F ; set F -> T: Q15
MPY F_W ; Q15*Q6=Q21
PAC ;
SACH S_W ; -> set angular speed: Q5
SUBH min_W ; Q5,compare W with its upper limit
BGZ W_in_limit ; continue if within limit
LACC min_W ; saturate if not
SACL S_W ;
W_in_limit

使用特权

评论回复
地板
IceAge| | 2008-2-19 01:36 | 只看该作者

sach Un_iinv ;Q11

应该是扔掉了低 11 位,取高 16 位 <--> Q15

使用特权

评论回复
5
snakeemail|  楼主 | 2008-2-20 17:06 | 只看该作者

问题2的答案

我觉得这位程序员将U看成了Msinwt

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

547

主题

1910

帖子

8

粉丝