学习目的:
1、什么是485?
2、485如何通信?
3、如何使用熟能生巧?
RS485是一种四总线通信,分别是VCC、GND、485_A、485_B。两根负责通信,两根负责进行供电。
RS485通信
硬件层:解决的是数据传输问题,也就是如何将“0”和“1”传输到另外一端设备。
软件层:ModBus协议则是解决数据传输的含义和意义
那么单片机则是如何进行485通信的?
单片机需要进行485通信,则需要进行电平转换以及485驱动芯片,一般现在市面上有两种驱动芯片(隔离芯片、非隔离芯片),在进行设计电平转换方案也是有几种:
1、隔离电源+非隔离芯片+(高速)光耦隔离 成本低
2、隔离电源+隔离芯片 通信接口安全
通常485驱动芯片 VB > VA为“0”,反之VA > VB为“1”.其通信流程如下
因为在通信是采用的差分通信,则在两线制的485通信中,则只能进行单向传输,也就是半双工传输,不能进行同步双向传输。在半双工传输芯片中,一般会有RE和DE也就是控制485通信驱动芯片的传输方向,这部分则是485通信硬件层的解决。
ModBus协议: 主从通信 在半双工通信中可以一主多从(驱动芯片决定从机数量)
ModBus 通信:
通信机制: 主机轮询,从机应答的机制
1、系统中只有一个主机:主从通信
2、系统中的从机不可以主动的向主机发送数据
3、系统上电后所有的主从设备都应该处于监听总线的状态,也就是接收状态
4、如果想要发起一次通信,那么必须有主机主动发起通信(任何一次通信或数据交换必须有主机来发起)
主机想要发送则: 先将驱动芯片改为发送模式,在进行发送数据包。
立马转换为接收模式
地址码(通信地址):1-247
指定地址0的指令是广播指令,所有收到的设备都会运行但不会回复。
常用功能码: 01/05/15 03/06/16
例如:
更具体点分析如下:
06则是主机发送什么从机就应答什么。
而485通信断帧的时间大约10ms或者3ms,也就是超过时则认为这个数据包结束了。
那么通信协议的定制,可以使用别人定制好的,拿来改进行自己使用,如下:
在开发过程中需要制定RS485的通信协议:RS485 MODBUS-RTU等格式
开发辅助工具:ModBus Poil (主机) 、ModBus Slave(从机)
目前来看485协议不是很难,只要注意协议就行。