电路原理图中的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);
TI中文支持网

