HART协议理解

HART协议理解

提到通讯协议,网上有很多种,关于HART,网上有各种说法,自己也是接到老师的项目之后才开始研究这个协议,下面跟大家分享一下自己的心得

  • 我将从以下几个方面来介绍hart 协议
  • 1、hart协议主要是用来干什么?
  • 2、hart协议通信原理
  • 3、具体怎么使用
  • 4、程序和代码
  • 5、心得体会

1、hart协议主要是用来干什么?

网上都有相关的介绍,这里就来谈一下自己的理解,自己在做的工程中也感受到了hart的神奇
首先hart是建立在模拟电路与数字电路之间的通信协议,按照我自己的理解,有可能不对:
首先对比一下我们的uart协议:很明显数字电路之间的通信协议
然而当你使用hart的时候你会发现,这家伙竟然就只靠接在一个电阻两端就可以了,确实有点神奇,我也不懂具体的通信原理,这点就说明了hart的最有特色的地方(数字—-模拟)通信,这也是我们现在还在学习hart的原因吧
hart用来干什么?说白了就是,你用单片机跟一个模拟设备通信(通过hart协议)(既能读取到设备的信息,又能改变设备的一些设置)(这点是很厉害的)

2、hart协议通信原理

这点是我学习hart协议最不明白的地方,网上大家太偏理论,完全搞不懂到底怎么通信,这里我来说一下自己开发过程中具体实现:
1、首先:hart是通过hart模块(实现单片机(我用的是STM32)和设备(我用的是罗斯蒙特的压力变送器)的通信)
2、怎样通信?,本质上类似uart,通过16进制数进行通信,这里先给大家看一段单片机发送给设备的16进制数:

FF FF FF FF FF FF 02 80 00 00 82

以上就是一段单片机首先要跟设备发送的命令,接下来我们来解析一下
FF FF FF FF FF 02 80 00 00 82
先导码 短指令 地址0 命令0 0个数据 异或校验位

第一条指令是所有支持hart协议的设备都要懂得
先导码:就是一段命令的开始,一般都是5个FF
指令码:此处02表示的是告诉设备我现在发送过去的是一条短指令
当然还有其他的指令结构:

        主机到从机为短结构时,起始位为02,长帧时为82。
        从机到主机的短结构值为06,长结构值为86            
        “突发”模式的短结构值为01,长结构为81             

地址码:包含了主机地址和从机地址
短指令时:地址码由一个字节表示(如80),其结构为

短指令

一般我们不用到突发模式,这里的80表示的就是(主机1—-设备地址(0))
长指令时:地址码由5个字节表示,其结构为
长指令

命令码:如00表示的是命令0,这里的命令设备能够识别从而做出相应的响应
数据个数码:表示的是再次之后的第一个数——最后一个(不包括校验位)的个数,这一位很重要,在编程的时候,我们经常用这个来调用数值
响应吗:只存在于从机—主机的过程中(从机对主机的响应)
校验码:此码主要是用来确保传输没有问题用的,采用的是异或校验(自己可以去百度一下异或校验的意思)(这一位都是根据前面的数值锁确定的)
各种码都讲了一遍,现在我贴上几张自己试验获得的码,大家可以对着分析一下:
FF FF FF FF FF 82 A6 06 63 56 BA 01 00 AC
FF FF FF FF FF 82 A6 06 63 56 BA 02 00 AF

3、具体怎么使用

要使用必须首先知道每个命令是干什么的?这里网上有很多,我这里也提供一份命令大全,需要的可以下载,每个命令对应着返回值,文档中说的很清楚返回值到底是那些,以什么样的格式返回的,自己可以好好看一下

4、程序和代码

这里我就说一下自己代码的思路,首先肯定是要先发送命令0给从机,然后等待从机的回应,收到回应后,需要对回应进行相应的解析,从此会返回厂商代码,自己的设备序列号 等,接下来的命令就要使用这些返回的结果进行长指令通信了,然后改变命令即可,在对不同的命令进行解析,就能获得自己想得到的信息

5、心得体会

自己也是接触这个没多久,理解的不是很深,基本上就是上面的那些内容了,首先,这个模块的通信其实很简单,主要就是对协议的理解上,这里的贴一下自己使用的模块

HART协议理解_第1张图片

这个模块淘宝上有,需要注意一点的就是他的RTS的引脚,我的接法如下:
…………….. hart模块——————- 单片机

       VDD     -------------   3.3V
       GND     -------------   GND
       RXD     -------------   TXD
       TXD     -------------   RXD
       RTS     -------------   PA12(一个io配合软件即可(高电平时,hart模块处于解调模式,低电平模块处于调制模式))
       OCD     -------------   可接可不接(目前没接)(OCD=1为输入信号幅度大于120mV,OCD=0表示输入信号幅度低于80mV,2mS内没有收到同类信号则返回默认状态)
       RST     -------------   复位引脚(目前没接)

还有一个需要注意的点是
调试阶段的软件,调试时串口调试工具的波特率要设为1200(程序中也要是这个),串口调试工具也不是哪一个都可以的,这个地方坑了我很久,最开始还怕是模块坏了,用一般的调试工具根本什么都不打印,我用的这个可以,也是在网上找了很久,后面大家可以下载,
下面是我的设置:

uart与hart通信
波特率:1200
校验位:奇校验
发送数据位:9
停止位:1

基本上就这些了,单片机本质上是通过uart跟hart模块通信,然后hart模块与设备通信,还有不是很清楚的可以留言问我

下面贴上自己看的一些很好的博客:
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

你可能感兴趣的:(stm32)