RS485 通信
单总线协议的通讯过程是怎样的呢?
Modbus通信和RS485通信有哪些不同之处呢?
回帖(1)
2022-1-18 15:13:31
智能楼宇项目总结
模块
节点板(STM32F103R8T6):DHT11、MQ2、MQ135、热释电、光敏电阻、0.96oled、外部flash模块。
中控板(STM32F407ZET6):ESP8266、3.5寸TFTLCD屏、外部flash模块。
重要技术
RS485通信、MQTT通信协议、Modbus通信协议、GUI界面设计、SPI协议、单总线协议(1-wire)。
相关介绍(节点板一些相关的资料)
单总线协议(1-wire):
微处理器与 DHT11之间的通讯采用单总线通信,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数
部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据
+8bit校验和
数据传送正确时校验和数据等于
“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”
所得结果的末8位。
通讯过程:
流程如下
产生起始信号(空闲的时候要把总线拉高):
1)总线空闲状态为“高电平”,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。之后需要把总线变为空闲状态,让DHT11可以通知你。(电平的跳变通知DHT11,给DHT11一定的反应时间让它知道你要和它通信了)
2)DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us“低电平响应信号”。(DHT11知道你要和它通信,它告诉你它收到你的请求,可以和你通信了)
3)主机发送开始信号结束后,延时等待20-40us后, 读取DHT11的响应信号(你接收它告诉你的消息,看它是否可以和你通信(总线为低电平,说明DHT11发送响应信号,如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常),并等待它就绪)
4)等待DHT11释放总线(释放之后你就可以给它发消息了,DHT11发送响应信号后,再把总线
拉高80us,准备发送数据)
主机发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。
发送数据:
1)每一bit数据都以50us低电平时隙开始
2)高电平的长短定了数据位是0还是1.
3)当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
格式见下面图示.
数字0信号表示方法:
数字1信号表示方法:
RS485通信
Modbus和RS485在两个板之间都需要
RS485:
RS485多用于长距离传输的应用场景,大多数是在工业场景中,RS485电平逻辑采用差分电平,即传输数据至少需要两根信号线,根据两根信号线电压的差值来确定电平逻辑,发送端电平:
>+2V ~ +6V 代表逻辑1
<-2V ~ -6V 代表逻辑0
其他 无意义
接收端电平:
> +200mv 代表逻辑1
< -200mv 代表逻辑0
其他 无意义
RS485是半双工通信(485通信时用两根线进项通信,两根线的压差表示信号为高电平还是低电平,所以485为半双工通信,用两个线的压差来表示的0/1,其抗干扰能力会变强(差分信号抗干扰能力强))
TTL电平(数电有介绍):
目前我们熟知的单片机基本上都是使用的TTL电平的信号系统,这是计算机处理器控制的设备内部各部分之间通信的通信标准。
电平标准为:
输出:
大于2.4V 代表逻辑1
小于0.4V 代表逻辑0
输入:
小于0.8V 代表逻辑0
大于2V 代表逻辑1
其他 无意义
TTL电平输入脚悬空时是内部认为是高电平。要下拉的话应用1k以下电阻下拉。
TTL电平无法进行长距离传输,抗干扰能力弱,信号衰减较大。
TTL电平为逻辑电平而设计,基本用于板级通信,单片机基本上都使用TTL信号系统。
本项目选择RS485通信愿意之一就是为了增强抗干扰能力。
ModBus(简述):
MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议。
ModBus大致分为以下几种:
Modbus-RTU 本项目用的时这个协议(需要crc校验)
Modbus-ASCII
Modbus-TCP
modbus帧结构
帧结构 = 地址 + 功能码+ 数据 + 校验
地址: 占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)。
功能码:占用一个字节,功能码的意义就是,告诉从机主机想干啥
数据:它因不同的功能码及不同的从机而不同。数据区可以是实际数据、状态值、参考地址、数据长度等等。
校验:为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。
其他模块
MQ2、MQ135、光敏电阻用的是ADC模数转换。此处会用到DMA。
热释电通过一系列威廉希尔官方网站
将信号转换为0/1来判断是否有人。
oled通信方式有6800、 8080 两种并行通信、SPI 、IIC 通信,这里选用的是SPI通信。
外部flash(W25Q64):选用的是SPI通信,flash用来存储oled所需要的字库。
智能楼宇项目总结
模块
节点板(STM32F103R8T6):DHT11、MQ2、MQ135、热释电、光敏电阻、0.96oled、外部flash模块。
中控板(STM32F407ZET6):ESP8266、3.5寸TFTLCD屏、外部flash模块。
重要技术
RS485通信、MQTT通信协议、Modbus通信协议、GUI界面设计、SPI协议、单总线协议(1-wire)。
相关介绍(节点板一些相关的资料)
单总线协议(1-wire):
微处理器与 DHT11之间的通讯采用单总线通信,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数
部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据
+8bit校验和
数据传送正确时校验和数据等于
“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”
所得结果的末8位。
通讯过程:
流程如下
产生起始信号(空闲的时候要把总线拉高):
1)总线空闲状态为“高电平”,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。之后需要把总线变为空闲状态,让DHT11可以通知你。(电平的跳变通知DHT11,给DHT11一定的反应时间让它知道你要和它通信了)
2)DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us“低电平响应信号”。(DHT11知道你要和它通信,它告诉你它收到你的请求,可以和你通信了)
3)主机发送开始信号结束后,延时等待20-40us后, 读取DHT11的响应信号(你接收它告诉你的消息,看它是否可以和你通信(总线为低电平,说明DHT11发送响应信号,如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常),并等待它就绪)
4)等待DHT11释放总线(释放之后你就可以给它发消息了,DHT11发送响应信号后,再把总线
拉高80us,准备发送数据)
主机发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。
发送数据:
1)每一bit数据都以50us低电平时隙开始
2)高电平的长短定了数据位是0还是1.
3)当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
格式见下面图示.
数字0信号表示方法:
数字1信号表示方法:
RS485通信
Modbus和RS485在两个板之间都需要
RS485:
RS485多用于长距离传输的应用场景,大多数是在工业场景中,RS485电平逻辑采用差分电平,即传输数据至少需要两根信号线,根据两根信号线电压的差值来确定电平逻辑,发送端电平:
>+2V ~ +6V 代表逻辑1
<-2V ~ -6V 代表逻辑0
其他 无意义
接收端电平:
> +200mv 代表逻辑1
< -200mv 代表逻辑0
其他 无意义
RS485是半双工通信(485通信时用两根线进项通信,两根线的压差表示信号为高电平还是低电平,所以485为半双工通信,用两个线的压差来表示的0/1,其抗干扰能力会变强(差分信号抗干扰能力强))
TTL电平(数电有介绍):
目前我们熟知的单片机基本上都是使用的TTL电平的信号系统,这是计算机处理器控制的设备内部各部分之间通信的通信标准。
电平标准为:
输出:
大于2.4V 代表逻辑1
小于0.4V 代表逻辑0
输入:
小于0.8V 代表逻辑0
大于2V 代表逻辑1
其他 无意义
TTL电平输入脚悬空时是内部认为是高电平。要下拉的话应用1k以下电阻下拉。
TTL电平无法进行长距离传输,抗干扰能力弱,信号衰减较大。
TTL电平为逻辑电平而设计,基本用于板级通信,单片机基本上都使用TTL信号系统。
本项目选择RS485通信愿意之一就是为了增强抗干扰能力。
ModBus(简述):
MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议。
ModBus大致分为以下几种:
Modbus-RTU 本项目用的时这个协议(需要crc校验)
Modbus-ASCII
Modbus-TCP
modbus帧结构
帧结构 = 地址 + 功能码+ 数据 + 校验
地址: 占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)。
功能码:占用一个字节,功能码的意义就是,告诉从机主机想干啥
数据:它因不同的功能码及不同的从机而不同。数据区可以是实际数据、状态值、参考地址、数据长度等等。
校验:为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。
其他模块
MQ2、MQ135、光敏电阻用的是ADC模数转换。此处会用到DMA。
热释电通过一系列威廉希尔官方网站
将信号转换为0/1来判断是否有人。
oled通信方式有6800、 8080 两种并行通信、SPI 、IIC 通信,这里选用的是SPI通信。
外部flash(W25Q64):选用的是SPI通信,flash用来存储oled所需要的字库。
举报
更多回帖