APP下载

基于CAN总线的数据接收控制方式的设计

2012-06-06刘素华沈三民黄仁杰

电视技术 2012年1期
关键词:发送数据模拟量上位

刘素华,沈三民,黄仁杰

(1.中北大学电子测试技术国家重点实验室,山西 太原 030051;2.中北大学材料科学与工程学院,山西 太原 030051)

CAN总线是国际上应用广泛的现场总线之一,是一种多主方式的串行通信总线,已被广泛应用于汽车电子和航空等领域。C8051F040内部集成有博世CAN控制器的混合信号系统级芯片(SoC),能够实现国际上标准的CAN传输协议本[1]。本系统通过C8051F040单片机和FPGA来实现模拟量数据和数字量数据的接收,并通过USB接口传到上位机实时分析数据的准确性。

1 总体框图

数据接收系统的主要作用是通过CAN总线接口接收来自其他设备的数字量和模拟量,并可以通过USB接口传到上位机中,实时分析数据的可靠性。系统涉及到的主要模块包括CAN总线接口模块、C8051F040单片机控制模块、FPGA主控模块以及USB接口模块。系统的总体设计框架如图1所示。

图1 系统的总体框图

上位机通过FT245BM和底层硬件设备进行通信。FPGA中控单元主要是和FT245BM及单片机进行通信,并对有关数据接收、缓存、发送等操作进行控制。单片机内部集成了CAN控制器,通过CAN接口接收数字量数据和模拟量数据并传送到FPGA控制单元。CAN总线收发器选用的是飞利浦公司生产的TJA1040。CAN总线控制器和CAN总线接口之间要通过高速光电耦合器6N137进行隔离,提高系统的抗干扰能力。信号传输易产生辐射和信号衰减,本文采用双绞线外加金属屏蔽层,可减少信号辐射,防止重要信息外泄,也可阻止外部电磁信号干扰的进入,同时使用屏蔽双绞线比使用非屏蔽双绞线具有更高的信号传输速率。

2 CAN总线接口接收消息的控制

系统数据接收主要是通过C8051F040系列单片机内部集成的CAN模块进行,其硬件电路接口如图2所示。

图2 C8051F040单片机接口电路

单片机C8051F040的CAN核控制器原理如图3所示。

图3 CAN控制器的原理框图

在图3中,接口单元是CPU接口;消息处理单元主要是通过状态机控制数据从CAN核的输入输出移位寄存器和消息RAM之间传输;所有寄存器都用来控制和配置CAN模块;CAN核控制器及输入、输出移位寄存器用于消息的串/并转换及其他和协议相关的任务。CAN控制器的帧格式是系统自动生成的,不需要自己去设计帧格式,只需要往相关的寄存器中写入相应的内容即可。

系统接收的数据采用的是标准帧,接收数据时,当接收到的消息仲裁和控制领域已经完全移到CAN核的Rx/Tx移位寄存器时,消息处理的优先状态机便开始扫描消息RAM来匹配一个有效的消息对象。接收过滤的单元装入CAN核移位寄存器中的仲裁位,然后消息对象的仲裁和屏蔽信息域装入接收过滤单元并且和CAN核移位寄存器中的仲裁信息域相比较,直到找到匹配的消息对象。这种匹配会在所有的消息对象中重复。一旦匹配出现则停止扫描,进行消息处理。接收消息控制的流程如图4所示。

图4 接收消息控制流程图

3 FPGA主控模块

模拟量和数字量数据的接收以FPGA作为中央控制器。主要完成的功能有接收上位机命令、向单片机发送命令、接收单片机发送来的模拟量数据和数字量数据,并通过缓存模块进行读写控制,将读取到的数据混合编帧通过USB接口传到上位机。FPGA主控模块的原理如图5所示。

图5 FPGA主控模块

如何在异步时钟方式下实现同步是FPGA和单片机进行实时通信的关键点。对于异步接口,可以采用以下两种方式避免亚稳态的发生:1)速率不匹配,需要缓存。可以选择使用FIFO或者双RAM口进行缓存。2)需要握手信号。可以使用双握手信号,例如REQ和ACK等[2]。

3.1 命令信号传输控制

在本文中,考虑到系统的使用性,FPGA向单片机发送数据主要为命令信号,需要进行握手协议。首先FPGA需要将命令信号放在数据线上,同时向单片机发送请求信号,当单片机接收到请求信号后,接收FPGA发送的命令,接收完毕后,向FPGA回传应答信号。这样完成一次命令的发送,以此类推,保证了数据发送的可靠性。

3.2 批量数据传输控制

当单片机将收到的模拟量数据和数字量数据向FPGA进行传送时,由于数据量较大,再使用握手信号来解决亚稳态状态就已经不实用了。这时需要通过缓存RAM来解决亚稳态现象。在单片机和FPGA传送数据时,每次发送一个数据,则需要编写一个控制信号,本文是在wr信号的上升沿处向FPGA发送1 byte数据。

经过CAN总线传过来的数字量和模拟量数据首先需要通过FPGA内部的RAM模块进行缓存,FPGA通过监测缓存模块的半满信号进行读取。在一般的电路设计中,只需要逻辑控制电路产生空信号和满信号,考虑到实际情况,需要逻辑控制模块产生半满信号和满信号。由于本文有两种类型的数据,分别是模拟量数据和数字量数据。两种类型的数据需要分别通过内部FIFO进行缓存。满信号和半满信号都是通过内部逻辑控制模块产生的。当FULL=“1”时,停止向 RAM 中写数;当 FULL=“0”时,同时检测写使能信号和写控制信号的上升沿,当条件同时满足时,则向RAM中写数据,写RAM控制流程图见图6所示。读取RAM数据时,在复位的情况下,系统不做任何事情,当不复位的情况下,系统优先判断模拟量数据缓存模块的半满信号,当moni_HF=“1”时,读取一定容量的数据,并按着图7的帧格式向上位机发送数据,当模拟量RAM没有出现半满时再判断数字量RAM块。从RAM块读取数据的流程图见图8,当都没有出现半满时则系统默认为复位状态。

图6 写RAM块控制流程

图7 模拟量和数字量帧结构

图8 读RAM块控制流程图

在上位机实时监测时,传到上位机中的数据既有模拟量也有数字量,为了能够将所有数据均能够实时地在上位机中显示,通过帧头帧尾来拆分。每一帧数据的帧头均为CA AC,一旦出现E3 3E或者9D D9,说明一帧数据的结束。如果为E3 3E,则实时表示数字量数据,若为D9 D9,则实时表示模拟量数据。

4 USB接口的设计

本文是通过FT245BM和上位机进行通信的。硬件电路和上位机进行通信时的时序图见图9和图10。

在图9中,当FPGA检测到TXE为低时,FT245BM允许接收数据缓冲区发送数据到USB端口,可以通过数据总线将数据发送到缓存区中,发出写控制命令,即可发送数据;当TXE信号被硬件置高时,不能发送数据。图10中,当FPGA检测到RXF为低时,FT245BM内部发送缓冲区有来自USB接口的数据,发出读控制命令,即可以从数据总线读出数据。数据读取结束,RXF信号硬件置高时,不能接收数据[3-4]。

为了保证接收数据和发送数据正确性,一定要将关键性信号进行滤波。比如TXE和RXF都必须进行滤波,否则的话,由于TXE和RXF这些信号的抖动,造成接收数据和发送数据的错误。

5 系统的验证

整套系统调试中连接其他设备,启动整个系统进行工作,并通过上位机软件读取到的硬件电路发送过来的模拟量数据和数字量数据,原始数据见图11。

6 总结

本文主要是通过C8051F040单片机的CAN接口接收来自其他设备的模拟量数据和数字量数据,主要以单片机和FPGA为中心,实现了单片机和FPGA之间的通信,适当的采用了内部缓存和握手的方法大大减小了亚稳态造成的影响,并通过内部逻辑控制读写缓存中的数据,将模拟量和数字数据混合编帧,按着一定帧结构通过USB接口传到上位机中。

图11 上位机监测到的混合编帧数据

[1]饶运涛,邹继军,郑勇芸.现场总线CAN原理和应用系统设计[M].北京:北京航空航天大学出版社,2003.

[2]吴晓蕻.跨时钟若干问题的研究——同步与亚稳态[D].合肥:中国科学技术大学,2008.

[3]安荣,任勇峰,李圣昆.基于FPGA和USB2.0的数据采集系统[J].仪表技术与传感器,2009(3):49-51.

[4]徐峰.基于FT245BM的多USB接口的实现[J].无锡职业技术学院学报,2008,7(2):41-43.

猜你喜欢

发送数据模拟量上位
一种车载自组织网络的媒体接入控制协议
基于FPGA的多通道模拟量采集/输出PCI板卡的研制
基于马尔科夫链的LoRaWAN网络节点性能分析
带标记方式的CRDSA++协议性能分析*
特斯拉 风云之老阿姨上位
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
使用IPSec安全传输数据
关于600MW火电机组模拟量控制系统设计和研究
以新思路促推现代农业上位