打印
[ZLG-MCU]

批量使用LPC922串口通讯,小部分不通怀疑RC振荡频率?

[复制链接]
2441|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ztb|  楼主 | 2007-5-23 10:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zlgmcu| | 2007-5-23 13:27 | 只看该作者

串口通信最大误差为5%. 但是很多情况下4%的误差就会导致异

在贴近Vcc pin 的位置加个104小电容,看看效果是否好些.

使用特权

评论回复
板凳
ztb|  楼主 | 2007-5-24 00:21 | 只看该作者

PCB上已经有104电容.

使用特权

评论回复
地板
LPC900| | 2007-5-26 08:40 | 只看该作者

UART通信如果不想误码率太高的话,还是建议采用外部晶振为

使用特权

评论回复
5
徐勇| | 2007-5-27 01:07 | 只看该作者

LPC900自动波特率的误差一些粗略想法。

如果你用LPC900进行UART通讯,而且又是自动波特率的话,
可以这样来看

     PC端(主机端)发送STX(0x02),由定时器0去捕获RXD的下降沿,
UART的发送是LSB在前,之前还有个起始位,我们可以用定时器测量出低电平的时间,这个时间就是2bit数据发送的时间,那么:

        1.波特率计算公式:Fbaud=Fosc/((BRGR1:BRGR0)+16)
         (BRGR1:BRGR0) =(Fosc/Fbaud)-16
         pclk = fosc/2;
2.
        timer0 的值  x对应的时间t 是2个bit位的时间
        t与波特率 BPS的关系为  t = 2/Fbaud
        t = x/pclk = 2x/fosc
        ->
        2x/fosc = 2/Fbaud;
        ->
        x/fosc= 1/Fbaud;
        Fbaud = fosc/x;
        (BRGR1:BRGR0) =(Fosc/Fbaud)-16
        (BRGR1:BRGR0) =(Fosc/(fosc/x))-16   
        (BRGR1:BRGR0) = x-16;
也就是,把定时器0的值减去16后作为BRGR1:BRGR0即可比较准确的产生。

        误差分析: 定时器捕获低电平的误差,粗略可以考虑有2-3个PCLK的
      误差,以内部7.3728MHz 的频率,最高115200bps,
      x= 7.3728*10^6/115200=64
      误差后的X位61-67 
      实际波特率为:Fbaud=Fosc/x        5%  -4.5%
     那么实际波特率低一点,误差就可以成倍的降低。
而且看起来,和实际晶振与标称值的误差没有关系。

      以上粗略分析,请做参考,也请各位大侠指正。

      

           

使用特权

评论回复
6
蛋蛋的老公| | 2007-6-1 22:35 | 只看该作者

LS的这个做法,有没用过量产?

批量可不可靠?

使用特权

评论回复
7
徐勇| | 2007-6-2 17:12 | 只看该作者

正准备在这批板子上测试,不过量也不大。

:-)
所有效果还是有待测试哈。
只是从理论分析,误差还是比较小的。
同时在T0在测量时,做一些误差调整。

使用特权

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

本版积分规则

ztb

139

主题

660

帖子

9

粉丝