一 测试电路
首先看一下我们常用的串口通信接线方式,MCU的RX,TX引出这里加一个33~100Ω的串联电阻以匹配传输线的阻抗,USB转TTL这端没有端接任何电阻,MCU这里和USB转TTL这里是通过15cm长的杜邦线连接,电路图如下,USB转TTL接到上位机电脑上面,MCU通过TXD不断发送数据给上位机,RXD为上位机给MCU发送测量指令。MCU到USB转TTL工具的长度为15cm左右。
二 测试现象
1、MCU_TX波形
2、USB_RX
3、MCU_RX
4、USB_TX
从上面的测试波形我们已经发现问题,MCU的TX和USB的TX都是基本上没有过冲,MCU的RX和USB的RX都是有比较大的过冲,这个过冲一个15%一个30%,过冲是比较大的,造成这个过冲的原因就是因为阻抗的不匹配,而且导线过长使我们看到了信号的反射。
我们以MCU_TX(近端)和USB_RX(远端)这一组为例,我们把匹配的100R电阻去掉,看远端的波形如下:
可以发现这个过冲又增加了3%左右。
然后我们把100R电阻焊回去,在远端出并联一个470p电容,这样增加传输的时延,使我们振铃淹没在上升沿,这样我们看到远端的波形就没有过冲了。
三 原因分析总结
有人也许会说串口的通信信号频率不高,比如我上面的串口用的波特率为:961200bps,看频率有500k的时候,如果按500k来说远远没到需要阻抗匹配的的频率。
这个问题我的理解如下:
因为一般不需要端接的最大长度in数是信号的上升沿的ns数,也就是当
Len max > RT
Len max是没有端接的传输线的最大长度,RT为信号的上升沿。举例来说:信号10M的频率,时钟周期为100ns,上升沿为10ns,那么不需要端接的传输线最大长度为10in,测试我们MCU的TX的上升沿时间如下图所示,可以看出上升时间为1.1ns,也就是不需要端接的传输线的最大长度1.1in,也就是2.79cm,而我们用的传输线长度有15cm左右,所以我们可以看到信号的反射。我们在远端加了一个电容的就解决了反射的问题,就是把信号的上升时间变长,使反射淹没在上升沿过程中。
参考:
串口通信过冲原因分析和端接的方法_过冲可以计算出阻抗不匹配的位置吗-CSDN博客
https://zh.wikipedia.org/wiki/%E4%BF%A1%E5%8F%B7%E5%AE%8C%E6%95%B4%E6%80%A7