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.

[参考译文] TMS320F28027:获得一个带有晶振的精确时钟

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/594311/tms320f28027-getting-an-accurate-clock-with-a-crystal

器件型号:TMS320F28027

您好、论坛、

我正在尝试设置 TMS320F28027 C2000微控制器作为 RTC、以用于芯片上的其他功能。 我连接了一个晶体、并设置 Timer2以使用晶体。 它似乎可以工作、但我没有得到我所寻求的精度。

它使用一个应该为15ppm 的12MHz 晶振、我使用公式 C = 2 (CL -杂散)计算出负载电容为6pF、假设 Csray 为5pF、CL 为8pF。

该计时器具有11999预分频器、这意味着计时器应每1ms *周期进行一次计数、这意味着计时器应每秒触发一次、这只会向32位数字添加1。 20小时后、似乎是20秒的超时、即0.0556%或556ppm、甚至不接近于预期的15ppm!

这是我第一次在我的设计中实现晶体、因此我不是100%确定我的操作是否正确、也不是我应该能够期望的精度。 我还应该提到的 是、它由3.3V 降压稳压器断电、并且连接了 JTAG 调试器。 我不确定这是否会发生任何变化、比如调试器是否提供一个覆盖任何晶体的时钟?

无论如何、对于我为什么没有获得所需的精度、或者我的期望是不真实的、我是否有任何想法或建议、我应该只获得一个专用的时钟芯片? 如果可能的话、我更希望没有单独的芯片。

晶体: https://www.digikey.ca/product-detail/en/avx-corp-kyocera-corp/CX3225SB12000D0GZJC1/1253-1696-1-ND/5995243

电容器: https://www.digikey.ca/product-detail/en/tdk-corporation/C1608C0G1H060D080AA/445-5037-1-ND/2093652

(相关)电路板布局:

代码:

uint32_t clock_period = 1000;//in ms
uint32_t clock_time_s = 0;//in s
uint32_t clock_time_s_offset = 0;

void initClockTimer()
{
myTimer2 = timer_init (void *) TIMER2_base_ADDR、(size_t) initTimer2 = mySystem_initTimer_initr


(void *)、init_init_initrupts (sit_init_init_init_intsitr); (intVec_t)时钟中断(&clockInterrupt);
EDIS;

Timer_stop (myTimer2);

CLK_setTimer2Src (myClk、CLK_Timer2Src_ExtOsc);
Timer_setPeriod (myTimer2、clock_period);
Timer_setPreScaler (myTimer2、11999);
timer_reload (myTimer2);
Timer_setEmulationMode (myTimer2、timer_EmulationMode_runfree);

timer_enableInt (myTimer2);

timer_start (myTimer2);

cpu_enableInt (myCpu、 CPU_IntNumber_14);

Clock_setPosixTime (1447459200);
}

void Clock_setPosixTime (uint32_t)
{
clock_time_s_offset = t - clock_time_s;
}

#pragma CODE_SECTION (


GPIO 中断、"ramfuncs");_中断 void void Interrupt (void)(void clock_time_time_s;}#pragma CODE_SECTION (void

)+、"ramfock_time_siptog+)

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

    Cody、

    连接 JTAG 连接器应该不会产生任何影响。 它不会"覆盖"晶体。 12MHz 晶振的15ppm 意味着在任何时候变化都可能高达180个周期。  此外、误差是累积的、会随着时间的推移而增加。 因此、在20小时的时间段内、您可以减少556次计数、这一点并不奇怪。 同意误差既可以是正的、也可以是负的。 很难准确识别它在您的实验中的表现。

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

    我想知道 JTAG 不会覆盖、但永远不知道。 我在20小时内没有556次计数、如果计时器在20小时内仅发生556次晶体计数的变化、我就会笑! 它在20小时周期内关闭20秒、相当于556ppm。 同意误差可能在正负范围内有所不同、但无论我的样本大小是20小时还是200小时、它都将(很可能)接近556ppm。 我已经运行了几天来确认这一点。

    如果您有任何想法、请告诉我、如果可能(并且可重复)、我仍然希望将晶体用于片上 RTC。 我一直在使用几个不同的电容器值、每个样本大约20小时、但仍然不幸运。 我回顾了计时器寄存器、以确保我正确地使用了11999作为预分频器、而不是12000、 实际上、预分频器需要多一个时钟周期来触发计时器计数、以便从预分频器值所需的时钟周期数中减去一个。 当我浏览数据表时、我确实注意到它有一个图表指定10MHz 至15Mhz 范围内的15pF、因此我将10pF 与6pF 并联(这是我所拥有的)、我将看到大约20小时后的情况。