Atmel单片机串口速率与温度关系

nilwade 2013-11-18 02:50:48
加精
ATMEGA16A-AU的片子,采用内部RC时钟,8MHz,串口设置为:速率115200,1个起始位,无校验。
使用上述单片机进行串口通信,在温度达到70摄氏度时,发现串口通信异常,恢复常温通信又正常。使用9600波特率通信,在温度达到80摄氏度仍能正常通信。有没有哪位大虾有遇到相同的问题??
手册上给出此款单片机的工作温度上限可达85摄氏度,所以想请教各位大虾:此系列单片机最高稳定的串口通信速率与温度的关系?是否采用外部晶振有利于维持稳定?
...全文
3601 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
CHN8421 2014-12-20
  • 打赏
  • 举报
回复
来学习的。看了帖子觉得很有帮助
wwt19941225 2014-11-30
  • 打赏
  • 举报
回复
学习一下 挺好
of123 2013-12-03
  • 打赏
  • 举报
回复
并非所有涉及到通讯的应用都必须使用晶振。 USB 必须使用晶振,没商量。 但很多其他低速通讯,要经过实验来确定是否可用芯片内部 RC 振荡器来支持。尤其是同步通讯,对时钟的要求更低一些。 我公司的一款芯片,就在一个用户的 SD 卡应用中,使用片内振荡器做时钟。通讯采用 SPI 协议。 所以,要看场合和需求,以及成本压力。
nilwade 2013-12-02
  • 打赏
  • 举报
回复
引用 46 楼 lbing7 的回复:
个人觉得,片内的RC不能用作(像通信,定时这类)对精度有要求的时钟源这应该是常识
吃过这个亏后,以后就长记性了~~
DarkMetal 2013-12-02
  • 打赏
  • 举报
回复
以前在英飞凌的C167上也碰到过跟温度有关的怪问题,高低温测试时CAN端口会丢包,后来改用工业级的就解决了
万州云飞扬 2013-12-01
  • 打赏
  • 举报
回复
可以考虑使用有源晶振 温度范围会高一些
柏林 2013-11-30
  • 打赏
  • 举报
回复
初学者,看看理解了先!
lbing7 2013-11-30
  • 打赏
  • 举报
回复
个人觉得,片内的RC不能用作(像通信,定时这类)对精度有要求的时钟源这应该是常识
of123 2013-11-28
  • 打赏
  • 举报
回复
实际上,这是一个容差的概念。 在串口通讯下,并非要求你的波特率时钟与基准分毫不差,它允许一定的误差。并且,由于它的协议设计,每一个字节的误差不会传导至下一个字节。我们以你发送为例来说明。假如你所用的是 10-bit 帧,且接收端是在每一 bit 的中点采样,那么你的理论极限容差就是 5%,因为第 10 bit 时误差已经累积到半个周期了。当然,在实际应用中,我们设计时所容忍的误差远小于 5%。因为接收端可能存在反向的误差。传输方向反过来,道理也是一样的。 厂商给出工作条件的时候,应该是考虑到在这个范围内都保证满足容差的。这个还可以在进一步咨询 ATMEL 的技术支持,确认他们给出的工作温度范围是否对 RC 时钟振荡器通用适用。特别要问,在最高温度下,产生的偏差有多大(如果 Spec 中没有的话)。 一般情况下,产品的特性参数是在标准大气环境下测试的,温度一般就是我们所说的室温(一般采用 25C 或 20C,要看厂商的 Spec)。你在这一点下尽可能准确地将波特率调整到标称值。 如果厂商所给的工作温度范围是有效的,那么你在这个范围内所产生的误差,应该在容差范围内。 不知我说清楚了没有。换句话说,你在 25C 下校准到 115200; 在厂商承诺的最高温度下,波特率是变了,但它应该在容差之内。 还有一种方法,你预先测一下温度升高之后,实际波特率与常温相比是升高了还是降低了(与芯片 RC 所用的工艺有关)。假如是升高,那么你可以在常温下预先给一点负偏置,也就是略调低一些,来保证你的高温下仍不超差。反之亦然。当然,这是以你不在低温下使用为条件的。 至于 115200 下稳定性比 9600 差的问题,可能与分频系数的误差有关。在 UART 模块中,它所获得的采样和发送时钟,实际上是通过对系统时钟分频得到的。在某些情况下,某一波特率与系统时钟没有整倍数的关系,因此分频系数(必须是整数)是个近似值。在高波特率下,这种误差更大,因为分频系数每加减 1,其分频偏差相对于短的时钟周期引起的误差要大得多。 说穿了,很多情况下,你在芯片上实际得到的波特率往往不是标称值,而且波特率越高,误差率越大。
nilwade 2013-11-28
  • 打赏
  • 举报
回复
感谢of123的详细解答!!!你的意思我明白了,就是在校准后,温度变化产生的误差应该是在容差允许范围内。
引用 43 楼 of123 的回复:
实际上,这是一个容差的概念。 在串口通讯下,并非要求你的波特率时钟与基准分毫不差,它允许一定的误差。并且,由于它的协议设计,每一个字节的误差不会传导至下一个字节。我们以你发送为例来说明。假如你所用的是 10-bit 帧,且接收端是在每一 bit 的中点采样,那么你的理论极限容差就是 5%,因为第 10 bit 时误差已经累积到半个周期了。当然,在实际应用中,我们设计时所容忍的误差远小于 5%。因为接收端可能存在反向的误差。传输方向反过来,道理也是一样的。 厂商给出工作条件的时候,应该是考虑到在这个范围内都保证满足容差的。这个还可以在进一步咨询 ATMEL 的技术支持,确认他们给出的工作温度范围是否对 RC 时钟振荡器通用适用。特别要问,在最高温度下,产生的偏差有多大(如果 Spec 中没有的话)。 一般情况下,产品的特性参数是在标准大气环境下测试的,温度一般就是我们所说的室温(一般采用 25C 或 20C,要看厂商的 Spec)。你在这一点下尽可能准确地将波特率调整到标称值。 如果厂商所给的工作温度范围是有效的,那么你在这个范围内所产生的误差,应该在容差范围内。 不知我说清楚了没有。换句话说,你在 25C 下校准到 115200; 在厂商承诺的最高温度下,波特率是变了,但它应该在容差之内。 还有一种方法,你预先测一下温度升高之后,实际波特率与常温相比是升高了还是降低了(与芯片 RC 所用的工艺有关)。假如是升高,那么你可以在常温下预先给一点负偏置,也就是略调低一些,来保证你的高温下仍不超差。反之亦然。当然,这是以你不在低温下使用为条件的。 至于 115200 下稳定性比 9600 差的问题,可能与分频系数的误差有关。在 UART 模块中,它所获得的采样和发送时钟,实际上是通过对系统时钟分频得到的。在某些情况下,某一波特率与系统时钟没有整倍数的关系,因此分频系数(必须是整数)是个近似值。在高波特率下,这种误差更大,因为分频系数每加减 1,其分频偏差相对于短的时钟周期引起的误差要大得多。 说穿了,很多情况下,你在芯片上实际得到的波特率往往不是标称值,而且波特率越高,误差率越大。
sunyan8261128 2013-11-27
  • 打赏
  • 举报
回复
温度对于波特率影响还是很大的
nilwade 2013-11-27
  • 打赏
  • 举报
回复
引用 26 楼 of123 的回复:
[quote=引用 16 楼 nilwade 的回复:] 感谢各位的回帖。 我自己也总结一下:RC片内时钟受温度、电压等外部环境影响大。所以对于串口通信而言,不是一种可靠的解决方案。片内RC校正可以部分解决这个问题,但是校正结果只针对特定的温度及电压,假若这些值变化了,那么就需要再次的校正。因此,对于串口通信,尤其是高速率情况,建议方案是外加晶振作为参考时钟。
你这里还是有个误区。 作为芯片厂商,ATMEL 既然规定了工作温度范围,那么,它的 RC 温度系数就应当是能够满足整个温度范围的要求的。 出现温升后频率偏差,实际上是工艺偏差造成的 RC 参数误差引起的。注意,工艺偏差造成的主要是 RC 参数的偏离,而对 RC 温度敏感性的影响较小。换句话说,每一个芯片在基准温度下 RC 固有频率是不同的,大致可以看作是正态分布;而每一个芯片的 RC 频率的温度变化率是大致相近的。 因此,你只要在常温和正常工作条件下进行一次预调,它应该能满足厂商所规定的工作温度下的要求。如果采用这个方案的话,还可以继续咨询 ATMEL 的技术支持。 当然,如果你的应用成本不敏感的话,使用外部晶振时钟源可以省去很多麻烦。比如批量小的情况下,做量产调试环境和增加调试代码的成本可能得不偿失。[/quote] 感谢of123的回复,学到了不少。但还有一个疑问想请教下:“在常温和正常工作条件下进行一次预调,它应该能满足厂商所规定的工作温度下的要求”,这一点如何做到? 因为就我理解,例如常温和80度两个环境,预调的效果应该是不同的。每个预调可以保证相同环境下的稳定通信,但应该无法保证环境变化后的稳定通信吧。
seedundersnow 2013-11-26
  • 打赏
  • 举报
回复
用晶振吧. 那个振荡器本来就不适合用于通讯.
枫岚小子 2013-11-26
  • 打赏
  • 举报
回复
呵呵,学习下
枫岚小子 2013-11-26
  • 打赏
  • 举报
回复
赞成,这个还不错
line_us 2013-11-26
  • 打赏
  • 举报
回复
2看看是不是温度的问题。
hanhan83215 2013-11-26
  • 打赏
  • 举报
回复
这个不错,大家一起学习一下吧
胡占魁 2013-11-26
  • 打赏
  • 举报
回复
不是很懂!!!!!1!
mbugaifc 2013-11-26
  • 打赏
  • 举报
回复
老帅哥23333 2013-11-26
  • 打赏
  • 举报
回复
我只知道 这个ATMEL 台湾人叫 永洋
加载更多回复(25)

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧