2020年 07月 16日 星期四
您的位置: 威廉希尔主页 > 单片机技术 >

基于80C196KD单片机和RS-422A通信实现双高速数据通

来源:未知     作者:威廉希尔     发布时间:2020-07-16 10:34         

  在我们智能自主式移动机器人项目的研制中,采用了两二维激光雷达来完成障碍物检测、标检测及地图匹配等工作。我们采用的激光雷达均提供了一种RS-422串行通讯接口。雷达通过与PC机的握手通信完成初始化工作之后,便分别以40ms和80ms为工作周期将测距结果以500Kbps的速率发送至PC机。PC机收到每一帧数据后便开始随后的处理工作。工作周期为80ms的激光雷达每帧数据长度为812字节,工作周期为40ms的激光雷达每帧数据长度为412字节。

  商用通信卡只能一个字节一个字节的接收,即使启用卡上的FIFO一次也只能收取16个字节,这样必然消耗PC机很多宝贵的数据处理时间;

  由于PC机运行的windows98系统任务抢断型的操作系统,在如此高的通讯速率要求下(两雷达数据同时到来时对PC机来说瞬时通讯速率为1Mbps,有时会导致系统丢失一帧数据中的某几个字节,从而使整帧数据成为废帧,影响了系统的可靠工作。

  针对激光测距雷达在智能自主式移动机器人中的应用要求,我们对接口卡的设计提出了如下的总体目标:能够顺利地接收并存储最多三帧的两雷达数据,并按PC机命令要求,完成一定的简单数据预处理后将结果转送给PC机,由PC机做进一步的高级处理。

  根据系统要求,板卡上的CPU决定选用80C196KD单片机。80C196KD是Intel公司继MCS-96之后的一种高性能16位单片机,它功能强、速度快、使用方便、抗干扰性能好,在工业控制、智能仪表、家电中都得到了广泛应用。系统总体方案见图1。

  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]。

  差动发送器采用SN75174,差动接收器则采用SN75175。由于系统要求的通信速度很高,因此一般的光电隔离器件如TLP521系列不能满足要求,而应采用高速光耦。美国General Instrument公司生产的高速光电耦合器6N137,由磷砷化镓发光二极管和单片光敏集成检测电组成。通过光敏二极管接收信号并经内部高增益放大器把信号放大后,由集电极开门作为输出。该器件隔离电压高,速度快,共模性强,完全能胜任高速通讯工作。

  另外,为提高系统的抗干扰性,除了采取高速光电隔离以外,对每一高速通讯口均采用了一个电源隔离模块,这样即使在外部通讯受到强干扰甚至短的情况下,也能计算机的绝对安全。

  激光测距雷达的数据由TL16C550C接收后,向80C196KD发出数据有效信号,由80C196KD来取走其缓冲区内的数据。

   采用双端口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是一种模块化的高级语言,它特别适合于描述复杂的组合逻辑、组运算和状态机、真值表和参数化的逻辑。

  参考PC机中IO端口使用情况可知,PC机中一般均为用户板卡的使用留有端口,如2E0H~2EFH段和300H~30FH这一段均是用户扩展板卡可使用的IO端口地址。故本通信卡中状态寄存器使用2E2H,控制寄存器使用2E3H,2E0H作为共享RAM中的数据读写端口,2E1H作为数据读写时的地址预置端口。各端口指向的寄存器各位的意义如下:

  0F81H~0FFFH:共128B容量,为串口II的发送命令存储区。板卡能接收并处理的命令有三种:

  PC机上电后,板卡自动复位并通过“IDLPD #2”指令进入掉电工作方式。当激光雷达将要被初始化时,PC机通过将控制端口寄存器的D41来“”板卡工作。然后向对应串口命令区写入雷达初始化命令,板卡将根据命令中雷达类型执行相应的初始化操作。初始化应答过程如上所述。

  初始化成功后,板卡便开始接收数据,接收完后依据校验字对数据进行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机和板卡分别撤消各自的信号。板卡取出命令解释并执行相应的操作。

  具有双高达500Kbps的高速RS-422数据通信接口,可靠性好,通信效率极高;

  采用FPGA和双端口RAM做ISA总线接口及高速共享数据缓冲区,只占用很少的PC机端口资源就实现了板卡和PC机高速的数据通信和共享;

  划分了主PC机和板卡的任务范围,拟订了命令代码,能做到主从CPU一定程度地高速并行处理;

  上层PC机的接口软件设计简单方便,只需在WINDOWS下开一个线程板卡的状态端口即可,避免了编写设备驱动程序的烦琐工作。

  该接口卡已成功地应用在智能自主式移动机器人中主处理机和激光测距雷达的通信方面,取得了满意的效果。

      威廉希尔