打印
[STM8]

关于stm8s精确定时问题,发红包啦

[复制链接]
2138|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
coderdd|  楼主 | 2017-2-3 20:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 coderdd 于 2017-2-3 20:19 编辑

由于使用了stm8s系列单片机,本以为内部自带RTC,结果没有啊,所以得用软件仿真出来。这两天忙着写逻辑,没时间搞,只用了内部的16M搞的一个timer4定时器模拟走秒。结果发现偏差有点大,好像也受温度影响。十几分钟差了好几秒了。理想的是三四天差个30秒之内还是可以接受的。想问下,是否有可行的办法。因为主板已经确定,无法外接rtc模块,只能从外部晶振和内部晶振入手了。下面的是我用内部16M定时器写的:
void Time4_Init(void)
{
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124);
  TIM4_PrescalerConfig(TIM4_PRESCALER_128, TIM4_PSCRELOADMODE_IMMEDIATE);
  TIM4_ARRPreloadConfig(ENABLE);
  TIM4_ClearFlag(TIM4_FLAG_UPDATE);
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  TIM4_Cmd(ENABLE);
}
//13分钟,误差3秒,无补偿
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
  if(tm4_cout++>1000)
  {
    tm4_cout=0;
    timeSource++;
    tm4_syscout++;
  }
  TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}

1.看到部分资料说,rtc模块都是用32.768k的频率,那么是否模拟这个走秒的是否也需要用这个频率才最准确?
2.有源晶振精度>无源晶振精度>单片机内部晶振精度。这个是我的猜测,不知是否正确,那么是否外接有源的晶振最好,有源的是否也会有温漂?
3.模拟时间程序上是否有规范的地方,定时器用timer1,2,3,4是否有区别,写法有没有需要注意的地方?
4.如果用32.768k晶振最准确,那么主程序和定时器的时钟源能否为2个,因为主程序肯定要用16M的了。

以上问题回答有作用的,小弟把过年抢的小红包奉献出来,一共也就二十多块钱,到时候私信发。

沙发
a136498491| | 2017-2-3 20:40 | 只看该作者
我猜:肯定和晶振精度有关(温漂、初始精度等等)。您应该看看数据手册中,内部时钟的精度是多少。然后应该算一下吧,4天差30秒,应该是多少。

使用特权

评论回复
板凳
coderdd|  楼主 | 2017-2-3 20:49 | 只看该作者
a136498491 发表于 2017-2-3 20:40
我猜:肯定和晶振精度有关(温漂、初始精度等等)。您应该看看数据手册中,内部时钟的精度是多少。然后应该 ...

嗯,是和精度有关,毕竟是内部晶振,而且误差也测出来了,就算找到根源也没用,我现在需要的是此问题的解决方案

使用特权

评论回复
地板
戈卫东| | 2017-2-3 21:04 | 只看该作者
晶体振荡器精度好于RC振荡器是没有什么疑问的。
但“有源晶振精度好于无源晶振精度”是没有依据的。

使用特权

评论回复
5
icecut| | 2017-2-3 21:54 | 只看该作者
戈卫东 发表于 2017-2-3 21:04
晶体振荡器精度好于RC振荡器是没有什么疑问的。
但“有源晶振精度好于无源晶振精度”是没有依据的。 ...

有源晶振是带矫正的.所以会好点.
建议他用一个标准秒振校准一下.
晶振可能有抖动,不影响.就校准一下温漂和精度就好了.

使用特权

评论回复
6
coderdd|  楼主 | 2017-2-4 08:55 | 只看该作者
还有人吗

使用特权

评论回复
7
desertsailor| | 2017-2-4 09:18 | 只看该作者
没有其它办法,使用高精度晶振或额外增加外部时钟源

使用特权

评论回复
8
杨爱林林| | 2017-2-4 12:06 | 只看该作者
如果实在没什么招  并且这个误差比较稳定的话  软件校准吧

使用特权

评论回复
9
s_f_tan| | 2017-2-4 12:34 | 只看该作者
外部晶振加软件校正吧

使用特权

评论回复
10
liubeihua| | 2017-2-4 13:50 | 只看该作者
精度与用那个定时器无关,与晶振有关必须用石英晶振,且需用精度高于5ppm的晶振,一般用32.768的低频晶振,实在不行比如板已排好那主振荡器必须用石英晶振。

使用特权

评论回复
11
coderdd|  楼主 | 2017-2-4 21:44 | 只看该作者
多谢各位,不过我感觉基本已经解决了,没有外接晶振,就用内部的定时器,程序上确实要微调,微调过后测试效果很好,基本误差都可以消除掉

使用特权

评论回复
12
51xlf| | 2017-2-4 23:44 | 只看该作者
如果外部纠正可以使用GPS授时实现。

使用特权

评论回复
13
51xlf| | 2017-2-4 23:48 | 只看该作者
再精准的时钟也有误差的时候,还是推荐授时模块

使用特权

评论回复
14
a136498491| | 2017-2-8 22:34 | 只看该作者
如果单片机内部振荡器一致性非常好,那么软件调整是OK的;
如果一致性不好,就得用外部振荡器了

使用特权

评论回复
15
chenci2013| | 2017-2-8 22:53 | 只看该作者
你怎么配置的时钟信号

使用特权

评论回复
16
chenci2013| | 2017-2-8 22:55 | 只看该作者
RTC不是可以单独的时钟吗

使用特权

评论回复
17
lyfly_away| | 2017-2-8 23:07 | 只看该作者
三四天差个30秒,内部RC时钟不实时校准,达不到这个要求
电压变化、温度变化都影响内部RC时钟

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

384

帖子

11

粉丝