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.c中的ADC问题求助

Other Parts Discussed in Thread: CONTROLSUITE

您好,在C:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_Sensorless_2833x 路径下的HVPM_sensorless.c文件中有如下代码:

#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)

问题1:AdcMirror.ADCRESULT1这里面存放的是ADC采样的电压值。但是问题是我看了工程文件后没有发现关于从外界把采样数据进行处理的文件,我想问这个里面的数据是从哪个文件得到的?

问题2:*0.00024414我的理解是用来转换Q格式的,目的是转化为(0,1)?之后-offsetA是减去的偏置电压,这个数值如何确定?再*2是为了什么?

问题3:看过论坛中的问题,*(3.0/3.3)是为了在28335中适用,但是我的外部电压值要是不超过3呢,这个是不是和Adcresult计算有关?但是我没有在project中发现相关的.c文件。

问题比较多 希望得到解答!谢谢

  • junli jiao,

    问题1:
            AdcMirror.ADCRESULT1的值是ADC采样启动并完成则保存了初始化中配置的结果寄存器1那一路的值。

    问题2:
            *0.00024414不是用来转换Q格式的,*0.00024414就是/2^12,即4096,这是12位分辨率的ADC数据转换的基本公式Result/4096*3.0,这里的*3.0移到括号外了。
            offsetA在中断函数interrupt void OffsetISR(void)中进行了标定。
            经过Result/4096*3.0就将转化成DSP引脚电压了,整个计算公式还剩下*2/3.3,这应该是将DSP引脚电压转化成电流实际值,所以这里的*2/3.3应该是从硬件电路上得来的,需要翻看电路。

    问题3:
            这里的计算公式是为了计算方便改变了顺序,你要按照正确的方式理解,如我刚刚所说的,ADC的采样结果ADCRESULT/4096*3.0得出DSP引脚电压,然后*2/3.3应该是转化成实际电流,用于计算。

  • 好的,看了您的回答对这个公式的理解豁然开朗!!!但是还有点问题:

    在HVPM_Sensorless.c文件中没有任何关于ADC采样初始化和启动的程序段或函数调用,那AdcMirror.ADCRESULT1中如何有的数值呢?希望得到您的回答。

  • junli jiao,

    在main的初始化中,有函数:

    // Initialize ADC module
     ADC_MACRO_INIT(ChSel,TrigSel,ACQPS);

    ADC寄存器初始化配置,包括设置PWM触发ADC等。

  • 谢谢您的回答,很详细!!!是我疏忽了。。。

  • Joey Mao,你好,我对这个式子还有一些疑问,就是2^12=4096表示值得范围是0~4095,我的参考书上的计算我公式为result=4095x(输入电压—ADCL0)/3,把公式变换一下就是输入电压=(result/4095)*3+ADCL0,ADCL0 为ADC转换的参考电平,实际使用时常与AGND连接在一起,即ADCL0=0,我想问的就是这里ADCL0表示的就是 offsetA吗,但是感觉不对,还有就是式子中到底是用4095还是4096了?

  • yuan nie,

    ADCL0和offsetA在两个公式中概念是一样的,都是表示偏置值。但是要根据具体的应用情况来确定这个值,这里是ADC一般用于采样三相电流,偏置值一般区中间值,也就是1.5V。

    另外,ADCRESULT寄存器的有效数据位12位,表示的数据范围是0~4095一共4096个值,理论上来说是Result/4095*3.0,而由于使用4096与4095产生的误差较小,而计算时通常不用除法(太费时间)而是使用右移12位,即除以2^12,有利于程序计算。

  • 嗯,明白了,谢谢!

x 出现错误。请重试或与管理员联系。