This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于HVPM_Sensorless_2833x电流采样的问题



大家好,在HVPM_Sensorless_2833x程序中有关于电流采样的程序   

#ifdef DSP2833x_DEVICE_H
    clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
    clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
    #endif                                                            // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)            
   

我对这句话的理解是offsetA和offsetB是一个dsp对电机交流电流采样的一个偏置电压,为了保证可以采样负的电流值而在采样电路中设置一个Vref,所以这个值因每个人的电流采样放大电路各异所以也就不相同;但是这个值大约在0.5附近后面在乘上一个2,就可以保证AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2在-1到+1之间变化,而后面的0.909也就是3.0/3.3的值,是把电流采样的输入电压进行标幺值处理;

以上是我对程序中这句话的理解,请大神指点一二,不知道上面的理解是否正确。

下面是我的主要困惑:

在HVPM_Sensorless_2833x程序中,可以看到是一个标幺值系统,请问  

  clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
    clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.

这两句话是不是说clark变换的输入必须是标幺值?在程序中定义了很多BASE_VOLTAGE  、BASE_CURRENT、 BASE_FREQ等等类似于这种值,请问在程序怎样进行标幺化的,一直不理解?、

问题有点多,请大家见谅,恳请大家帮忙解决问题,谢谢!!

  • ((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2是因为adc是12位,*0.00024414是右移12位,就进行了标幺0~1,但是电流是有正负,于是采集初始0值为offsetA对应0.5,((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2就标幺成-1~+1. 0.909是与280xx的芯片进行统一,因为那些芯片是0~3.3V的采样范围。

    标幺化是使不同的产品系列,不同的控制芯片使用同一套程序的必要手段,当如果你只想研究单个平台,不标幺也是可以的,只要在平台转移的时候会很费劲。

    BASE_VOLTAGE  、BASE_CURRENT、 BASE_FREQ这些在进行一些物理量还原的时候,或者必须要物理量变比的时候,需要用到。