2025年电赛小结

序言:

2025年电赛,我们选做的是G题。目前还没有出结果,估计最后不加报告是70分,进国测应该是没希望了。不过对于一个已经转码,决定不搞硬件的人来说其实可以接受了。

日志:

2025年7月30日上午

选定题目

D、G甚至F

G:感觉难点在于如何复现信号,保证同频

D:应该算精密测量了

F:完全不想做

G题大题思路:

G题最重要的就是测量后DAC复现的问题:

  • 数字滤波器?参数固定,不可即时更改(deprecated)(赛后补充,其实我最开始这个想法是正确的,但是和队长商量后他给出了这样的回复,总之就是还是不熟悉吧,也实现不了)

  • 使用dds合成后dac输出,高精度,或许可以抵消滚波(赛后补充,赛后证明是可以的方案,确实可以实现无反馈锁相,只要输出的基波频率足够准确)

基础部分:

  1. 搭出预设的电路

经仿真,是一个低通滤波器

且在100Hz~3kHz范围内放大倍数约在5~0.7倍

  1. 后续电压步进要在0.1V,所以dac精度应至少有0.02V

使用ad9959可以轻松达到此精度

发挥部分:

现在有3种方案

1.FIR

2.FFE

3.高精度DDS

串口屏需求:

基础

  1. 不加电路100~1MHz正弦波输出
  2. 加电路2V 1kHz 1~2V 步长0.1V(100Hz~3kHz)[设置+启动]

发挥

  1. 滤波类型判断(学习键)
  2. 数字重现(一键启动探究装置)

2025年7月31日上午

完成了基础部分的全部内容,硬件结构有9959->放大器->已知电路模型

12:53:48

“如果解决不了这个问题,就等着退赛吧”,这是队长的原话。

起因是想移植之前写的fft到队长发来的代码框架,但是之后发生了严重问题!
这个程序只要一烧写,芯片就会死锁,然后死掉,程序也不能运行,以为是烧写器或板子的问题,就又换了一个板子,可谁曾想,换了之后另一个板子也崩了。

结果就是stm32都用不了了,这如果解决不了,我们就要退赛了。

烧写后,一直报cannot halt the core,知道这大概是死锁了,原因大概是flash中的程序上电后就在跑,导致了无法烧写。

在经过约一个小时的调试,找到了比较好的解决办法

首先记得条stlink的模式为normal,能够识别到stlink之后参考下述博客

stm32 Invalid Rom Table 至芯片锁死解决方案_stm32erase能清除锁死状态吗-CSDN博客

总归是解决了,这代码底板混用是真的不好!

晚上:

完成了FFT算法和扫频的移植,准备搭建系统进行联调

2025年8月1日

时间是真紧,这还没干什么就倒数第二天早上了。其实队伍的节奏我不是很适应,感觉另两个队友总是早早地回去了,我自己也没什么事可以干,就也回去了。我是希望再多干一会儿的。这也导致了后边时间不够进而引发一些矛盾。

上午首次联调过后没有成功,事后证明当时是因为基准源没有接。就这么一个小问题,这也反映了一个很大的问题就是队伍的配合真是一坨屎,但凡好一点这一次电赛的结果都能好不少。

总之我又去调了代码,进行了优化。不过我当时没太关注相位谱的调试,因为我自己测了一些都还可以,就主要关注扫频的幅度谱了。

到了下午,队长突然又换了器件,原来使用9959结果又换成了FPGA的外接DAC,这里我其实就不是很认同,因为基础部分已经测试过了,那么就不应该改器件,后续也因此引起了不好的结果,但是好歹也救回来了。

总之方案也换了,原本我们是想用定时器去单独测频率的,后来又改成了用FFT去测,这个没问题。其实当时我有些质疑这里为什么要用FFT去扫频,又为什么要用FFT去得到输入信号的频谱。当时也能理解一些,因为用FFT去测量相位差是已经实现过的,直接分析输入信号的频谱可以应对更普遍的情况。但是事后证明,这个频谱分析的精度是难以实现的,不如直接判断波形,然后测量参数再得到频谱,再进行数字滤波。当时其实是向队长提出了这个疑问的,不过感觉他也没怎么想就把我驳回了。算鸟算鸟。

总结

这次比赛最大的问题完全是配合问题,我觉得以我们的积累和能力最后完全有能力进国测,但是因为配合的问题最后搞得一团糟。

具体的配合问题:

1.交流太少,方案论证不够

2.配合不好,最后一晚,我写好的代码明明可以运行,结果发给队长。他就说会报错,我让他看看是不是环境或者编译器版本的问题,他也不想解决,感觉就是质疑我的代码有问题。最后提出了直接交换位置来改的提案,这个提案是真的也有它的问题。我要负责报告,但是他们的电脑上一个没有word,一个没有visio,结果写报告就非常痛苦,报告一直拖到第四天中午才写完。

3.刚才说到质疑代码有问题,这就是一个团队信任度的问题,我的代码直到最后也没发现有什么问题,最后烧写的也是我的环境上的代码。虽然有一点问题,不过当时我是真的承受了很大的压力,总之就是队长一直在压力我。这让我真的无语,你怎么不全部自己写stm32和fpga的代码呢,不还是没时间?如果你觉得自己完不成那么就必须承认要有一个人写FFT的代码,然后就是我来写了,虽然有一些问题,但是你压力人又有什么用呢?至少说,可能是不太熟,但是如果真还是这样,那这个队伍我应该是不想再待的。

具体也有技术的问题:

1.我的问题FFT分析代码不熟悉,不熟悉常规的频谱泄露解决、基波及各谐波频点的寻找、相位谱分析等。最严重的还是最后导致很大问题的相位谱分析,各谐波相位的测量,这个直到最后都不知道是什么问题,明明相位差可以测准,但是相位就是测不准,真的很离谱。

2.FPGA一个小组只有一个人会,还不太熟悉。这个问题个人觉得不是很大,毕竟这个本身就有难度。但是对于两个培训3年,一个培训2年的队员来说,这个还不会确实有一点问题。

总之复制8月2号凌晨5点的qq群情绪宣泄:

这次电赛我经历了什么?

芯片自锁、爆堆爆栈、程序跑飞、编译优化导致程序错误、内存管理

还有什么?

队友分歧,分崩离析,四肢不和,如同bangdream一样的组内关系

然后呢?

死气沉沉,熬个大夜,伤个大身

所以呢?

不要来打电赛!不要来打电赛!不要来打电赛!

除非你有信仰,真的有的话,应该是没有的。先问问你的mcu吧!求他不要跑飞