0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用FPGA和RS485進行工業(yè)通信

科技觀察員 ? 來源:亞當(dāng)泰勒 ? 作者:亞當(dāng)泰勒 ? 2022-05-26 17:43 ? 次閱讀

工業(yè)應(yīng)用中傳輸信息可能具有挑戰(zhàn)性。在這個項目中,讓我們看看我們?nèi)绾问褂?a target="_blank">FPGARS485做到這一點。

poYBAGKPS1SAIDI3AAb1bJMfsJE486.png

項目背景:

許多FPGA部署在工業(yè)環(huán)境中,用于控制流程、驅(qū)動器、執(zhí)行器和傳感器。

用于與這些傳感器、執(zhí)行器和驅(qū)動器接口的協(xié)議非常多樣化,盡管時間敏感網(wǎng)絡(luò)正在改變這一點。雖然有許多不同的協(xié)議,例如Modbus、Profibus和EtherCat。其中許多協(xié)議都基于常見的物理層,例如EIA/RS485、EIA/RS422以太網(wǎng)

許多接口的關(guān)鍵要求之一是能夠在嘈雜的工業(yè)環(huán)境中以物理層中的低鏈路誤碼率運行。EIA/RS485和EIA/RS422都是差分物理層,它們提供強大的多點接口,能夠進行雙向(EIA/RS485)或單向(EIA/RS422)通信。

有許多應(yīng)用層協(xié)議可以使用這些物理層來實現(xiàn)。在這個項目中,我們將研究使用RS485Pmod和定制的應(yīng)用層協(xié)議將兩個MiniZed連接在一起。

硬件部件

安富利MiniZed×1

DigilentPmodRS485×2

軟件應(yīng)用程序和在線服務(wù)

AMD-XilinxVivado設(shè)計套件

AMD-XilinxVitis統(tǒng)一軟件平臺

應(yīng)用層

實現(xiàn)的自定義通信協(xié)議將使主MiniZed能夠從從MiniZed內(nèi)的16位地址空間讀取或?qū)懭?2位字。對于這個項目,我們將從從站中的BRAM讀取和寫入。然而,這個BRAM可能被從MiniZed上收集數(shù)據(jù)的傳感器填充。

數(shù)據(jù)將使用UART通過RS485鏈路發(fā)送,數(shù)據(jù)包包含多個UART傳輸

寫入的格式是

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

從機將以單字節(jié)ACK或NACK響應(yīng)寫入

讀取的格式是

《ENQ》《ADDRMSB》《ADDRLSB》

MiniZed從站的讀取響應(yīng)將是

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

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

當(dāng)然,這個協(xié)議可以在像ZYNQ這樣的處理器中使用UART來實現(xiàn),以使協(xié)議具有可擴展性。我為UART、ProtocolMaster和ProtocolSlave創(chuàng)建了自定義RTL模塊。

由于RS485在同一雙絞線上是定向的,因此協(xié)議必須僅在準(zhǔn)備好發(fā)送時啟用RS485發(fā)送器,以減少多個發(fā)送器嘗試同時發(fā)送時總線上的爭用可能性。

MiniZedMaster

MiniZedMaster設(shè)計將使用PS內(nèi)核通過RS485接口發(fā)送和接收數(shù)據(jù)。這將使鏈路能夠被測試,因為數(shù)據(jù)應(yīng)該能夠通過鏈路寫入,然后以不同的順序從MiniZed從站中的塊RAM中讀回。

poYBAGKPS06AbezsAAEfp7OWEPs531.png

該設(shè)計使用連接到協(xié)議主模塊的AXIGPIO模塊來驅(qū)動協(xié)議主模塊的接口要求。這包括地址、數(shù)據(jù)和讀或?qū)懖僮鳌=Y(jié)果提供了從中讀取的地址和讀取的數(shù)據(jù)。

為了能夠調(diào)試應(yīng)用程序,我還包括了幾個ILA,幫助理解系統(tǒng)行為。

在MinizedMaster上運行的軟件應(yīng)用程序是

#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模塊為邏輯設(shè)計提供時鐘。協(xié)議從站連接一個BRAM,該BRAM存儲通過通信鏈路提供的數(shù)據(jù)。

poYBAGKPS0eAd7ibAAEshq4aCL4964.png

MiniZedSlave的這個實現(xiàn)不需要軟件,只需要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上可以使用跳線安裝或不安裝。對于此應(yīng)用,需要安裝兩個電阻器。

pYYBAGKPS0CALSwbAAeBBZ5mPC0323.png

接線時,請小心為Pmod上的接收器連接回路。

硬件測試

使用在MiniZed主機上運行的軟件應(yīng)用程序,我們可以讀取和寫入MiniZed從機中的BRAM內(nèi)存。然而,要了解它是如何工作的,我們最好通過查看總線上的波形來學(xué)習(xí)

邏輯TX引腳上來自主機的寫入傳輸如下所示

poYBAGKPSzuAKfeEAAGD_C429oU289.png

相應(yīng)的總線端如下所示-請注意末尾的0x06是確認。

poYBAGKPSzeAFmbsAAGVG5bZfOk363.png

主機上的邏輯RX信號上的RX引腳顯示寫入和寫入確認。MiniZedMaster和Slave的設(shè)計都永久啟用了RX

pYYBAGKPSzOAS6ORAAGbEJykJGk335.png

從MiniZedSlave讀取的數(shù)據(jù)如下所示,其中數(shù)據(jù)表示由MiniZedMaster寫入的遞增計數(shù)。

poYBAGKPSzCAFa-uAAGB87Hlq0g251.png

在下面的波形中,可以在讀取響應(yīng)之前在總線側(cè)觀察到讀取請求。

pYYBAGKPSyuAJ59QAAGvXMklh98435.png

TX啟用相對于TX數(shù)據(jù)的時序如下所示,請注意我們?nèi)绾卧陬A(yù)期回復(fù)時禁用TX路徑。

poYBAGKPSyeANvLRAAGpvhlLHYc809.png

探測MiniZedMaster和Slave上的不同TX使能顯示了

poYBAGKPSyOAChIvAAFzkEuDp64620.png

結(jié)論

FPGA為許多工業(yè)應(yīng)用提供了很好的解決方案,該項目展示了使用常用工業(yè)接口連接不同板和傳輸數(shù)據(jù)是多么容易。在這個應(yīng)用程序中,數(shù)據(jù)速率為1Mb/s,可以實現(xiàn)高達16Mb/s或更快的線速率!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21620

    瀏覽量

    601234
  • RS485
    +關(guān)注

    關(guān)注

    39

    文章

    1135

    瀏覽量

    82071
  • 工業(yè)通信
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    15528
收藏 人收藏

    評論

    相關(guān)推薦

    RS485原理解析和應(yīng)用

    RS485一、RS485 通信----簡介RS485 是美國電子工業(yè)協(xié)會(Electronic Industries Association
    的頭像 發(fā)表于 04-17 10:44 ?3778次閱讀
    <b class='flag-5'>RS485</b>原理解析和應(yīng)用

    RS485通信原理是什么?RS485應(yīng)用存在哪些問題?

    RS485特點是什么?RS485通信原理是什么?RS485應(yīng)用存在哪些問題?
    發(fā)表于 05-20 06:06

    基于FPGARS485通信接口設(shè)計

    介紹RS485是一個定義平衡數(shù)字多點系統(tǒng)中的驅(qū)動器和接收器的電氣特性的標(biāo)準(zhǔn),該標(biāo)準(zhǔn)由電信行業(yè)協(xié)會和電子工業(yè)聯(lián)盟定義。使用該標(biāo)準(zhǔn)的數(shù)字通信網(wǎng)絡(luò)能在遠距離條件下以及電子噪聲大的環(huán)境下有效傳輸信號。
    發(fā)表于 07-26 06:21

    RS485通信硬件實現(xiàn)

    閱讀目錄1、RS485簡介 2、RS485特性3、RS485通信硬件實現(xiàn)4、RS485通信軟件實
    發(fā)表于 08-19 08:20

    如何實現(xiàn)基于FPGARS485通信接口設(shè)計

    RS485是什么?如何實現(xiàn)基于FPGARS485通信接口設(shè)計?
    發(fā)表于 09-28 07:53

    RS485通信與Modbus協(xié)議的相關(guān)資料分享

    文章目錄RS485 通信與 Modbus 協(xié)議單片機 RS485 通信接口、控制線、原理圖及程序?qū)嵗?b class='flag-5'>RS485
    發(fā)表于 11-30 07:31

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

    RS485簡介485(一般稱作 RS485/EIA-485)是隸屬于 OSI 模型物理層的電氣特性規(guī)定為 2 線,半雙工,多點通信的標(biāo)準(zhǔn)。它
    發(fā)表于 01-14 07:54

    單片機如何和RS485設(shè)備進行通信

    RS485是什么?有何特點?單片機如何和RS485設(shè)備進行通信呢?需要注意什么?
    發(fā)表于 02-23 06:40

    提高RS485總線通信速度的設(shè)計

    介紹一種通信總線RS485主從通信方式,提高RS485總線采集速度的方法,該方法解決了主從式通信慢的缺點,提高
    發(fā)表于 04-12 00:37 ?44次下載
    提高<b class='flag-5'>RS485</b>總線<b class='flag-5'>通信</b>速度的設(shè)計

    RS485通信電纜選型經(jīng)驗值推薦

    RS485通信電纜選型經(jīng)驗值推薦:關(guān)于RS485通信電纜長度和電纜截面積的對應(yīng),在傳輸速率9600bps及以下,經(jīng)驗值有如下的推薦:工業(yè)自動
    發(fā)表于 09-03 08:27 ?148次下載

    RS485通信協(xié)議

    RS485通信協(xié)議 、RS485 通信協(xié)議1.概述C320 系列變頻器提供標(biāo)準(zhǔn)RS485 通信
    發(fā)表于 04-07 17:26 ?89次下載

    RS485總線接口電路

    RS485總線接口電路     測試儀通過RS485工業(yè)總線與PC機進行通信,其硬件接口電路如圖5所示。
    發(fā)表于 05-13 11:59 ?3685次閱讀
    <b class='flag-5'>RS485</b>總線接口電路

    PLC的RS485通信口設(shè)計

    三菱FX plc一般不帶RS485通信口,如果要與變頻器進行RS485通信,須給PLC安裝FX2N-48
    發(fā)表于 07-20 15:07 ?2768次閱讀

    rs485轉(zhuǎn)tcp網(wǎng)關(guān)盒子怎么用(rs485協(xié)議轉(zhuǎn)以太網(wǎng)tcp/ip)

    隨著工業(yè)自動化技術(shù)的不斷發(fā)展,越來越多的工業(yè)設(shè)備在使用時需要進行數(shù)據(jù)通信。其中,RS485通信協(xié)議是一種常見的
    的頭像 發(fā)表于 05-05 15:50 ?3006次閱讀
    <b class='flag-5'>rs485</b>轉(zhuǎn)tcp網(wǎng)關(guān)盒子怎么用(<b class='flag-5'>rs485</b>協(xié)議轉(zhuǎn)以太網(wǎng)tcp/ip)

    RS485工業(yè)通信網(wǎng)關(guān)的原理是什么?

    一、引言 隨著工業(yè)自動化技術(shù)的飛速發(fā)展,工業(yè)通信網(wǎng)關(guān)作為連接各種設(shè)備和系統(tǒng)的關(guān)鍵節(jié)點,發(fā)揮著越來越重要的作用。RS485工業(yè)
    的頭像 發(fā)表于 05-27 17:32 ?401次閱讀