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.

[参考译文] TMS320F28379D:将 EPWM1与外部同步

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1466043/tms320f28379d-synchronizing-the-epwm1-with-external-sync-in

器件型号:TMS320F28379D

工具与软件:

尊敬的专家:

我正在尝试使用 PWM 模块生成 PWM、而计数器与外部触发器同步。  为了实现这一点、我将 在 GPIO10上触发一个 与 INPUT5SELECT 相关联的脉冲。 此外、我还将 TBCTL 的位 PHSEN 初始化为1、以便在外部触发 CTR 时将其设为零。

这是代码初始化部分的片段。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void PWM0_Init(void)
{
EALLOW;
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // Count up
EPwm1Regs.TBPRD = 10000; // Set timer period
EPwm1Regs.TBCTL.bit.PHSEN = 1; // Enable phase loading
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000; // Phase is 0
EPwm1Regs.TBCTR = 0x0000; // Clear counter
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // Clock ratio to SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = 0;
EPwm1Regs.TBCTL.bit.SYNCOSEL = 1; // SYNC output on CTR = 0
// Setup shadow register load on ZERO
EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;
EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;
EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;
// Set Compare values
// Set compare A value
// Set actions
EPwm1Regs.AQCTLA.bit.ZRO = 2; // Set PWM1A on Zero
EPwm1Regs.AQCTLA.bit.CAU = 1; // Clear PWM1A on event A, up count
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
3
4
5
6
7
8
9
10
void X_bar(void)
{
EALLOW;
InputXbarRegs.INPUT5SELECT = 10;
EDIS;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

尽管进行了这些初始化、但在我不断改变外部触发频率的同时、我没有看到 PWM 频率有任何变化。

提前感谢。

此致、

Rajesh

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

    您好、Allison、

    感谢您提供的信息。 我提到了上面的链接,我确实做了什么  Marlyn 说。 但是、我看不到任何变化。  

    让我困扰的是、在没有为 EXTSYNCIN1提供任何脉冲的情况下、仍然可以控制脉冲宽度。 它的行为就像 PWM1作为主器件被初始化一样(不由外部 SYNC 信号驱动)。

    以下是我的完整代码。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include "F28x_Project.h"
    extern void InitSysCtrl(void);
    extern void InitPieCtrl(void);
    extern void InitPieVectTable(void);
    interrupt void TimerOvf(void);
    interrupt void ADCs_EOC(void);
    void Initialize_GPIO(void);
    void Custom_Init(void);
    void timer0_init(void);
    void PWM0_Init(void);
    void Init_ADCs(void);
    void X_bar(void);
    int b=0;
    float a=0;
    void main(void)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    提前感谢。

    此致、

    Rajesh。

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

    尊敬的 Rajesh:

    您是否也查看了其他链接? 我想最后一个 示例有一个通过 GPIO32进行外部同步设置的项目示例。

    我还有一些关于如何帮助进行调试的建议:

    • 您还可以将 EPWM1的同步输出选择设置为"同步输入"、这意味着 ePWM 的同步输出脉冲将在从外部源接收到同步脉冲时发生反射。 从这里、您可以使用输出 XBAR 多路复用器14将 GPIO 上的同步脉冲输出到示波器(OUTPUTXBAR 多路复用器14您可以选择 EXTSYNCOUT)。  如果查看 SYNCOUT 脉冲、可以检查脉冲在更改外部 信号状态时是否可见。
    • 另一个技巧是逐行单步执行代码、并仔细检查 PWM 寄存器和 GPIO/外部同步相关寄存器是否按预期变化。 您是否看到 它们反映了期望的值?  

    此致、

    Allison

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

    您好、Allison、

    我尝试了使用 GPDAT 寄存器读取 GPIO10。 然而、如果读取它、PWM1将由 CMPA 调节。 代码如下:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include "F28x_Project.h"
    extern void InitSysCtrl(void);
    extern void InitPieCtrl(void);
    extern void InitPieVectTable(void);
    interrupt void TimerOvf(void);
    interrupt void ADCs_EOC(void);
    void Initialize_GPIO(void);
    void Custom_Init(void);
    void timer0_init(void);
    void PWM1_Init(void);
    void Init_ADCs(void);
    void X_bar(void);
    int b=0;
    float a=0;
    void main(void)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    我想知道如何在不使用 extsync 触发器的情况下调节 PWM!

    我曾考虑过 您的建议、我认为 ePWM1无论如何都会在 CTR = 0时生成到下一个外设的 SYNCOUT。 我的问题是 ePWM 完全不会与 EXTSYNCIN1相互影响!

    提前感谢。

    此致、

    Rajesh。

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

    尊敬的 Rajesh:

    感谢您的跟进。 EXSYNCOUT 的目的是检查外部同步输入源是否通过。 您可以设置 EPWM1、以便它只从外部同步源同步。 通过这种方式、您将能够确保外部同步按预期传递到 ePWM。

    您还可以监视正在接收的同步的状态:

    能否发送波形的示波器捕获以及尝试同步的外部信号和 EPWM1的 EXTSYNCOUT? 是否也能查看 SYNCI 位的设置?

    此致、

    Allison

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

    尊敬的 Rajesh:

    感谢您的跟进和努力。 我将详细介绍您的配置、看看我是否可以对其进行测试 。 我会尽快告诉你,但请允许,直到星期一,我最晚回到你。 感谢您的耐心!

    此致、

    Allison

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

    你好、Allison!

    问题已解决。 它实际上是一个愚蠢的错误-没有称为 Xbar 初始化函数。 ePWM1A 现在与外部触发器同步、但是、现在 ePWM1A 停止了 ADC 触发。

    下面是新问题的新主题。

    (1) TMS320F28379D:ePWM 在外部同步触发时无法由 ePWM 触发 ADC - C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    此致、

    Rajesh。

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

    尊敬的 Rajesh:

    很高兴听到同步得到解决! 感谢您发布新主题、我将让分配的 ADC 专家在其中回答您的疑问。

    此致、

    Allison