打印

使用MEGA48的内部RC做485通讯可靠吗?

[复制链接]
5131|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近做的一批显示屏,8M晶振,通讯速度9600,倍速模式,按PDF的数据,设置UBRR0H = 0;UBRR0L = 103; 使用外部晶振时通讯正常。现在想把8M晶振和2个电容省掉,用程序做自适应,具体方法是在PC上连续发送30秒0xAA,在MCU里把UBRR0L从87到118都用一次,每次如果能连续接收到15个0xAA则认为成功,然后把能用的最小数值和最大数值求平均设置给UBRR0L,测试发现能用的范围是98-106,这样得到的平均值是102,现场使用时,每2个小时自动校准一次,估计这样用可靠吗?

相关帖子

沙发
dirtwillfly| | 2013-1-8 17:11 | 只看该作者
本帖最后由 dirtwillfly 于 2013-1-8 17:13 编辑

因为AVR内部振荡器使用的是RC振荡器。它的输出频率会随温度变化,所以一般不能用在串口通信等要求较高时钟精度的应用。
RS485波特率误差范围,一般控制在2%以内。看你做实验测出的数据,用RC振荡器作为RS485通讯的时钟是非常危险的。

使用特权

评论回复
板凳
fp123123|  楼主 | 2013-1-8 17:25 | 只看该作者
从实验数据上看,98 - 106都可以正常工作,这个范围有8%这么宽,也就是+/-4%以内可以使用,我再求了平均,误差肯定是远小于1%了,室内现场温度变化不大,如果每隔2个小时自动适应一次,也会有问题吗?

使用特权

评论回复
地板
joyme| | 2013-1-8 17:36 | 只看该作者
能省几个钱?485一般是用在环境比较差或长距离通信情况下的产品上,这种产品量不会太大,成本没这么敏感吧,再说就是8M的晶振也不合适做串口通信,最好选11.0592M的晶振

使用特权

评论回复
5
fp123123|  楼主 | 2013-1-8 18:16 | 只看该作者
说得也是

使用特权

评论回复
6
airwill| | 2013-1-8 19:51 | 只看该作者
可以增加通信的自动校正功能, 这样就不会有这样的缺陷了.

使用特权

评论回复
7
fp123123|  楼主 | 2013-1-8 20:36 | 只看该作者
通信的自动校正功能怎么加?我设想的方法是这样:485总线是轮询方式,MCU每隔几秒会收到PC的查询命令,如果MCU发现超过n秒没有收到查询命令,自动进入波特率校准状态,PC端发现有任何一个MCU失去应答超过n/2秒时,向全部MCU广播进入波特率校准状态的命令,然后连续发送0xAA一段时间,再检测全部MCU的应答是否正确,这样可以吗?

使用特权

评论回复
8
NE5532| | 2013-1-8 20:58 | 只看该作者
先得问楼主几个问题——单片机给出的全范围内部时钟频率误差是多少?楼主要的工作温度范围是多少?串口能够容忍的波特率误差是多少?没有条件说行或不行都是没有依据的。

使用特权

评论回复
9
fp123123|  楼主 | 2013-1-8 22:26 | 只看该作者
根据MEGA48的PDF,出厂时内部8M RC的频率精度是10%,7.3M - 8.1M,使用外部8M晶振,串口使用倍频模式时,UBRR0L标准值是103,这时波特率误差是0.2%,PDF建议最大的波特率误差是+/- 1.5%,改为使用内部RC时,考虑到精度问题,如果不做自适应的话很容易无法通讯。我把UBRR0L的取值以103为中点,按+/- 15%的扩展为87 - 118,扫描得到可用范围的中点来使用。设备是在普通室内使用,根据季节不同,温度在-5至40度,考虑到温度对RC的影响,每2个小时自适应一次。电压是用1117做5V稳压,使用过程中电压基本上不变

使用特权

评论回复
10
fp123123|  楼主 | 2013-1-8 22:31 | 只看该作者
NE5532 发表于 2013-1-8 20:58
先得问楼主几个问题——单片机给出的全范围内部时钟频率误差是多少?楼主要的工作温度范围是多少?串口能够 ...

这个显示屏要做1000个左右,如果能用内部RC,就省掉外部晶振,集成度高一些有利于稳定性吧?现在PCB上是设计了晶振的位置,在考虑要不要焊上去

使用特权

评论回复
11
ZOUWEN1| | 2013-1-8 23:07 | 只看该作者
这个你就不用玩了,为了保证系统的可靠性,我建议你还是使用外部振荡,内部的振荡受外部的温度影响太大。我的好朋友做个项目,为省这点小钱,最后客户说产品不稳定。而且你花这么多时间来设计软件,本身就不是软件能解决的问题。

使用特权

评论回复
12
jlass| | 2013-1-9 08:58 | 只看该作者
这种问题根本就不用讨论,内部RC震荡远没有外部晶振来的稳定,虽然你在试样阶段可能没有问题,但是实际使用中现场环境极为复杂,难免会有地方出问题,如果只是返修还是小事,严重的话连这个客户都丢了,孰轻孰重你可以自己衡量一下。

使用特权

评论回复
13
airwill| | 2013-1-9 09:17 | 只看该作者
fp123123 发表于 2013-1-8 20:36
通信的自动校正功能怎么加?我设想的方法是这样:485总线是轮询方式,MCU每隔几秒会收到PC的查询命令,如果 ...

PC端发现有任何一个MCU失去应答超过n/2秒时,向全部MCU广播进入波特率校准状态的命令,
这样的做法,虽说能够解决问题. 但是有点被动, 存在数据丢失的问题.
另外一个办法, 通信中随时校准, 时刻保持同步, 不就没有超时错误出现了吗, 可以提供通信的稳定性, 甚至达到和用晶振一样的稳定性.

使用特权

评论回复
14
jlass| | 2013-1-9 09:49 | 只看该作者
airwill 发表于 2013-1-9 09:17
PC端发现有任何一个MCU失去应答超过n/2秒时,向全部MCU广播进入波特率校准状态的命令,
这样的做法,虽说能 ...

你的方法固然可行,但你要看其实现难度,为了节省一个晶体的钱而去做这些事情划算吗。

使用特权

评论回复
15
airwill| | 2013-1-9 09:57 | 只看该作者
本帖最后由 airwill 于 2013-1-9 09:59 编辑
jlass 发表于 2013-1-9 09:49
你的方法固然可行,但你要看其实现难度,为了节省一个晶体的钱而去做这些事情划算吗。 ...


有的时候不是为了节省, 而是可靠性的问题, 大家知道, 晶体最大的弱点是抗震性.
如果是在很强振动的设备上, 那就要考虑避免使用晶体了. 因为减震措施的成本, 可能远比晶振贵多了

使用特权

评论回复
16
holle| | 2013-1-9 13:57 | 只看该作者
呵呵,最好用

使用特权

评论回复
17
z755924843| | 2013-1-9 14:19 | 只看该作者
最好别用内部的晶振,之前我用的mega8做232通信的时候,使用一段时间后就和PC通信不上了,后来换了外部晶振问题就解决了。我认为应该是内部振荡不是很准或者容易受到干扰导致的。所以我认为尽量还是别用内部振荡。

使用特权

评论回复
18
au529| | 2013-1-9 14:25 | 只看该作者
学习了。

使用特权

评论回复
19
明月小厨| | 2013-1-9 14:42 | 只看该作者
为了解决这个问题用了50人时,价值1000元以上;
节省材料成本1000元;其实你们老板亏本了;说不定还有隐患;

使用特权

评论回复
20
iseeyoutoo| | 2013-1-9 15:10 | 只看该作者
别千万别用内部RC,,我吃了这个亏大了,,,刚开始的时候可能没有问题出现,到一二个月后问题来了,,,通信不了。。

使用特权

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

本版积分规则

7

主题

255

帖子

2

粉丝