This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2800137:TMS320F2800137+独立偏置电路控制 BLDC 偏移计算异常

Guru**** 2587365 points
Other Parts Discussed in Thread: TMS320F2800137, LAUNCHXL-F2800137

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1313996/tms320f2800137-tms320f2800137-independent-bias-circuit-controls-the-bldc-offset-calculation-anomaly

器件型号:TMS320F2800137
主题中讨论的其他器件: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?

与计算偏移值相关的主要参数是什么?

此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否向 8353RX-EVM 板添加了正确的直流电源支持? 并 按如下所示将8353RX-EVM 连接到 LaunchPad  、或在实验室用户指南中显示、例如 LaunchPad 上用于使能引脚、SPI 引脚的开关?

    您可以查看下面的链接。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1270449/launchxl-f2800137-spi-between-launchxl-f2800137-and-drv8353rs-evm/4834260#4834260

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming:

    根据 TI 指南提供的测试方法、当电平设置为1时、电压采集正确、 OFFSET_v_SF 接近0.5、并且 V_V.value 也接近0。  当前的问题是、输出50%占空比 PWM 波形电流收集值不接近0。 应调整哪些参数?

    我们的解决方案不使用8353、而是使用通过外部电流放大器收集的电流。

    重复测试后、问题很可能出现在当前引脚配置中。 有什么想法吗? 非常感谢。 这个项目已经在这里停留了很多天。
    我们的新电路板电路设计如下:

    U-term current collection is connected to A12/C1 of MCU.
    V-term current collection is connected to A7/C3 of MCU.
    W-term current collection is connected to A8/C11 of MCU.
    
    U-item voltage acquisition is connected to A15/C7 of MCU.
    V-item voltage acquisition is connected to A2/C9 of MCU.
    W-item voltage acquisition is connected to A3/C5 of MCU .
    Bus voltage acquisition is connected to A11/C0 of MCU.
    The relevant code configuration is as follows:
    // Three-shunt
    / / ADC & CMPSS
    #define MTR1_ADC_TRIGGER_SOC ADC_TRIGGER_EPWM1_SOCA // EPWM1_SOCA
    #define MTR1_ADC_I_SAMPLEWINDOW 14
    #define MTR1_ADC_V_SAMPLEWINDOW 20
    #define MTR1_IU_ADC_BASE ADCC_BASE // ADCA-A12*/C1
    #define MTR1_IV _ADC_BASE ADCC_BASE // ADCC-A7/C3*
    #define MTR1_IW_ADC_BASE ADCC_BASE // ADCC -A8/C11*
    #define MTR1_IU_ADCRES_BASE ADCCRESULT_BASE // ADCA-A12*/C1
    #define MTR1_IV_ADCRES_BASE ADCCRESULT_BASE // ADCC-A7/C3* #define
    MTR1_IW_ADCRES_BASE ADCCRESULT_BASE // ADCC-A8/C11*
    #define MTR1_IU_ADC_CH_N UM ADC_CH_ADCIN1 // ADCA-A12 */C1
    #define MTR1_IV_ADC_CH_NUM ADC_CH_ADCIN3 // ADCA-A7/C3*
    #define MTR1_IW_ADC_CH_NUM ADC_CH_ADCIN11 // ADCC-A8/C11*
    #define MTR1_IU_ADC_SOC_NUM ADC_SOC_NUMBER1 // ADCA-A12*/C1-SOC1-PPB1
    #define MTR1_IV_ADC_SOC_NUM ADC_SOC_NUMBER1 // ADCC -A7/C3* -SOC1-PPB1
    #define MTR1_IW_ADC_SOC_NUM ADC_SOC_NUMBER2 // ADCC-A8/C11* -SOC2-PPB2
    #define MTR1_IU_ADC_PPB_NUM ADC_PPB_NUMBER1 // ADCA-A12*/C1-SOC1-PPB1
    #define MTR1_IV_ADC_PPB_ NUM ADC_PPB_NUMBER1 // ADCC-A7 /C3* -SOC1-PPB1
    #define MTR1_IW_ADC_PPB_NUM ADC_PPB_NUMBER2 // ADCC-A8/C11*- SOC2-PPB2
    // CMPSS - three shunt
    #define MTR1_CMPSS_U_BASE CMPSSLITE2_BASE//CMPSS1_BASE
    #define MTR1_CMPSS_V_BASE CMPSSLITE4_BA SE//CMPSSLITE3_BASE
    #define MTR1_CMPSS_W_BASE CMPSSLITE2_BASE//CMPSS1_BASE
    #define MTR1_IU_CMPHP_SEL ASYSCTL_CMPHPMUX_SELECT_2 // CMPSSLITE2-A12*/C1 CMP2_HP1
    #define MTR1_IU_CMPLP_SEL ASYSCTL_CMPLPMUX_SELECT_2 // CMPSSLITE2-A12*/C1, N/A
    #define MTR1_IV_CMPHP_SEL ASYSCTL_CMPH PMUX_SELECT_4 // CMPSSLITE4-A7/C3* CMP4_HP1
    #define MTR1_IV_CMPLP_SEL ASYSCTL_CMPLPMUX_SELECT_4 // CMPSSLITE4- A7/C3* CMP4_LP1
    #define MTR1_IW_CMPHP_SEL ASYSCTL_CMPHPMUX_SELECT_2 // MPSSLITE2-A8/C11*, N/A
    #define MTR1_IW_CMPLP_SEL ASYSCTL_CMPLPMUX_SELECT_2 // MPSSLITE2-A8/C11* CMP2_LP4
    #define MTR1_IU_CMP HP_MUX 1 // CMPSSLITE2-A12*/C1
    #define MTR1_IU_CMPLP_MUX 1 // CMPSSLITE2-A12*/C1
    #define MTR1_IV_CMPHP_MUX 1 // CMPSSLITE4-A7/C3*
    #define MTR1_IV_CMPLP_MUX 1 // CMPSSLITE4-A7/C3* #define
    MTR1_IW_CMPHP_MUX 4 // CMPSSLITE2-A8/C11*
    #define MTR1_IW_CMPLP_ MUX 4 // CMPSSLITE2-A8/C11*
    // XBAR-EPWM
    #define MTR1_IU_XBAR_EPWM_MUX S4_CTRIPH_OR_L//XBAR_EPWM_MUX04_CMPSS3_CTRIPH_OR_L
    // CMPSS4-HP1&LP1
    #define MTR1_IW_XBAR_EPWM_MUX XBAR_EPWM_MUX03_CMPSS2_CTRIPL//XBAR_EPWM_MUX01_CMPSS1_CTRIPL //CMPSSLITE2-LP4
    #define MTR1_IU_XBAR_MUX XBAR_MUX00 // CMPSS2-HP1
    #define MTR1_IV_XBAR_MUX XBAR_MUX04 // CMPSS4-HP1&LP1
    #define MTR1_IW_XBAR_MUX XBAR_MUX01 // CMPSS2-LP4
    #endif // !MOTOR1_DCLINKSS, Three-shunt
    // ADC - Voltage, Phase and dc-bus
    #define MTR1_VU_ADC_BASE ADCA_BASE // ADCA-A15*/C7
    #define MTR1_VV_ADC_BASE ADCC_BASE // ADCC-A2/C9*
    #define MTR1_VW_ADC_BASE ADCA_BASE // ADAC-A3*/C5//ADCA-A2/C9*
    #define MTR1_VDC_ADC_BASE ADCC_BASE // ADCC-A11/C0*
    //#define MTR1_POT_ADC_BASE ADCA_BASE // ADCA-A12*/C1
    #define MTR1_VU_ADCRES_BASE ADCARESULT_BASE // ADCA-A15*/C7
    #define MTR1_VV_ADCRES_BASE ADCCRESULT_BASE // ADCC-A2/C9*
    #define MTR1_VW_ADCRES_BASE ADCARESULT_BASE // ADCA-A3*/C5
    #define MTR1_VDC_ADCRES_BASE ADCCRESULT_BASE // ADCC-A11/C0*
    //#define MTR1_POT_ADCRES_BASE ADCARESULT_BASE // ADCA-A12*/C1
    #define MTR1_VU_ADC_CH_NUM ADC_CH_ADCIN15 // ADCA-A15*/C7
    #define MTR1_VV_ADC_CH_NUM ADC_CH_ADCIN9 // ADCA-A2/C9*
    #define MTR1_VW_ADC_CH_NUM ADC_CH_ADCIN3 // ADCC-A3*/C5
    #define MTR1_VDC_ADC_CH_NUM ADC_CH_ADCIN0 // ADCCA11/C0*
    //#define MTR1_POT_ADC_CH_NUM ADC_CH_ADCIN12 // ADCA-A12*/C1
    #define MTR1_VU_ADC_SOC_NUM ADC_SOC_NUMBER4 // ADCA-A15*/C7 -SOC4
    #define MTR1_VV_ADC_SOC_NUM ADC_SOC_NUMBER5 // ADCA-A2/C9* -SOC5
    #define MTR1_VW_ADC_SOC_NUM ADC_SOC_NUMBER5 // ADCC-A3*/C5 -SOC5
    #define MTR1_VDC_ADC_SOC_NUM ADC_SOC_NUMBER6 // ADCCA11/C0* -SOC6

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    确保根据您使用的硬件板正确配置 PWM 和 ADC。 检查 PWM 输出和 ADC 输入通道上的电压、然后检查相关的 ADC 结果。

    请查看 通用工程和实验用户指南: https://www.ti.com/lit/spruj26、并按照该指南为您自己的电路板更改硬件配置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming:

    我们根据上面链接的文档逐步调试。 现在、我们确认 PWM 正常、4通道电压 ADC 采集正常、只有电流收集异常。 红色框中的值与文档的值不符。 请帮助查看当前采集的三向配置问题的位置。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    检查在运行构建级别1时 ADC 输入通道上的电压是否为~1.65V。 如果没有、请检查硬件板上的电流检测电路。 如果有、请检查 ADC 配置代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming:

    电流检测 ADC 的输入偏置电压约为1.65V、当前硬件通道使用 ADC-A6/ADC-C3/ADC-C11、OFFSET_I_AD 的值相对一致、但执行程序后、启动失败警报将在几秒钟后出现。 如何修改? 谢谢!

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    应调整哪些参数?

    如上所述、请首先检查您自己的硬件。 看看第3章。 请参阅下面的实验用户指南、了解如何构建定制板。  然后、如果没有电流和电压检测故障、按照该指南运行构建级别1至4。

    通用项目和实验室用户指南: https://www.ti.com/lit/spruj26

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming:

    未连接电机时、会出现上述所有问题。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    所有检查、看看偏移是正确的。 您现在有哪些问题? 您正在处理哪个构建级别?

    您可以先禁用除过流保护之外的所有故障保护。 或者在需要时更改故障保护参数以避免故障。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming:

    ​​当前电平1状态下的各种偏移值与​​开发文档中给出的参考值一致。  在2级、可以通过修改 USER_M1_ADC_FULL_SCALE_CURRENT_A 值来旋转电机、但旋转异常。 当电机旋转时、示波器电流达到大于3A 并剧烈抖动。 比较8353RX-EVM +F2800137 LaunchPad 可平稳旋转、电流小于1A。 我应该在哪里查找原因? 电机转速设置为60Hz、但实际速度仅为几 Hz 并产生剧烈振动。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ​​当前级别1状态下的各种偏移值与​​开发文档中给出的参考值一致。  [/报价]

    您认为各种失调值是什么意思? 有何差异?

    我该在哪里查找原因? [/报价]

    自己的电路板? 您是否按照该指南来根据自己的电路板设置硬件参数?

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming:

    偏移值表示根据开发文档将级别设置为1时没有异常、并且当前偏移和电压偏移都符合开发文档。  我们自己制作了电路板。 目前的问题是、根据开发文档、电平被设定为2来验证开环控制。 电机可以旋转、但速度参考值使用默认的60Hz。 实际速度只有几 Hz、它会剧烈抖动。   请向我们提供一些有关从哪里开始或调试哪些参数的建议。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如上所述。 根据您拥有的硬件设置正确的电流和电压标度值。 并根据您使用的电机在 user_mtr1.h 中设置正确的 v/f 参数、如下所示。

    //电机的最大/基本旋转频率(Hz)
    #define USER_MOTOR1_FREQ_MAX_Hz (600.0f)// Hz

    //构建级别2中开环的 V/f 曲线参数
    // V/f 曲线的低频 f_low,单位为 Hz,
    //设置为额定电动机频率的10%
    #define USER_MOTOR1_FREQ_LOW_Hz (5.0f)// Hz

    // V/f 曲线的高频 f_high,单位为 Hz,
    //设置为额定电动机频率的100%
    #define USER_MOTOR1_FREQ_HIGH_Hz (4000.0f)// Hz

    // V/f 曲线的最小电压 V_min,
    //建议将该值设置为额定电机电压的15%,单位为伏特。
    #define USER_MOTOR1_VOLT_MIN_V (1.0f)//伏特

    //最大电压,即 V/f 曲线的 V_max,
    //建议将该值设置为额定电机电压的100%,单位为伏特
    #define USER_MOTOR1_VOLT_MAX_V (24.0f)//伏特

    您可以尝试在 E2E 上搜索问题、似乎有一些线程具有与您类似的问题。