2025电赛记录

序言

全国大学生电子设计竞赛,电子信息类学生应该都听说过这个比赛。这个比赛以难度大、含金量高而闻名。2025年的暑假,我参加了国赛。

2025电赛,我们组选做的是D题“简易以太网双绞线测试仪”,这个题看起来和2023B有几分相似,笔者却认为是2023B的究极加强版。做这个题我们当时遇到的突出的困难有两个,一个是找不到合适的测长方案;一个是由于网线内部有八根线,进行各个项目的测量工作量十分大。

四天三夜

7月30日

时间来到2025年7月30日早上

前一天夜晚,我躺在床上辗转反侧 ,难以入眠,一直到五点半才入睡。第二天为了能第一时间看到题目,我拖着困倦的身体在七点半来到了工位,在启明楼的电梯上,我从室友的手机上见到了题目。和信号有关的题目有三个:

D,网线,属于精密测量,这个题我提前做好了网线的转接板。

F,高频通信,和信号调制与解调有关,之前从来没有接触过这个方向,通信原理也没有学习,而且我们不会FPGA,不善于处理高频信号。

G,这个题属于2023H的究级加强版本,题目里的 “两分钟时间自主学习建模”、”稳定同频显示” 等字眼第一眼看起来有些唬人,尤其是同频显示,勾起了我们之前做2023H的不好回忆。

在一开始,我在D和G之间摇摆,后来问了一些学长和朋友,他们都认为G题32做不了提高部分,于是我告诉队友我们只能梭哈网线了。

(其实后来证实G题用32也可以,甚至有一组用纯32去综测了,他们三个都是大一的。基地做G题的29个队最后有4个队伍去了综测,做G题的绝大多数用的都是ZYNQ,助教给的方案很复杂,似乎是IIR、FIR数字滤波器,再或者就是高精度DDS重建,这是后话)

现在来看一看D题:

b17f395d-929b-47fe-99a8-2189a3bb345e

image-20250809123234600

确定了选题之后,当时我们手上有几个方案:测电阻就用恒流源,我们负责硬件的同学去做恒流源了;至于测长,有驻波法、矢量网络分析、TDR、电容NE555这几个方案,我们一开始认为网线的电容和长度线性度可能不够好,所以NE555方案的优先级放在最后 ,最先尝试的是驻波法。当天中午我赶回寝室,翻出了大学物理,分析了驻波的理论,认为在理论上驻波方案是可行的:

当信号的频率在1~50MHz时,入射信号与反射信号形成的驻波波长刚好就是 1~50m,所以使用DDS进行大范围的1-50MHz扫频,可以在网线入射端观察到明显的信号幅值变化,这就是网线中形成的驻波,峰峰最大对应的是波峰,峰峰值最小对应的是波谷,在示波器上我们明显观察到了驻波的现象。于是我们开始实现这个方案,至此,我们也陷入了这个方案的困境:扫频不是问题,我们手上当时有AD9959驱动已经调通了,我们也使用9959进行过扫频,产生1-50MHz的扫频信号对于9959来说也不是难事,但是1-50MHz的扫频范围实在太大,32的板载ADC根本读不了频率这么高的信号,于是我们使用功率检波(AD8361)读取幅值信息,可是在1-50MHz的大范围扫频下就连高带宽的8361也会出现频率响应,读出的幅值在随频率变化而变化(扫频的步进是500KHz,这么大的步进下出现明显的频响也正常),不过这个变化较为为弱,对极值点的寻找有影响但不大。但是我们最终还是放弃了这个方案,直接原因是,由于信号在网线中反射的次数不止一次,所以在网线中形成了不止一种驻波,想要通过算法找到正确的第一个极值点对我们来说很困难;而且,就算我们手动找到极值点,使用用一个速度计算出来的网线长度误差很大,换句话说,不同网线中的光速v是差别很大的(在使用这个方法时)导致计算结果误差很大。

在7.30号,我们手上还没有功率检波,我只是手动使用信号发生器进行扫频,手动计算,在第一天我就怀疑这个驻波方案的合理性,但是手上没有功率检波,无法在实现层面推翻。晚上,恒流源做了出来,但是一直不可用,无法带负载,一接入一个小电阻,电流电压就急剧衰减到0。第一天就这样了了结束,主要是确定了选题并商讨了几个方案,方案的实现上没有什么进展。

回去睡了一觉,第一天睡了6个小时。

7月31日

在这一天上午我们首先调通了恒流源,前一天晚上的问题找到,是我们使用的电源模块无法带动这个恒流源,更换了电源,能够正常测量电阻。此外,我们拿到了功率检波证实了驻波方案的不可行性。

在下午,我们完成了线序、类型检测的功能。这两个测量项目没什么好说的,主要是要提前做好网线的转接板 RJ45转SMA、排针,SMA用于输入交流信号,测量长度、交流衰减,排针用于输入直流信号,检测通断。

这里我想吐槽一下我们学校的培训组织(华中科技大学电工电子科技创新中心 或称电工基地,下文用基地代称),基地准备的网口是HR911105A RJ45,结构如下

image-20250809140421075

可以明显看到,里面是带有变压器线圈的,这种网口很明显不能用来测试通断,甚至不能通入高频信号,基地的采购人员似乎并没有发现这一点,第一批购入了这种网口,更幽默的是后来又补充了一堆就难绷,需要的器件都研究不明白

我早在开赛之前就意识到了这个问题,并自己购买了直通式的网口,并制作了转接板。这个题,如果不能正确对网线的四对双绞线进行转接,什么工作都开展不下去。

我们自己制作的转接板如下:

image-20250809141104381

晚上,我们开始尝试第二种方案—矢量网络分析方案。

这个方案的思路也是研究反射信号,对入射信号和网线的反射信号进行峰值检波和相位检波,进行IFFT,即可以得到网线的长度。由于 我们只需要得知网线的长度,即信号的相位信息,因此可以对IFFT进行简化,只需要检测相位差和频率的变化率即可得到网线长度。

确定了大致方案后我们进行实现。首先为了观察到反射信号,需要只做一个定向耦合器,但是有一个前提是阻抗匹配,一开始我们的耦合器并没有和网线接头阻抗匹配,导致信号提前反射,观察不到移相。为了调通这个耦合器,我们弄到凌晨四点半,在终于观察到反射信号后,回寝室睡觉。

第二晚睡了3个小时。

8月1日

此时时间已经过了一大半,测长度对我们来说是遥遥无期。

这天早上,我们手上已经有调好的定向耦合器,也有校准过的AD8302用于鉴相。我们分析好了这个方案的原理和编程实现后,开始着手于写代码。在计算得到相位差和频率的关系曲线后,问题又来了。就是这个变化率和长度的线性度不好,甚至同一个长度下不同段相位的斜线的变化率也有很大差别。

开始我们怀疑相位差为160°-200°反射信号急剧衰减至小于30mv,而AD8302只能读取幅值为30mv-300mv大概范围内的信号,超过这个范围就会读不准,我们怀疑是信号衰减过小导致读取相位有误差,于是尝试了在定向耦合器的反射端口加VCA821程控放大器,试图稳住反射信号,但这个方案以失败告终;又在反射端加高速运放制成的同相放大,也失败了。总之就是相位-频率关系紊乱,无法可靠地得出长度。

证明这个方法也失败后,已经是深夜。眼睁睁的看着时间就剩一天,我们测长度连方案都没有,更别说系统联调,已经有些绝望。

这个夜晚我们一觉没睡。

8月2日

从前一天半夜到这一天早上,除了证明矢量网络分析不行之外,我们还做了交流衰减测量,我们的思路就是用AD9959产生反相的30MHz差分信号输入网线的一对双绞线,再用功率检波读取即可。

早上,我们还是不能测长度,要知道这道题主要就是测长度,分值占比极重。此时我们已经心态濒临崩溃,因为三天的尝试都未找到合适的测长方案,不如最后再试试NE555测电容法?

于是我们开始尝试这个一开始我最不看好的方案。但是恰恰这个方法就是可行,我们赶快大量的校准数据,把整根50m的网线2米2米地剪短,测数据,打表,拟合。。。一直干到晚上六点,这个时候我们都已经36小时未合眼,但是八点封箱交作品,还不能休息。

这个题中一个关键点是现场提供1mSFTP和50mUTP网线供参赛队伍校准,要知道现场校准对于测量方向的题目是至关重要的,因为测量物品的材质网往往不同,便会影响测量精度。我们的校准方案是:我们使用的串口屏有存储功能,掉电不丢失,于是我们在串口屏上设置了校准程序,分为两个:UTP校准和SFTP校准,校准时更改长度-方波频率拟合式中的一个参数,把这个参数通过串口传输给主控芯片。

校准完长度,我们又发现电阻测量又测不准了,于是赶快急急忙忙的校准电阻,校准了几个数据后,又急急忙忙地封箱。

四天三夜的电赛就这样草草结束。

可能正确的思路?

再一一仔细回看这几个测量项目:

题目只允许有两个模式:单端模式和双端模式。

双端模式同时测量:

  1. 网线线序

    这个需要你对网线有充分的了解。在工程上,网线接头的线序一般只有两种——568A和568B线序,这两种线序的区别是13、26的线互换,刚好和题目中给出的交叉情况相同,而两端同为568A或568B为直连线序,一端为568A另一端为568B叫做交叉线序,在这个基础上,想要检测线序就变得容易了起来,只需要检测变动的一根线的通断即可。

    image-20250812234306382

    image-20250812234323310

    我看网上有很多人是的每一根线对应的线序都一一检测,这样不是不行,但是会大量占用主控芯片的GPIO资源,同时电路连接十分繁琐,大量增加了工作量。

  2. 网线类型 UTP/SFTP

    这两种的区别是UTP没有屏蔽层,SFTP有屏蔽层。我在制作转接板时特地把屏蔽层的引脚SH没有接地而单独引出来,这样就可以通过SH的通断判断类型。

  3. 电阻

    这个使用恒流源即可。需要注意的是最好使用开关电路,只有测量电阻时再把恒流源接入网线的其中一根线上,否则一是恒流源会影响其他功能的测量,而是恒流源自身会发热,长时间带载会影响输出电流的稳定性。

  4. 交流衰减

    这个比较迷。我们的做法是用AD9959产生两路相位差180°的差分30M正弦信号输入网线的一个差分对,利用峰值检波读取网线两端的幅值,计算衰减。因为我们也不能确定网线的交流衰减应该是多少,上网上查到的数据也感觉不可靠,所以没有校准。只是记得最后测评时测量的衰减是10dB左右。

单端模式同时测量:

  1. 线缆长度

    赛后,我们几个队伍交流下来,认为TDR应该是比较合适的方法。可是几乎没有队伍做出来,都是最后改的电容法。

  2. 是否短路

    问答中官方指出只会短路线对,而网线接头线序只有568A、568B两种,他们都是12、36、45、78一对,所以检测一对之间是否通路就行。

  3. 短路位置

    我们一开始就放弃了这一项。我们以为这个就是测长度——网线接入端和短路点之间的长度。问题是哪个线对短路是不确定的,需要先用开关电路将长度测量电路接到对应线对上,而继电器和模拟开关都过不了高频信号,于是我们就直接放弃了

    赛后回看,其实可以另辟蹊径:利用电阻法。将恒流源打到线对上,而直流信号是完全可以过继电器的,可以用电阻反推长度。只是我认为这样很难校准,测得的短路位置不一定准。

最终使用的硬件

  1. 主控芯片是STM32H743,以及一个扩展板;
  2. ADC:AD7606,用它来读交流衰减、线缆分压。驱动是网上找的;
  3. DDS:AD9959,产生30M信号。驱动是移植基地的祖传代码;
  4. 功率检波:AD8361*2;
  5. 恒流源电路模块:具体是运放+三极管;
  6. 差分放大电路模块:用于测电阻时的线缆分压测量;
  7. 网口转接板:将8路RJ45与一路屏蔽层转接为9路排针与9路SMA;
  8. NE555测电容电路:之前用电容法做过2023B,就直接把NE555部分拿过来用了;
  9. 继电器开关电路模块:网上买的。

感受&总结

这个题最折磨人的地方一个是八根网线带来的巨大工作量,一个是长度方案一直无法确定。

基地做这个题的其他队伍的处境和我们类似:也是一开始尝试了各种方案,都测不出来长度,最后不得已使用NE555电容法。最后晋级国赛的队伍用的也是这个方案。

总的来说,这种类似精密测量类的题目做起来真的十分折磨,要想各种办法提高测量精度,差一点就是这道题,连可行的方案都找不出来。甚至这种题也看一点运气:如果一开始碰巧尝试的是正确的方案,那么会有大量的时间校准数据、提高精度、打磨作品,而像我们,最后一天才找到可行方案的,时间完全不够用。

最后,我还是想感谢我的队友:我的两位队友都很好,技术、性格、品格、实力各方面都是无可挑剔,能遇到这样优秀的队友我感到十分幸运,和他们一起渡过的一个月的备赛时光与艰苦的四天三夜是我的宝贵回忆。

此文写于2025.8.11