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

drv8301 revd电路原理图的疑问

电路原理图中的IA-FB、IB-FB、IC-FB为什么要出现两次?这样有什么好处?

为什么在软件中没有配置IA-FB、IB-FB、IC-FB、I-TOTAL?只是配置了EXT IA-FB、EXT IB-FB、EXT IC-FB,这些没有配置的功能接口是不是可以去掉?

我去掉这些接口后电机也可以正常运行,高速时可能不太正常,是什么原因?

//configure the SOCs for drv8301kit_revD
// EXT IA-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_0,ADC_SocChanNumber_A6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_0,ADC_SocSampleDelay_9_cycles);

// EXT IA-FB
// Duplicate conversion due to ADC Initial Conversion bug (SPRZ342)
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_1,ADC_SocChanNumber_A6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_1,ADC_SocSampleDelay_9_cycles);

// EXT IB-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_2,ADC_SocChanNumber_B6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_2,ADC_SocSampleDelay_9_cycles);

// EXT IC-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_3,ADC_SocChanNumber_A0);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_3,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_3,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb1
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_4,ADC_SocChanNumber_B7);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_4,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_4,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb2
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_5,ADC_SocChanNumber_A7);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_5,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_5,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb3
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_6,ADC_SocChanNumber_B4);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_6,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_6,ADC_SocSampleDelay_9_cycles);

// VDCBUS
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_7,ADC_SocChanNumber_B2);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_7,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_7,ADC_SocSampleDelay_9_cycles);

return;
} // end of HAL_setupAdcs() function

user4708725:

回复 Igor An:

那就是去掉这些没有配置的接口也没有影响?我要怎么知道是哪一种电流调理方式?高速时运行电流重构算法用的是哪一种?

电路原理图中的IA-FB、IB-FB、IC-FB为什么要出现两次?这样有什么好处?

为什么在软件中没有配置IA-FB、IB-FB、IC-FB、I-TOTAL?只是配置了EXT IA-FB、EXT IB-FB、EXT IC-FB,这些没有配置的功能接口是不是可以去掉?

我去掉这些接口后电机也可以正常运行,高速时可能不太正常,是什么原因?

//configure the SOCs for drv8301kit_revD
// EXT IA-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_0,ADC_SocChanNumber_A6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_0,ADC_SocSampleDelay_9_cycles);

// EXT IA-FB
// Duplicate conversion due to ADC Initial Conversion bug (SPRZ342)
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_1,ADC_SocChanNumber_A6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_1,ADC_SocSampleDelay_9_cycles);

// EXT IB-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_2,ADC_SocChanNumber_B6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_2,ADC_SocSampleDelay_9_cycles);

// EXT IC-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_3,ADC_SocChanNumber_A0);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_3,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_3,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb1
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_4,ADC_SocChanNumber_B7);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_4,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_4,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb2
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_5,ADC_SocChanNumber_A7);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_5,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_5,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb3
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_6,ADC_SocChanNumber_B4);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_6,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_6,ADC_SocSampleDelay_9_cycles);

// VDCBUS
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_7,ADC_SocChanNumber_B2);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_7,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_7,ADC_SocSampleDelay_9_cycles);

return;
} // end of HAL_setupAdcs() function

user4708725:

回复 Igor An:

下面的ADC端口在哪里定义的?怎么没有找到?把IA_FB、IB_FB、IC_FB切断后,下面的函数不发挥作用了吧?为什么对电机的性能没有影响?

static inline void HAL_readAdcData(HAL_Handle handle,HAL_AdcData_t *pAdcData){ HAL_Obj *obj = (HAL_Obj *)handle;

_iq value; _iq current_sf = HAL_getCurrentScaleFactor(handle); _iq voltage_sf = HAL_getVoltageScaleFactor(handle);

// convert current A // sample the first sample twice due to errata sprz342f, ignore the first sample value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_1); value = _IQ12mpy(value,current_sf) – obj->adcBias.I.value[0]; // divide by 2^numAdcBits = 2^12 pAdcData->I.value[0] = value;

// convert current B value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_2); value = _IQ12mpy(value,current_sf) – obj->adcBias.I.value[1]; // divide by 2^numAdcBits = 2^12 pAdcData->I.value[1] = value;

// convert current C value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_3); value = _IQ12mpy(value,current_sf) – obj->adcBias.I.value[2]; // divide by 2^numAdcBits = 2^12 pAdcData->I.value[2] = value;

// convert voltage A value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_4); value = _IQ12mpy(value,voltage_sf) – obj->adcBias.V.value[0]; // divide by 2^numAdcBits = 2^12 pAdcData->V.value[0] = value;

// convert voltage B value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_5); value = _IQ12mpy(value,voltage_sf) – obj->adcBias.V.value[1]; // divide by 2^numAdcBits = 2^12 pAdcData->V.value[1] = value;

// convert voltage C value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_6); value = _IQ12mpy(value,voltage_sf) – obj->adcBias.V.value[2]; // divide by 2^numAdcBits = 2^12 pAdcData->V.value[2] = value;

// 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;

return;} // end of HAL_readAdcData() function

//! \brief Reads the ADC data//! \details Reads in the ADC result registers, and//! scales the values according to the settings in user.h. The//! structure gAdcData holds three phase voltages, three line//! currents, and one DC bus voltage.//! \param[in] handle The hardware abstraction layer (HAL) handle//! \param[in] pAdcData A pointer to the ADC data bufferstatic inline void HAL_readAdcDataWithOffsets(HAL_Handle handle,HAL_AdcData_t *pAdcData){ HAL_Obj *obj = (HAL_Obj *)handle;

_iq value; _iq current_sf = HAL_getCurrentScaleFactor(handle); _iq voltage_sf = HAL_getVoltageScaleFactor(handle);

// convert current A // sample the first sample twice due to errata sprz342f, ignore the first sample value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_1); value = _IQ12mpy(value,current_sf); pAdcData->I.value[0] = value;

// convert current B value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_2); value = _IQ12mpy(value,current_sf); pAdcData->I.value[1] = value;

// convert current C value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_3); value = _IQ12mpy(value,current_sf); pAdcData->I.value[2] = value;

// convert voltage A value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_4); value = _IQ12mpy(value,voltage_sf); pAdcData->V.value[0] = value;

// convert voltage B value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_5); value = _IQ12mpy(value,voltage_sf); pAdcData->V.value[1] = value;

// convert voltage C value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_6); value = _IQ12mpy(value,voltage_sf); pAdcData->V.value[2] = value;

// read the dcBus voltage value value = (_iq)ADC_readResult(obj->adcHandle,ADC_ResultNumber_7); value = _IQ12mpy(value,voltage_sf); pAdcData->dcBus = value;

return;} // end of HAL_readAdcDataWithOffsets() function

电路原理图中的IA-FB、IB-FB、IC-FB为什么要出现两次?这样有什么好处?

为什么在软件中没有配置IA-FB、IB-FB、IC-FB、I-TOTAL?只是配置了EXT IA-FB、EXT IB-FB、EXT IC-FB,这些没有配置的功能接口是不是可以去掉?

我去掉这些接口后电机也可以正常运行,高速时可能不太正常,是什么原因?

//configure the SOCs for drv8301kit_revD
// EXT IA-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_0,ADC_SocChanNumber_A6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_0,ADC_SocSampleDelay_9_cycles);

// EXT IA-FB
// Duplicate conversion due to ADC Initial Conversion bug (SPRZ342)
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_1,ADC_SocChanNumber_A6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_1,ADC_SocSampleDelay_9_cycles);

// EXT IB-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_2,ADC_SocChanNumber_B6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_2,ADC_SocSampleDelay_9_cycles);

// EXT IC-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_3,ADC_SocChanNumber_A0);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_3,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_3,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb1
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_4,ADC_SocChanNumber_B7);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_4,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_4,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb2
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_5,ADC_SocChanNumber_A7);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_5,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_5,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb3
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_6,ADC_SocChanNumber_B4);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_6,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_6,ADC_SocSampleDelay_9_cycles);

// VDCBUS
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_7,ADC_SocChanNumber_B2);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_7,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_7,ADC_SocSampleDelay_9_cycles);

return;
} // end of HAL_setupAdcs() function

user4708725:

回复 Igor An:

非常感谢您的耐心回答,我把IA-FB,IB-FB,IC-FB强行在硬件电路板上去掉,电机的运行性能和没有去掉的时候一样,这样应该不会留下什么后遗症吧?

电路原理图中的IA-FB、IB-FB、IC-FB为什么要出现两次?这样有什么好处?

为什么在软件中没有配置IA-FB、IB-FB、IC-FB、I-TOTAL?只是配置了EXT IA-FB、EXT IB-FB、EXT IC-FB,这些没有配置的功能接口是不是可以去掉?

我去掉这些接口后电机也可以正常运行,高速时可能不太正常,是什么原因?

//configure the SOCs for drv8301kit_revD
// EXT IA-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_0,ADC_SocChanNumber_A6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_0,ADC_SocSampleDelay_9_cycles);

// EXT IA-FB
// Duplicate conversion due to ADC Initial Conversion bug (SPRZ342)
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_1,ADC_SocChanNumber_A6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_1,ADC_SocSampleDelay_9_cycles);

// EXT IB-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_2,ADC_SocChanNumber_B6);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_2,ADC_SocSampleDelay_9_cycles);

// EXT IC-FB
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_3,ADC_SocChanNumber_A0);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_3,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_3,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb1
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_4,ADC_SocChanNumber_B7);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_4,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_4,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb2
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_5,ADC_SocChanNumber_A7);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_5,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_5,ADC_SocSampleDelay_9_cycles);

// ADC-Vhb3
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_6,ADC_SocChanNumber_B4);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_6,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_6,ADC_SocSampleDelay_9_cycles);

// VDCBUS
ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_7,ADC_SocChanNumber_B2);
ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_7,ADC_SocTrigSrc_EPWM1_ADCSOCA);
ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_7,ADC_SocSampleDelay_9_cycles);

return;
} // end of HAL_setupAdcs() function

user4708725:

回复 Igor An:

在void HAL_cal(HAL_Handle handle)有使用IC_FB进行HAL_AdcOffsetSelfCal(handle),IB_FB进行HAL_OscTempComp(handle)校准,直接去掉硬件接口,确认没有影响吗?

void HAL_cal(HAL_Handle handle){  HAL_Obj *obj = (HAL_Obj *)handle;

  // enable the ADC clock  CLK_enableAdcClock(obj->clkHandle);

  // Run the Device_cal() function  // This function copies the ADC and oscillator calibration values from TI reserved  // OTP into the appropriate trim registers  // This boot ROM automatically calls this function to calibrate the interal   // oscillators and ADC with device specific calibration data.  // If the boot ROM is bypassed by Code Composer Studio during the development process,  // then the calibration must be initialized by the application  ENABLE_PROTECTED_REGISTER_WRITE_MODE;  (*Device_cal)();  DISABLE_PROTECTED_REGISTER_WRITE_MODE;

  // run offsets calibration in user's memory  HAL_AdcOffsetSelfCal(handle);

  // run oscillator compensation  HAL_OscTempComp(handle);

  // disable the ADC clock  CLK_disableAdcClock(obj->clkHandle);

  return;} // end of HAL_cal() function

 

// set SOC0 channel select to ADCINA5  ADC_setSocChanNumber(obj->adcHandle, ADC_SocNumber_0, ADC_SocChanNumber_A5);

 

 //Select channel B5 for all SOC  HAL_AdcCalChanSelect(handle, ADC_SocChanNumber_B5);

赞(0)
未经允许不得转载:TI中文支持网 » drv8301 revd电路原理图的疑问
分享到: 更多 (0)