本人在实验室学习,使用2808
发现上一版的vdc程序是参照官方例程的
:
while (AdcRegs.ADCST.bit.SEQ1_BSY == 1)
{};
Tmp1 = AdcRegs.ADCRESULT0^0x8000;
Tmp2 = AdcRegs.ADCRESULT2^0x8000;
Tmp3 = AdcRegs.ADCRESULT4^0x8000;
Tmp4 = AdcRegs.ADCRESULT6^0x8000;
DatQ17 = (int32)Tmp1 + (int32)Tmp2 + (int32)Tmp3 + (int32)Tmp4;
p->ImeasB = DatQ17; //实际是Q17格式
p->ImeasB *= 1;
即直接将寄存器的值异或8000即可
但现在发现新版的实验室用的程序是
while (AdcRegs.ADCST.bit.SEQ1_BSY == 1)
{};
DatQ15 = (AdcRegs.ADCRESULT0>>4) – p->ImeasBOffset;
Tmp1 = DatQ15*p->Kcurrent; //1.46*4096/3=1993
DatQ15 = (AdcRegs.ADCRESULT2>>4) – p->ImeasBOffset;
Tmp2 = DatQ15*p->Kcurrent;
DatQ15 = (AdcRegs.ADCRESULT4>>4) – p->ImeasBOffset;
Tmp3 = DatQ15*p->Kcurrent;
DatQ15 = (AdcRegs.ADCRESULT6>>4) – p->ImeasBOffset;//2047;
Tmp4 = DatQ15*p->Kcurrent;
DatGQ = (int32)Tmp1 + (int32)Tmp2 + (int32)Tmp3 + (int32)Tmp4;
DatGQ = DatGQ >> 2;
p->ImeasB = DatGQ; // Global Q
p->ImeasB *= -1;
就是将寄存器的值右移4位,在乘以kurrent即可
那请问旧版的程序是否有什么缺陷呢?
囧:
Kcurrent是一个转换系数,而且这两版的定标变了,一个是Q15一个是Q17,是不是为了改定标才这么做的
TI中文支持网



