打印

再问关于12F509的问题....

[复制链接]
2221|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lx911gt|  楼主 | 2014-5-6 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
再发一个关于12F509片子的问题
用这个片子做30秒延时板,板子电压输入端为AC24V,半波整流后接LM2575-5V给单片机供电,单片机输出到三级管基极做个开关

根据手册得知内部RC频率为4M,内部有一个频率校准的寄存器,而且在片子的最后一个地址官方出厂有写一个校准常数。读取后每个片子都不一样。根据内部RC为4M,大概算出50毫秒TMR0应该赋值0X4A,计数600次约为30秒,出现的一些问题如下:

一共20个片子,有6个出现时间不对的情况,4个小于30秒,2个大于30秒,小的大概少2-4秒,大于的大概多1-3秒,每次定时有几百毫秒的偏差,(比如第一次为29.75,第二次30.13,第三次29.81····没有什么规律)客户的要求是30S±1S,但是出现了6个有点离谱的原因不详(个人观点是不是官方出厂的时候校准就不是很准确)后来上示波器发现2575输出给单片机供电端波形不是很好,常有尖峰出现,将滤波电容加大容量后尖峰消除,但是新问题来了,定时普遍都延长了3秒左右,原来都是30S左右的板子换了滤波电容测试时间都变成了33秒左右,不理解是什么原因求大神解答.:dizzy:

以前有用877a做老化板,也是要定时的,定20秒,用877a从没出现过这个问题,是不是内部RC 4M不能按外部晶振4M那么算计数器初值?算的时候是不是还要加一些什么条件呢?

出现这个问题改用外部晶振是不是能解决掉呢?
沙发
NE5532| | 2014-5-6 16:52 | 只看该作者
先搞清楚是电源引起的,还是内部RC不准或者软件问题引起的。原来877A用的是不是2575的开关电源?2575的纹波电压应该做到5%-10%左右,超过这个数值,请检查电感、电容和肖特基及走线设计。

内部RC厂内校准后的精度请看数据手册,不出意外是2%左右,30秒做1秒误差是很容易实现的。

个人怀疑楼主的主要问题在于电源杂波或者软件有问题。

使用特权

评论回复
板凳
lx911gt|  楼主 | 2014-5-7 08:35 | 只看该作者
NE5532 发表于 2014-5-6 16:52
先搞清楚是电源引起的,还是内部RC不准或者软件问题引起的。原来877A用的是不是2575的开关电源?2575的纹波 ...

877a也是用2575-5V供电的,电容电感也是按照877A的参数直接用的,只是换了片子还有没用晶振出现了定时有偏差,大多数都合格,就6个出现偏差较大的问题,开始我也怀疑是我软件的问题,我让同事也做了一个定时的程序,然后写进正常的片子中定时30S也合格,写进那6个不合格一样还是差好多,囧......难道是官方校准的问题 ?

使用特权

评论回复
地板
NE5532| | 2014-5-7 09:31 | 只看该作者
lx911gt 发表于 2014-5-7 08:35
877a也是用2575-5V供电的,电容电感也是按照877A的参数直接用的,只是换了片子还有没用晶振出现了定时有 ...

如果编程器接地不良,官方的校准数据是可以被破坏的,我们经常遇到。你可以找下这个单片机有没有时钟输出功能(一般是用配置字来做的),把频率输出来,用频率计测一下就知道是不是跑偏了。

使用特权

评论回复
5
yewuyi| | 2014-5-7 10:00 | 只看该作者
1、RC振荡本身就不是一种精确计时的可靠方式。
2、RC振荡频率受电压、温度等很多影响,你应该学过大学电路基础,应当知道电容的误差很大。
3、PIC内部RC振荡在出厂时校正到1%误差(仅指环境温度25度,VCC=5V),但如果环境温度、VCC变化,这个误差肯定就没保证了,根据一般经验,在全工作范围内极限误差可达到5%,一般在2~3%误差左右比较典型。
4、因为PIC12F509的芯片比较简单,定时器中断等都不具备,只能通过查询方式来计算定时,不恰当的代码会引起定时器计时误差是完全可能的,例如在连续计时时,切勿使用直接向定时器赋初值的方式,一般都推荐使用TMR0+=6;这种类似代码写法。

使用特权

评论回复
6
tozxq| | 2014-5-7 10:11 | 只看该作者
除了楼上各位高手提到的问题外,还有一个问题需要注意,12F509需要软件中装入校准值,汇编中写:

使用特权

评论回复
7
tozxq| | 2014-5-7 10:12 | 只看该作者
CALL  03FFH
MOVWF  OSCCAL

使用特权

评论回复
8
lx911gt|  楼主 | 2014-5-7 14:02 | 只看该作者
yewuyi 发表于 2014-5-7 10:00
1、RC振荡本身就不是一种精确计时的可靠方式。
2、RC振荡频率受电压、温度等很多影响,你应该学过大学电路 ...

是呀,我看手册上面也注明了,温度影响很大,我跟我们设计硬件的反应过这个情况,我们这个延时板其实就是控制一个卤灯,24V150W的,30秒基本就可以烤肉了,延时板和灯在一个空间内,虽然离得挺远,但是温度在这个空间内很难散出去,我就怕温度变了之后,定时会跑偏。他说了一句话直接给我干无语了,某曰:“这不增加成本了么!”我 X !一个晶振才几毛钱,这根本就是可以忽略不计的成本...哎...

使用特权

评论回复
9
lx911gt|  楼主 | 2014-5-7 14:03 | 只看该作者
tozxq 发表于 2014-5-7 10:11
除了楼上各位高手提到的问题外,还有一个问题需要注意,12F509需要软件中装入校准值,汇编中写: ...

这个问题在后来发现了,写入校准值后原来差的比较大的片子基本都正常了:lol

使用特权

评论回复
10
lx911gt|  楼主 | 2014-5-7 14:05 | 只看该作者
NE5532 发表于 2014-5-7 09:31
如果编程器接地不良,官方的校准数据是可以被破坏的,我们经常遇到。你可以找下这个单片机有没有时钟输出 ...

问题现在基本解决了,初始化的时候写入了一下校准值定时就正常了:lol

使用特权

评论回复
11
wang47987146| | 2014-7-29 11:00 | 只看该作者
lx911gt 发表于 2014-5-7 14:05
问题现在基本解决了,初始化的时候写入了一下校准值定时就正常了

请问前辈,怎么用C语言初始化呢? 多谢!

使用特权

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

本版积分规则

16

主题

62

帖子

0

粉丝