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.

[参考译文] LAUNCHXL-F280049C:使用 CLA 的 FOC 速度控制示例

Guru**** 2387830 points
Other Parts Discussed in Thread: TMDXIDDK379D, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/929666/launchxl-f280049c-foc-speed-control-example-using-cla

器件型号:LAUNCHXL-F280049C
主题中讨论的其他器件:TMDXIDDK379DC2000WARE

您好!

我们正在设计一个功耗是最关键要求的项目、并提出以下3个问题:

  • 理论上、我们是否能够通过在 CLA 中运行一些 FOC 过程来提高换向/系统效率?   
  • 是否有任何将 CLA 用于 FOC 的示例?
  • 如果我们不使用 CLA、我们可以关闭它和其他外设以节省功耗吗?

谢谢、

Jonathan

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

    1.除 FAST 函数之外的所有 FOC 模块、EST_xx ()都可以在 CLA 中执行、但并行使用 CLA 和 CPU 是为了实现更高的控制频率、而不是为了降低功耗。

    还不适用于 F28004x 上的 InstaSPIN-FOC、但您可以参阅 MotorControlSDK 下文件夹中 F28004x 的传感 FOC 示例、该示例使用 CLA 和 CPU 进行电机控制。

    \ti\c2000\C2000Ware_MotorControl_SDK_ \solutions\tmdxiddk379d\f28004x

    3.可以,您可以关闭所有未使用的外设的时钟以节省设备功耗。 但是、与逆变器的功耗相比、它应该是最小的、并且可以忽略不计。 也许、实施较低 Rson 的电源模块应该是更好的解决方案。

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

    Yanming、您好!

    1. 除了280049C/8320RS、运行我们的250mW 12V 电机是否还有更好的 MCU/DRV 组合?
    2. 要达到100%、您能否确认 FOC 需要以下哪些外设?

     谢谢、
    Jonathan

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

    1.根据所需的 PWM 和控制 ISR 频率,通过更改 SYSCTL_setClock()中的参数,使用正确的 CPU 频率。

    2.禁用 HAL_setupPeripheralClks ()中的外设时钟,但用于电机控制的 EPWM、ADC、PGA、CMPSS 和 SPI 模块除外。 并将所有使用过的 GPIO 设置为输入。

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

    1. 是否可以从100MHz 降低28004时钟以降低功耗?  
    2. 28002内核的功耗是否低于28004?

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

    1.是的、如果控制 ISR 频率低于15kHz、您可以将 CPU 时钟频率降低到60MHz。

    2.您可以查看这两个器件的数据表、该数据表取决于 CPU 时钟频率和启用的外设。

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

    1. 在使用 USER_SYSTEM_FREQ_MHz 后、我们看到的功耗更低、但值更高。   USER_SYSTEM_FREQ_MHz 的最大安全值是多少?

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

    USER_SYSTEM_FREQ_MHz 是 CPU 时钟频率。 最小值与最大控制 ISR 执行时间相关。 如上所述、60MHz 对于15kHz ISR 应该正常。

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

    我们的 ISR 频率为5k。  当 CPU 时钟为140MHz 时、我们会看到最佳结果。  我在手册中找不到我们安全运行 CPU 时钟的速度。  请提供建议吗?

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

    根据 F280049C 数据表、最大 CPU 时钟为100MHz、而不是140MHz。 所需的 CPU 时钟取决于 ISR 执行时间、该时间必须确保 ISR 没有溢出、并且有足够的 CPU 带宽用于其他任务。 如果电机控制 ISR 为5kHz、并且未在示例实验的 ISR 中添加过多代码、则可以将 CPU 时钟设置为50MHz 以节省功耗。

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

    我们已经调整了 CPU 时钟、 奇怪的是功耗随着 CPU 时钟的减少而增加。  我假设这是由于 FOC 效率的提高?  超频是否有问题?  正如我提到过的、140MHz 的 CPU 时钟具有最佳的性能和功耗

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

     如果 PWM 和 ISR 频率不随 CPU 时钟频率变化、则电机控制效率应相同。

    在示例实验中、默认 CPU 时钟频率应为100MHz、最大 CPU 时钟也应为100MHz。 我无法理解如何将 CPU 时钟设置为 F280049C 不支持的140MHz。

    更改下面的代码以将 CPU 时钟设置为60MHz

    网址为 user.h

    //! \brief 定义系统时钟频率、MHz
    //!
    #define USER_SYSTEM_FREQ_MHz ((float32_t)(60.0))

    在 hal.c.中的 HAL_setParams()中

    SYSCTL_setClock (SYSCTL_OSCSRC_XTAL |
    SYSCTL_IMULT (6)|
    SYSCTL_FMULT_NONE |
    SYSCTL_SYSDIV (2)|
    SYSCTL_PLL_ENABLE);

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

    感谢 Yanming 提供的更多信息。  我们没有调整 SYSCTL_IMULT 值、而是调整 USER_SYSTEM_FREQ_MHz。  是否需要同时更改这些值?

    即使调整到您的建议值后、 当 USER_SYSTEM_FREQ_MHz 为140且 SYSCTL_IMULT 为10时、我们也会看到最佳结果。  我已随函附上 user.h 和 hal.c。  供参考、我们使用染料测试不同负载条件下的总功耗。

    user.h
    #define USER_NUM_PWM_TICKS_PER_ISR_TICK (1)/2 JFA
    
    //! \brief 定义每个电流控制器时钟节拍的 ISR 时钟节拍数
    //!
    #define USER_NUM_ISR_TICKS_PER_CURRENT_TICK (1)//1 JFA
    
    //! \brief 定义每个速度控制器时钟节拍的 ISR 时钟节拍数
    //!
    #define USER_NUM_ISR_TICKS_PER_SPEED_TICK (1)//1 JFA
    
    
    //! \brief 定义电流传感器的数量
    //!
    #define USER_NUM_CURRENT_SENSORS (3)
    
    
    //! \brief 定义电压传感器的数量
    //!
    #define USER_NUM_VOLTGE_SENSORS (3)
    
    //! \brief 定义系统最大输入频率、MHz
    //!
    //#define USER_maximum_SCALE_FREQ_Hz ((float32_t)(1000.0)
    )#define USER_maximum_SCALE_FREQ_Hz ((float32_t)(210.0))//(频率* 60)/3极对= 4、200rpm
    
    //! \brief 定义系统时钟频率、MHz
    //!
    #define USER_SYSTEM_FREQ_MHz ((float32_t)(140.0)
    
    
    //! \brief 定义脉宽调制(PWM)频率、kHz
    //!
    //#define USER_PWM_FREQ_kHz ((float32_t)(5.0)) //5kHz PWM 频率
    //#define USER_PWM_FREQ_kHz ((float32_t)(10.0)) //10kHz PWM 频率
    //#define USER_PWM_FREQ_kHz ((float32_t)(12.0)) //12kHz PWM 频率
    //#define USER_PWM_FREQ_kHz ((float32_t)(15.0)) //15KHz PWM 频率
    #define USER_PWM_FREQ_kHz ((float32_t)(5.0)) //20kHz PWM 频率//50 JFA
    
    
    HAL.C
    //设置 PLL 控制和时钟分频器
    // PLLSYSCLK = 20MHz (XTAL_OSC)* 10 (IMULT)* 1 (FULT)/2 (PLLCLK_BY_2)
    SYSCTL_setClock (SYSCTL_OSCSRC_XTAL |
    SYSCTL_IMULT (10)|
    SYSCTL_FMULT_NONE |
    SYSCTL_SYSDIV (2)|
    SYSCTL_PLL_ENABLE); 

     

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

    Yanming、您好!

    为什么在负载下运行电机时、通过将时钟保持在100MHz (SYSCTL_IMULT (10))、同时调整 USER_SYSTEM_FREQ_MHz ((float32_t)(140.0)、可以降低功耗?

    我看到 在设置计时器时使用了 USER_SYSTEM_FREQ_MHz。  为了达到这些相同的功耗结果、我们能否调整 USER_SYSTEM_FREQ_MHz 影响的其他变量、同时将其与时钟频率匹配?

    谢谢、
    Jonathan

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

     USER_SYSTEM_FREQ_MHz 不能设置为140MHz,它必须与 CPU 时钟相同,方法是在 SYSCTL_setClock()中进行设置。 否则、PWM 频率、ISR 频率和目标速度都低于 所需的值。 因此比较结果不正确。