2023 全国电赛寄录
NUEDC 2023
全称“全国大学生电子设计竞赛”。几乎每年都和Ti杯合办,其中一个题限定使用Ti的板卡实现。(PS. 真是有钱就可以____.,但我实在不能理解Ti为啥要这么干,明明他的片子都挺神奇的,又没多大市场)
2023 赛题可见此处
总体来看,准备时间长,但是没猜对技术栈,导致匆忙比赛,测评又寄。。。
准备阶段
我们队一共有3人(废话),即F.C.L. 实际上,我们从3月底就已经组建并确定“主打DSP,小车保底”的策略,并制定了学习的计划。我作为队伍中最小的,也非专业对口,分到的任务是开关电源理论学习,网络(包括ETH,WiFi,BT/BLE,ESP-Now等)及其电路,自动控制原理基础,以及开发板的准备(卑微的Layout工程qwq)。其余两位则学习DSP相关原理及应用,调通ADC/DAC、LNA、Filter、FPGA等。
工作是分好了,但是人算不如天算,我们所有人这一学期的任务都特别多,没有太多时间来系统性地搞搞这些玩意。作为一个计算机牛马,我成功地体会到了5天早八的神奇课表,还TM有几夜晚课,此外还有各种实验报告、大作业... 直到学期结束,我才看了一点点电源、一点点自控原理,网络倒是抽空调通了。而队里的两位,也没有多大进展,F说信号与系统差点挂,器件也没调好;C说没考好,做不动DSP。
直到赛前两周,终于能抽出时间仔细规划一下。队长F仔细研读了规则以后,召开了会议,统筹准备情况,并一致决定放弃DSP,转做控制题。随后,他开始画板,包括AT8236电机驱动,TLP2160光耦,XT30转XH2.54x4P板(不得不吐槽他对XH2.54的追求程度已经近乎痴迷)。我则抽空调试WiFi和蓝牙,以及搞好ESP-Now,并按照C2000的板子画小车底板。
赛前2天,我们集中起来做Layout。由于时间紧迫,我在4小时的时间里极限布了一块板,并送JLC 24小时加急打样。随后的一天,队里的电路大佬C把STM32的底板给硬布了线(其中有些小插曲,就不提了),熬了6+小时还是需要飞一些线;而我则又布了一个红外板子,准备做探路的(Layout狗都不做...)。

比赛阶段
Day 1
8月2日,风和日丽,早上7点20就集中实验室准备开赛。由于时差问题(),我们非常匆忙,我拿了4个JLC盒的器件和板子就run到了实验室,而F则扛了一个大工具箱。C起床较迟,看到我们在群里call他,还以为我们都到了,连证件都没拿就先于我们冲到了实验室。(乐)
开赛后,我们在E题控制和F题炼丹之间犹豫。由于F是 人工智能专业 炼金术士,考虑不卷控制。但是,F题需要高精度的麦克风,我们赛前并没准备。在F的努力下,从指导老师L处拿到了几个原始的驻极体麦克风。把他看作电容,串接一个1k采样电阻后接入稳压源,再将采样电阻两端接入运放,调整偏置,我们终于测出一些波形。但是,环境噪声始终无法忽略,我们测试手段也不严谨,不同部位敲击亚克力板所采集到的音频响度似乎一样,不能作为一个好的判据。在折腾了一个多小时后,我们放弃了F题,重回E题怀抱。
我不得不吐槽今年E题的创新性。怎么个创新呢?小车,没了!给无人机抢去了!通讯,一点也不准有,包括摄像机相对位置不能固定,不能共用电源(合着真有人搞电源载波通讯是吗,就稳压源的响应,和充电宝的高频干扰,真能载波吗?)。输出纯靠激光笔,输入纯靠摄像头。二维云台一个不够,得要俩。舵机精度也是纯恐怖,就不说了,后边也是寄在这里。
在这种情况下,我们的预备几乎落空。好在F准备了OpenMV,可以先做视觉,等着舵机和云台到货。搭好环境,已近中午,我们还说上午KPI完成了,而隔壁组已经调通了视觉.....
2号下午F正式开始写视觉,我研究舵机驱动,C则画激光笔夹具送3D打印、焊接光耦板。不久,F遇到了爆内存的问题,始终无法解决,且由于OV5640太过差劲,图像糊成一片,啥也检测不到,帧率还低至5- FPS。我这边发现OpenMV的PWM精度不足,函数只允许Int输入,最小精度仅为1%,反映到舵机上远远超出2cm。我考虑换用ESP32/STM32驱动舵机,并通过串口与OpenMV通讯。而C焊接好的光耦板子,又出现了奇怪的波形。我们十分信任C的焊工,就用信号发生器进行测试,发现一共5个光耦,测了4个,坏了一个,有一个坏了一个通道,剩下两个好的。到了晚上,F提出换用树莓派+高清的USB摄像头,查看效果后我同意了。
Day 2
换用了树莓派后,F决定上OpenCV进行传统视觉识别算法的编写。我则开始调试树莓派的GPIO,试图整好硬PWM并驱动舵机。经过一个小时,我成功地用 pigpio 库调起了软件PWM(由于网上说4B只有一路硬PWM)。后边我决定测试一下,发现实际上有两路硬PWM,比软PWM稳很多,精度还高达1/1M,驱动舵机,绰绰有余。 恰好新的云台和舵机到货了,我就赶紧写了一个调0的程序测试舵机并交给C组装。
下午,F的算法初步写好,但是效果很差,无法正确识别KT板框。我没事干,瞎写了一点报告,还调了调OpenMV,试图找到内存溢出的问题关键。经过一些调试和文档阅读,我终于发现,OpenMV拍的图会存储在SDRAM,而处理时,MicroPython(下称:MPY)会将数据复制并保存在栈上,而栈在H7的SRAM上,只有240KB。MPY真是害人不浅。。。
晚上,F的算法初步调好可用,C那边也完成了云台组装和激光笔夹具设计制造。虽然大三的学长C提示我们舵机电压高一些,响应会好点,但是我们的光耦只有5.5V耐压,而且昨天已经见证了光耦的脆弱,不敢上6V。于是,我用5V给舵机,编写并调试了舵机驱动,耗掉了2个多小时(拿到了没测试过的那个傻逼光耦,有暗伤的,舵机一大幅度动,他电平就出奇怪的,还得是拿示波器测了波形,换掉解决)。由于进度落后,F决定这夜熬夜优化视觉代码,我和C则回去休息。

Day 3
早上9点,我到实验室与F交接。我开始尝试编写控制代码,使之居中以完成第一问。由于我们对写死的方法嗤之以鼻,所以思路是完全上PID,不严格要求云台摆放位置,希望达到“指哪打哪”的效果,后边就简单写点逻辑完赛。事实证明我们低估了PID调整的脆弱和艰难,经过一上午的调试,我终于用PI将激光点居中,尝试靠到右上角,却屡屡过充,导致激光点偏出KT板。

下午,我调到筋疲力尽,终于是撑不住了上了PID,瞎调一通后开摆。4点时,F睡醒过来接替我,完善了PID的代码,并继续调参。我则设计树莓派扩展板,画了电路图后交给C画洞洞板Layout。(有幸目睹了C用平板画好Layout,把线布好并飞线)。
晚上,我们这烟雾缭绕,C在尽力焊接扩展板,我在死命调参,F则完善报告(有种寄掉的预感了。。)。就这样肝到5点,F回去睡了,我写了FSM准备明天调好主程序,C还在焊接第二块扩展板。

Day 4
早上8点,F起床并到实验室调试主程序。10点左右,只睡了4个小时的C去折腾了屏幕支架,而我则到了中午才醒来(第一次熬夜,有点吃不消)。距离完赛还有6小时,我们终于把第二问调好了,虽然超时,但是好过没有。后边就紧急调第三问,由于时间紧急,并没有出什么效果。在F调试第三问时,我则配置起了第二块树莓派,试图搞发挥部分。插上第二块扩展板后,我发觉不对劲,4个LED很暗,按键也没有反应。经过万用表测量,我们竟然在供电的3V3处测得了-13V,离谱到家了。而且,绿色激光笔所需的功率比红光大,同样电压下过了控制三极管产生的光很微弱。经过C的紧急排查,也没发现问题。这样,第二块扩展板泡了汤。发挥部分至此放弃,耗时4小时。
最后几个小时,我和C写文档,F还在调试程序。直到最后20分钟,F终于调通了第三问,并开始封箱。最后10分钟,我配置了程序开机自启动,将树莓派、屏幕等易损品包好装进了箱子,正赛就此结束。
测评阶段(开摆!)
由于我们深知没做好,所以有点摆了。进入会场前,我们还走错了地方,稀里糊涂盖了封箱章,好在取消测评资格。到了现场,我和F蒙头蒙脑开始组装调试,忘记了对焦,云台摆放位置也和实验室时差了很远(我们测试没摆正,到了现场评委要求摆正)。搞了20分钟,也没调回实验室水平。评委看了演示,随便问了几下,就结束力。
总结
寄了。可以说,各种该踩的,不该踩的坑,我们都踩了,直到最后也没从坑里跳出来。写这篇文章,大半记录过程,但是也不免有一些个人感想,就图一乐吧!也是记录一下,留个纪念。
这次电赛,虽然没有成功,但是还是很有意义的。在这里还要感谢电赛组委会、带队老师、我的两位队友、RC实验室的神...
彩蛋
本队电赛圣经
OpenMV,狗都不用
全国电赛,狗都不打
传统视觉,狗都不调
自动控制,狗都不做
Comment
汪~
2023/08/02 - 2023/08/05, @SCUT GZIC B1e
后记
本文作者即为L,F,C为队友拼音首字母缩写。禁止一切形式的转载。
2023年8月10日于广州