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:ePWM

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm

器件型号:LAUNCHXL-F280049C
Thread 中讨论的其他器件:controlSUITEC2000WARE

大家好、

我们希望就与下面的 E2E 主题相关的此咨询寻求您的帮助。

e2e.ti.com/.../launchxl-f280049c-launchpad-for-foc-application

根据我们的客户、
在你的帮助下,我解决了很多问题。 现在我有一个新问题
对于我的控制环路、我必须使用确定 ePWM 信号数量来驱动步进电机。  
我仍然不知道如何生成确定数量的信号、特别是每个环路、它可能会生成不同数量的 ePWM 信号。
 
请给我一些建议。
 
和该函数
#define DELAY_US (a) F28x_usDelay (((( long double) A * 1000.0L)/(long double) cpu_rate)- 9.0L)/ 5.0L
是否有相应的数学公式?
此致、
Danilo
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Danilo、

    我们的专家将在星期一之前就此问题与您进行讨论。

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

    让我们看看两个不同的问题:

    下面 的问题是、您是否正在尝试生成设定数量的 PWM 脉冲?

    [引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm ]对于我的控制环路、我必须使用确定 ePWM 信号数量来驱动步进电机。  
    我仍然不知道如何生成确定数量的信号、尤其是每个环路、它可能会生成不同数量的 ePWM 信号。

    2.a 您是否尝试查看此函数中的数学运算是如何工作的?

    [引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm "]
    和该函数
    #define DELAY_US (a) F28x_usDelay (((( long double) A * 1000.0L)/(long double) cpu_rate)- 9.0L)/ 5.0L
    是否有相应的数学公式?
    [/报价]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Delay_US (a) F28x_usDelay ((( long double) A * 1000.0L)/(long double) cpu_rate)- 9.0L)/ 5.0L

    此函数 F28x_usDelay 以汇编语言编写、并计算了由 SW 开销引起的所有延迟。 这就是9和5的确定方式。 软件文件中对此进行了简短的描述。

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

    我将让 回答您的电机控制问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm ]对于我的控制环路、我必须使用确定 ePWM 信号数量来驱动步进电机。  [/报价]

    您使用的是什么算法和示例代码? 为什么您需要知道 用于驱动步进电机的 EPWM 信号数量?

    通常、我们使用固定的 PWM 频率来实现电机驱动、包括 步进电机、ePWM 信号的数量将根据电机的运行速度而变化。

    您可以参考 controlSUIT 中的步进电机示例代码、尽管该示例基于 F2803x。

    C:\ti\controlSUITE\development_kits\DRV8412-C2-Kit_v131\Stepper

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

    您好、Yanming、

    请参阅以下客户的回复。

    大家好、感谢您的回复。  
    是的、我 正在尝试生成设定数量的 PWM 脉冲。
    我使用 powerSTEP01作为驱动板、它由生产的 STMicroelectronics 提供。 最常用于开环控制。
    为了实现 FOC 逻辑、必须在 步进时钟模式下控制驾驶板。  
    只有在步进时钟模式下、步进电机才能像同步电机一样运行。
    电流幅度将直接设置、驱动板将输出两相电流。 Herne、电位置是第二个受控值、为了保持负载角为 PI/2。
    [步进时钟模式: 在步进时钟模式中、电机运动由应用于 STCK 的步进时钟信号定义
    引脚。 在每个步进时钟上升沿、电机沿编程的方向移动一微步、因此绝对位置会更新。]
     
    FOC 过程:
    1.使用 eQEP 模式读取电机物理转子位置
    2、计算转子的电位置、用  微步长表示为 RP
    3.根据电机方向计算电位置(CP)以保持负载角(la)为 PI/2、两者均以微步长表示。  
    4.使用极高频率 ePWM 信号将当前电气位置更新为目标位置(CPt)、我使用1MHz、 在1MHz 时、可以 更改当前电气位置、但转子剂量不响应。 在电流达到目标位置后、负载角为 PI/2、然后转子将因转矩而旋转。 然后、程序运行到下一个控制循环中。
     
    程序将在每个控制环路中计算转子电气位置(RP)、目标电流电气位置(CPt)并参考实际电流电气位置(CP)、最后计算 ST=CPT-CP、ST 表示差分电气位置、以微步长表示。
    因此、程序 必须生成设定数量的 ePWM 信号来更新每个环路中的当前位置。 且值必须精确。   
    您是否理解了我 的询问?
    此致、
    Danilo
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否使用固定频率 PWM? PWM 的占空比是多少? 是否会根据控制环路更改占空比? PWM 输出是否用于步进电机电源模块的 FET 栅极驱动器?

    您可以参考 C2000Ware 中的示例 ex2、3、11或13来设置周期寄存器或比较寄存器、以实现所需的 EPWM 信号频率和占空比。

    C:\ti\c2000\C2000Ware_ \driverlib\f28004x\examples\ePWM

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

    您好、Yanming、

    根据我们的客户、

    对于我的项目、PWM 信号用于更改电机中的电气位置。  PWM 输出  用于步进电机电源模块的 FET 栅极驱动器、相应的功能由驱动器板实现。  我使用占空比为50的固定频率 PWM、这在控制环路中不会改变。

    C2000中的 ePWM 模式已配置、它现在可以输出固定频率的 PWM 信号。

    我已经阅读了所有示例代码,还阅读了应用报告《使用 TMS320F2837x 的三相永磁同步电机的传感磁场定向控制》。 但是、我使用的 FOC 环路是不同的、因为不同的硬件。

    我已经尝试了很多方法、但仍然找不到用于生成设定数量的 PWM 信号的算法。

    理想情况下、CPU 运行一个定时器代码、并且 PWM 信号的数量与时间周期成正比。

    我已经尝试将代码 “DELAY_US(A)” 用作计时器来生成 PWM 信号,但 A 必须是一个常数,但 PWM 信号的数量不是恒定的,该值将在[0,31]中变化。

    如果 a 是变量、则代码 DELAY_US 不可用。

    此致、

    Danilo

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

    客户是否有任何示例波形来显示他们需要什么? 它们可以直接使能 ePWM 中断来计数数字、然后关闭/打开输出、从而生成精确 的 PWM 信号数量。

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

    您好、Yanming、

    以下是我们客户的评论。

    感谢您的快速回复。

    图片是我请求的 PWM 信号。 PWM 信号的数量是关键、并且不是恒定的。

    通过启用/禁用 ePWM 时钟来关闭/打开 PWM 输出、对吧?

    好的、我将再次尝试 ePWM 中断。 但是、如何计算数字呢? 我找不到这样的代码。 在示例代码中、ePWM 中断函数实现占空比的变化。

    此致、

    Danilo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4210426 #4210426"]通过启用/禁用 ePWM 时钟来关闭/打开 PWM 输出,对吗?

    您可以查看上面提到的示例。 您可以计算 PWM 信号的数量、在 ISR 中打开/关闭 PWM 输出。 您可以通过将周期值(TBPRD)的一半(如 CMPA/B 的一半)设置为 CMPA/B 来将 PWM 占空比固定为50%、而不会再次更改。

    C:\ti\c2000\C2000Ware_ \driverlib\f28004x\examples\ePWM

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

    您好、Yanming、

    我收到了我们客户的另一个跟进询问。

    生成特定数量的 ePWM 脉冲
    我找到了一种新方法。 将 CLB 配置为计数器、当 创建特定数量的 ePWM 脉冲时、CLB 会生成一个信号以切断 ePWM 模式。  
    我已经阅读 了 CLB 工具用户 Guide.pdf 和一些示例代码、但 CLB 的代码与 ePWM 示例不同。
    您能给我一些建议吗、 配置计数器需要哪些必要的代码?  
    我希望 ePWM2将 PWM 信号输出到 CLB 计数器、然后 CLB 在计数后将信号反馈到测量"main"函数。  
    此致、
    Danilo
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为没有必要使用 CLB。 所需的 PWM 应易于由 ePWM 模块直接生成。

    是的、如果您希望 CLB 能够生成更灵活的波形、则可以使用 CLB。 您可以在 C2000Ware for CLB 中找到一些示例、其中包括 PWM 增强功能。

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

    您好、Yanming、

    正如 您的产品专家所说、我生成了特定 数量的 PWM 信号使用事件中断3.2。
     
    interrput 的代码如下:  
    UINT16 PulseIntCount=0;
    _interrupt void epwm2_ISR (void)
      if (PulseIntCount!= 30)
       {
        PulseIntCount++;
       }
      其他
       {
        EPWMCLK_Disable ();
       }
      //--清除 INT 标志
       EPwm2Regs.ETCLR.bit.INT = 1;
      //-确认此中断以接收来自组3的更多中断
       PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
     
    代码打算生成30个脉冲、然后关闭 PWM 时钟以关闭 PWM 模式。
    但结果始终大于2个脉冲、这意味着它将生成32个脉冲。 我已经尝试过其他数字、例如0、5、12、但我得到了2、7、14个脉冲。  
    是否有缺失?
     
    此外、您还建议我使用"跳闸区域"子模式来关闭 PWM 信号。  我研究了这些例子。  
     
    PWM 模式已配置  
     
    //-配置跳闸区域模式
      EALLOW;
     //-启用 TZ1作为一个逐周期跳闸源
      EPwm2Regs.TZSEL.bit.CBC1 = 1;
     //--设置触发区操作
      EPwm2Regs.TZCTL.bit.TZA = TZ_HIZ;
      EPwm2Regs.TZCTL.bit.TSB = TZ_HIZ;
     //--启用 TZ 中断
      EPwm2Regs.TZEINT.BIT.CBC = 1;
      EDIS;
     
     
    我如何在上述中断功能中触发跳闸区域、我认为在代码触发器中将 GPIO 设置为 TZ1、但它不可用。
    请给我一些建议、谢谢。
    此致、
    Danilo
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    无需为触发区启用任何中断、只需使用以下代码即可禁用 PWM 输出

    EALLOW;
    EPwm2Regs.TZFRC.bit.OST = 1;
    EDIS;

    然后使用以下代码在需要 PWM 输出时再次启用 PWM 输出。

    EALLOW;
    EPwm2Regs.TZCLR.bit.CBC = 1;
    EPwm2Regs.TZCLR.bit.INT = 1;
    EDIS;

    或者、您无需启用/禁用 PWM 输出、只需设置 EPwm2Regs.CMPA.half-CMPA > EPwm2Regs.TBPRD 以强制 PWM 输出为高电平/低 电平、然后将 EPwm2Regs.CMPA.half CMPA 设置为活动值以启用  PWM 输出。

    [引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4222874 #4222874"]
    但结果始终大于2个脉冲、这意味着它将生成32个脉冲。 我已经尝试过其他数字、例如0、5、12、但我得到了2、7、14个脉冲。  
    是否有缺失?
    [/报价]

    您可以根据获取所需的 PWM 输出脉冲来更改计数阈值。

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

    您好、Yanming、

    请参阅以下客户的回复。

    感谢您的帮助、这样我就可以成功使用 ePWM 模式创建特定数量的 PWM 信号。

    现在、我想使用一 个中断 epwm2_ISR  来生成 PWM 信号、使用另一个更高的中断、例如  epwm2_tz_ISR   timer0_ISR  来执行控制计算。

    我已经阅读了中断嵌套指南和示例代码:swpriortized_interrupts_cpu01。

    首先、CPU 应输入中断3.2  epwm2_isr;它运行一些代码、然后输入更高的中断2.2  epwm2_tz_isr。

    我认为我应该在“main 函数”中设置中断3.2,然后在其中修改中断2.2

    我对该代码有一些疑问

    1.   我知道“IER |=M_in3”和“IER &=M_in3”,或者操作是设置需要启用的中断位,而操作是清除其他中断的使能位。 这两条线发生冲突?
    2. 要输入中断2,我认为该行应该是  IER |=M_IN2, 而不是3
    3. 在我看来,在“EINT”之后,程序应该进入更高的中断2.2,之后,程序将产生中断2,这意味着我的代码应该被插入“//在这里插入 ISR 代码…”区域。  对吗?
    4. 最后两行是否必要?

    如果您有一些详细的示例代码、这将非常好。

    此致、

    Danilo

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

    您好、Yanming、

    根据我们的客户、

    最后、我完成了控制环路。 无需使用中断嵌套。

    现在、我将运行一些测试、我需要程序记录或下载一些状态变量、当程序运行时、状态变量会随时间的推移而绘制。

    CCS 中是否有组件可实现该任务?

    我已在下面的 E2E 链接中发布此附加查询。

    e2e.ti.com/.../launchxl-f280049c-record-or-download-some-state-variables

    此致、

    Danilo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4224686 #4224686"] “IER |=M_in3”和“IER &=M_in3” 我知道,或者 OPERATION 正在设置需要启用的中断位,而操作是清除其他中断的使能位。 这两行的剂量有冲突?[/引述]

    IER |=M_in3 ->这将启用当前中断 通道、硬件 在 接收中断时默认禁用该中断通道。  IER &=M_in3禁用  用户配置的优先级低于当前中断的所有中断

    [引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4224686 #4224686"]要输入中断2,我认为此行应该是  IER |=M_IN2, 而不是3

    如果 您正确配置了优先级、所提供的代码段将确保所有具有更高优先级的中断能够嵌套低优先级的中断。 用户只需确保使用正确的宏即可。 对于中断 x.y、使用宏 Mintx、M_INTx、MGX_y、宏的定义 方式使所有较低优先级的中断 都被禁用。

    [引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4224686 #4224686]]在我看来,在“EINT”之后,程序应输入更高的中断2.2,之后,程序将生成中断2,这意味着我的代码应插入到“//在此处插入 ISR 代码…”区域中。  是这样吗?[/引述]

    是的、如果在 EINT 之后有一个挂起的2.2中断、它将自动分支到 INT2.2 ISR。 在 INT3.2 ISR 中、您应该只有用于处理 INT3.2的代码

    [引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4224686 #4224686"]是否需要最后两行?

    仅用于演示目的。 这使得用户能够查看中断的处理顺序

    此致、

    Veena