主题中讨论的其他器件:C2000WARE,, LAUNCHXL-F2800137
大家好、
客户有问题需要您的帮助:
MCU: TMS320F2800137、SDK:C:\ti\c2000\c2000\c2000\c2000_convid_sdk_4_02_01_00\solutions\universal_motorcontrol_lab\f280013x Ware_Motor、问题如下:
1.根据开发文件#define DMC_BUILDLEVEL DMC_LEVEL_1、offset_v_sf offset 值应当在0.5左右、我自己模板的值总是在0.14左右;
2.与 TI 官方的 LAUNCHXL-F2800137开发板+8353RX-EVM 相比、OFFSET_v_SF OFFSET 值应约为0.5;
3.仔细分析代码,在 runMotor1OffsetsCalculation ()中的 motor1_driver.c 计算偏移,如下所示:
//清除 ADC 的中断标志
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)//忽略前2000次
{
obj->OffsetCount = offsetCnt - 1999;//LZx 添加用于计数器偏移计算;
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];
//相电流感应中的偏移
#if defined (MOTOR1_ISBLDC)
obj->adcData.offset_IDC_AD = offsetK1 * obj->adcData.offset_IDC_AD +
(obj->adcData.idc1_A.值[0]+ obj->adcData.idc1_A.值[1])* 0.5f * offsetK2;
#Elif 已定义(MOTOR1_DCLINKSS)
obj->adcData.offset_IDC_AD = offsetK1 * obj->adcData.offset_IDC_AD +
0.25f * offsetK2 *(obj->adcData.idc1_A.值[0]+
obj->adcData.idc1_A.值[1]+
obj->adcData.Idc2_A.值[0]+
obj->adcData.Idc2_A.值[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.值[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]);
//相位电压感应偏移
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
}
否则、if (offsetCnt <= 1000)
{
//启用 PWM
HAL_enablePWM (obj->halMtrHandle);
}
实际参与计算的参数有 offsetK1、 offsetK2、adcData.V_V.value、invVdcbus、为什么我的电路板计算出的参数越来越小、在30,000次计算后小于0.14?
您能否帮助我分析一下为什么电路板电压失调计算越来越小、而 TI 的官方 LAUNCHXL-F2800137开发板+8353RX-EVM 计算值始终约为0.5?
与计算偏移值相关的主要参数是什么?
此致、
本


