Arduino ATMega328开发板RS485通信协议
多路温度(AD)采集4路晶体管输出 485通讯串口通信
多路(6路) 0-1V 0-5V 0-10V 模拟量采集板,多路场管输出 485通讯串口通信
本采集卡模块采集了ATMega328单片机,它工作可靠性能稳定。在Arduino的开发环境下,可以轻松的用C语言完成自己设定的功能。工作电压兼容12V或24V。可以实现6路的AI模拟量采集和四路的2A电流负载输出能力。使用了RS485串行通信。
可以实现6路的模拟量采集。通过串口发送相应的命令可以设置采集电压0-1V或0-5V,用户的采集电压范围设置将永远的存储在EEPROM中,断电仍然保存。通过调整焊接在板子上的采样分压电阻可以扩展采集电压范围到(咨询特价)V。用户还可以切换OUT1为PWM输出模尸在PWM模式下为固定频率500hz。可以设置板子的上电状态为默认关断状态,或是由用户指定的状态。由于使用了Arduino ATMega328,这款单片机的模拟采集精度高,工作稳定。
注意:模拟的输出电源AP5V不能超过100mA的负载输出。如果须要更大的输出能力请先说明。电源不可接反,否则可能烧坏采集板卡。
注意:定制采集卡请说明须要采集的电压范围,默认可采集范围是0-1V或0-5V可通过软件配置在EEPROM中,同样可配置上电后的输出状态。
附带Arduino电路板图脂Arduino源代码,LabVIEW串口采集与配置实例。
使用串口通信:
RS485
波特率 (咨询特价)
数字位 8位
奇偶校验 无
停止位 1
每条数据长度为固定的8字节长度。命令格式如下:
起始位 | 地址位 | 命令位 | 数据1 | 数据2 | 校验和 |
1字节 | 1字节 | 1字节 | 2字节 | 2字节 | 1字节 |
非常优秀H | 01H | 见说明 | (咨询特价)H | (咨询特价)H | XX见说明 |
通信命令说明:
本通讯协议规定:每个报文的启始字节均为非常优秀H。但是启始字节本身对于识别报文的启动是不充分的,因为非常优秀H本身可能是报文中除启始字节外的其它数据。因此本协议在启始字节前定义了一个至少4个字节传输时间的启动间隔,启动间隔时间为工作报文的一部分。
地址位
固定为01H,代表通信对象为这个FPGA。地址位要定义为常量,方便修改。这样方便扩展下位机硬件。如果上位机发来的数据不是本机的地址,则本机不必做出任何响应。地址位定义为常量,方便修改。如须要定制采集板卡,我可以帮助修改为其它地址。默认地址01。
命令位:
读回模拟量值代码01 - 03、四路输出控制A0:
它指定了Arduino功能块的地址,命令01为读回IN1和IN2两个通道模拟量输入的值,命令02为读回IN3和IN4两个通道模拟量输入的值,命令03为读回IN5和IN6两个通道模拟量输入的值.
A0为控制四路开关量输出的命令,配合数据位实现控制四路开关量的开关功能。
帧尾(校验和)
数据含义:数据帧校验和计算结果。
数据类型:16进制,单字节。
计算方法:用一个八位的加法器,相加上位机发送过来的八字节数据中的前7位,从非常优秀开始加到数据2结束。相加的和等于八字节中的非常后一字节,则校验正确,数据可以使用,并返回一个工作正常的命令,如果校验不正确则返回校验错误的指令。
通讯规则
⑴ 主机设计为三次握手呼叫过程,通讯失败或通讯故障后,主机非常多可以对当前的报文重发3次。(这与FPGA无关,你不须要考虑。)
⑵ 数据帧之间要保证有4个字节以上的启动间隔时间,只有具备规定的启动间隔时间的报文被识别时才有效。从机一帧内各字节连续发送,无间隔时间。发送一帧数据所需时间依波特率而定。(这点很重要,必须要做到。但对启动时间间隔要求不严格。)
⑶ 主机握手等待时间和变频器非常长响应时间为8字节传输时间,超时则判定为通讯失败。(重要,但对时间要求不严)
主机命令帧
主机命令与从机返回的数据格式相同。
启始字节 | 从机地址 | 主机命令 | 数据1 | 数据2 | 校验 |
非常优秀H | 01H | xx | (咨询特价)H | (咨询特价)H | xx |
1 | 1 | 1 | 2 | 2 | 1 |
帧 头 | 命令 | 数据 | 帧尾 | ||
用户数据 |
从机响应帧
主机命令与从机返回的数据格式相同
从机(FPGA)发送的数据报文叫从机响应帧,其格式示意如下表:
使用范例
范例1:
让地址为01的采集板卡,四路开关量输出为关闭状态 则发送:
非常优秀H,01H,A0H,00H,00H,00H,00H,FBH
计算方法:把从“启始字节”到“用户数据”全部字节连续累加。不计校验位本身。校验和取累加和除以256的余数,也就是你程序中做一个8位加法器,超出8位的的进位不算的加后结果。校验和错误说明通信错误。
其校验和计算方法:(非常优秀+01+A0+00+00+00+00+00) / 256= 0xFB / 256所得余数0xFB。
上位发送上面的命令后,下位机如工作正常则返回
非常优秀H,01H,A0H,00H,00H,00H,00H,FBH
范例2:
让地址为01的采集板卡,四路开关量输出为打开状态 则发送:
非常优秀H,01H,A0H,00H,00H,00H,0FH,0AH
上位发送上面的命令后,下位机如工作正常则返回
非常优秀H,01H,A0H,00H,00H,00H,0FH,0AH
返回与上位机的请求命令相同。
范例3:
读回IN1和IN2两个模拟量输入通道的值,则上位机发送命令:
非常优秀H,01H,01H,00H,00H,00H,00H,5CH
上位发送上面的命令后,下位机如工作正常则返回
非常优秀H,01H,01H,04H,D2H,13H,88H,CDH
数据位1的十六进制值为04H,D2H,转为十进制值为(咨询特价),除以(咨询特价)后得到电压值。
数据位2的十六进制值为13H,88H,转为十进制值为(咨询特价),除以(咨询特价)后得到电压值。
表示从下位机地址01返回 很不错通道的电压为(咨询特价)4V第二通道的电压为(咨询特价)0V
对于其它的任何错误不与回复。
范例4:
设置启动状态模拟输出为PWM状态,设置OUT1的占空比((咨询特价)5) :
非常优秀H,01H,B1H,00H,00H,00H,FEH,0AH
启动后OUT1输出为的高占空比
非常优秀01 B100 0000 AAB6
范例5:
设置模拟量输入AI测量范围为0-5V,则上位机发送命令:
非常优秀H,01H,C1H,00H,00H,00H,00H,1CH
设置模拟量输入AI测量范围为0-1V,则上位机发送命令:
非常优秀H,01H,C1H,00H,00H,00H,01H,1DH
范例6:
设置启动状态为4路数字开关量输出状态 :非常优秀01 A100 0000 (咨询特价)
非常优秀H,01H,A1H,00H,00H,00H,0AH,06H
输出0AH,即二进制(咨询特价),对应OUT1输出关断,OUT2输出打开,OUT3输出关断,
OUT4输出打开。
范例7:
设置启动状态为4路数字开关量输出状态 :
非常优秀H,01H,D1H,00H,00H,00H,00H,2CH
上电后四路输出为默认的关断状态。
非常优秀H,01H,D1H,00H,00H,00H,01H,2DH
上电后四路输出为用户设置状态。
范例8:
设置所有参数为默认值,:
非常优秀H,01H,00H,00H,00H,00H,00H,5BH
默认上电为四路开关量的低电平输出,
从上截图可以看出这块板在0-1V采集时,分辨率达到了1mV,不跳动,非常稳定。