我正在尝试准确计算 RC 网络的相位。 在这里的几篇文章(包括我自己的文章)中、我意识到每次使用新频率时校准相位偏移可能是最简单的事情。
我使用 MSP430FR4133 Launchpad 来控制 AFE4300EVM。 我让它发挥了大部分作用、我可以从多个频率读取连续阻抗数据、而不会出现任何问题(在 IQ 模式下)。 不过、计算相位有点困难。 因此、我当前的方法是初始化所有寄存器、设置初始频率、设置 ISW 和 VSENSE 多路复用器以从100欧姆校准电阻器读取数据、读取相应的 I 和 Q、清除 ISW 和 VSENSE 多路复用器、设置 ISW 和 VSENSE 多路复用器以从750欧姆校准电阻器读取数据、增加频率并重复。 我的目标是1。 确保我能够正确读取750欧姆 、然后按2。 确保我可以偏移已经存在的任何相位。
//命令'mIIIi?' 使程序进入频率扫描模式
// IIIi 是 ISW_MUX 和 VSENSE_MUX 的十六进制代码
//输出采用格式- frequency、I_Cali、Q_Cali /n frequency、I_calc、Q_calc /n
否则、如果(uartRxBuffer[uartRxRdBufPtr]='m')
{
int 索引= 0;
initDRDY ();
//获取 I 和 V 的输出引脚
uartRxRdBufPtr++;
IF (uartRxRdBufPtr >= MAXRXBUF)
uartRxRdBufPtr = 0;
//将 ASCII 字节转换为引脚地址。
afe4300输出= ascii2uint8 (uartRxBuffer[uartRxRdBufPtr])<<12;
uartRxRdBufPtr++;
IF (uartRxRdBufPtr >= MAXRXBUF)
uartRxRdBufPtr = 0;
afe4300输出|= asci2uint8 (uartRxBuffer[uartRxRdBufPtr])<<8;
uartRxRdBufPtr++;
IF (uartRxRdBufPtr >= MAXRXBUF)
uartRxRdBufPtr = 0;
afe4300输出|= asci2uint8 (uartRxBuffer[uartRxRdBufPtr])<<4;
uartRxRdBufPtr++;
IF (uartRxRdBufPtr >= MAXRXBUF)
uartRxRdBufPtr = 0;
afe4300输出|= ascii2uint8 (uartRxBuffer[uartRxRdBufPtr]);
字符 afeStringData[8];
//设置初始频率
spiWrite (AFE4300_BCM_DAC_FREQ、0x0000);
spiWrite (AFE4300_DEVICE_CONTROL2、0x0000);
spiWrite (AFE4300_BCM_DAC_FREQ、FREQ[索引]);
spiWrite (AFE4300_DEVICE_CONTROL2、fares[index+1]);
//当按下'S'时,while 循环退出
while (UCA0RXBUF!="S"){
//选择 PCB 上的校准电阻器-选择 CAL 100
spiWrite (AFE4300_ISW_MUX、0x0101);
spiWrite (AFE4300_VSENSE_MUX、0x0101);
itoa (频率[索引]、&afeStringData[0]、10);
uartTXByte ('、');
//校准
//将外设设置为 I
spiWrite (AFE4300_ADC_CONTRAL_REGISTER2、ADC_REF_SEL_VREF | PERSIS_BCM_I);
while (readADCFlag=0);//等待中断
readADCFlag = 0;
P4OUT ^= BIT0;
afe4300Data = spiRead (0);
itoa (afe4300Data、&afeStringData[0]、10);
uartTXByte ('、');
//将外设设置为 Q
spiWrite (AFE4300_ADC_CONTRAL_REGISTER2、ADC_REF_SEL_VREF | PERSIS_BCM_Q);
while (readADCFlag=0);//等待中断
readADCFlag = 0;
P4OUT ^= BIT0;
afe4300Data = spiRead (0);
itoa (afe4300Data、afeStringData、10);
uartTXByte ('\n');
spiWrite (AFE4300_ISW_MUX、0x0000);
spiWrite (AFE4300_VSENSE_MUX、0x0000);
//将引脚设置为所需的引脚排列
spiWrite (AFE4300_ISW_MUX、afe4300输出);
spiWrite (AFE4300_VSENSE_MUX、afe4300输出);
itoa (频率[索引]、&afeStringData[0]、10);
uartTXByte ('、');
//计算
//将外设设置为 I
spiWrite (AFE4300_ADC_CONTRAL_REGISTER2、ADC_REF_SEL_VREF | PERSIS_BCM_I);
while (readADCFlag=0);//等待中断
readADCFlag = 0;
P4OUT ^= BIT0;
afe4300Data = spiRead (0);
itoa (afe4300Data、&afeStringData[0]、10);
uartTXByte ('、');
//将外设设置为 Q
spiWrite (AFE4300_ADC_CONTRAL_REGISTER2、ADC_REF_SEL_VREF | PERSIS_BCM_Q);
while (readADCFlag=0);//等待中断
readADCFlag = 0;
P4OUT ^= BIT0;
afe4300Data = spiRead (0);
itoa (afe4300Data、afeStringData、10);
uartTXByte ('\n');
索引+=2;
if (index>8){index = 0;}
//写入新频率
spiWrite (AFE4300_BCM_DAC_FREQ、0x0000);
spiWrite (AFE4300_DEVICE_CONTROL2、0x0000);
spiWrite (AFE4300_BCM_DAC_FREQ、FREQ[索引]);
spiWrite (AFE4300_DEVICE_CONTROL2、fares[index+1]);
}
readADCFlag = 0;
DRDYIEL();
uartRxRdBufPtr = 0;
uartRxWRBufPtr = 0;
uartRxBufLength = 0;
}
}
当我使用此代码收集数据时、我希望数据在我通常看到的750欧姆和我通常看到的100欧姆之间波动。 相反、I 和 Q 值介于两者之间。 我可以想到的唯一原因是、如果以某种方式并联电阻器、就会发生这种情况。 但 I 和 Q 值远距离不接近100欧姆、这样才会正确。 我应该对其他寄存器进行编程吗? 我不确定该代码为什么不起作用。
750欧姆的 I、Q 典型值(未校准 Z_Magnitude、计算公式为 sqrt (I^2 + Q^2)、Phase = atan (Q/I)))
频率、I、Q、Z_Magnitude、Phase
8 7424 -3595 8248.624 -25.8381
16 7053 -5756 9103.645 -39.2181
32 7096 -2662 7578.883 -20.5631
64 8522 557 8540.183 3.7395
128 8198 -1405 8317.525 -9.7251
8 7363 -3580 8187.195 -25.9297
16 7041 -5752 9091.82 -39.2464
32 7120 -1438 7263.762 -11.4182
64 8630 1018 8689.835 6.7276
128 8074 2671 8504.335 18.305
100欧姆时的典型 I、Q 值
频率、I、Q、Z_Magnitude、Phase
8 1049 -415 1128.107 -21.5845
16 994 - 875 1324.259 - 41.3569
32 1013 -188 1030.298 -10.5138
64 1235 130 1241.823 6.009
128 1137 355 1191.131 17.3397
8 1043 -417 1123.271 -21.7919
16 1045 484 1151.643 24.8516
32 1153 190 1168.55 9.3575
64 1262 186 1275.633 8.3842
在两个校准电阻器之间切换的值(奇数行具有100欧姆电阻器值(校准)、偶数行具有测试值(750欧姆))。
频率、I、Q、Z_Magnitude、Phase
8 4350 179 4353.681 2.3564
8 3798 -3733 5325.42 -44.5055
16 4386 -672 4437.182 -8.7108
16 3783 4010 5512.82 46.6685
32 4806 1426 5013.094 16.5263
32 4544 731 4602.423 9.139
64 5393 3735705.206 3.7486
64 4645 1315 4827.551 15.8068
128 5432 725 5480.169 7.6022
128 3769 2499 4522.208 33.546
8 4369 260 4376.73 3.4057
8 3897 -3439 5197.435 -41.4276
16 4494 -1830 4852.312 -22.1566
16 3332 -5095 6087.795 -56.8163
32 3823 -1848 4246.226 -25.7987
32 4270 -1204 4436.498 -15.7467
64 5499 -181 5501.978-1.8852
64 4586 1195 4739.137 14.6051
128 5421 697 5465.624 7.3266.
128 3765 2474 4505.097 33.3091