Other Parts Discussed in Thread: C2000WARE, , LAUNCHXL-F2800137
开发一款电调,MCU:TMS320F2800137,SDK:C:\ti\c2000\C2000Ware_MotorControl_SDK_4_02_01_00\solutions\universal_motorcontrol_lab\f280013x,问题如下:
1、根据开发文档,#define DMC_BUILDLEVEL DMC_LEVEL_1,offset_v_sf偏移值应该在0.5上下,而我的自己的样板的值始终在0.14上下;
2、对比TI的官方LAUNCHXL-F2800137开发板+8353RX-EVM,offset_v_sf偏移值应该在0.5上下;
3、仔细分析代码,偏移计算在motor1_driver.c中runMotor1OffsetsCalculation()中做了如下30000次计算:
// clear the ADC interrupt flag
ADC_clearInterruptStatus(MTR1_ADC_INT_BASE, MTR1_ADC_INT_NUM);
while(ADC_getInterruptStatus(MTR1_ADC_INT_BASE, MTR1_ADC_INT_NUM) == false);
HAL_readMtr1ADCData(&obj->adcData);
if(offsetCnt >= 2000) // Ignore the first 2000 times
{
obj->OffsetCount = offsetCnt - 1999; //lzx add for counter offset calculation;
obj->offsetdebugData[0] = obj->adcData.offset_V_sf.value[0];
obj->offsetdebugData[1] = obj->adcData.offset_V_sf.value[1];
obj->offsetdebugData[2] = obj->adcData.offset_V_sf.value[2];
// Offsets in phase current sensing
#if defined(MOTOR1_ISBLDC)
obj->adcData.offset_Idc_ad = offsetK1 * obj->adcData.offset_Idc_ad +
(obj->adcData.Idc1_A.value[0] + obj->adcData.Idc1_A.value[1]) * 0.5f * offsetK2;
#elif defined(MOTOR1_DCLINKSS)
obj->adcData.offset_Idc_ad = offsetK1 * obj->adcData.offset_Idc_ad +
0.25f * offsetK2 *(obj->adcData.Idc1_A.value[0] +
obj->adcData.Idc1_A.value[1] +
obj->adcData.Idc2_A.value[0] +
obj->adcData.Idc2_A.value[1]);
#else // !(MOTOR1_ISBLDC || MOTOR1_DCLINKSS)
obj->adcData.offset_I_ad.value[0] =
offsetK1 * obj->adcData.offset_I_ad.value[0] +
obj->adcData.I_A.value[0] * offsetK2;
obj->adcData.offset_I_ad.value[1] =
offsetK1 * obj->adcData.offset_I_ad.value[1] +
obj->adcData.I_A.value[1] * offsetK2;
obj->adcData.offset_I_ad.value[2] =
offsetK1 * obj->adcData.offset_I_ad.value[2] +
obj->adcData.I_A.value[2] * offsetK2;
#endif // !(MOTOR1_ISBLDC || MOTOR1_DCLINKSS)
#if defined(MOTOR1_FAST) || defined(MOTOR1_ISBLDC)
//obj->adcData.VdcBus_V = 0.0324213766f;
invVdcbus = 1.0f / obj->adcData.VdcBus_V;
//if(offsetCnt < 2100)
//printf("obj->adcData.offset_V_sf.value[0]:%f,obj->adcData.V_V.value[0]:%f\n",obj->adcData.offset_V_sf.value[0],obj->adcData.V_V.value[0]);
// Offsets in phase voltage sensing
obj->adcData.offset_V_sf.value[0] =
offsetK1 * obj->adcData.offset_V_sf.value[0] +
(invVdcbus * obj->adcData.V_V.value[0]) * offsetK2;
obj->adcData.offset_V_sf.value[1] =
offsetK1 * obj->adcData.offset_V_sf.value[1] +
(invVdcbus * obj->adcData.V_V.value[1]) * offsetK2;
obj->adcData.offset_V_sf.value[2] =
offsetK1 * obj->adcData.offset_V_sf.value[2] +
(invVdcbus * obj->adcData.V_V.value[2]) * offsetK2;
#endif // MOTOR1_FAST || MOTOR1_ISBLDC
}
else if(offsetCnt <= 1000)
{
// enable the PWM
HAL_enablePWM(obj->halMtrHandle);
}
实际参与计算的参数有offsetK1 ,offsetK2,adcData.V_V.value,invVdcbus ,为什么我的板子就算出来的参数越来越小,30000次计算后再0.14上下?
请贵司帮忙分析我的板子电压偏移计算为什么越来越小,而TI的官方LAUNCHXL-F2800137开发板+8353RX-EVM计算值始终保持在0.5上下?
偏移值计算主要和哪些参数有关?