MODBUS_ASCII读取气体传感器数据(单总线)

前言 

MODBUS作为一种应用层协议被广泛应用于各种传感器驱动协议帧之中,其中modbus_rtu作为常见,其次是modbus_ascii和modbus_tcp,那么下面内容记录的是运用modbus协议读取传感器数据,调试和学习的过程。

modbus中文协议手册参考链接。

链接:https://pan.baidu.com/s/12ifOqr9vLRhWfxqbWQmWFw 
提取码:8y88

一:开发目标

利用uart实现“单总线”,定时通过modbus_ascii协议读取"SF6"气体传感器数据,通过“LORA”上报到服务器。

二:开发环境

开发环境IAR、芯片STM32L452(flash 512KB,RAM 160KB)、调试工具Stlink、USB-TTL、示波器等。

三:开发过程

1:查看传感器使用手册,选择一种驱动方式。下图是传感器引脚,给出三根线,VCC,GND,COM。COM口作为数据口,即要求使用“单总线”。

2:查看传感器使用手册,选择协议帧—UART_ASCII协议。Send作为主机端请求帧,Receive作为从机端回复帧。

3:查看STM32L452—MCU留出引脚,选择“UART”驱动方式。UART采用两根线TXD和RXD,与常规串口不同的是,UART作为单总线将TXD和RXD两线短接

四:调试过程

1:USB-TTL接入传感器,TXD和RXD短接并接入传感器COM端,通过串口调试助手配置指令“:0103000A0001AA”,点击发送。显示结果如下,由于TXD与RXD短接,所以RXD会收到来自TXD的 0103000A0001AA,:0103020001A表示传感器的数据,解析出来气体浓度就是0值。这样就说明传感器没问题了。

很简单,是不是,下面开始用MCU给传感器发送同样的帧。

2:MCU配置如下:

1:波特率2400,偶校验,数据位7位(STM32L452,uart字长配置为[M1,M0]=00,即1个起始位,8个数据位,1个停止位,看的仔细的同学可能发现数据位配置为8,因为8个数据位起始包括了数据位+偶校验,在接收到数据后数据的最高位为可能为1,所以有时候验证是否为校验位)。

2:MCU发送指令,结果如下,只能收到自己发的包,收不到传感器回复的包。

3:接下来就是分析该情况原因,为什么TTL-USB发请求传感器可收到回应,MCU发请求传感器不回复?

排查软件:查看串口配置,保证无误。TXD复用推挽输出,RXD上拉或浮空输入。字长[M1,M0] = 00,奇偶校验位使能,偶校验。发出的请求帧接TTL可以收,TTL发回来的帧MCU也可以收说明配置正确;

排查硬件:上示波器,思路是:MCU确保能正确发出也就是说传感器肯定可以收到,那么测试传感器是否发出回复帧即可,没发出表示传感器存在问题,没收到说明MCU存在问题。下左图是USB-TTL与传感器通讯存在两段波形,第一段波形是TXD与RXD短接,TXD发出的,第二段波形是传感器回复的,中间间隔大约20ms左右。下有图是MCU与传感器通讯波形,也存在两段波形,一段波形是TXD与RXD短接,TXD发出的,第二段波形是传感器回复的,作为MCU缺无法解析正确,原因是由于串口帧起始信号——从高电平到低电平,对于TTL来说,低电平范围[0,0.4v],很明显第二段波形低电平是1V多,因为MCU没解析。

     

原因分析:分析导致这种现象的原因,TTL发出请求帧后处于高电平,相当于RXD端接了一个VCC,意思就是说TXD电平时刻影响着RXD,那么解决方案就是消除TXD对RXD的影响。

方案解决:方案一,TXD发出请求帧后GPIO下低,尝试失败,原因在于下拉相当于RXD端接了一个GND;方案二,TXD发出请求帧后调整GPIO浮空,尝试失败,TXD依旧为高电平;原理可参考下图。

方案三,电路设计上将TXD直接断开,控制TXD使能端(硬件电路支持),结果成功。示波器抓取波形如下。RXD高电平是2.6V,被抬升到3.6V是由于TXD的原因,在断开TXD瞬间,RXD保持在2.6V左右,且可拉低到0V,即MCU可解析传感器出回复的波形数据。

五: 开发总结

通过串口驱动传感器检测某状态值,这种应用场景很常见,需要掌握的是常用的串口配置、协议帧等,在遇到问题时,借助示波器,逻辑分析仪等工具,利用控制变量法排除错误最有效。另外,上述内容有讲的不对的地方,还请指导改正,谢谢。

备注:改borad增加成本,最终采用了软件模拟UART方式(、只使用了一个GPIO口)进行数据收发,实现方式参考下面博客。

STM32F407普通IO口模拟串口实现不定长数据收发-CSDN博客

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值