摘要:阐述了PC机和激光测距雷达双路高速串行数据通讯接口卡的系统构成。重点介绍了RS-422A高速串行通讯接口及收发控制、接口卡和PC机通信缓冲区的共享、卡上资源分配等关键性问题。
关键词:RS-422 高速串行通信 接口卡 双端口RAM FPGA
在我们智能自主式移动机器人项目的研制中,采用了两路二维激光雷达来完成障碍物检测、路标检测及地图匹配等工作。我们采用的激光雷达均提供了一种RS-422串行通讯接口。雷达通过与PC机的握手通信完成初始化工作之后,便分别以40ms和80ms为工作周期将测距结果以500Kbps的速率发送至PC机。PC机收到每一帧数据后便开始随后的处理工作。工作周期为80ms的激光雷达每帧数据长度为812字节,工作周期为40ms的激光雷达每帧数据长度为412字节。
若采用目前市面上能提供的普通串行数据通信卡来完成PC机与激光雷达的数据通信有三个缺点:
·商用通信卡很少能达到如此高的通讯速率;
·商用通信卡只能一个字节一个字节的接收,即使启用卡上的FIFO一次也只能收取16个字节,这样必然消耗PC机很多宝贵的数据处理时间;
·由于PC机运行的windows98系统是非任务抢断型的操作系统,在如此高的通讯速率要求下(两路雷达数据同时到来时对PC机来说瞬时通讯速率为1Mbps,有时会导致系统丢失一帧数据中的某几个字节,从而使整帧数据成为废帧,影响了系统的可靠工作。
因此,必须根据应用要求,自行研制PC机和激光测距雷达双路高速数据通信接口卡。
1 接口卡研制目标和总体方案
针对激光测距雷达在智能自主式移动机器人中的应用要求,我们对接口卡的设计提出了如下的总体目标:能够顺利地接收并存储最多三帧的两路雷达数据,并按PC机命令要求,完成一定的简单数据预处理后将结果转送给PC机,由PC机做进一步的高级处理。
根据系统要求,板卡上的CPU决定选用80C196KD单片机。80C196KD是Intel公司继MCS-96之后的一种高性能16位单片机,它功能强、速度快、使用方便、抗干扰性能好,在工业控制、智能仪表、家电中都得到了广泛应用[1]。系统总体方案见图1。
2 系统设计中的几项关键技术
2.1 RS-422通讯接口及收发控制
RS-422A通信接口标准使用单一+5V电源供电,是一个平衡型接口。它采用差动发送、差动接收的工作方式,发送和接收电路使用各自独立的平衡驱动器、接收器对,因而排除了各接收器地电势差带来的影响。使用RS-422A接口标准最大通信速率可达10Mb/s(对应通信距离12m),最大通信距离可达1200m(对应通信速率为10kb/s。
对于500kb/s高速的串行通信,靠80C196KD自带的串行通信接口已无法承担,必须采用专用的异步串行通信收发器(UART)来实现。下面先简要介绍一下系统中采用的TI公司的UART产品16C550C。
TI公司生产的异步收发器(UART)TL16C550C是TL16C450的升级,它的主要功能与TL16C450完全相同,但是它片内多了一块16个字节的先进先出(FIFO)存储部件,用于缓解高速通信场合下CPU的繁忙程度。当片内的FIFO被激活时,最多允许在FIFO中存储16个字节作为缓冲。为提高CPU读数据的速度,该片支持DMA操作。
16C550C在外设或MODEM接收到串行数据时能自动完成串并转换并存储,在收到CPU发来的数据时能自动完成并串转换并发送。在UART工作过程中CPU能随时查询到UART此时的工作状态。它最高可支持1Mbps的串行通讯速率[2]。
RS-422接口通讯部分原理图见图2。
差动发送器采用SN75174,差动接收器则采用SN75175。由于系统要求的通信速度很高,因此一般的光电隔离器件如TLP521系列不能满足要求,而应采用高速光耦。美国General Instrument公司生产的高速光电耦合器6N137,由磷砷化镓发光二极管和单片光敏集成检测电路组成。通过光敏二极管接收信号并经内部高增益放大器把信号放大后,由集电极开路门作为输出。该器件隔离电压高,速度快,共模抑制性强,完全能胜任高速通讯工作。
另外,为提高系统的抗干扰性,除了采取高速光电隔离以外,对每一路高速通讯口均采用了一个电源隔离模块,这样即使在外部通讯受到强干扰甚至短路的情况下,也能保证计算机的绝对安全。
激光测距雷达的数据由TL16C550C接收后,向80C196KD发出数据有效信号,由80C196KD来取走其缓冲区内的数据。
2.2 接口卡和PC机通信缓冲区的共享
接口卡和PC机共享RAM的实现方式一般有以下三种方案:
· 采用双端口RAM,该方式速度高,应用方便,适用于共享数据区两侧需要频繁高速地交换数据的场合,但成本稍高;
·采用单口RAM,并附加以一定的控制逻辑以保证某一时刻RAM的总线只和一个宿主相连接,以避免发生总线冲突。这种方式适用于交换数据量较小,次数也不频繁的场合,尤其是不能有RAM两侧的宿主同时要占用RAM的情况;
·采用两片单口RAM做轮换邮箱,并附加以一定的控制逻辑。当邮箱一侧的宿主向第一片RAM写入数据时,邮箱另一侧的宿主可从第二片RAM中读数据;当邮箱一侧的宿主需要向第二片RAM写入数据时,邮箱另一侧的宿主可又从第一片RAM中读数据。如此反复完成数据的交换过程,中间总线的切换由硬件控制逻辑来保证。这种方式克服了方案2不能有RAM两侧的宿主同时占用RAM的缺点,能实时地交换数据,但控制逻辑较为复杂。
在本接口卡中,由于RAM一方面要及时存放两路激光雷达的数据,一方面又要随时准备PC机来获取数据,完全有可能发生PC机在读RAM中某一路激光雷达数据的同时板卡必须接收另一路激光雷达的数据的情况,故而方案2显然不行。而方案3的控制逻辑相对复杂而且芯片多,占用面积大。所以第一方案是最佳选择。我们采用IDT公司的IDT7134双端口RAM作为系统的共享数据存储区,容量为4KB[3]。
板卡与ISA总线的接口模块采用ALTERA公司的现场可编程门阵列(FPGA)芯片EFP6016-144来实现。内部逻辑的构造采用ALTERA公司的硬件描述语言ADHL程序来实现。ADHL是一种模块化的高级语言,它特别适合于描述复杂的组合逻辑、组运算和状态机、真值表和参数化的逻辑[4]。
参考PC机中IO端口使用情况可知,PC机中一般均为用户板卡的使用留有端口,如2E0H~2EFH段和300H~30FH这一段均是用户扩展板卡可使用的IO端口地址。故本通信卡中状态寄存器使用2E2H,控制寄存器使用2E3H,2E0H作为共享RAM中的数据读写端口,2E1H作为数据读写时的地址预置端口。各端口指向的寄存器各位的意义如下:
·状态读取端口 (地址:2E2H)
D0:L1-DATA,雷达1的数据有效;
D1:L2-DATA,雷达2的数据有效;
D2:196-BUSY,板卡CPU正忙;
D3:恒为1
D4:恒为1
D5:L1-W-ACK,C196已收到PC机写入的雷达1的数据;
D6:L2-W-ACK,C196已收到PC机写入的雷达2的数据;
D7:恒为1。
·控制端口 (地址:2E3H)
D0:L1-ACK,PC机对L1-DATA的应答信号;
D1:L2-ACK,PC机对L2-DATA的应答信号;
D2:L1-WR,PC机已对板卡写入雷达1的控制信号;
D3:L2-WR,PC机已对板卡写入雷达2的控制信号;
D4:WAKE-OUT,PC机给板卡CPU的唤醒信号;
D5:恒为0;
D6:PC-RESET,PC机对板卡的复位信号;
D7:恒为0。
·地址预置端口 (地址:2E1H,)
D7~D4:恒为0;
D3~D0:为板卡RAM的12位地址总线中的高4位,板卡RAM的低八位地址初始值为00H。
·数据读写端口(地址:2E0H)
PC机从该端口读雷达数据或写雷达命令。
2.3 接口卡资源分配及PC机命令
板卡上4K的数据共享RAM的存储区分配如下:
0000H~09FFH:共2.5KB容量,为串口I的接收数据存储区;
0A00H~0EFFH:共1.2KB容量,为串口II的接收数据存储区;
0F00H~0F80H:共128B容量,为串口I的发送命令存储区;
0F81H~0FFFH:共128B容量,为串口II的发送命令存储区。
板卡能接收并处理的命令有三种:
命令存放地址 | 意 义 |
命令区基地址 命令区基地址+04H 命令区基地址+08H |
外设初始化 接收数据加窗处理 接收数据平滑处理 |
外设初始化命令格式如下:
命令值(8bit) | 外设类型(8bit) |
01H |
01H:雷达类型Ⅰ 02H:雷达类型Ⅱ |
接收数据加窗处理命令如下:
命令值(8bit) | 起始角度 | 结束角度 |
01H | 8bit | 8bit |
接收数据平滑处理命令如下:
命令值(8bit) | 前后平滑帧数 |
01H | 8bit |
所有命令都是01H有效,00H则无效。
2.4 板卡与雷达的握手通信协议
板卡与雷达的握手通信协议共分以下五个步骤:
·设定板卡自身的通讯波特率为9600;
·向雷达发送启动安装模式的命令,并等待雷达应答数据返回。
·向雷达发送命令,设置雷达的通讯波特率为500Kbps;
·设置板卡自身的通讯速率为500Kbps;
·向雷达发送命令,设置其为“连续发送测试数据模式”,并等待雷达应答数据返回。
此后雷达便开始以一定的时间周期将测试数据以500Kbps的通讯速率发送至板卡。
协议中具体的命令字节格式等跟雷达型号有关,篇幅所限,在此不再说明。
3 接口卡工作过程
PC机上电后,板卡自动复位并通过“IDLPD #2”指令进入掉电工作方式。当激光雷达将要被初始化时,PC机通过将控制端口寄存器的D4位置1来“唤醒”板卡工作。然后向对应串口命令区写入雷达初始化命令,板卡将根据命令中雷达类型执行相应的初始化操作。初始化应答过程如上所述。
初始化成功后,板卡便开始接收数据,接收完后依据校验字对数据进行CRC校验。正确无误则去掉应答数据的头和尾,只剩下总数据字节数(16bit)和数据,并根据PC机的要求对雷达扫描数据进行数据平滑或数据加窗处理。处理后的数据存放在双口RAM的相应存储区中,然后通过将对应的L-DATA信号置高告知PC机前来取数据。
PC机通过查询端口检测到雷达数据有效后,即以对应的L-ACK信号作为应答。然后板卡和PC机分别撤消各自的信号。PC机可开始读取对应雷达的数据。当PC机想从板卡共享RAM的某一地址开始读写数据时,先向2E1H端口寄存器写入12位共享RAM地址的高4位,低八位使其自动为零。当PC机读写完一个字节的数据时,通过FPGA构造的片内计数器,该EISA接口能自动将地址加一,指向RAM中的下一个字节单元。这样,PC机在读写板卡RS-422接收的数据时,只需在读写之前设定一次地址,然后就可以连续不断地从板卡中读取成块的数据,从而大大提高了端口传送数据的速度。
同样,当PC机向板卡写入命令时,除向对应串口命令区写入命令外,置位相应的L-WR信号,以告知板卡。板卡即以对应L-WRACK信号作为应答。随后PC机和板卡分别撤消各自的信号。板卡取出命令解释并执行相应的操作。
综上所述,本文所设计的PC机与激光测距雷达高速串行通信接口卡具有如下特点:
·具有双路高达500Kbps的高速RS-422数据通信接口,可靠性好,通信效率极高;
·采用FPGA和双端口RAM做ISA总线接口及高速共享数据缓冲区,只占用很少的PC机端口资源就实现了板卡和PC机高速的数据通信和共享;
·划分了主PC机和板卡的任务范围,拟订了命令代码,能做到主从CPU一定程度地高速并行处理;
·上层PC机的接口软件设计简单方便,只需在WINDOWS下开一个线程监视板卡的状态端口即可,避免了编写设备驱动程序的烦琐工作。
该接口卡已成功地应用在智能自主式移动机器人中主处理机和激光测距雷达的通信方面,取得了满意的效果。
上一篇:PC机与CPLD通信问题的研究
下一篇:RS-485通信卡及其应用
- 热门资源推荐
- 热门放大器推荐
- 企业文化分享 如何培养稀缺的硅IP专业人员?SmartDV开启的个人成长与团队协作之旅
- 新帅上任:杜德森博士(Dr. Torsten Derr)将于2025年1月1日出任肖特集团首席执行官
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- SABIC进一步深化与博鳌亚洲论坛的战略合作伙伴关系
- 使用 3.3V CAN 收发器在工业系统中实现可靠的数据传输
- 尼得科精密检测科技将亮相SEMICON Japan 2024
- 浩亭和美德电子(TTI)宣布战略合作伙伴关系现已扩展至亚洲
- Samtec连接器科普 | 链接智能工厂中的人工智能