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.

[参考译文] TM4C1231H6PGE:中断同步至 PWM 频率

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/753963/tm4c1231h6pge-interrupt-synchronous-to-pwm-frequency

器件型号:TM4C1231H6PGE
主题中讨论的其他器件:TM4C123GH6PM

您好!

在我的 Launchpad 代码中、我使用其中一个 PWM 外设来控制伺服电机。

PWM 频率为400Hz。

是否可以使 PWM 外设产生 PWM 频率同步的中断?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您在进行此帖子时选择的部分不包含运动控制 PWM 外设。 我假设您是要使用通用计时器来生成 PWM。 是的、您可以在通用计时器生成 PWM 信号时以 PWM 频率生成中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、

    我是说 TM4C123GH6PM 不是 TM4C1231H6PGE。

    这是我用于生成 PWM 的代码。

    int main (void)
    {
    //将时钟配置为80MHz
    SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_16MHz|SYSCTL_OSC_MAIN);
    
    // PWM 初始化
    SysCtlPWMClockSet (SYSCTL_PWMDIV_64);SYSCTL_PWM1PEL
    (
    
    
    GPIP_PWM1PM_PHIN);SYSCPM1)
    
    
    volatile uint32_t ui32PWMClock = SysCtlClockGet ()/ 64;
    
    volatile uint32_t ui32Load =( ui32PWMClock / PWM_FREQUENCY )- 1;
    
    PWMGenConfigure ( PWM1_base、PWM_GEN_0、PWM_GEN_MODE_DOWN );
    PWMGenPeriodSet ( PWM1_Some、PWM1_BASE )
    
    、PWM1_PWM1_SECURIT_PWM1_OUT、PWM1_OUT、PWM1_SECURIT_NOT_PWM1_OUT、PWM1_OUT
    PWMOutputState (PWM1_base、PWM_OUT_1_BIT、TRUE);
    
    PWMGenEnable (PWM1_base、PWM_GEN_0);
    
    while (1)
    {
    PWMPulseWidthSet (PWM1_base、PWM_OUT_1、SHOT_OTHER 值);
    }
    

    您能否发布一个如何使这个外设产生一个中断的示例?

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

    该器件具有 PWM 模块。 它采用了 CAN 生成中断。 我没有这个具体的例子。 您可以使用 TivaWare 函数"PWMGenIntTrigEnable()"来启用 PWM 中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让我解释一下我要做什么:
    我正在设计一个包含 I2C 传感器和电机控制器的控制系统。
    电机控制器可"说出"PWM、并且能够以高达400Hz 的速率接收命令。

    因此、400Hz 是我希望将控制环路计时到- I.E 的速率:
    从传感器获取读数、进行所有必要的计算并向速度控制器发送一次性更新。

    为此、我希望让 PWM 外设生成中断。
    你怎么看?
    这是最佳方法吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    除了 Bob 的出色回答之外、

    您将 PWM0配置为在重新加载计数周期上生成中断。 在更新 I2C @400Hz 的速度快得多的 PWM 中断处理程序中、您会遇到软件循环控制问题、对吧? 在这样的配置中、更快的 PWM 中断是否是异步400Hz 更新(2.5ms)速度控制器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不明白您的问题...

    我要做的就是:

    速度控制器预计在400Hz 时获得 PWM 命令。

    那么、这是我希望 Tiva 模块生成的 PWM 频率-我希望所有软件进程都与它计时。 I.E:读取 I2C 角度信息、一些次要滤波和计算所需的输出

    为了实现这一点-我的想法是从 PWM 模块生成一个400Hz 中断、并在这个中断的 ISR 下执行标为红色的所有过程。

    我还没有这样做...所以我对 Bob 的问题是、这种方法是否是一个好主意? 或者也许有更好/更简单的方法...