我们都知道在现实应用中,各种控制器之间需要进行数据交换,而大部分的数据交换都是通过
串行通信实现的。如今,串行通信已经发展的比较成熟,如RS232,RS
485,CAN,SPI,IIC,USB等都是常见的串行通信技术。
RS232的通信协议与微控制器uart串口通信协议(我们常说的“数据链路层”)一致,只是电平在‘0’,‘1’的定义上(我们常说的“物理层”)有所差别。uart中端口对GND低电平代表‘0’,端口对GND高电平(+5V)代表‘1’,而RS232中用-15V~-3V代表逻辑1,3V~15V代表逻辑0。物理层对逻辑0,1电压的限制比较高,同时是单线电平信号,抗干扰能力表弱,不适用与长距离通信。虽然uart支持多机通信,但是RS232一般用在短距离点对点通信的应用场合(可能是通信距离短组建不了多机通信网络吧)。
RS485是应用在多机通信应用比较多的通信方式。在工业控制中,RS485的“数据链路层”也是基于Uart上的,只不过在“物理层”的逻辑‘0’,‘1’定义上是采用差分信号的。RS485一般有AB两根线,当A-B=2V~6V为逻辑1,A-B=-2V~-6V为逻辑0。由于RS485采用差分信号传输数据,抗干扰能力强,传输距离远。由RS485协议组建的多机通信网络中,一般有一个主机,N(N<31)个从机构成。由于只有两个差分信号线为通信线,所以RS485通信是半双工的,从机不能主动提出发送请求,需要主机轮询到该从机的时候,该从机才能进行数据发送。
Can总线技术是另一类多机串行通信技术。CAN通信技术可以组建多达110多个点的多点通信网络。这里插入一份开放系统互连模型的分层定义表。
Can总线的在物理层与RS485类似,也是采用两根数据线CANH,CANL传输差分信号,CANH-CANL=0代表隐性(相当于逻辑1),CANH-CANL有一个比较大的差值时代表显性(相当于逻辑0)。具体数据链路层的定义与RS485有着比较大的差别,CAN总线是采用发送报文的形式进行数据传输的,每一报文里都包含有11位或者29位的标识码作为发送起始帧。can总线采用的是位仲裁机制,当一个点发送占用总线发送标识码后改点会检测总线的状态,如果发送的为隐性位,而检测到总线为显性位,说明有其他点发送更高优先级标识码,这个点会自动退出发送状态,将总线让给发送高优先级标识码的点。从这里我们可以发现,标识码越小优先级越高的特点。Can总线技术相对RS485技术具有很多优点:1。CAN总线上所有点都可以是主机,只要总线空闲可在任意时刻向总线发送数据(内部具有总线冲突仲裁机制),增加数据通信的实时性。2.通信距离远,组件网络比较大,通信速度快。目前用专用的CAN通信控制器实现CAN通信,有些高档的MCU也具备CAN通信模块。