搜索
bottom↓
回复: 22

请教stm8定时器不准且一致性不好的问题

[复制链接]

出0入0汤圆

发表于 2017-6-20 12:29:01 | 显示全部楼层 |阅读模式
单片机是stm8S003F3,内部RC16M时钟,用的是TIM1,两块板子同一个程序,定时时间有误差,且不是同一块板子还不一样,如10ms定时,一块板子测出来是9.9ms,另一块板子测出来是10.1ms。
不知道是哪里的问题,怀疑是不是内部RC导致的,大家有没有遇到过,还有其它什么原因。程序如下


void bsp_ConfgiSysClk(SYS_CLK_E _iSysClk)
{
  if (_iSysClk == HSI_16M)
  {
    /* 自动切换, 切换到内部高速时钟HSI, 禁止系统时钟中断, 关闭当前的时钟源  */
    CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  /* 设置内部高速RC时钟HSI为时钟源,分频系数为1 */
    while (CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);        /* 等待HSI时钟稳定 */
  }
}

void TIM1_Config(void)
{
  TIM1_TimeBaseInit(15, TIM1_COUNTERMODE_UP, 999, 0);
  TIM1_SetCounter(0);/* 将计数器初值设为0 */
  TIM1_ARRPreloadConfig(DISABLE);        /* 预装载不使能 */
  TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);        /* 计数器向上计数/向下计数溢出更新中断 */
  TIM1_Cmd(ENABLE);                        /* 使能TIM1 */
}

INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{

  TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
   TOGGLE_LED;
}

出0入0汤圆

发表于 2017-6-20 12:44:23 | 显示全部楼层
内部的本来就不准,当然你也可以再校准下会好的。

出0入0汤圆

发表于 2017-6-20 12:52:00 | 显示全部楼层
要精度就用外部晶振

出0入8汤圆

发表于 2017-6-20 12:57:51 | 显示全部楼层
正常现场哦,内部RC 本来就这样

出0入0汤圆

发表于 2017-6-20 13:41:06 | 显示全部楼层
没毛病,内部这种误差应该是正常的

出0入0汤圆

发表于 2017-6-20 13:44:51 | 显示全部楼层
内部RC16M时钟,           这不废话么。。。  然后你还会惊喜的发现,温度变化了,同一块板子时钟也会变化。

出0入0汤圆

发表于 2017-6-20 13:46:19 | 显示全部楼层
内部时钟是会有误差

出0入0汤圆

 楼主| 发表于 2017-6-20 14:03:21 | 显示全部楼层
我这款产品对定时器要求比较高,设计时没考虑到,现在量产后发现这个问题

出0入0汤圆

发表于 2017-6-20 14:06:43 | 显示全部楼层
不了解内部RC的特性就敢用,后果很严重啊

出0入0汤圆

发表于 2017-6-20 14:27:34 | 显示全部楼层
NIC 发表于 2017-6-20 14:03
我这款产品对定时器要求比较高,设计时没考虑到,现在量产后发现这个问题 ...

什么用途,

出145入215汤圆

发表于 2017-6-20 14:44:35 来自手机 | 显示全部楼层
只能改版了,校正也不能高精读

出0入0汤圆

发表于 2017-6-20 17:17:48 | 显示全部楼层
应该没这么大误差, 这已经10%了... 常温下1%精度有的

出0入0汤圆

 楼主| 发表于 2017-6-20 17:31:02 | 显示全部楼层
snoopyzz 发表于 2017-6-20 17:17
应该没这么大误差, 这已经10%了... 常温下1%精度有的

10ms,测出来10.1ms不就是1%精度吗

出0入0汤圆

发表于 2017-6-20 19:18:34 | 显示全部楼层
NIC 发表于 2017-6-20 17:31
10ms,测出来10.1ms不就是1%精度吗

呃, 算错了, 惭愧, 那STM8的内部RC不能满足你, 事实上 STM8的内部RC已经算精度不错的了,,,其它MCU的内部RC更惨...10%的都有

出0入0汤圆

 楼主| 发表于 2017-6-21 08:52:11 | 显示全部楼层
LVmcu 发表于 2017-6-20 12:44
内部的本来就不准,当然你也可以再校准下会好的。

我先不考虑同一块板子时钟自己会变化的情况,如果每块板子都要校,是怎么校准的

出0入0汤圆

发表于 2017-6-21 08:57:06 | 显示全部楼层
NIC 发表于 2017-6-21 08:52
我先不考虑同一块板子时钟自己会变化的情况,如果每块板子都要校,是怎么校准的 ...

手册上有写,校准的话你要有个标准时钟源。不过你要的精度这么高,还是用外部吧。

出0入0汤圆

发表于 2017-6-21 11:08:38 | 显示全部楼层
请教一下,规格书这样说,VDD=5V, TA=25℃的时候,最小值为-2.5 最大值为1.3。是不是可以这样理解,  10MS定时的话,最小为 9.75ms ,最大为10.13ms??  是不用我理解错了?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-6-22 08:26:44 来自手机 | 显示全部楼层
貌似还需要除以分频因子,8M 1%的hsi如果分频后输出1M的脉冲误差应该只有0.125%

出0入0汤圆

发表于 2017-6-22 08:36:15 | 显示全部楼层
正负1%精度都忍受不了那你设计时候就要考虑晶振啊

出0入0汤圆

发表于 2017-6-22 08:38:09 | 显示全部楼层
本帖最后由 ljy99731 于 2017-6-22 08:39 编辑
aduecho 发表于 2017-6-22 08:26
貌似还需要除以分频因子,8M 1%的hsi如果分频后输出1M的脉冲误差应该只有0.125% ...


你确定分频能降低误差?楼主的16M分频得到100Hz(10ms)误差可没变

出0入0汤圆

发表于 2017-8-25 10:17:10 | 显示全部楼层
我看了怎么想笑啊,哈哈哈哈

出0入0汤圆

发表于 2017-8-25 11:47:45 | 显示全部楼层
这种错误不能原谅,除非领导要求。

出0入21汤圆

发表于 2017-8-25 12:42:15 | 显示全部楼层
如有输入设置,就加个时间基准设定好了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 06:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表