找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1679|回复: 7
打印 上一主题 下一主题
收起左侧

ATMEGA8L和STC8H1K08内部RC振荡器精度测试

[复制链接]
跳转到指定楼层
楼主
看了一个关于单片机内部RC频率校正的帖子,对我做的电路非常担忧,我这个电路既有18B20,又有串口通信,没有外接晶体,万一内部RC振荡器精度不够,就白忙乎了。本想做个简易恒温箱,觉得太麻烦,突然想到,用电吹风加温一样可以测试,正好我的电路上有两个18B20,把两个18B20放在单片机旁边,用电吹风加热,18B20测试到的温度和芯片的温度应该相差不会太大。首先百度了一下波特率如何计算?搜到这样一段话:当波特率为9600bps时,传输一个bit的时间间隔大约为104.16us;波特率为115200bps时,传输一个bit的时间间隔大约为8us。用计数器算了一下,基本上知道如何计算波特率,再用电脑通过串口调试助手发送0x7f。

0x7f的波形原来是这个样子,波特率选9600bps,示波器测量一个bit的宽度是105us和9.549k,经过计算,波特率分别为9523bps和9549bps。

这是0x7f、0x55、0xaa波形,屏幕可以显示18个bit的宽度是1.87ms和534.4Hz,经过计算,波特率分别为9525bps和9616bps,基本接近9600bps,由于我的示波器是虚拟示波器,误差肯定有,但是搞不清是电脑发送的误差还是示波器的误差?又由于示波器测到的波形宽度,Hz的精度高于mS,之后的测量就只记录Hz了。
接下来测试ATMEGA8L在常温26度的波特率,增加一个0x7f的发送,着重测量0x7f的波形,按9bit长度是266.2Hz,经过计算,波特率为2395bps,实际上波特率就是2400bps,我编程序的时候根本没有考虑具体的波特率是多少,只用示波器看波形,用100Hz的过零信号发送,1秒钟发送100个字节,每个字节的宽度占过零脉冲的一半左右就可以了。

我的这个电路是从机的两个18B20测到的温度值用串口发送到主机,主机数码管的3、4和5、6位显示温度,我用电吹风把从机加温到60度以上,我看见温度值显示正常就说明没有问题了,继续测量也就是为了得到一个比较精确的误差值。60度的时候,9个bit0x7f的波形长度是264.1Hz,经过计算,波特率分别为2376bps。进一步计算,26度的常温和60度以上的温度,ATMEGA8L的内部RC振荡器的频率仅仅出现0.788%的误差,连1%的误差都没有达到,据说串口通信最大误差不要超过5%,通常误差在2.5%以内是没有问题的。至于18B20的最大误差,以前就测试过, 18B20写时序为1的时候对精度要求最高,最少延时16μS,最佳延时20μS,最大延时24μS,算下来18B20的最大误差居然达到±16%,更是不用担心。
接下来测试STC8H1K08,26度常温,9个bit0x7f的波形长度是260.5Hz,经过计算,波特率为2344bps。再接下来的测试简直跌破眼镜,0x7f的波形加温到60度以上的值和常温26度的值居然一模一样,都不相信自己的眼睛了,又试了几遍,还是一样,STC单片机的内部RC振荡器会有那么高级?难道有温度补偿?不可能,换一片试试。

由于我自己做的测试板非常方便,左右一交换,重新写一下程序,就是换了一片做测试,26度常温,9个bit0x7f的波形长度是260.3Hz,60度以上高温,9个bit0x7f的波形长度长度是260.7Hz,又测试一片,26度常温,9个bit0x7f的波形长度是260.7Hz,60度以上高温,9个bit0x7f的波形长度是259.8Hz,不用计算波特率了,三片STC8H1K08常温26度和60度以上高温,内部RC振荡器频率的最大误差只有0.34%。继续再测试另外一片ATMEGA8L,算出两片ATMEGA8L常温高温RC振荡器频率最大误差0.86%。
总体而言,无论是ATMEGA8L还是STC8H1K08,内部RC振荡器的精度基本够用,没有特别特殊的要求,不需要外接晶体,ATMEGA8L内部RC振荡器最高频率是8兆,STC8H1K08内部RC振荡器最高频率高达35兆,理论上STC8H1K08内部RC振荡器比ATMEGA8L内部RC振荡器精度高4倍以上。我用ATMEGA8L内部RC振荡器仅仅是1兆,这个速度大概相当于传统89C51单片机外接8兆左右晶体的速度,基本够我用了,STC8H1K08内部RC振荡器我也只用1兆,感觉比ATMEGA8L内部RC振荡器1兆的速度还要快一些,由于有的STC8H1K08内部RC振荡器不能烧写到1兆,只有被迫使用1.2兆。
忍不住测试常温ATMEGA16,5V供电和3.3V供电的内部RC振荡器误差达到了4%,STC8H1K08,5V供电和3.3V供电的内部RC振荡器误差竟然只有0.04%,证明电压的变化造成的RC振荡器误差超过温度,STC的表现比AVR更好一些,看来我准备用STC8H1K08替代ATMEGA8L是比较放心的。虽然我的这个测试精度不是很高,也有一定局限性,但是,基本上还是八九不离十,影响单片机内部RC振荡器的精度也就是电压和温度,只要不是电池供电,电压的影响可以忽略不计,剩下的只有温度了,我这里是南方,一年四季很少有低于零度的情况,我做的这个东西又不太可能到北方去用。我用最低的单片机内部RC振荡器编程,又用较低的波特率通信,是为了降低单片机内部RC振荡器的精度要求,不知道我的测试方法还有这些理念有没有什么错误?欢迎大家批评指正!

评分

参与人数 2黑币 +25 收起 理由
wulin + 15 谢谢分享
高高的白杨 + 10 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:390416 发表于 2022-6-7 09:23 | 只看该作者
85度以内,STC精度是0.3% 这个他们是做到了的。
回复

使用道具 举报

板凳
ID:91150 发表于 2022-6-7 09:56 | 只看该作者
赞赏这篇文章,这种工作态度。收藏这篇文章。
"示波器是虚拟示波器"是哪一种?USB接口专门的?声卡虚拟的?
回复

使用道具 举报

地板
ID:383215 发表于 2022-6-7 12:09 | 只看该作者
人人学会单片机 发表于 2022-6-7 09:23
85度以内,STC精度是0.3% 这个他们是做到了的。

可能有的芯片高于这个值,不是所有STC单片机都能达到这个值,这方面STC至少比AVR单片机还要好用一些,AVR单片机可以校正内部RC振荡器,也很准确,只是我做的电路要求不高,无需校正。
回复

使用道具 举报

5#
ID:383215 发表于 2022-6-7 12:11 | 只看该作者
wjhhhhh 发表于 2022-6-7 09:56
赞赏这篇文章,这种工作态度。收藏这篇文章。
"示波器是虚拟示波器"是哪一种?USB接口专门的?声卡虚拟的 ...

hantai的一种,300元左右,USB接口,号称20兆带宽的双踪示波器,基本够我用,那个什么宝上就有。
回复

使用道具 举报

6#
ID:401564 发表于 2022-6-7 19:18 | 只看该作者
我一般是先看数据手册,结合自己设计对时间精度的要求去计算误差
如果不是有很多多余的时间,是没有必要去做那么多测试的
RC时钟在单片机上,二十多年前就开始用了,STC也是这几年才开始普及的
回复

使用道具 举报

7#
ID:383215 发表于 2022-6-10 13:51 | 只看该作者
Y_G_G 发表于 2022-6-7 19:18
我一般是先看数据手册,结合自己设计对时间精度的要求去计算误差
如果不是有很多多余的时间,是没有必要去做 ...

可能每个人的习惯不同吧,我觉得所有计算最终还是要通过测试来验证,那还不如直接通过测试来的快,所以我现在编程的习惯是多测试,少计算。
回复

使用道具 举报

8#
ID:879348 发表于 2022-6-10 14:06 | 只看该作者
在规格书温度范围内串口通信是无压力的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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