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.

[参考译文] TMS320F28069M:将引导加载程序添加到 instaspin 实验可避免逆变器短路

Guru**** 2610415 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1574220/tms320f28069m-adding-bootloader-to-instaspin-lab-caus-inverter-short

器件型号:TMS320F28069M


工具/软件:

您好、

我们实施了一个设计、其中使用了经修改的 lab20 作为逆变器。 现在、我们添加了一个 canbus 引导加载程序以实现 OTA 可用性。  

该实验室可以作为独立实现正常运行。

现在、我们在闪存的一部分添加了一个引导加载程序应用、该应用在复位时触发并检查 APP 中设置的引导 Cookie。 如果设置了引导 Cookie、我们会更新闪存、否则我们只需跳转到实验代码。

但这很奇怪、如果我们运行此组合、其中的 lab-project 与我们独立运行的代码几乎相同、没有 bootloade、我们会在激活 pwms/enable 后立即得到一个短路逆变器。

我们已经研究了我们认为可能存在的所有问题、链接器重叠、不干净的 RAM、EPWM 状态和时钟速度。 与独立应用程序相比、BL 中没有什么不同。 我们甚至研究了在不施加任何直流负载的情况下的开关、它以正确的频率进行开关。  

如果我们从引导加载程序应用开始、然后跳转到实验代码、有人是否知道上电复位/独立有什么不同? 有什么具体的,我们应该注意? 我们完全陷入了困境。

/Mikael

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

    您好:

    本实验可作为独立实现正常运行。

    为了确保我们位于同一个页面:在没有引导加载程序 的情况下、 实验工作正常、但添加引导加载程序后、实验会失败? 将新应用程序通过引导加载程序编程到闪存后是否会发生这种情况?  

    但这里很奇怪、如果我们运行此组合、其中的实验室项目与我们独立运行的代码几乎相同、在没有 bootloade 的情况下、我们在激活 PWM/使能时就会得到一个短路逆变器。

    您在引导加载程序中进行哪些配置? 在分支到应用之前、您是否进行任何 PLL 配置?

    此致、

    马特

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

    如果我使用调试器刷写引导加载程序和应用程序、则会出现问题。 在这种情况下、我尚未使用引导加载程序对实验室进行编程。 如果我仅运行独立的实验、则完全没有问题。 在引导加载程序中进行时钟设置、这是在跳转到应用程序之前运行的代码;

     

        EALLOW; SysCtrlRegs.WDCR = 0x0068; EDIS;  /* watchdog off */
        call_device_cal();
        set_sysclk_90MHz_from_intosc();
        flash_waits_90MHz();
    
        /* Quiesce to a minimal environment */
        kernel_quiesce();
    
        /* If no boot cookie, briefly listen for a reflash request then jump */
        if (g_boot_cookie != BOOT_COOKIE_MAGIC) {
            CAN_init(1000);
            CAN_send(ID_C2H, RPL_INIT, 0,0,0,0,0,0,0, 8);
    
            if (!wait_for_reflash_window(REFLASH_WINDOW_US)) {
                if (app_present()) {bl_sanitize_before_jump(); jump_to_app(); }
            }
        } else {
    
    
            g_boot_cookie = 0UL; /* consume cookie; stay in bootloader */
        }

    我已经确认应用中的频率良好、PLL 设置与独立工作代码保持一致、并且我已在应用中启动并运行了 CAN、没有问题。 但在 HAL_enablePwm (halHandle) 之后;我将逆变器短路。 我已经验证了每个歌曲的 ePWM 寄存器,它也很好地与独立运行. 我在这里迷路了。  

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

    尊敬的 Mikael:

    如果正确使用死区模块、不确定如何实现逆变器系泊。您能否验证 ePWM 跳闸是否正确配置为全低电平状态? 我之前遇到的一个类似问题是栈溢出导致的根问题、可能需要增加栈大小?

    引导加载程序或集成代码是否以某种方式干扰电机控制 ISR? 可以衡量函数的 CPU 利用率。

    此致、

    Kevin

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

    尊敬的 Mikael:

    如果正确使用死区模块、不确定如何实现逆变器系泊。您能否验证 ePWM 跳闸是否正确配置为全低电平状态? 我之前遇到的一个类似问题是栈溢出导致的根问题、可能需要增加栈大小?

    引导加载程序或集成代码是否以某种方式干扰电机控制 ISR? 可以衡量函数的 CPU 利用率。

    此致、

    Kevin

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

    您好、  

    在这种情况下,我和你一样是偶然的。 在启动逆变器应用时、在运行逆变器代码之前、我已经读出了所有寄存器(无论是否有引导加载程序)。 在这两种情况下、我最终得到完全相同的 PWM:s 设置、但只有之前短接引导加载程序的设置。 我还尝试了增加堆栈但没有成功。 在跳转到逆变器代码之前、我可以清除所有的引导加载程序 RAM 使用情况、并且可以确认 RAM 一旦进入逆变器部分、就会被清除。 我还检查了两个代码部分的存储器区域是否都已正确编程。 但我将检查 CPU 利用率并返回,感谢提示! 一个奇怪的问题是、如果我从限流 PSU 运行、我可以看到开关会继续进行、看起来相当不错、但没有放大逻辑侧的细节、因此它不是这种意义上的锁定。 我还将在此处更详细地检查高/低时序、看看是否可以找出信号可能消失的位置。 在我看来、高侧/低侧一定不同步。 如您所说、死区模块未正确启动或类似。

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

    尊敬的 Mikael:

    让我们了解您找到的最新信息。

    您已将死区子模块配置为高电平有效互补、对吗? 如果尚未找到提示、另一个测试思路是增加 ePWM 死区馈电/红色时间、使其超出逆变器级实际需要的时间。 然而,我看不出添加引导加载程序会如何影响任何一个...

    此致、

    Kevin