TI中文支持网
TI专业的中文技术问题搜集分享网站

MotorWare中电压采集疑问

DRV8301_REVB,F2806M

各位好!有个问题,在调试motorware代码时(所用的motorware_1_01_00_14),读取ADC的电压,例如线电压,源代码如下:

  // read the dcBus voltage value  value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_7);     // divide by 2^numAdcBits = 2^12  
value = _IQ12mpy(value,voltage_sf);  
pAdcData->dcBus = value;

查看IQmathLib.h可以知道GLOBAL_Q 为 24,但是这里采用IQ12的乘法即_IQ12mpy(  )实现,请问是如何实现的?

其后的注释说是除以ADC的位数,由IQ24除以2^12时候直接利用_IQmpy(  )实现?

Thank you in advance!~

Zhang YJ

 

rookiecalf:

value的结果是result强制转换来的所以其值是IQ0,voltage_sf是IQ24,使用_IQ12mpy结果就是IQ12,而global是IQ24,这样就是除以2^12了

DRV8301_REVB,F2806M

各位好!有个问题,在调试motorware代码时(所用的motorware_1_01_00_14),读取ADC的电压,例如线电压,源代码如下:

  // read the dcBus voltage value  value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_7);     // divide by 2^numAdcBits = 2^12  
value = _IQ12mpy(value,voltage_sf);  
pAdcData->dcBus = value;

查看IQmathLib.h可以知道GLOBAL_Q 为 24,但是这里采用IQ12的乘法即_IQ12mpy(  )实现,请问是如何实现的?

其后的注释说是除以ADC的位数,由IQ24除以2^12时候直接利用_IQmpy(  )实现?

Thank you in advance!~

Zhang YJ

 

YJZhang:

回复 rookiecalf:

"value的结果是result强制转换来的所以其值是IQ0" 应该是强制转换为(_iq)吧?而_iq默认的是全局IQ即IQ24而非IQ0.

另外_IQ12mpy(IQ24,IQ24)返回的结果是IQ24/2^12? 如果是,这个是怎么得来的?谢谢!

DRV8301_REVB,F2806M

各位好!有个问题,在调试motorware代码时(所用的motorware_1_01_00_14),读取ADC的电压,例如线电压,源代码如下:

  // read the dcBus voltage value  value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_7);     // divide by 2^numAdcBits = 2^12  
value = _IQ12mpy(value,voltage_sf);  
pAdcData->dcBus = value;

查看IQmathLib.h可以知道GLOBAL_Q 为 24,但是这里采用IQ12的乘法即_IQ12mpy(  )实现,请问是如何实现的?

其后的注释说是除以ADC的位数,由IQ24除以2^12时候直接利用_IQmpy(  )实现?

Thank you in advance!~

Zhang YJ

 

rookiecalf:

回复 YJZhang:

YJ Zhang

"value的结果是result强制转换来的所以其值是IQ0" 应该是强制转换为(_iq)吧?而_iq默认的是全局IQ即IQ24而非IQ0.

另外_IQ12mpy(IQ24,IQ24)返回的结果是IQ24/2^12? 如果是,这个是怎么得来的?谢谢!

DRV8301_REVB,F2806M

各位好!有个问题,在调试motorware代码时(所用的motorware_1_01_00_14),读取ADC的电压,例如线电压,源代码如下:

  // read the dcBus voltage value  value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_7);     // divide by 2^numAdcBits = 2^12  
value = _IQ12mpy(value,voltage_sf);  
pAdcData->dcBus = value;

查看IQmathLib.h可以知道GLOBAL_Q 为 24,但是这里采用IQ12的乘法即_IQ12mpy(  )实现,请问是如何实现的?

其后的注释说是除以ADC的位数,由IQ24除以2^12时候直接利用_IQmpy(  )实现?

Thank you in advance!~

Zhang YJ

 

YJZhang:

回复 rookiecalf:

恩,好的,谢谢!加上你的上个回答,有些理解了。还想问个问题,在TI文档《C28x IQmath Library_V1.5c   June 6, 2010 》中Page9 页讲到使用IQ格式时候有别名定义如下:

typedef   long    _iq;     /* Fixed point data type: GLOBAL_Q format */ typedef   long    _iq30;   /* Fixed point data type: Q30 format      */ typedef   long    _iq29;   /* Fixed point data type: Q29 format      */

即使用_iq对long数据类型进行定义,定义出来的是IQ0的格式还是GLOBAL_Q格式?怎么理解?谢谢!~

DRV8301_REVB,F2806M

各位好!有个问题,在调试motorware代码时(所用的motorware_1_01_00_14),读取ADC的电压,例如线电压,源代码如下:

  // read the dcBus voltage value  value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_7);     // divide by 2^numAdcBits = 2^12  
value = _IQ12mpy(value,voltage_sf);  
pAdcData->dcBus = value;

查看IQmathLib.h可以知道GLOBAL_Q 为 24,但是这里采用IQ12的乘法即_IQ12mpy(  )实现,请问是如何实现的?

其后的注释说是除以ADC的位数,由IQ24除以2^12时候直接利用_IQmpy(  )实现?

Thank you in advance!~

Zhang YJ

 

rookiecalf:

回复 YJZhang:

定义的是GLOBAL_Q格式的

赞(0)
未经允许不得转载:TI中文支持网 » MotorWare中电压采集疑问
分享到: 更多 (0)