(十六)通讯问题
l 串口屏和电脑连接异常
原因分析1:
串口工具打开后,刷新不到串口号。
解决方法:
大部分的台式机会有一个串口1,这个就是电脑的DB9出口,一般用DB9转接延长线,是可以和DB9的进行RS232通讯,现在大部分的笔记本电脑没有串口1,通常用串口转接线、转接板,通过USB转出TTL,RS232,RS485,打开设备管理器,需要更新串口驱动。通讯后,串口号不能选错,一般的串口通信工具,HEX发送需要勾选,这个是通讯的前提。
原因分析2:
屏发出来的数据在串口工具表现出来是乱码,接收不到数据。
解决方法:
波特率是否匹配,串口电平是否错误,转接板芯片是否匹配。
原因分析3:
接线错误。
解决方法:
在RS232或者 TTL通讯是需要3根线才能看到有接收、发送交互的通讯的,地线G、收R或者发T,其中信号地是一定要接的,通常串口屏发出来通常用DOUT、或者TXD、TX、T、232T 等英文缩写表示,串口屏的接收用的DIN、RXD、RX、232R 等英文缩写表示,信号地是GND、G来表示。通常要交叉接线,也就是串口屏的R接电脑的T,串口屏的T接电脑的R。 在RS485接线中,也就是需要至少2根线,简单的说就是A接A,B接B,RS-485半双工模式接线时将T/R+接对方的A+、T/R-接对方的B-。
原因分析4:
DGUS屏开启了校验,或者升级、降级为其他的内核,导致通讯不上。
解决方法:
检查屏的系统配置,DGUS屏有必要在保证通讯正常的情况,用串口升级内核处理。
原因分析5:
DGUSII屏下载了CFG文件之后就不能通讯了。
解决方法:
检查屏的CFG系统配置,06 07的位置写了5AA5开启了系统时间校准之后,可能把屏通讯弄得波特率不对,在屏上电的时候,收到的指令不是发送的校准的30个55之内的规定指令导致。一般用户下载CFG的时候06 07位置都写0000最好,如果是DGUSII屏时钟误校准了,那么重新按照正确的方法操作。
l 串口屏和单片机通讯异常
原因分析1
接线错误。
解决方法:
通常要交叉接线,也就是串口屏的R接单片机的T,串口屏的T接单片机的R, GND接GND。在RS485接线中,也就是需要至少2根线, A接A,B接B。RS-485半双工模式接线时将T/R+接对方的A+、T/R-接对方的B-。
原因分析2
接TTL和RS232兼容性电平选择不对。
解决方法:
电平匹配问题,串口屏的电平是TTL还是RS232,有的屏后面有短接处可以短接进行跳变如下图红框处。
DGUSI屏比如的C070_15WT 、C050_04WT 和用户CPU的连接距离很短,为了提升波特率又方便接PC调试,迪文的TTL/RS232兼容接口,设计上就是用74系列芯片逻辑门做了反向,发送还是TTL电平,只是反过来,这个不是标准的RS232,一般这样通讯距离不要超过半米,和电脑用DB9是可以进行RS232通讯的,屏后面的短接跳线短接后会变成3.3V TTL标准通讯电平。
迪文DGUSI ,15/16/17/18WT系列带外壳的产品(比如DMT64480T057_18WT),RS232串口是严格的RS232规范,输出电平是+/-5V以上。这种屏通讯距离可以长很多(理想环境是10米)。
通常情况,TTL/RS232兼容接口的屏在距离超过1米以上就会发现数据丢失现象比较严重,如果用户的单片机是用了标准的RS232芯片,那么如果进行长距离通讯呢,可以采用如下的办法,屏上面短接为标准3.3V TTL通讯电平,用户做一个TTL转接RS232的标准小板子,或者改用迪文有标准RS232接口的屏。
原因分析3
电平不完全匹配,迪文屏是3.3V TTL,有些用的5V的串口电平单片机。
解决方法:
大部分芯片都兼容3.3和5V,可以采用串接电阻直连的方法,电阻常用330或470欧姆(留个上拉做备用);也可以用串接高速二极管,或是用三极管做电平开关。也可以参考下图的转换电路。
下图是3.3V和5V电平的TTL串口转化电路,其中SS14可用其他压降小于0.3V的肖特基二极管代替。
原因分析4
通讯芯片本身问题。(用户更换232芯片物料时容易出现这一问题)
解决方法:
MAX3232、MAX232假货非常多,可以用示波器测量下232IC的输入、输出波形验证。
1、先用串口助手单独测评,测试一定时间后计算发送和屏响应的数据,帧数是否一致,确定屏通信是否有问题。 2、测试Max232芯片接收、发送波形是否按程序设计的时间在走,发现是否存在丢波、波形对齐不整齐等现象。如下一个例子:图左图是不正常的232芯片,(UTC3232输出就不对称)的第1个字节解调波形严重失真。右图是正规的芯片波形是对称的。
原因分析5
波特率的误码率太大,影响通讯
解决方法:
如何降低误码率,由于RS232/TTL 芯片(如MAX232)的旁路匹配电容,储能能力不足,导致波形失真,建议使用4 颗105 电容。如图。
如果还是怀疑有波特率误码问题,串口屏和电脑通讯没有问题,控制板和电脑通讯也没有问题,但是控制板和串口屏通讯就不正常,需要用户将二者的波特率用示波器测试出来,对比波形分析是否波特率误码,迪文屏是可以自定义波特率来修正二者的误差的。
原因分析6
数据被干扰,影响通讯,或者本身单片机程序有问题了,发送的指令错误,
解决方法:
用串口引线监测的办法。这种方法听上去难,其实需求的设备极其简单,非常容易操作。如图所示,是市面上一款常见的USB转TTL、RS232、RS485的通讯小板子,测试方法参考:例如测试某个TTL通讯的数据是否正常,将小板子和电脑的USB口插上,驱动安装完成后,用杜邦线m接着转接板的GND,用杜邦线n接着转接板的RXD,杜邦线另外一头最好用工头的(方便用两只手可以戳着代测试引脚进行测量),将m和n两根线另一头分别接着串口屏的GND和RXD(或TXD),这样控制板在给屏发数据的时候,就能够捕捉到经过单片机发给屏的数据了,用串口工具收取之后进行分析查看。(这种方法适用于分析、排查各类与通讯不正常的故障原因)
原因分析7:
例如:TTL通讯屏和电脑能通讯、控制板和电脑也能通讯,但是屏和控制就是通讯不上。
解决方法:
不妨用示波器测量下波形,如果电路输出的高电平低于3.3V, 分一下a、b两种情况去考虑。
a、这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值,上拉电阻也能增强抗干扰能力。一般情况下,串口通信用TTL连接的时候,因这种连接的通信距离很近(建议控制50cm以内),极易受到干扰。为了消除TTL线上的干扰,所以,除了两个脚上加5-10K的上拉电阻,还再接一个小容量的电容,是可以滤到高频干扰脉冲。这种接法可以看成是阻容滤波电路。
b、测量是否由于负载原因,给控制板通讯芯片供电电压过低了,导致的输出电平也变低。
附: 波特率的测量方法
波特率 Baud rate, 单位 bps其实有2种说法:
-- 每秒传送的字节数 Byte Per Second.
-- 每秒传送的字节数 Bit Per Second.
这两种表示方式网上的资料非常混乱,个人认为波特来源是一个人的名字,他叫Jean-Maurice-Émile Baudot ,因此简写为Baud,单位符号:Bd;所以,波特率写成Bd/s是正确的;B/s
不要错误的理解为波特每秒(Baud per second)为单位、或者是理解为一秒钟内发送(或接收)了多少字节的数据,都是一种常见的错误。
我们可以这么理解。串口通讯,都是用高低电平传输,但是应该多久读取一次电平呢?这个就由波特率决定了,可以通俗的理解为一个设备在一秒钟内发送(或接收)了多少位的数据。
下面说一下示波器测波特率的方法步骤:
1.先把示波器表笔的地线(夹子)屏的GND,如果不方便夹,可以夹在屏的铁框脚或者SD卡卡槽,这些都是和GND连通的。
2.往串口发送数据:如发送0x55或0xAA(因为这两个值二进制都是0和1相间的,容易看波形占用的时间值),本例是发送的0xAA。
3.打开示波器电源开关,旋转下图中红色框标出来的按钮,并注意看着屏幕上方的时间格,一般将时间旋转到100ms-300ms之间,这个时间是用来抓去波形的,这是调节的横坐标轴。然后旋转黑色框框中的两个按钮,这两个按钮是用来调整纵坐标轴的,旋转坐标线到合适的位置。
4、调好坐标后,会看到屏幕上有信号划过,如下图:下图每个格子代表的是100ms,如红色框框中标出的。然后按软键盘上的“Run/Stop”键,这个按键会变成红色,并且屏幕不再划动,而是停止,这就是抓到的波形,形状也如下图红框的时间。需要调整时间格,也就是放大,眼睛能数格子看到的那种,才能将每个位显示出来
请将屏与电脑连接,在电脑与屏可以通讯的情况下,sscom32 发送0xAA,并设置每100ms 发送一次。请您用示波器测量波特率,一般收方和发方各自单独的波特率控制建议在正负2%以内,(有还可以放宽一点2.5%,收方和发方两个合起来5%肯定是不行的,这里的多少范围有误差其实没有一个具体定论,本文这里的说法也不一定权威,总之控制误差越小越好),方法如下:
sscom32 发送0xAA,波特率为115200,,请您用示波器的针头测量屏DIN 的接收引脚,捕捉方波,测量1 个bit(位)的时间值T,1/T 即为此时的真实波特率。如图2的计算,3.5个小格子,每个小格子的单位是2.5μs,
1 个bit(位)的时间值T 为2.5μs x3.5=8.75μs,1000000μs除以8.75等于114285,波特率
误差为(114285-115200)/115200=0.79%,不会影响通讯。
另外一种简单快速计算方法,如下图,
下图的截图是测试一个9600的波特率对比,发送的指令不一定非得是0x55或0xAA,因为我们通常还会要捕捉单片机发出来的不固定的指令,单片机的程序都写好了,这样得到波形就不一定是规律的锯齿状的,数高低峰的个数,不要把两个峰值一样的数成一个了,如下图,
波形的话可以选如图所示的7个位(可以理解 高的是表示1低的是表示0,红色数字3 4不能看成一个位),
选取一个位去测量是不精确的,通常我们会选多个整齐的方波进行计算:例如:
我们还可以调出下图示波器的蓝色的那个框,
△T=728.0us 表示的是两条光标(垂直黄线)所夹的时间,
计算,728/7=104,也就是每个位占用的微秒数,1秒等于1000 000微秒,1000000/104=9615.38,测试出来和9600对比误差非常小。
Last updated
Was this helpful?