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:SDK FOC 1/2周期

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1016533/launchxl-f280049c-sdk-foc-1-2-periods

器件型号:LAUNCHXL-F280049C

电机控制 SDK v2.01  

50µs PRD 加载完整周期20Khz/μ s。

HAL_setupPWM ()似乎应将 PRD 设置为  USER_PWM_FREQ_kHz 频率的2倍。 然而、由于 ePWM 时钟缺省为50MHz 1/2 SYSCLK、PRD 加载2500、PRD 为20kHz。

2500个周期 x 50MHz = 20kHz 不是周期的1/2、而是一个完整周期。  1250个周期 x 50MHz = 40kHz 或 USER_PWM_FREQ_kHz = 20kHz 周期的1/2。 一些供应商将 SVM 的载波周期降低到10kHz 或更低、这是质疑 PRD 的主要原因。  

1.为什么名为1/2个周期的变量会加载完整的 PRD 周期?

2 SVM 占空比需要1/2的 PRD 周期负载计数才能正常工作、还是需要完整的 USER_PWM_FREQ_kHz  周期计数?  

/* set 40kHz half periods, TBPRD:5000/2 = 2500ticks, 25µs */
uint16_t halfPeriod_cycles = (uint16_t)(systemFreq_MHz *
pwmPeriod_usec / (float32_t)2.0); //100Mhz

// since EPWM is set up/down counter, the period register is
// set one-half the desired TBPRD period as starting duty cycle
EPWM_setTimeBasePeriod(obj->pwmHandle[0], halfPeriod_cycles); //2500 ticks 25µs

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="48581" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1016533/launchxl-f280049c-sdk-foc-1-2-periods ]1. 为什么名为1/2个周期的变量会加载完整的 PRD 周期?

    PWM 使用向上/向下计数模式、因此 PRD 应等于 TC/Tcpu/2。

    [引用 userid="48581" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1016533/launchxl-f280049c-sdk-foc-1-2-periods ]2 SVM 负载是否需要1/2的 PRD 周期负载计数才能正常工作或需要完整的 USER_PWM_FREQ_kHz  周期计数?  [/报价]

    SVM 及其输出占空比与 PWM 计数模式无关、不使用 PWM 频率和周期。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1016533/launchxl-f280049c-sdk-foc-1-2-periods/3761494 #3761494"] PWM 使用向上向下计数模式、因此 PRD 应等于 TC/Tcpu/2。

    实际上、CMPA 的脉冲宽度需要设置为1/2、而不是 PRD 周期。 在任何添加的时基时钟缩放之前、在设计上只有50MHz 时、HAL 似乎认为 PWM 时基是100MHz。

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1016533/launchxl-f280049c-sdk-foc-1-2-periods/3761494 #3761494"]SVM 及其输出占空比与 PWM 计数模式无关、不使用 PWM 频率和周期。

    当我在其他类型 PWM 模块(60MHz)上配置1/2周期时、它会在应用调制之前在 PWM 脉冲组之间产生载波。 发生器1/2周期生成25kHz 脉冲序列,并在之间添加载波,可通过 PRD*2设置10kHz。   在通过 CMPA 进行 LABxxx 调制之前、SDK 方法(user.h) 20kHz 具有恒定 PWM (μ 50µs)、且未添加载波。 我的示波器采集集10KSPS 深1-2ms 扫描显示了增加的载波或消隐时间。

    DSVM 不需要载波来生成跳数以实现电流稳定、也许会产生更大的速度扭矩? 还想知道添加的 PWM 载波是否会减少产生低侧电流监控器的1/2波电感脉冲。

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

    CMPA 将根据 SVPWM 的输出进行更新。 在配置期间、三个 CMPA 全部设置为50%、因此三相电流将为零。 默认情况下、F28004x 上的 PWM 时钟频率与 CPU 时钟频率相同。

    如果您不更改 PWM 和系统时钟配置、PWM 频率应是 user.h 中的设置值

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1016533/launchxl-f280049c-sdk-foc-1-2-periods/3764697 #376467"]默认情况下、F28004x 上的 PWM 时钟频率与 CPU 时钟频率相同。

    根据 driverib 注释 ePWM 模块的时间周期设置状态 TBPRD 缺省为1/2 MOSC 或50MHz。 driverlib 注释是否不正确?

    为100MHz (10ns) TBPRD 时钟配置 ePWM 时钟预分频校验器 x1会有点奇怪。 100MHz TBPRD 将产生超过5000个周期(200us)、这是我发布的要点。

    我们从未在其他 TI PWM 模块中将周期一分为二。 对于零电流输出、脉宽设置为零、但 DSVM 与 CMPA 控制50%占空比附近的最小值/最大值稍有不同。

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

    我想您的意思是" EPWMCLK 是 SYSCLK 的缩放版本。 复位时 EPWMCLK 为半 SYSCLK"、PWM 时钟将在 HAL_setupPWM ()中配置为使用100MHz。

    这取决于如何计算 CMPA。 在 instaspin 项目中、SVM 的0%占空比等于 PWM 输出的50%占空比。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1016533/launchxl-f280049c-sdk-foc-1-2-periods/3766351 #3766351"] PWM 时钟将在 HAL_setupPWM ()中配置为使用100MHz。[/quot]

    然而 TBPRD 时钟不是100Mhz、所以1/2周期甚至不存在为 HAL 注释状态。 如果不设置 ePWM 时钟预分频器 x2、则不能将50MHz 设为100MHz。 ePWM 预分频器 x1时钟分频器被配置 为 HAL_setupPWMs() 50MHz、似乎是错误的。

    我们是否希望 TBPRD 源的时钟速率为10ns 或20ns? 如果 SDK 需要100Mhz TBPRD 源时钟、预分频器需要设置为 x2、因此 TBPRD 1/2周期为2500个周期而不是5000个周期。 奇怪的是、SVM 频率为20kHz (无载波)、但如果确实 TBPRD 时钟频率为100MHz、该频率如何? 这里没有东西累加。

    //设置50MHz PWMCLK、复位 EPWMCLK 50MHz 是半个 SYSCLK 100Mhz。
    ePWM_setClockPrescaler (obj->pwmHandle[cnt]、ePWM_Clock_divider _1、
    ePWM_HSCLOCK_DEVIDER_1);

    为什么说 TBPRD 设置1/2周期时、如果配置为全周期50MHz 时钟、则会感到困惑、除非在某个地方发生错误? 如果试图通过(TBPRD 1/2周期)传送一个50%占空比、应该在 CPMA 动作限定符上放置一个注释、而不是 TBPRD 配置上。

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

    您可以查看 hal.c 中的 PWM 配置代码并在 F28004x 电路板上进行测试、PWM 的时钟频率应为100MHz。 我可以确保不会出现上述错误和相关问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1016533/launchxl-f280049c-sdk-foc-1-2-periods/3768708 #3768708"] F28004x 电路板、PWM 的时钟频率应为100MHz[/quot]

    因此、如果我们设置 PWM 时钟预分频器 x2 (100MHz) PWM 时钟。 1/2周期应为2500个周期/2或1250*20ns= 25µs 40kHz/SDK user.h 20Khz 除数。 因此、电流/PI 控制器的100MHz 中断节拍率会产生载波(跳过计数)、从而留出时间让磁通转矩波形在每个周期斜升。

    在我看来、转子速度可能会大幅降低、这与通过6步 FOC 实现的交流驱动类似。 斩波 Vsence (Clarke) 100nF (即使是47nF)会使6步 FOC 运行/声音变得糟糕、并且会产生与针对相同 EMF/总线电压的 SDK 相同的较低速度。 SVM 电流角度是否具有 Vsense 滤波功能来补偿丢失的 SVM 载波? 磁通正在同步移动、但并未产生出色的速度性能结果。 如果任何转子速度的改善、我减少了10nF 的 Vsense 滤波器。   

    我通常遵循 driverlib.lib Doxygen 注释作为最终的真实来源。  

    请注意:ePWM 的 SOC 触发源也通过 ADC-A、B、C 设置为50MHz 时钟源。 通过 ePWM 调制速率将 SOC 触发源设置为奈奎斯特采样频率的2倍、100MHz、这种情况难道不奇怪吗?

     //设置主时钟缩放因子(ADC 模块的最大时钟为50MHz)
    ADC_setPrescaler (base、ADC_CLK_DIV_2_0);