在推文“听说第十三届比赛现场不再会有裁判了?”中提到了标准化智能车比赛过程。应用自动比赛裁判系统对于车模比赛时间以及是否冲出赛道进行客观测量,省去现人工法裁判过程。这不仅可以减轻比赛承办学校的压力,减少现场人工裁判误判,而且通过进一步优化比赛流程,增加参赛队伍上场次数,减少现场失误风险。
自动比赛裁判系统的核心是在比赛赛道下面,每隔一段距离放置一个检测线圈。比赛车模底盘粘贴触发磁铁,当车模经过检测线圈时,产生感应电动势信号。通过检测该信号确定车模是否经过了检测线圈。
检测线圈的长度为35厘米,比赛道的长度窄一些。如果车模冲出赛道,则触发磁铁不会经过检测线圈。只有比赛中所有检测线圈被依次进行触发,比赛结果才会有效。
在过去的几届比赛中,裁判系统只是在赛道的起跑线下放置一条由铜丝绕制的检测线圈,用于检测比赛车模的起始和终止时间。信标组中,检测车模是否靠近信标也是使用的相同的原理。
自动比赛系统在赛道下,大约每隔一米放置一个检测线圈。在直道上间隔长一些,弯道上间隔短一些。为了便于线圈安置,减小线圈对于赛道影响,检测线圈采用印制电路板线圈的方式制作。电路板材的厚度小于0.5毫米,放置在赛道下面对于赛道表面高度基本没有影响。
推文后面将会介绍自动比赛系统的系统架构、信号检测、通信总线、通信协议、总线枚举、序列号自动产生等技术原理。
往届比赛中,预赛赛道长度大约在40米左右,决赛赛道长度为预赛赛道的两倍。按照平均一米的间隔放置检测线圈,那么一个赛场则需要八十个检测线圈左右。由于检测线圈数量众多,自动比赛系统在架构上需要综合考虑布线方便与数据通信速度之间的矛盾。
首先,由于比赛场地比较大(预赛场地为5乘7米),直接将检测线圈信号通过电线连到统一的比赛系统中,会给检测系统带来很大的干扰,对于检测微弱感应电动势不利。由于是模拟信号,无法将它们进行并联或者串联,这80多条检测线通过星状连接方式集中连接到检测电路板,也会给布线带来很大的麻烦。因此,每一个检测线圈电路板上,都直接集成有信号处理电路和单片机电路,单片机直接处理微弱的感应信号,将检测到的信号以及对应的时间通过总线,使用数字信号发送给比赛系统,这样就可以避免干扰问题。
下图显示了调试中的线圈和检测板。在实际系统中,线圈和检测板将会制作成一个整体电路板。
电路板厚度很小,可以整体放在赛道下面。
从布线方便的角度,这些检测线圈板使用一条总线串联起来最方便。只要沿着赛道铺设一条总线便可以获得所有线圈的检测信号了。这种公用一条总线的方式,会带来一下问题:
数据传输慢。假设每一个检测线圈板发送一个数据需要20ms,那么将八十个检测线圈数据发送到比赛系统则需要 20*80=1600ms。
通讯可靠性降低。如果一个检测线圈板出现了对总线的干扰,那么所有的检测板都无法完成正常的通讯。
为了提高通讯速度以及通讯的可靠性,就需要多条通讯总线并行进行通信。下图显示了实际自动比赛系统的总线结构。比赛系统包括一个集线器,它具有八条外接总结接口。每一条总线上可以最多挂接15个检测板。整个系统最多可以有120个检测板。
这种串联和并联相结合的方式,是在布线的方便性与通信速度之间做一个折中。
总线需要完成两个功能:一是完成检测板与检测集线器之间的通信功能;二是给每隔检测板提供工作电源。由于具有八条总线,为了避免布线对于赛道的影响,需要减小总线中信号线的个数。将总线供电与通信功能合二为一,总线就包括两股线,它同时给检测板供电以及完成通信。
利用电源线进行通信的方式在后面“总线通信”一节中进行详细介绍。
由于将线圈与信号处理单片机集成在一起,所以就会大大降低了干扰信号的强度。虽然如此,检测线圈中接收到的空间电磁干扰信号还是非常强的。这其中的干扰信号主要有两部分组成:
工频(50Hz)磁场的干扰。
空间WIFI射频信号的干扰。
理论上讲,这些交变信号可以通过低通滤波器进行滤除。但是车模通过检测线圈时,如果速度很快,所产生的感应电动势的频率也会达到很高。比如,当车模速度为2米/秒通过检测线圈时,检测线圈的有效宽度为2厘米,此时所产生的信号时间长度为 0.02/2=0.01秒。下图显示了一个宽度为0.01s的升余弦脉冲信号的频谱图,可以看到它的频率已经扩展到了100Hz的范围。
因此,直接使用低通滤波器滤除50Hz工频干扰,也同样会削弱感应信号。
消除这种固定频率干扰一个有效简单的方法就是使用固定时间长度平滑窗口进行平滑滤波即可。窗口的时间长度等于干扰信号的整数倍数。
下图显示了长度为20ms平滑滤波器的幅频特性。可以看出对应于50Hz及其各阶谐波处的增益都是0,因此对于频率为50Hz的干扰信号可以彻底的消除。
可以通过数字滤波的方式实现上面的信号处理。在前面动图中,显示了线圈信号经过低通滤波放大之后的信号。其中包含了很大的50Hz的干扰信号。该信号经过单片机采集之后,然后再进行长度为20ms的平滑滤波,便可以消除上述的干扰。
下图中显示了线圈信号经过放大之后的波形。可以看到信号中的50Hz干扰彻底消失了,只剩下非常干净的感应电动势信号。这就会大大降低误检测的概率。
空间射频干扰信号主要来自于WiFi信号以及手机信号。这些信号频率很高,按理说应该可以通过简单的低通滤波就可以避免此类信号的影响。但是,由于这类信号的能量大多通过空间传播,很难通过局部增加滤波电容将此类射频信号进行阻隔,可以通过增加金属屏蔽罩来阻隔。
射频信号对于线圈放大电路的影响主要来自于运放的非线性。运算放大器在高频输入信号下,会出现非线性。某种程度上,这种非线性形成了对于射频信号的整流作用,将高频信号转换成了低频干扰。
消除此类射频干扰,一方面可以选择抗射频的运放;再者需要在电路板布线的时候,在运放的两个输入端对地都增加高频滤波电路。
关于检测线圈信号放大和滤波电路,在之前推文“信标比赛系统实现”中给出了相应的电路。
由于车模上的电机也具有很强的磁场,它也可以在检测线圈中产生感应信号。因此,当车模经过检测线圈的时候,往往会出现若干个脉冲信号。
下图显示了检测线圈滤波后的信号。这些信号有的是车模上的标志磁铁引起的,有的是车模电机漏磁引起的。通常情况下,四轮车模由于电机距离地面比较近,它所产生的检测信号就可以足以触发比赛系统。对于直立车模,由于电机安装位置比较高,所以需要在车模的最低点安放专用的磁铁以保证准确触发比赛系统。建议参赛队伍在车模底盘的下面粘贴扁平的磁铁。
为了能够准确确定车模到达时间,比赛系统将会对采集到的数据,超过设定阈值部分的数据计算时间的二阶矩来确定脉冲的达到时刻。
为了减小总线的信号个数,方便布线,比赛系统采用电源线通信的方式,将总线中的线的个数减小到两根。由于电源为直流信号,通信信号为交流信号,所以通过简单的谐振电路便可以将同一根电源线中的两个信号进行分割。
在每个单元与总线接口部分包括有三个部分:
信号隔离谐振回路;
电源滤波和稳压电路;
通信信号耦合电路。
信号隔离谐振回路是由L0,C0组成的LC并联谐振回路,根据选择参数(L0=1mH, C0=47nF)谐振频率大约23.2kHz。通信脉冲调制信号的频率选择在23.2kHz左右。
合理选择LC谐振的Q值,在信号隔离效果 以及通信速率之间达到平衡。为了达到大约1k的波特率,LC隔离谐振回路的Q值选择大约在2~5之间。
电源滤波电路实现对工作电源的的转换,生成稳定的检测电路工作电压。
通信信号耦合电路包括有输入隔直电容,信号平移电路,输入输出阻抗匹配电路等。
通信信号采用二进制振幅键控调制(2ASK)方式。对于数字信号的调制与检调都通过单片机来完成,利用单片机的定时器、ADC以及IO口,完成通信信号的发送与接收,具体细节部分在这里就不再展开了。
通信协议采用主从应答式。检测集线器为主控方,检测板为从动方。每次通信都是由主控方发起,听从方根据命令进行相应的动作或者应答。
由于系统的主要功能是完成车模经过时间检测,所以在大部分情况下,大部分的检测板都是没有数据状态。只有车模经过的检测板,才需要发送数据给集线器。如果集线器采用轮训的方式来收集数据,则检测周期就会比较长。为了提高总线利用效率,定义的通信协议支持优先级抢占模式。
通信传输字节分为两类:数据字节和命令字节。主控方发送命令使用命令字节,主控方发送的数据参数以及听从方发送的应答数据都使用数据字节。
每个检测板都有一个四位的编号(0~14。15保留,代表所有检测板)。在同一条总线上的所有检测板在接收到主控器发送命令后,如果当前已经检测到车模经过时间之后,便可以发送数据。数据的格式如下:
上面42bit的数据封装在6个数据字节中进行发送。
每个字节在发送的时候,均采用UART的发送协议。一个起始位(0),一个停止位(1),八个数据位。数据位0使用有调试信号表示,数据位1使用没有调制信号表示。
由于公用一个总线,所以数据位0是显性数据位;数据位1是隐性数据位。
由于所有的检测板可以同时发送数据,所以可能出现总线冲突。每个检测板在发送数据的时候,需要同时检测总线是否出现冲突。如果检测到冲突,则立即停止发送,并转入接收状态。发送方,在发送1的时候,检测总线上是否出现调制脉冲(即总线为0),如果发现出现调制脉冲,则表示出现冲突。
根据上面带有冲突检测协议,由于发送数据的开始为每个检测板的地址位,所以地址小的具有高的优先级别。当多个检测板同时发送数据的时候,地址小的最终完成发送,地址高的检测板都转入接受状态。它们的数据在下一次发送命令来的时候再完成发送。
上述抢占式通信协议保证了在有多个检测板发送数据的时候,优先级高的(地址小的)板子可以优先成功发送数据。在实际情况下,由于同一时刻具有发送数据的检测板很少(要么没有,要么只有一个),所以真正发生冲突的几率非常小。利用这种机制可以大大提高系统检测效率,可以达到每秒20次时间发送。
根据上面总线通信协议,需要同一总线上的每个检测板都具有唯一的地址。但检测板在第一次上电时,如何确定自己的地址位的呢?这个过程需要通过总线枚举过程实现。
每个检测板都具有一个唯一的生产序列号(32bit),总线枚举过程就是利用这个序列号来完成。
总线枚举过程如下:
主控方发送地址位无效命令,所有检测板都将自己的地位置成15(无效保留地址)。
主控方发送获取序列号命令,所有无效地址检测板都同时发送自己的序列号,最终序列号小的检测板成功完成发送。
主控板根据接收到的序列号,再发送设置地址命令。该命令中包括有序列号,以及递增的地址信息。当接收板对比序列号与自己的相同时,边将地址进行修改。
主控板重复上述(2,3)两个步骤,直到再没有接收到任何序列号为止。
通过总线枚举过程,同一个总线上的检测板,序列号小的,它的地址就靠前。序列号大的,它的地址就靠后。
一般情况下,上述地址信息可以被单片机存放在片上的EEPROM或者FLASH中,所以总线枚举过程只需要在系统连接完之后进行一次就可以的。
每个检测板都需要具有唯一的序列号。有的单片机芯片半身就带有这样的序列号。但是也有的单片机,特别是价格比较便宜的单片机,本身就没有唯一的序列号。那么如何产生单片机的唯一序列号呢?
一种简单的方法,那就是在烧写单片机程序的时候,对于单片机进行人工设置,根据一定的编码方式逐一设置每个检测板的序列号。这种方法虽然简单,但对比赛系统中这么多的检测板进行逐一设置也比较麻烦。
此时,就需要借助一个真随机数产生机制,由单片机自动完成序列号的生产。只要随机数的空间(32BIT=40亿)比挂在同一条总线上的的板子(最多15个)大多的,就可以保证序列号发生冲突的概率非常小。
如何获得真随机数呢?
随机数一个天然来源就是热噪声。单片机可以通过连续采集总线上的噪声,然后再通过位混叠的方式形成一个随机数。有的单片机内部具有CRC计算模块,可以利用CRC计算完成数据的混叠过程。
上述方法在自动比赛系统中检测板序列号生成过程中经过测试,的确具有很好的效果。虽然这种方法无法严格杜绝序列号的冲突,但如果发生冲突,可重新再利用真随机数产生一个序列号就可以解决了。