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.

[参考译文] TMS320F28027F:电流重构失败

Guru**** 2390755 points
Other Parts Discussed in Thread: DRV8301

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1174098/tms320f28027f-current-reconstruction-fails

器件型号:TMS320F28027F
主题中讨论的其他器件:DRV8301

你好

我通过处理从 lab10到我的项目所需的代码来实现当前的重建。

但现在电机电流不稳定、电机产生更多噪声。

主 ISR 似乎不再以稳定的10KHz 速率运行、但中断缺失或相互触发两次。 即使所有三个电流都可用。

因此、下一个触发器的计算似乎有问题。

黄色/绿色:PWM 输出蓝色:在主 ISR 执行期间为高电平

3000 rpm、所有电流均可用

黄色/绿色:PWM 输出蓝色:在主 ISR 执行期间为高电平

5000 rpm、并非所有电流都始终可用。

主 ISR 的执行时间~50us 中断速率应为10kHz (100us)

有什么想法如何解决这个问题?

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

    您使用的是什么板? TI EVM 套件? 或您自己的电路板。

    您在示例实验中的 ISR 中添加了任何其他代码?

    请在您的项目中发布 user.h、以了解您使用的 PWM 和控制频率。

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

    你好

    我们使用自己的硬件、但这基于 EVM DRV8301评估板、并且使用相同的 PWM 输出。

    e2e.ti.com/.../37373.user.h

    //中断例程

    _interrupt void mainISR (void)

    #if EN_CURRENT_REALANCE>0
     SVGENCURRENT_MeasureShunt_e measurableShuntThisCycle = SVGENCURRENT_getMode (svgencurentHandle);
    #endif

     HAL_setGpioHigh (halHandle、(GPIO_Number_e) HAL_GPIO_LED);

     //确认 ADC 中断
     HAL_acqAdcInt (halHandle、ADC_IntNumber_1);

     //转换 ADC 数据
     HAL_readAdcData (halHandle、&gAdcData);

    #if EN_CURRENT_REALANCE>0
     //运行当前重建算法
     SVGENCURRENT_RunRegenCurrent (svgencurentHandle、(MATH_vec3 *)(gAdcData.I.Value));

     gIavg.value[0]+=(gAdcData.I.value[0]- gIavg.value[0])>gIavg_shift;
     gIavg.value[1]+=(gAdcData.I.value[1]- gIavg.value[1])>gIavg_shift;
     gIavg.value[2]+=(gAdcData.I.value[2]- gIavg.value[2])>gIavg_shift;

     if (measurableShuntThisCycle > two_PHASE_measurable)
     {
         gAdcData.I.value[0]= gIavg.value[0];
         gAdcData.I.value[1]= gIavg.value[1];
         gAdcData.I.value[2]= gIavg.value[2];
     }
    #endif

     //运行控制器
     CTRL_run (ctrlHandle、halHandle、&gAdcData、&gPwmData);

    #if EN_CURRENT_REALANCE>0
     //运行 PWM 补偿和电流忽略算法
     SVGENCURRENT_COMPPwmData (svgencurentHandle、&(gPwmData.tABC)、&gPwmData_prev);
    #endif

     //写入 PWM 比较值
     HAL_writePwmData (halHandle、&gPwmData);

    #if EN_CURRENT_REALANCE>0
     {
       SVGENCURRENT_IgnoreShunt_e ignoreShuntNextCycle = SVGENCURRENT_getIgnoreShunt (svgencurentHandle);
       SVGENCURRENT_VmidShunt_e midVolShunt = SVGENCURRENT_getVMID (svgencurentHandle);

       //在低侧脉冲的中间设置触发点
       HAL_SetTrigger (halHandle、ignoreShuntNextCycle、midVolShunt);
     }
    #endif

     //设置控制器
     CTRL_setup (ctrlHandle);

     //运行场强减弱、Aalway 的 PM 电机
     runFieldWeakening();

     //运行过压控制器
    #ifdef overved_control_enabled
     runOverVoltageController();
    #endif

    #ifdef ENABLE_VOLTGE_OFFSET_CONTROL
     //计算电机运行时的电压偏移
     runVoltageOffsetsCalculation ();
    #endif

     HAL_setGpioLow (halHandle、(GPIO_Number_e) HAL_GPIO_LED);

     返回;
    }// mainISR()函数结束

    通过 EN_CURRENT_REALANY、我们可以启用电流重构、如果禁用、一切工作正常。

    此外、当前重建的初始化也从示例中复制。

    此致、

    1月

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

    您的项目中是否有任何其他中断? 此  mainISR 中的任何其他代码/函数、上面提到的代码除外。

    似乎 mainISR()的执行时间太长,无法导致中断溢出。 您可以尝试降低 PWM 频率以查看发生了什么。

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

    SCI 以38400波特运行在中断下、只需将字符放入缓冲区或从 TX 缓冲区读取即可。 SCI 数据在主循环中处理。

    ePWM4用作1ms 计时器、只需设置一个标志即可从主循环执行其他操作。

    我已尝试将 USER_NUM_PWM_TICKS_PER_ISR_TICK 设置为3、因此以150us 而不是100us 的速率调用 mainISR、但这不会解决问题。

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

    您是否尝试运行原始 lab10a? 如上所述、某些函数/代码在 ISR 中花费许多 CPU 周期来导致项目中的中断溢出。

    您可以尝试禁用所有其他中断以查看发生了什么。 或降低 PWM 频率。

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

    如果没有大量的软件调整、我不认为原始实验10a 将无法在我们的硬件上运行。

    遗憾的是、我们用于开发的 DRV8301 EVM 已销毁、因此还需要大量时间来为28027 CPU 构建新的 EVM、28027 EVM 将不适合标准的 DRV8301 EVM。

    由于11uH 的低电机感应降低了 PWM 频率、因此不是一个选项。

    到目前为止、我已将"HAL_SetTrigger"函数移至 ISR 末尾、现在只要三个电流测量值有效、ISR 中断率就会稳定、但情况并非如此。

    设置此触发器的时序似乎非常关键、因为 ISR 需要大约50us、这与20KHz PWM 的 PWM 周期时间相同、即设置新触发器与下一个 PWM 脉冲的重合并触发 ADC 的时刻。

    黄色:PWM-A 输出蓝色:执行 ISR。

    下一个 ISR 应在左标记 USER_NUM_PWM_TICKS_PER_ISR_TICK = 3之后的第三个 PWM 脉冲上启动、但在第二个脉冲之后已经启动。

    1kHz 中断仅需1us 和 SCI 中断(10 * 5us)/100ms、因此无重负载。 在主中断执行期间没有执行中断。

    我还尝试将最小脉冲宽度设置为4us、但没有解决问题。

    28027只有一个 ADC、单次转换需要13+7 = 20个时钟周期、因为触发时有8个通道被转换、ADC 将在8 * 20 / 60 = 2.6us 后准备就绪(根据文档、由于管道内衬、这可能会更短)。

    您对上述时间有何看法?

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

    我已将 PWM 频率增加到25KHz、因此新的触发点始终在第一个 PWM 脉冲之后设置、现在具有25/3KHz 的稳定 ISR 速率。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="367077" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1174098/tms320f28027f-current-reconstruction-fails/4424781 #4424781"]您对上述时序有何看法?

    如上所述、您可以尝试禁用所有其他中断、并参阅 lab10a、而无需在 mainISR 中添加任何其他代码。 为了了解发生了什么、本示例实验仍然可以支持过调制的~15kHz 控制频率。

    BTW、最好将 USER_MAX_VS_MAG_PU 设置为小于(0.57)。