TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] MSP430FR2433:TimerA --gt;用于减少时间漂移

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1083549/msp430fr2433-timera----to-reduce-the-time-drift

部件号:MSP430FR2433

您好 TI 团队,

IAM 使用 TimerA 生成100ms 中断,我创建了一个计时器来显示时钟,我们以4位7段显示时间,但我们在1小时2小时内获得了1秒的时间偏移, 执行开始后2至4小时内的2秒时间漂移。

我认为这种时间偏移是由于 中断触发和 IKE CPU CLKS 而产生的,但在我的情况下,我不能想象得到这种时间偏移,我需要尽可能减少这种偏移。

就像我应该得到与当地时间一样的准确时间,并且不会有任何时间漂移。或者,24小时的时间应该小于1秒。

请查看我为计时器配置的寄存器值以获得100ms 中断,  

 TA0CCTL0 |= CCIE;//已启用 TACCR0中断
TA0CCR0 = 3285-1;//32768/10
TA0CTL = tassel_1 | MC_1;// ACLK,UP 模式  


供我参考,我已经用了3个变量来计算秒,分钟,小时,这取决于100毫秒,每个变量增量来创建本地时间

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

    我假设 ACLK 来自32KHz 晶体。 第一步是确保晶体符合您的精度要求。 您的错误似乎超过了最坏的(100ppm)晶体。

    计时器将按计划生成中断。 除非您禁用中断很长时间,否则这将增加计数器的增量。 希望您将 MCLK 设置为高速,这样 CPU 就可以及时完成工作。

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

    我不太确定你从哪里得到3285 (我希望是32776或3277)。

    尽管如此,在2^15-Hz 时钟中获得10 (实际上是5)的系数有点痛苦。 您所要做的是,由于32768/10的分数,该错误是完全可以预测的。

    一个解决方案是在您的整个期间内分发该错误。 一种公式:(2*3276=6552个刻度)+(8*3277=26216个刻度)=32768个刻度。 在代码术语中:从 CCR0=3276-1开始;当您的0.1秒计数器计数为2时,将 CCR0=3277-1;当计数器计数为10 (换行至0)时,重置 CCR0=32776-1。

    这样,您的0.1秒计数器会抖动(.03%),但您的1秒计数器是正确的。

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

    实际上,以前我曾尝试过   CCR0=3276-1,但当时我的时间漂移更多。

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

    为了将 ACLK 作为来源,我们是否需要提供任何引脚选择指令,例如,ACLK 是 P2.2的辅助功能,所以我们需要提供如下指令
    P2SEL0=BIT2;
    P2SEL1 = BIT2;
    P2DIR=BIT2;

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

    当然,您可以这样输出 ACLK 到一个引脚。 但它来自哪里?

    我怀疑您使用的是内部振荡器。 虽然很好,但不如水晶那么准确。

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

    我们是否需要使用外置晶体 MSP430FR2433 EVK?我们是否没有内置晶体?如果我们有方法将其配置为 ACLK

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

    如果您使用的是 FR2433 Launchpad,则会有一个晶体,但您必须做一点焊接。

    一旦晶体物理连接,您就需要一些软件来启用它。 请参见示例 msp430fr243x_CS_04.c (第79-94行):

    https://dev.ti.com/tirex/explore/node?node=AGi0Jkf6165naoMtm7ibJg__IOGqZri__LATEST

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

    如果我们做了焊接,我们就不能将这些焊件用作正常的 GPIO 吗?

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

    我不想使用外置晶体,那么使用内置晶体的解决方案是什么

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

    您现在可能正在使用 REFO (32kHz)振荡器,该振荡器的额定值仅为+/-3.5%(>2分钟/小时)。 真正的问题是,如果没有“已知良好”的参考,您就无法进行调整(校准)以进行补偿。

    如果您在实验室中使用此板(或多或少的恒定温度/电压),您可以选择将 ACLK 输出到 P2.2 (更正顺序为“P2SEL1 |= BIT2;P2DIR |= BIT2;”),并使用示波器测量 ACLK 并调整 CCR0值。

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

    感谢 Bruce 的明确解释。  

    因此,根据你的解释,我可以得出这样的结论:REFO 是一个内部振荡器。

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

    如果您连接晶体(焊接桥 R2/R3)并(a)拆除 R4/R5,则不能再使用管座引脚(b)不能拆除 R4/R5,我怀疑您不能使用管座引脚,因为晶体电路会干扰(但请咨询 EE 了解这一情况)。