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**** 2529560 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/754796/tm4c1231h6pge-best-way-to-synchronize-your-main-loop-to-the-pwm-frequency

器件型号:TM4C1231H6PGE

您好!

此帖子是我在论坛上提出的问题的延续。
我正在设计一个 PID 控制系统、该系统执行以下操作:

1.通过 I2C 从传感器获取线性和角度加速度读数。
2.计算要控制的对象的角度(卷)。
3.计算所需的比例、积分和微分控制值。
4.通过 PWM 每秒发送400次(400 MHz)控制命令。

因为步骤4是系统中最慢的事件-我想为它计时。
PWM 由 Tiva 的一个外设模块生成-该外设模块还能够生成与 PWM 频率同步的中断。
因此、我的想法是在 PWM 中断服务例程内执行步骤1至4。


您对这种方法有何看法?
它是好吗? 或者也许有更好/更简单的方法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    将所有计算放入中断例程通常是一个不好的主意。 我建议您在中断例程中启动 I2C 通信并返回。 然后在发送或接收每个新字节时使用 I2C 中断。 您可以使用静态变量(通常是枚举)来跟踪何时发送下一个字节或读取并存储您接收到的字节。 读取计算所需的最后一位数据后、设置一个易失性静态变量、让主循环知道它可以开始计算过程。 此方法可防止 CPU 在外设完成之前被消耗。 如果您可以使用读取的部分数据开始一些计算、则可以让标志进入多种状态、并且可以在中断馈送 I2C 以收集其余数据的同时计算首次计算。 虽然这可能并不简单、但它允许器件在允许的时间内完成更多任务。

    如果要保持简单、只需使用在 PWM 中断例程中设置的易失性标志。 在主循环中、您等待设置标志。 如果是、则启动所有 I2C 通信并进行计算、然后清除该标志。 这与您的原始方法类似、但不会在您执行所有工作时禁用中断。 此外、在 PWM 中断例程中、如果您看到前一个中断的标志仍然置1、则您知道计算没有及时完成。

    如果您的项目在执行多项任务时变得更加复杂、您可能需要考虑使用 TI-RTOS 等实时操作系统。 这会增加一些并发症和学习曲线。