您现在的位置是:主页 > 电路技术 > 数字电路 >


基于DSP的以太网RS422通信转换器的设计

2020-03-22 23:20数字电路 人已围观

简介RS422 也是工业中使用广泛的一种通信接口,可以实现主设备和从设备之间的数据传输。随着科学技术发展,工业中越来越重视设备的网络化监控与管理,但是现有的一些工业设备仍旧使...

  RS422 是工业中使用广泛的一种通信接口,可以实现主设备和从设备之间的数据传输。随着科学技术发展,工业中越来越重视设备的网络化监控与管理,但是现有的一些工业设备仍旧使用RS422 通信,因此设计了基于 DSP 的以太网 - RS422 通信转换器实现以太网和RS422 两种接口数据的转换。
  

  1系统概述

  
  通信转换器的以太网通信部分使用 UDP 协议。UDP 是无连接的通信协议,即在通信的过程中,数据的发送端和接收端不建立逻辑连接。也就是说在通信的过程中,无论接收端是否存在,发送端都会直接将数据发送出去,接收端收到数据以后也不会向发送端反馈信息,但可以通过自定义上层协议来保证通信的可靠性。UDP 通信效率高、消耗资源小。在工业中,UDP 通信主要应用在面向查询 - 应答的服务中。
  
  RS422 通信是一种全双工的通信方式,可以同时收发,使用差动方式发送和接收数据,需要 4 根信号线,两根用于发送,另外两根用于接收。RS422 支持点对多点的通信方式,422 总线上最多只有一个主设备,其余为从设备。RS422 通信的最大传输速率是 10Mb/s。
  
  通信转换器具有以太网和 RS422 通信功能,设计过程中选取了具有相关通信协议的芯片 W5300、ADM 2582E 分别来实现以太网、RS422 的通信,这样设计的系统更加稳定可靠。主控芯片使用 DSP28335,DSP28335性能高,外设丰富,最高主频 150MHz。
  
  系统架构示意图如图 1 所示。DSP28335 作为主控芯片,既可以将接收到的以太网数据转换为 RS422 数据通过RS422 收发器发送出去,也可以将接收到的 RS422 数据转换为以太网数据通过 W5300 以太网控制器发送出去,起着通信桥梁的作用。存储芯片用于存储一些系统设置的参数。
  图 1 系统架构示意图
  图 1 系统架构示意图
  

  2硬件设计

  
  2.1 以太网通信模块硬件电路设计
  
  W5300 是一款 CMOS 工艺的单芯片器件,集成了10/100M 以太网控制器,具有 MAC 和 TCP/IP 协议栈。W5300 支持 16 位数据总线,128KB 的存储空间用于数据通信。数据传输速率最高可达 50Mbps。W5300 使用十分方便,运行可靠稳定,在嵌入式领域应用广泛。
  
  W5300 的硬件连接示意图如图 2 所示。如图 2 所示,使用一个 25MHz 有源晶振给 W5300 提供时钟输入信号。TEST_MODE[3:0]引脚都是接的低电平,表示 W5300 使用的是内部 PHY 模式;OP_MODE[2:0]引脚都接低电平,配置内部 PHY 的运行模式为正常运行模式。BIT16 EN 引脚接高电平,表示选择 16 位数据位。DSP28335 通过 Xintf 接口和 W5300 进行通信,DSP28335 的读写信号、XINTF Zone 7 的片选信号、地址线、数据线等都接到W5300 对应的引脚上。
  图 2 W5300 硬件连接示意图
  图 2 W5300 硬件连接示意图
  
  2.2 RS 422 通信模块硬件电路设计
  
  系统中使用隔离型RS422 收发器ADM2852E,ADM 2852E 支持±15KV ESD 保护,内部集成了隔离式的DC- DC 电源,并不需要外加 DC- DC 隔离模块。支持 5V 或 3.3V 供电,传输数据速率可达 16Mbps。图 3 所示为RS422 收发控制电路图。DSP28335 的GPIO14(DSP- TX) 和 GPIO15(DSP- RX)分别连接到 ADM2582E 的 TXD 和RXD 引脚上。DSP 的GPIO 分别将ADM2582E 的DE 引脚拉高,将 /RE 引脚拉低,使其处于全双工模式。为了去耦以及滤波,保证电源的平稳,ADM2852E 的 VIOIN、 VISOUT 和 GND- RS422 之间接了 0.01uF、0.1uF 和 10uF的电容。在 RS422 的接收和发送的总线上添加了 TVS 管等器件来增强 RS422 收发芯片对大的电压和浪涌电流的防护能力。在 RS422 总线的接收端添加了 120 欧姆的终接电阻来消除反射干扰。
  图 3  RS422 收发控制电路图
  图 3  RS422 收发控制电路图
  

  3软件设计

  
  3.1以太网通信软件设计
  
  以太网通信使用 W5300 以太网控制器实现,由于W5300 自带了 TCP/IP 协议,使用该芯片实现网络通信编程相对简单些。在使用 W5300 之前需要进行复位, 它不支持上电复位,因而需要使用 DSP 的 GPIO 操作它的 /reset 引脚对其进行复位。在对 W5300 复位等待10ms 以后就可以对其进行初始化操作。对W5300 的初始化主要的几个步骤是接口的配置、设置网络相关信息和内部 TX/RX 存储器的分配。然后初始化要使用的SOCKETn,进行数据的发送和接收以及相关配置。
  
  程序中使用 uint32 udp_sendto (SOCKET s, uint8 * buf, uint32 len, uint8 * addr, uint16 port)进行 UDP 数据的发送,使用 void loopback_udp(SOCKET s, uint16 port, uint 8* buf, uint16 mode)进行 UDP 数据的接收。上位机在与设备通信时,一帧数据的长度远小于 1472 字节(UDP 的MTU 是 1472 字节),在这种情况下,当使用 udp_sendto 或者 loopback_udp 函数发送、接收 UDP 数据时,总能一次发送或者接收一帧完整的数据,这对通信转换器很重要,因为作为通信转换器有必要维持原数据的完整性、连续性。
  
  3.2RS 422 通信软件设计
  
  DSP28335 共有 3 个 SCI(Serial Communication Inter- face,串行通信接口)接口,SCI 的收发器的中断和使能位独立,具有双缓冲接收和发送功能,既可以实现半双工通信,也可以实现全双工通信。无论 RS422 通信、RS485 通信还是 RS232 通信,对于 DSP28335 来说都是 SCI 通信。
  
  SCI 通信时,发送数据较为简单,直接调用自己编写的发送函数即可,发送函数为 void scib_send(unsigned char * msg, int length),未使用发送中断。而接收数据使用中断的方式,稍微有些复杂。SCI 接收中断服务函数如下,
  
  interrupt void SciB_Isr(void)
  
  {
  
  if(ScibRegs.SCIFFRX.bit.RXFFST >= 1 && ScibRcv OverFlag == 0)
  
  {
  
  // 开 启 定 时 器 1
  
  StartCpuTimer1();
  
  ReloadCpuTimer1();
  
  ScibRcvBuf[ScibRcvCount++] = ScibRegs.SCIRXBUF.all;
  
  }
  
  ScibRegs.SCIFFRX.bit.RXFFOVRCLR =1;

  ScibRegs.SCIFFRX.bit.RXFFINTCLR =1;
  
  PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
  
  }
  
  在使用串口接收数据时,一般需要判断是否已经接收完一帧数据,常用的方法是数据中添加帧头、帧尾,根据帧头帧尾来判断是否接收完一帧数据。这种方法不够通用,对数据是有要求的。可以看到,本文使用的 SCI 接收中断服务函数中使用了定时器,使用的是超时判断一帧完整数据的方法。串口通信时,一帧数据中字节与字节之间的间隔很短,根据这个特点,在连续接收字节数据时,程序会不断进入 SCI 接收中断服务函数,定时器 1 不断重新计时,由于时间短计时未结束就重置了定时器,程序不会进入定时器 1 的中断服务函数,而当接收完某个字节一段较长时间后还没有新的字节数据的到来时,这时定时器会计时结束,程序会进入了定时器中断服务函数,ScibRcvOverFlag 标志置一,此时就认为一帧数据接收完毕。需要选择合适的定时器计时时间。
  
  3.3以太网- RS 422 数据转发程序设计
  
  以太网 - RS422 通信转换器的核心功能就是将以太网 UDP 数据转换成RS422 数据或者将RS422 数据转换成以太网UDP 数据。程序中的UDP 数据的接收和发送、RS422 数据的发送都放在主程序的 while 循环中,如前所述 RS422 数据的接收是放在 SCI 接收中断服务函数中实现的,图 4 所示为以太网和 RS422 数据转发流程图。
  (a)以太网数据发送到RS422 总线
(a)以太网数据发送到RS422 总线
(b) RS422 数据发送到以太网
(b) RS422 数据发送到以太网
  图 4 以太网和 RS422 数据转发流程图
  
  在主程序 while 循环中,使用 loopback_udp 函数检查是否接收到 UDP 数据,一旦接收到 UDP 数据立即将数据放到 UDP 接收缓冲区中,然后调用 scib_send 函数将数据通过SCI 发送出去,数据输出到 RS422 总线上。类似地,在主循环中检查串口接收完成标志 ScibRcv OverFlag,该标志一旦置一,立即将 SCI 接收缓冲区ScibRcvBuf 中的数据通过 udp_sendto 函数发送出去,完成RS422 到以太网数据的转换。

Tags:

标签云