打印

Q格式问题,AD为Q0,系数Kmv是Q22,Kmv=0x2000,正好是2的倍数,而且结

[复制链接]
1932|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
snakeemail|  楼主 | 2008-2-18 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, AC, vi, gp, AN
这个Kmv=0x2000取得很奇怪,正好是2的倍数,是不是使用了PU值的方**
AD为正负512,程序里是GPR0_vinv,Q0
系数为Kmv,为Q22
最后的电压Vout=GPR0_Vinv*Kmv
为什么最后程序化成Q15呢?这个Q15和十进制的Vout是什么关系呢?
Invert_v:
SETC SXM
LDP #K0_vinv
spm 1
LACC Vo,10 ;
sach GPR0_vinv
lacc GPR0_vinv
and #03ffh
sub #512
neg
sub #1
sacl GPR0_vinv ;Q0
lt GPR0_vinv
mpy Kmv ;Q22 这里Vout = Kmv * GPR0_vinv 
pac ;Q23
rpt #7
norm *
sach Vout ;Q15 为什么这里Vout变成Q15??Q15不是只能表示正负1的数吗,现在的Vout和原来的Vout是什么关系呢?
SPM 0
lacc Uq ;Q15
sub Vout ;Q15
SACL En0_vinv ;Store error(Q15)
lacc Un_vinv,15 ;ACC = Un_vinv(Q30,32-bit)
LT En0_vinv ;
MPY K0_vinv ;P<- K0*En0,Q15*Q15
APAC ;ACC <-- Un_vinv + K0*En-0, Q30
norm * ;Q31
sach Upi_v_o ;Q15

相关帖子

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

per unit 模式

使用特权

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

当然应该是 Q15

Q15: 16-bit signed interger <----> -32768 to 32767 (0x8000 to 0x7FFF)

使用特权

评论回复
地板
snakeemail|  楼主 | 2008-2-22 22:10 | 只看该作者

我用PU格式写了一个,但是不一样

Q格式问题,AD为Q0,系数Kmv是Q22,Kmv=0x2000,正好是2的倍数,而且结果正好化成Q15?是否使用了PU值的概念?

下面是我想的,但是我的是乘以64,和这个程序不一样
1.    采样电压的PU值表示为Q15格式
PUq15 = (最大实际值/额定值) * 2^15;
单片机里存储值 = AD * PUq15/512; 因为是10位AD,零点为3.3V/2,则AD的范围表示为正负512.
令Ksample = PUq15/512
单片机里存储值 = AD * Ksample
例如:最大实际值= 48V,额定值 =  48V,则Ksample = 64

使用特权

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

IceAge的意思是否为

Q22*512还是一个-1到正1的数,所以结果用Q15表示

使用特权

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

本版积分规则

547

主题

1910

帖子

8

粉丝