硬件基础知识和典型应用-关于485方式通信

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnHardware" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

前言

之所以写这一节博文,主要是说一下关于485的自动收发问题!

不过还是从485怎么来的开始说起,然后到各种具体使用细节.

冒昧问一句:485是什么? 

485是什么呢? 答:485是一种传输逻辑0和1电信号的方式!

 

讲一下历史

1.要想知道为啥有485,那要从实际应用中出发,

咱当前使用的这些已经规定好的通信方式,是人们在长期的摸索中最终总结出来的比较好的方式.

最简单的就像下面这样子,发送端是5V,接收端接收到5V

发送端是0V,接收端是0V.

但是呢长久以来人们要解决的问题是:如何让传输的电压更小,传输距离更远,抗干扰性更强!

 

 

 

2.如何让传输距离更远?

大家都知道导线都是有电阻的,你在这边电压是5V,经过导线以后肯定会衰减到5V以下

导线越长,衰减的越厉害!

好多人就在考虑了怎么解决呢??

其实人们就想,直接增加输出端的电压,然后RS232传输方式就出来了

同时人们规定:

如果要发送高电平信号就把导电的电压设置为-3V到-15V之间

实现RS232通信方式的芯片有很多(MAX232,SP3232)

假设我要让对方接收高电平信号,那么其实是这样子

 

 

 

假设我要让对方接收低电平信号,那么其实是这样子

 

 

 

3.但是这样子还是不能满足,毕竟无限的提高电压不是长久之计

后来呢有人发现了用差分的方式传输数据

什么是差分呢!

就是用两根电线作为一个数据线做数据传输

咱把其中一根电线叫 A,另一根电线叫B

然后规定:

如果A线电压比B线电压高200mV以上,就认为传输是高电平信号!

如果B线电压比A线电压高200mV以上,就认为传输是低电平信号!

 

4.看图说明

假设我要让对方接收高电平信号,那么其实是这样子(A>B)

 

 

 

假设我要让对方接收低电平信号,那么其实是这样子(B>A)

 

 

 

5.不过一开始兴起来的是RS422通信方式(发送是发送的线,接收是接收的线,分开了)

在这里引入一个名词:全双工

发送数据的同时也能够接收数据,两者可以同步进行  美名曰:全双工通信

422通信方式发送是发送的线,接收是接收的线,分开了,所以RS422通信方式是支持全双工通信的

 

 

 

6.后来呢,人们感觉4根线太多就去掉其中两根(RS485)

不过这样就出现了另一个名词: 半双工

通信的时候在一个时间点,只能单方向的传输

左边发送数据给右边的时候,右边不能同时发送数据给左边.反之亦然.

 

 

 

 

关于串口通信

咱们做单片机的经常会说串口通信

其实当RS232方式通信出来的时候,当时用RS232方式通信叫串口通信

就是老式的台式电脑后面的这个口(RS232出来的时候还没有出现差分通信方式,所以电脑是没有USB的)

 

 

 

但是随着时间的推移,渐渐地把单片机上面的UART通信叫做了串口通信

注意哈,如果你和老工程师聊天,说到串口通信.

你一定要说电脑RS232通信,单片机TTL通信!

说一个我朋友经历过的故事:

一个老工程师问我朋友,单片机上有串口通信,

是不是直接可以接到电脑上(RS232接口)实现通信??

 

其实这个老工程师那心里面串口通信就是RS232通信

他把单片机的串口通信也认为了是RS232电平的通信了!

 

关于UART通信协议

1.基本上所有的单片机都有UART通信的引脚.现在用的最多的通信协议还是UART.

我就直接举例子说了.

假设通信的波特率是9600

那么意思就是说每隔  1/9600  秒传输1位数据(约104us)

假设传输8位数据  0x55(0101 0101) ,然后没有奇偶校验,停止位1位

根据UART协议,真实的信号是这样子的

 

 

 

 

 

 

 

注意1:上面之所以是1010 1010 是因为先传输的低位后传输高位

注意2:因为是9600HZ所以每隔约104us传输一位数据,上面测得的是103.97us

注意3:UART协议规定在传输开始的时候是先有一个低电平

(低电平时间就是传输每一位的时间,当前为约104us)

 

注意4:最后有一个停止位,停止位就是有一个高电平

(高电平时间就是传输每一位的时间,当前为约104us)

当然如果停止位是1.5位,停止时间对于现在来讲就是104*1.5 = 156us

如果停止位是2位,停止时间对于现在来讲就是104*2 = 208us

 

2.奇偶校验位

奇校验:

如果发送的一个字节数据中的数据位中的1(高电平)是偶数个,那么最后的奇偶校验位需要是高电平

保证整个数据位里面的1(高电平)个数是奇数个.

如果发送的一个字节数据中的数据位中的1(高电平)是奇数个,那么最后的奇偶校验位需要是低电平

保证整个数据位里面的1(高电平)个数是奇数个.

发送的0x55,有4个1,所以奇偶校验位需要是高电平,让1的个数为奇数个

 

 

偶校验:

如果发送的一个字节数据中的数据位中的1(高电平)是奇数个,那么最后的奇偶校验位需要是高电平

保证整个数据位里面的1(高电平)个数是偶数个

 

如果发送的一个字节数据中的数据位中的1(高电平)是偶数个,那么最后的奇偶校验位需要是低电平

保证整个数据位里面的1(高电平)个数是偶数个

 

关于485通信芯片的使用

1.一般哈用MAX485,SP485EE  MAX13487

如果是用在工业控制建议用户使用6LB184等工业级的芯片

当然还有TVS,磁珠,自恢复保险丝,如果不计成本还需要加上DC-DC隔离(BC0505)还有ADUM1201.

BC0505是5V转5V的电源隔离芯片,5元左右,用来给485芯片单独供电

ADUM1201是不让485的输入输出引脚直接接到单片机上,再次隔离一下.

当然,如果防雷击,记得加上放电管

反正是大家自己去取舍.

 

 

 

2.现在说一下我要说的主题:485的自动收发电路

大家可能说,网上不是很多吗?

答:网上的做的不够严谨,都有问题!

先看一个

 

 

 

 

注意:单片机的TX默认是高电平,所以485_TX是高电平,三极管导通,RE/DE为低电平.

我现在说一下原理:

首先大家都知道RE/DE处于低电平,芯片处于接收数据状态

RE/DE处于高电平,芯片处于发送数据状态.

现在咱看上面的电路,假设咱发送:0x55

加上起始位 ,先发送高位后发低位 ,1位停止位 

发送的电平为:(0  10101010  1) 

发送0:

485_TX为0 ,三极管截止 ,RE/DE为高电平 ,处于发送状态 ,DI连接的低电平

所以把0发送了出去.

 

然后发送1:

485_TX为1 ,三极管导通 ,RE/DE为低电平 ,处于接收状态

由于外面的A上拉,B下拉,所以当前信号为1 ,所以可以看做把1发送了出去

 

然后发送0:(后面的就不说了,和上面一样)

 

 

3.为了保证信号更加的好,很多工业上都用斯密特触发器做.

一般都使用74HC14 或者 74LS14

 

 

 

如果要问我斯密特触发器有啥作用,我就直接给你一张图

 

 

 

如果是使用的74HC14芯片,因为是反向的,

所以上面的信号经过74HC14处理后的信号应该是相反的.

如果想得到正的,可以再经过一路反向器

 

 

 

 

4.和485配合使用,典型电路如下:

(画的有点不好看,看箭头方向吧.....)

 

 

 

注:发送数据有两路信号,一路送给了485的DI,另一路送给了RE/DE

 

假设发送0(第一路信号):(0信号经过两路反相器最终还是0,然后送给了485的DI引脚)

 

 

 

 

假设发送0(第二路信号):(0信号经过三路反相器最终是1,然后送给了485的DI引脚)

然后用485把0发送了出去.

 

 

 

不过中间经过了一个电路(电容 ,电阻,二极管):电路的作用是延迟一下控制方向的这个引脚

让数据电平先到达,然后控制方向的后到达.

和大家分析一下吧:

默认 UAER1_TX是高电平,经过两路反相器以后,74HC14的4引脚输出高电平

此时给电容充电.

 

然后开始发送数据

发送0的时候74HC14的6和4引脚以相同的时间输出低电平,

低电平信号已经给了485.

但是4引脚此时先给电容放电.等到74HC14认为1引脚是低电平以后

经过2输出高电平,把芯片置为输出状态,把0发送出去

 

发送1的时候74HC14的6和4引脚以相同的时间输出高电平,

高电平信号已经给了485.

但是4引脚此时先经过电阻给电容充电电.等到74HC14认为1引脚是高电平以后

经过2输出低电平,把芯片置为输入状态,所以可以看做把1发送了出去.

 

posted on 2020-10-01 01:22  广源时代  阅读(2995)  评论(1编辑  收藏  举报

导航

支付宝 QQ群