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.

[参考译文] TM4C1290NCPDT:生成具有微 Hz 精度的低频(>0.005和20Hz)

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/575540/tm4c1290ncpdt-generate-low-frequency-0-005-and-20hz-with-microhz-accuracy

器件型号:TM4C1290NCPDT
主题中讨论的其他器件:TM4C123

尊敬的先生:

我想让频率发生器在0.0005Hz 至20Hz 范围内具有高精度 、精度为 microHz、例如1.00001  

我尝试使用32位连接定时器位、我将计数按照频率进行、格式为 (((ui32SysClock /(frequency _Hz))/ 2);  其中 frequency _Hz 是我们希望作为输出提供的频率现在它将相应地执行该操作、但它不会为我提供正确的微 Hz 精度、并且会使输出频率发生变化。

您能不能建议我现在的排量如何获得如此精确的精度。

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

    您是否想生成一个每2000秒慢至1的脉冲、而您希望它具有毫秒精度? 如果没有额外的外部基准、您将无法实现这一点。

    如果您可以使用 TM4C 的时钟精度、就不难做到:

    由于 TM4C129x 计时器的最大负载为32位(~42亿)、并且您的较慢周期@120MHz 时钟为~240亿次时钟周期、因此您需要在计时器中断中使用辅助计数器。 例如、一个选项是将您的计时器配置为在每个系统时钟节拍(通常为120MHz)后过期、这将使您每秒进入 ISR 一次。 在最后的第二个服务中、您可以使用一些 TIMER_CFG_A_ACT_setto 选项将引脚配置为在下一个计时器计数时升高。

    对于"怠惰实现"、TM4Cof 具有64位大宽度计时器-因此您只需加载您的计时器、只需点击量即可。

    您将需要从数据表中计算时钟精度-如果您确实需要该精度、则需要一些外部时间校准帮助。 根据您的应用、GPS 接收器通常具有~10ns 的可靠时间基准。 或与温度补偿例程相关联的校准晶体... 精确计时有一整套"科学"。

    谢谢

    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bruno 对我的问题给出的建议答复!
    我现在已经使用计时器作为配置 TIMER_CFG_PERIODICRAY,正如您在回复中所建议的那样,我必须使用某种辅助计数器主计时器中断!

    请详细说明这一点

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

    您需要在7秒内完成转换。
    -您的主时钟以120MHz 运行。
    -您以60.0000加载计时器(每隔0.5秒调用一次 ISR)

    在 ISR 内部、您可以定义静态变量"timerCallsCounter"。 每次调用 ISR 时、都会增加计数器。 在前15个中断上、您根本不会触碰 TCCP。 当 timerCallsCounter 等于15 (6.5秒)时,您距离所需时间只有半秒,因此当您将 TCCP 配置为在计时器计数器下次过期时进行切换或设置时。

    当然、游戏开始后、您需要重置 timerCallsCounter 和您正在使用的任何其他控件。 此外、该示例具有一个完美的计时器计数倍数的周期、但您可以针对不同的所需周期使用计时器计数值。

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

    但是、我想用0.5sec 的概念生成6..85sec、我能用同样的概念吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您可以。
    首先尝试学习更简单的计时器中断、直到您掌握它们。 稍后使用计数器只是一个编程细节。
    实际上、如果您运行的频率为@120MHz、则可以使用32位计时器、最长为~35.7秒。 只需进行数学计算。
    如果您需要的时间超过此值、则只需管理连续超时(您最初提到了2000秒)。
    布鲁诺