0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用FPGA和RS485进行工业通信

科技观察员 来源:亚当泰勒 作者:亚当泰勒 2022-05-26 17:43 次阅读

工业应用中传输信息可能具有挑战性。在这个项目中,让我们看看我们如何使用FPGARS485做到这一点。

poYBAGKPS1SAIDI3AAb1bJMfsJE486.png

项目背景:

许多FPGA部署在工业环境中,用于控制流程、驱动器、执行器和传感器

用于与这些传感器、执行器和驱动器接口的协议非常多样化,尽管时间敏感网络正在改变这一点。虽然有许多不同的协议,例如Modbus、Profibus和EtherCat。其中许多协议都基于常见的物理层,例如EIA/RS485、EIA/RS422以太网

许多接口的关键要求之一是能够在嘈杂的工业环境中以物理层中的低链路误码率运行。EIA/RS485和EIA/RS422都是差分物理层,它们提供强大的多点接口,能够进行双向(EIA/RS485)或单向(EIA/RS422)通信

有许多应用层协议可以使用这些物理层来实现。在这个项目中,我们将研究使用RS485Pmod和定制的应用层协议将两个MiniZed连接在一起。

硬件部件

安富利MiniZed×1

DigilentPmodRS485×2

软件应用程序和在线服务

AMD-XilinxVivado设计套件

AMD-XilinxVitis统一软件平台

应用层

实现的自定义通信协议将使主MiniZed能够从从MiniZed内的16位地址空间读取或写入32位字。对于这个项目,我们将从从站中的BRAM读取和写入。然而,这个BRAM可能被从MiniZed上收集数据的传感器填充。

数据将使用UART通过RS485链路发送,数据包包含多个UART传输

写入的格式是

《STX》《ADDRMSB》《ADDRLSB》《DataMSB》《Data》《Data》《DataLSB》

从机将以单字节ACK或NACK响应写入

读取的格式是

《ENQ》《ADDRMSB》《ADDRLSB》

MiniZed从站的读取响应将是

《SOH》《ADDRMSB》《ADDRLSB》《DataMSB》《Data》《Data》《DataLSB》

SOH、STX、ENQ、ACK和NACK在ASCII表中定义

当然,这个协议可以在像ZYNQ这样的处理器中使用UART来实现,以使协议具有可扩展性。我为UART、ProtocolMaster和ProtocolSlave创建了自定义RTL模块。

由于RS485在同一双绞线上是定向的,因此协议必须仅在准备好发送时启用RS485发送器,以减少多个发送器尝试同时发送时总线上的争用可能性。

MiniZedMaster

MiniZedMaster设计将使用PS内核通过RS485接口发送和接收数据。这将使链路能够被测试,因为数据应该能够通过链路写入,然后以不同的顺序从MiniZed从站中的块RAM中读回。

poYBAGKPS06AbezsAAEfp7OWEPs531.png

该设计使用连接到协议主模块的AXIGPIO模块来驱动协议主模块的接口要求。这包括地址、数据和读或写操作。结果提供了从中读取的地址和读取的数据。

为了能够调试应用程序,我还包括了几个ILA,帮助理解系统行为。

在MinizedMaster上运行的软件应用程序是

#include

#include "platform.h"
#include "xil_printf.h"
#include "xgpio.h"

#define DATA_ADDR XPAR_GPIO_0_DEVICE_ID
#define VALID_RW XPAR_GPIO_1_DEVICE_ID
#define DATA_BCK XPAR_GPIO_2_DEVICE_ID
#define DATA_VALID_CH 1
#define ADDR_RW_CH 2

XGpio Gpio1;
XGpio Gpio2;
XGpio Gpio3;

int count = 0;

int main()
{
init_platform();

XGpio_Initialize(&Gpio1, DATA_ADDR);
XGpio_Initialize(&Gpio2, VALID_RW);
XGpio_Initialize(&Gpio3, VALID_RW);

while(1){

u32 rd_data, rd_addr;
//write

XGpio_DiscreteWrite(&Gpio1, DATA_VALID_CH, count );
XGpio_DiscreteWrite(&Gpio1, ADDR_RW_CH, 0x5001);
XGpio_DiscreteWrite(&Gpio2, ADDR_RW_CH, 0x0);
XGpio_DiscreteWrite(&Gpio2, DATA_VALID_CH, 0x1);
XGpio_DiscreteWrite(&Gpio2, DATA_VALID_CH, 0x0);

usleep(1000);
//read
XGpio_DiscreteWrite(&Gpio1, ADDR_RW_CH, 0x5001);
XGpio_DiscreteWrite(&Gpio2, ADDR_RW_CH, 0x1);
XGpio_DiscreteWrite(&Gpio2, DATA_VALID_CH, 0x1);
XGpio_DiscreteWrite(&Gpio2, DATA_VALID_CH, 0x0);
usleep(10000);

rd_data = XGpio_GetDataDirection(&Gpio3, 1);

rd_data = XGpio_DiscreteRead(&Gpio3, 1);
rd_addr = XGpio_DiscreteRead(&Gpio3, 2);

if(rd_data != count){
printf("read back not correct %d, %d \n\r", rd_data, count);
}

usleep(1000000);
count++;

}
cleanup_platform();
return 0;
}
MiniZedSlave

MiniZedSlave使用PS模块为逻辑设计提供时钟。协议从站连接一个BRAM,该BRAM存储通过通信链路提供的数据。

poYBAGKPS0eAd7ibAAEshq4aCL4964.png

MiniZedSlave的这个实现不需要软件,只需要ProtocolSlave、UART和BRAM。与MiniZedMaster一样,PS为模块提供时钟。

普通XDC

MiniZedMaster和Slave都使用MiniZed上的Pmod1连接到RS485Pmod。因此,两者的XDC文件是相同的。

set_property IOSTANDARD LVCMOS33 [get_ports {re[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports de]
set_property IOSTANDARD LVCMOS33 [get_ports rx]
set_property IOSTANDARD LVCMOS33 [get_ports tx]
set_property PACKAGE_PIN L15 [get_ports {re[0]}]
set_property PACKAGE_PIN M14 [get_ports de]
set_property PACKAGE_PIN L14 [get_ports rx]
set_property PACKAGE_PIN M15 [get_ports tx]

为RS485总线接线

RS484总线非常简单,但我们确实需要正确连接Pmod,如DigilentPmodRS485参考指南中所示。

pYYBAGKPS0SAV_QuAADz05d5Jbs994.png

RS485端子的两端需要用一个电阻端接,在PmodRS485上可以使用跳线安装或不安装。对于此应用,需要安装两个电阻器

pYYBAGKPS0CALSwbAAeBBZ5mPC0323.png

接线时,请小心为Pmod上的接收器连接回路。

硬件测试

使用在MiniZed主机上运行的软件应用程序,我们可以读取和写入MiniZed从机中的BRAM内存。然而,要了解它是如何工作的,我们最好通过查看总线上的波形来学习

逻辑TX引脚上来自主机的写入传输如下所示

poYBAGKPSzuAKfeEAAGD_C429oU289.png

相应的总线端如下所示-请注意末尾的0x06是确认。

poYBAGKPSzeAFmbsAAGVG5bZfOk363.png

主机上的逻辑RX信号上的RX引脚显示写入和写入确认。MiniZedMaster和Slave的设计都永久启用了RX

pYYBAGKPSzOAS6ORAAGbEJykJGk335.png

从MiniZedSlave读取的数据如下所示,其中数据表示由MiniZedMaster写入的递增计数。

poYBAGKPSzCAFa-uAAGB87Hlq0g251.png

在下面的波形中,可以在读取响应之前在总线侧观察到读取请求。

pYYBAGKPSyuAJ59QAAGvXMklh98435.png

TX启用相对于TX数据的时序如下所示,请注意我们如何在预期回复时禁用TX路径。

poYBAGKPSyeANvLRAAGpvhlLHYc809.png

探测MiniZedMaster和Slave上的不同TX使能显示了

poYBAGKPSyOAChIvAAFzkEuDp64620.png

结论

FPGA为许多工业应用提供了很好的解决方案,该项目展示了使用常用工业接口连接不同板和传输数据是多么容易。在这个应用程序中,数据速率为1Mb/s,可以实现高达16Mb/s或更快的线速率!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21736

    浏览量

    603260
  • RS485
    +关注

    关注

    39

    文章

    1159

    浏览量

    82319
  • 工业通信
    +关注

    关注

    0

    文章

    122

    浏览量

    15549
收藏 人收藏

    评论

    相关推荐

    RS485原理解析和应用

    RS485一、RS485 通信----简介RS485 是美国电子工业协会(Electronic Industries Association
    的头像 发表于 04-17 10:44 4559次阅读
    <b class='flag-5'>RS485</b>原理解析和应用

    RS485通信原理是什么?RS485应用存在哪些问题?

    RS485特点是什么?RS485通信原理是什么?RS485应用存在哪些问题?
    发表于 05-20 06:06

    基于FPGARS485通信接口设计

    介绍RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,该标准由电信行业协会和电子工业联盟定义。使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。
    发表于 07-26 06:21

    RS485通信硬件实现

    阅读目录1、RS485简介 2、RS485特性3、RS485通信硬件实现4、RS485通信软件实
    发表于 08-19 08:20

    如何实现基于FPGARS485通信接口设计

    RS485是什么?如何实现基于FPGARS485通信接口设计?
    发表于 09-28 07:53

    RS485通信与Modbus协议的相关资料分享

    文章目录RS485 通信与 Modbus 协议单片机 RS485 通信接口、控制线、原理图及程序实例RS485
    发表于 11-30 07:31

    RS485是什么?RS485通信的特点有哪些

    RS485简介485(一般称作 RS485/EIA-485)是隶属于 OSI 模型物理层的电气特性规定为 2 线,半双工,多点通信的标准。它
    发表于 01-14 07:54

    单片机如何和RS485设备进行通信

    RS485是什么?有何特点?单片机如何和RS485设备进行通信呢?需要注意什么?
    发表于 02-23 06:40

    提高RS485总线通信速度的设计

    介绍一种通信总线RS485主从通信方式,提高RS485总线采集速度的方法,该方法解决了主从式通信慢的缺点,提高
    发表于 04-12 00:37 44次下载
    提高<b class='flag-5'>RS485</b>总线<b class='flag-5'>通信</b>速度的设计

    RS485通信电缆选型经验值推荐

    RS485通信电缆选型经验值推荐:关于RS485通信电缆长度和电缆截面积的对应,在传输速率9600bps及以下,经验值有如下的推荐:工业自动
    发表于 09-03 08:27 148次下载

    RS485通信协议

    RS485通信协议 、RS485 通信协议1.概述C320 系列变频器提供标准RS485 通信
    发表于 04-07 17:26 89次下载

    RS485总线接口电路

    RS485总线接口电路     测试仪通过RS485工业总线与PC机进行通信,其硬件接口电路如图5所示。
    发表于 05-13 11:59 3736次阅读
    <b class='flag-5'>RS485</b>总线接口电路

    PLC的RS485通信口设计

    三菱FX plc一般不带RS485通信口,如果要与变频器进行RS485通信,须给PLC安装FX2N-48
    发表于 07-20 15:07 2817次阅读

    rs485转tcp网关盒子怎么用(rs485协议转以太网tcp/ip)

    随着工业自动化技术的不断发展,越来越多的工业设备在使用时需要进行数据通信。其中,RS485通信协议是一种常见的
    的头像 发表于 05-05 15:50 3257次阅读
    <b class='flag-5'>rs485</b>转tcp网关盒子怎么用(<b class='flag-5'>rs485</b>协议转以太网tcp/ip)

    RS485工业通信网关的原理是什么?

    一、引言 随着工业自动化技术的飞速发展,工业通信网关作为连接各种设备和系统的关键节点,发挥着越来越重要的作用。RS485工业
    的头像 发表于 05-27 17:32 476次阅读