提到通讯协议,网上有很多种,关于HART,网上有各种说法,自己也是接到老师的项目之后才开始研究这个协议,下面跟大家分享一下自己的心得
网上都有相关的介绍,这里就来谈一下自己的理解,自己在做的工程中也感受到了hart的神奇
首先hart是建立在模拟电路与数字电路之间的通信协议,按照我自己的理解,有可能不对:
首先对比一下我们的uart协议:很明显数字电路之间的通信协议
然而当你使用hart的时候你会发现,这家伙竟然就只靠接在一个电阻两端就可以了,确实有点神奇,我也不懂具体的通信原理,这点就说明了hart的最有特色的地方(数字—-模拟)通信,这也是我们现在还在学习hart的原因吧
hart用来干什么?说白了就是,你用单片机跟一个模拟设备通信(通过hart协议)(既能读取到设备的信息,又能改变设备的一些设置)(这点是很厉害的)
这点是我学习hart协议最不明白的地方,网上大家太偏理论,完全搞不懂到底怎么通信,这里我来说一下自己开发过程中具体实现:
1、首先:hart是通过hart模块(实现单片机(我用的是STM32)和设备(我用的是罗斯蒙特的压力变送器)的通信)
2、怎样通信?,本质上类似uart,通过16进制数进行通信,这里先给大家看一段单片机发送给设备的16进制数:
主机到从机为短结构时,起始位为02,长帧时为82。
从机到主机的短结构值为06,长结构值为86
“突发”模式的短结构值为01,长结构为81
地址码:包含了主机地址和从机地址
短指令时:地址码由一个字节表示(如80),其结构为
要使用必须首先知道每个命令是干什么的?这里网上有很多,我这里也提供一份命令大全,需要的可以下载,每个命令对应着返回值,文档中说的很清楚返回值到底是那些,以什么样的格式返回的,自己可以好好看一下
这里我就说一下自己代码的思路,首先肯定是要先发送命令0给从机,然后等待从机的回应,收到回应后,需要对回应进行相应的解析,从此会返回厂商代码,自己的设备序列号 等,接下来的命令就要使用这些返回的结果进行长指令通信了,然后改变命令即可,在对不同的命令进行解析,就能获得自己想得到的信息
自己也是接触这个没多久,理解的不是很深,基本上就是上面的那些内容了,首先,这个模块的通信其实很简单,主要就是对协议的理解上,这里的贴一下自己使用的模块
VDD ------------- 3.3V
GND ------------- GND
RXD ------------- TXD
TXD ------------- RXD
RTS ------------- PA12(一个io配合软件即可(高电平时,hart模块处于解调模式,低电平模块处于调制模式))
OCD ------------- 可接可不接(目前没接)(OCD=1为输入信号幅度大于120mV,OCD=0表示输入信号幅度低于80mV,2mS内没有收到同类信号则返回默认状态)
RST ------------- 复位引脚(目前没接)
还有一个需要注意的点是:
调试阶段的软件,调试时串口调试工具的波特率要设为1200(程序中也要是这个),串口调试工具也不是哪一个都可以的,这个地方坑了我很久,最开始还怕是模块坏了,用一般的调试工具根本什么都不打印,我用的这个可以,也是在网上找了很久,后面大家可以下载,
下面是我的设置:
下面贴上自己看的一些很好的博客:
http://www.233.com/soft/wljs/wlxy/20100719/085244696.html
http://www.eetop.cn/blog/html/52/73252-48271.html
http://blog.csdn.net/linux_farmer/article/details/70238303
下面贴上自己的代码和调试工具,有需要的通讯下载一下:
调试工具:
http://download.csdn.net/detail/lixiaojie123123/9870618
命令大全(中文):
http://download.csdn.net/detail/lixiaojie123123/9870689
stm32,hart模块代码:
http://download.csdn.net/detail/lixiaojie123123/9870705