☰
电赛综合测评B题拿分线:STM32模拟前端与固件确定性写法
2026/10/26 3:43:20 网站建设 项目流程

简介:面向备战全国大学生电子设计竞赛综合测评的参赛者与STM32嵌入式学习者,这份2023年电赛B题国一方案围绕同轴电缆长度与终端负载检测装置展开,主控采用梁山派开发板,开发环境为STM32CubeMX、CLion与OpenOCD。方案以TDR时域反射法测长,结合分压法测电阻、NE555振荡电路测电容,并给出长度误差小于0.5cm、电阻误差小于0.1Ω、电容误差小于1pF的实测指标,对理解赛题要求、复现硬件电路与移植算法具有直接参考价值。压缩包共228个文件、约22.64MB,包含72个.h头文件、38个.c源文件,以及工程配置、PDF文档、图片、表格、日志、hex/bin固件和CMake构建文件,覆盖源码、文档与编译产物。已有3442人学习下载,适合用作赛题复盘、方案对照、代码拆解和参数调试的完整样本。

1. 综合测评B题不是“再做一个作品”:从评分表反推的三条拿分线

电赛综合测评B题的考场形态,和前面几天几夜的开放赛完全不是一回事:场地封闭、器件限定、时间压缩到几个小时,题目往往只给一页指标和一张元件清单,要求现场搭电路、现场写程序、现场测数据。所以拿“国一方案”这四个字去套,套的不是某个神奇电路,而是三条稳定的拿分线——基本要求全部做完、发挥部分挑最有把握的一两项做透、测量数据能自圆其说。STM32在这类题里通常只承担三件事:产生激励、采集响应、把结果稳定显示出来。想清楚这一点,备考方向就不会跑偏,也不会把时间浪费在堆功能上。

2. 模拟前端考点:电源、运放、ADC三段的考场速判

综合测评B题最狠的地方在于,它默认你的模拟前端是能用的。软件写得再花,前端一飘,所有数据都是假的。这一章按信号从电源到ADC的顺序拆三段,每段都给一个考场能直接用的判断方法和一道演练题。

2.1 电源与地:为什么你的板子一上电读数就在跳

限定器件清单里通常只有单电源,运放、比较器、模拟开关全部吃单电源,这意味着所有交流信号都必须抬到一个直流偏置上。考场里最常见的错误是直接把信号源的地和板子的地随便一连,然后用万用表量一下5V觉得没问题就开干。真正要确认的是三件事:供电实际值、参考点、回流路径。

供电实际值必须实测。USB供电口标称5V,实际到板子上常常是4.7V到4.9V,经过一颗普通二极管防反接之后只剩4.3V左右,这时候你的运放输出摆幅、ADC满量程全都跟着缩水。国一档的方案里,几乎都会在报告里写一句“实测VCC=4.86V,以此作为换算基准”,这一句话就是分数。

参考点指的是虚拟地。单电源运放处理双极性信号,必须用两个等值电阻分压出一个VCC/2,再用一个运放跟随器把它变成低阻抗的偏置源。注意分压电阻不能太大,10kΩ对10kΩ是上限,再大就容易被后级负载拉偏;跟随器的输出要加一颗0.1μF加一颗10μF的电容。

回流路径在洞洞板上尤其致命。很多人把地线走成一串“菊花链”,ADC的模拟地和PWM所在的数字地在同一条细线上串联,结果就是电机一转、PWM一开,采样值立刻跳几十个码。正确做法是模拟部分和数字部分各自汇聚到一个点,这个点选在电源入口的滤波电容负极,用一段稍粗的线或一片敷铜连起来。

提示:考场上没有网络分析仪,也没有频谱仪,判断地线好坏最实用的工具是示波器探头的地弹簧。把探头帽拔掉,用弹簧就近接地测ADC输入端,如果看到的纹波和PWM频率同频,基本就是地回流没做好。

还有一个容易被忽略的细节是去耦电容的位置。0.1μF必须紧贴芯片电源引脚,超过5mm基本失效;10μF放在板子入口。洞洞板上引脚间距大,很多人图省事把电容焊在芯片旁边两三厘米处,这一颗电容就等于白装。焊之前先规划好位置,芯片座子周围留出电容的空间,别等焊完了再补。

2.2 运放电路:看输入接哪个端,三秒判断拓扑

综合测评的模拟题,本质上是在考你对几种基本拓扑的条件反射。判断方法很简单:看信号从哪个端进去、反馈电阻接在哪。

输入接入端反馈接法拓扑增益相位
同相端反相端经Rf到输出,反相端经R1到地同相放大1+Rf/R1同相
反相端反相端经Rf到输出,同相端接偏置反相放大-Rf/R1反相
同相端输出直连反相端跟随器1同相
两路各经R进反相端反相端经Rf到输出反相加法各路-Rf/Ri反相

考场上真正会卡住的不是增益算不出来,而是三个坑。

第一个坑是单电源偏置。反相放大电路里,同相端必须接VCC/2,而且这个偏置要低阻抗,否则增益会随信号变化。很多人直接用一个100kΩ电阻分压接上去,结果输入阻抗和偏置阻抗打架,输出严重不对称。正确做法是分压后加跟随器,或者用两只10kΩ加一颗0.1μF。

第二个坑是带宽。清单里给的运放往往是通用型,增益带宽积只有1MHz上下。你按公式算出增益100倍,信号频率10kHz,理论上限是10kHz,实际已经衰减3dB了,再往上波形就变成三角波。考场做法是先按需要的增益和最高频率算一遍GBW,留三倍余量,不够就改成两级放大,每级10倍,比一级100倍稳得多。

第三个坑是输出摆幅。单电源5V供电的通用运放,输出通常只能到VCC-1.5V左右,也就是3.5V,往下能到0.1V。如果你的信号要送到ADC,而ADC参考是3.3V,中间这段余量必须靠分压或者限幅处理掉,不能指望运放自己扛。

有源滤波器是发挥部分的常客。一阶RC加运放最简单,截止频率1/(2πRC),但滚降只有-20dB/十倍频;二阶压控电压源(Sallen-Key)用两只电阻两只电容加一个同相放大器,滚降-40dB/十倍频,代价是Q值不好调。考场建议直接抄经典参数:R1=R2=10kΩ,C1=2C2,截止频率约1/(2π·10k·C2·1.414)。算完用示波器扫一遍实际截止点,比在纸上推半小时靠谱。

2.3 ADC前端:从“能读”到“读得准”的四件事

STM32的ADC是12位,理论分辨率是3.3V/4096≈0.8mV,但考场里大多数人只能用到8到9位有效精度。差在哪,差在这四件事。

量程映射。输入信号可能是0到5V,ADC参考是3.3V,必须先分压。分压电阻选1%精度的金属膜,别用清单里那种五环碳膜。分压比算好之后要在报告里写出实际值,比如R1=10.0kΩ、R2=20.0kΩ,分压比0.3333。

采样时间。STM32的ADC采样时间以ADC时钟周期为单位配置,采样时间太短,采样保持电容充不满,读数会明显偏低。信号源内阻越大,需要的采样时间越长。经验值是:源阻抗1kΩ以内,采样时间给到41.5个周期;10kΩ级别,给到239.5个周期。这个参数在CubeMX里能直接选,别图快用最小的1.5周期。

参考电压。很多板子把VDDA直接当参考,而VDDA实际可能是3.28V、3.31V,差个几十毫伏就是十几个码的误差。考场做法是用万用表实测VDDA,把实测值写进换算公式,而不是写死3.3。更稳的做法是外接一颗基准芯片,但清单里未必有。

抗混叠。ADC前面加一级RC低通,截止频率设在信号最高频率的2到3倍。R取1kΩ,C取0.1μF,截止频率约1.6kHz,对付几百赫兹的信号够用。注意这个R会抬高源阻抗,要相应加长采样时间,两个参数是联动的。

2.4 真题演练:一段采样代码,问误差从哪来

题目大致是这样:现场给出一段单通道ADC采样代码,采集一个1kHz正弦波并求有效值,实测结果比示波器读数低8%,问原因和改法。代码如下。

// 现场常见写法:单次转换 + 软件平均 #define N 64 uint16_t adc_buf[N]; float get_rms(void) { uint32_t sum = 0; for (int i = 0; i < N; i++) { HAL_ADC_Start(&hadc1); // 每次重新启动 HAL_ADC_PollForConversion(&hadc1, 10); adc_buf[i] = HAL_ADC_GetValue(&hadc1); // 读一次 HAL_ADC_Stop(&hadc1); } for (int i = 0; i < N; i++) { float v = adc_buf[i] * 3.3f / 4096.0f; sum += (uint32_t)(v * v * 1000); // 定点化求平方和 } return sqrtf((float)sum / N) / 31.6f; // 31.6 = sqrt(1000) }

先说结论:这段代码有三个叠加的误差源,任何一个都足以吃掉8%。

第一个是采样率不受控。循环里每次Start-Stop,实际采样间隔由轮询耗时决定,1kHz信号每个周期采到的点数不确定,而且极可能不是整数个周期,有效值算出来必然偏低且抖动。改法是用定时器触发ADC,或者用ADC+DMA按固定速率采集,保证采样率是信号频率的整数倍以上,最好32倍以上。

第二个是求平方时的定点化。(uint32_t)(v*v*1000)这一步,v大约0.5V量级,v²约0.25,乘1000得250,取整误差最大1,相对误差0.4%,单次不大,但64点累积不抵消,因为截断永远向下。改法是用浮点或者把系数放大到100000。

第三个是单次转换没有考虑采样时间。前面说过,源阻抗和采样时间是联动的,默认1.5周期对1kHz信号源可能不够,读数系统性偏低。

标准答法应该分三层:先说现象是系统性偏低不是随机噪声,再说定位方法是把采样率固定后重测看是否还偏低,最后给改法是定时器触发+DMA+浮点求平方和,并给出验证方式——用信号源给一个已知有效值的正弦波,比对误差是否在1%以内。面试官或者阅卷人想听的不是“我会用DMA”,而是“我知道为什么错、怎么验证改对了”。

3. STM32固件考点:定时器、DMA与中断的确定性写法

硬件搭对了,接下来是固件。综合测评对固件的要求不是功能多,而是确定性——同样的输入,每一次跑出来的结果要一样。这一章按定时器、ADC+DMA、串口三条主线讲,每条都给最小可用的代码结构和考场常见问法。

3.1 定时器三条路:PWM、输入捕获、定时中断

定时器是STM32里最值得花时间的一块,因为综合测评的三个核心动作——产生激励、测量频率、控制节奏——全落在它身上。

PWM输出。频率和占空比的计算公式是 f = f_clk / ((PSC+1)(ARR+1)),占空比 = CCR/(ARR+1)。考场常见错误是ARR设成65535、PSC设成0,想着“精度高”,结果72MHz下频率只有1.1kHz,想输出10kHz根本做不到。正确做法是先定频率再定分辨率:要10kHz、想要100档占空比,就取ARR+1=100,PSC+1=72,正好10kHz。分辨率只有7位,但对大多数题目够了。想要更高分辨率就提高主频或者降低频率需求。

// TIM3 CH1 输出 10kHz、占空比可调 // 72MHz / (71+1) = 1MHz 计数时钟;1MHz / (99+1) = 10kHz htim3.Init.Prescaler = 71; htim3.Init.Period = 99; // ARR = 99,分辨率 1% sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 50; // CCR = 50,即 50% sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);

参数说明:PSC决定计数时钟,ARR决定周期,CCR决定高电平时间。三者改一个另外两个都要重算,考场上建议在纸上先列一张小表,把要用的几个频率对应的PSC/ARR写死,现场直接查表,比现场算快而且不容易错。改占空比只动CCR,用__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, val),这句可以在中断里安全调用。

输入捕获测频。测频有两种思路:测周期和计数量。低频用测周期,高频用计数量。测周期的做法是捕获两个上升沿,读CCR差值,频率 = 计数时钟/差值。坑在于第一次捕获要清零计数器,否则第一次读数是垃圾值;以及溢出处理,差值超过ARR时要加上溢出次数。考场建议直接开捕获中断,在中断里做状态机:第一次捕获记下CCR并清零CNT,第二次捕获算差值。

定时中断。用作系统节拍,比如每1ms采一次、每10ms算一次PID。注意中断里只做标记,运算放到主循环,这是基本纪律。中断服务函数超过几微秒,整个系统的时序都会抖。

3.2 ADC+DMA:把采样从“玄学”变成确定性

综合测评里最影响成绩的不是算法多高级,而是采样是否等间隔。轮询采样受主循环其他任务影响,间隔忽长忽短,做频谱分析直接报废。标准写法是定时器触发ADC,DMA搬数据,CPU完全不参与。

// TIM2 更新事件触发 ADC1,DMA 循环搬运 256 点 // 采样率 = TIM2 频率 = 72MHz / (71+1) / (999+1) = 1kHz #define ADC_N 256 uint16_t adc_dma_buf[ADC_N]; void adc_dma_init(void) { // 1. 配置 TIM2 作为触发源,只产生更新事件不输出引脚 htim2.Init.Prescaler = 71; htim2.Init.Period = 999; // 1kHz 触发 HAL_TIM_Base_Start(&htim2); // 2. ADC 外部触发选 TIM2_TRGO,DMA 循环模式 hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T2_TRGO; hadc1.Init.ContinuousConvMode = DISABLE; // 交给定时器触发 hadc1.Init.DMAContinuousRequests = ENABLE; HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_N); }

这段代码的关键有三处。第一,ContinuousConvMode必须关掉,否则ADC自己转自己的,定时器触发就失效了。第二,DMAContinuousRequests要开,DMA搬满256点后自动回到起点,形成环形缓冲,主循环随时可以读最近一批数据。第三,采样率由TIM2决定,1kHz对应每毫秒一个点,做1kHz以下的信号分析都够。

读数据时要防止读写冲突。简单做法是主循环判断DMA剩余计数,或者在DMA传输完成中断里置一个标志,主循环看到标志才处理。更稳的做法是双缓冲,一半采一半算,但综合测评时间紧,单缓冲加标志位足够。

注意:DMA缓冲区必须定义成全局变量或者static,定义在函数栈上会随着函数返回失效,DMA搬进去的就是野指针。这个坑每年都有人踩,而且现象很诡异——有时候能跑,有时候跑飞。

验证采样率对不对,最直接的方法是用PWM输出一个已知频率方波,同时用ADC采回来,看一个周期内的点数是否等于预期。比如10kHz方波配100kHz采样率,一个周期应该10个点,数出来不是10就说明配置错了。

3.3 串口与显示:现场调参的救命通道

综合测评的现场调试,最怕的是改一个参数就要重新编译下载。串口就是你的后悔药。留一个UART,配上简单的命令行解析,能在不重新下载的情况下改PID参数、改PWM频率、改标定系数。

最小实现不需要printf重定向那套,直接收字符拼命令:

// 极简命令行:收到 "P 120\n" 就把比例系数改成 120 void uart_rx_isr(uint8_t ch) { static char buf[16]; static uint8_t idx = 0; if (ch == '\n' || idx >= sizeof(buf) - 1) { buf[idx] = '\0'; if (buf[0] == 'P') kp = atof(&buf[2]); // 解析数值 if (buf[0] == 'D') kd = atof(&buf[2]); idx = 0; } else { buf[idx++] = ch; } }

参数说明:buf大小16够用,命令格式固定为“字母+空格+数值+换行”。解析用atof简单粗暴,考场上不追求健壮性,能改参数就行。注意中断里不要做耗时操作,atof虽然不算快,但一次解析几十微秒可以接受,真正的运算还是要放到主循环。

显示部分,OLED或者LCD都行,重点是把三个数显示出来:原始ADC值、换算后的物理量、当前设定值。显示刷新不要放在中断里,也不要每毫秒刷一次,200ms一次人眼就够了,刷太快反而闪。

3.4 真题演练:PWM频率为什么差了十倍

题目:要求TIM3输出20kHz、占空比50%的方波,代码写完之后示波器测到2kHz,问原因。

代码是这样的:PSC = 0; ARR = 3599;

先算一遍。72MHz,PSC=0即分频1,计数时钟72MHz,ARR=3599即每3600个计数一个周期,频率 = 72M/3600 = 20kHz。理论上是对的,实测2kHz,差了十倍。

可能的排查路径有三条,按概率排序:

第一条,时钟源不是72MHz。如果用的是内部HSI,默认8MHz,就算配置了PLL也可能没生效,实际系统时钟只有8MHz。8M/3600≈2.2kHz,和实测2kHz非常接近,高度怀疑这条。验证方法是看SystemCoreClock变量的值,或者用一个定时器输出1秒翻转的方波去对秒表。

第二条,APB1预分频导致定时器时钟翻倍或减半。STM32的定时器时钟在APB分频不为1时会自动乘2,如果APB1分频设置和预期不符,定时器时钟就不是72MHz。查HAL_RCC_GetPCLK1Freq()。

第三条,示波器探头衰减档位设错。10倍探头配1倍档,读数差十倍。这条听起来低级,但现场真的常见,尤其是临时借的探头。

标准答法:先算理论值确认公式没错,再按“时钟源→分频配置→测量设备”的顺序排查,给出每一层的验证方法,最后说明修复方式——如果是时钟问题,检查SystemClock_Config里的PLL倍频系数和晶振类型,必要时改成内部HSI也能跑,但要把所有频率参数按实际主频重算。阅卷人真正想看的是排查顺序,不是答案本身。

4. 闭环与标定考点:让读数从“能看”到“敢写进报告”

综合测评的发挥部分,十有八九落在一个“控”字上。控温、控速、控幅值、控频率,形式不同,骨架一样:测量、比较、调节、再测量。这一章讲两件事,标定和PID,都是能在几十分钟内搭起来、并且能在报告里写出数据的东西。

4.1 标定:两点法、最小二乘与查表

从ADC读数到物理量,中间隔着一个转换。考场上最忌讳的是“按理论公式算一算就写上去”,因为运放电阻误差、参考电压误差、ADC增益误差全在里面,最终误差轻松超过5%。

两点标定是最低要求。给两个已知输入,记录两个ADC读数,解一条直线 y = kx + b。两个点要拉开距离,别都挤在量程中段,最好一个在20%、一个在80%。算出来的k和b写死在代码里,同时写进报告。这个方法能消掉增益误差和大部分零点误差,剩下的是非线性。

三点或五点做最小二乘,能进一步压非线性误差。手算不方便,考场上可以现场用计算器算,或者写一段小程序跑一遍。线性度好的系统,两点和三点的差别在0.5%以内,没必要时时上五点。

查表法适合非线性明显的传感器,比如热敏电阻。做法是把量程分成16段或32段,每段一个标定点,存成数组,中间线性插值。32段对12位ADC来说,插值误差可以压到几个码以内。代码就是个二分查找加线性插值,几十行搞定。

// 32点标定表,adc_val 递增,phys_val 为对应物理量 const uint16_t cal_adc[32] = {0, 128, 256, /* ... */ 4095}; const float cal_phy[32] = {0.0f, 0.52f, 1.05f, /* ... */ 16.8f}; float adc_to_phys(uint16_t v) { if (v <= cal_adc[0]) return cal_phy[0]; for (int i = 1; i < 32; i++) { if (v <= cal_adc[i]) { // 区间内线性插值 float t = (float)(v - cal_adc[i-1]) / (cal_adc[i] - cal_adc[i-1]); return cal_phy[i-1] + t * (cal_phy[i] - cal_phy[i-1]); } } return cal_phy[31]; }

参数说明:两张表必须等长且cal_adc单调递增,否则二分查找会失效。表里的物理量最好用国际单位,避免后面PID参数还要换算。插值精度取决于表的分段密度,非线性最陡的地方多放几个点。

标定做没做好,验证方法是拿第三个已知点去测,看误差。这个点叫验证点,不能参与标定计算。误差在满量程0.5%以内算合格,1%以内勉强能写,超过2%就要回去查电路了。

4.2 PID的最小实现:位置式、增量式与三条限幅

综合测评里的闭环,多数是一阶或者带滞后的二阶对象,位置式PID足够。别上模糊、别上自适应,那些是开放赛的加分项,综合测评里没时间调。

// 位置式PID,带积分限幅和输出限幅 typedef struct { float kp, ki, kd; float integral, last_err; float out_min, out_max; } PID; float pid_calc(PID *p, float set, float fb, float dt) { float err = set - fb; p->integral += err * dt; // 积分限幅:防止长时间偏差导致积分饱和 if (p->integral > 100.0f) p->integral = 100.0f; if (p->integral < -100.0f) p->integral = -100.0f; float d = (err - p->last_err) / dt; float out = p->kp * err + p->ki * p->integral + p->kd * d; p->last_err = err; // 输出限幅:对应执行器的物理边界 if (out > p->out_max) out = p->out_max; if (out < p->out_min) out = p->out_min; return out; }

三个参数怎么理解:kp负责响应速度,给大了会振荡;ki负责消静差,给大了会超调甚至积分饱和;kd负责抑制超调,但对噪声极度敏感,采样有抖动时kd要慎重。综合测评的调法建议是:先只给kp,加到刚开始振荡,然后退一半;再加ki,从kp的1/100开始往上加,加到静差消失为止;kd最后加,多数题目不加也够。

dt必须是实测的调用间隔,不能写个0.01就完事。如果主循环里任务多,dt会抖动,那就改用定时中断里算,把中断频率固定下来。dt不准,ki和kd全是错的。

两条限幅是重点。积分限幅防饱和,输出限幅对应执行器边界,比如PWM占空比0到100%、DAC输出0到4095。缺了输出限幅,积分会一直累积,退饱和要很久,现象就是超调之后迟迟回不来。

4.3 真题演练:阶跃响应超调40%,从哪里下手

题目:给一个温控或者转速闭环,阶跃给定后响应超调约40%,稳定时间明显偏长,问调试思路。

标准答法分四步。

第一步,先确认是控制器问题还是对象问题。开环给一个固定输出,看被控量能不能稳住。如果开环就漂,那是硬件和标定问题,调PID没用。

第二步,看阶跃响应的形状。超调大、上升快,是kp偏大;超调大、上升慢,是ki偏大。前者先降kp,后者先降ki。这个判断标准比“先调P再调I”的口号实用得多。

第三步,检查积分饱和。如果超调之后往下掉得很慢,或者长时间停在极值附近,那就是积分饱和。处理方式是加积分限幅或者积分分离——误差大于某个阈值时不积。

第四步,检查采样周期和dt。dt比实际调用间隔大,等效于把ki、kd放大,系统必然激进;dt比实际间隔小,等效于削弱,响应会变慢。

最后给一个量化目标:超调压到10%以内,调节时间压到题目要求的一半以内,留出余量。这个余量不是保守,是考场波动大,留余量能保证复测不翻车。

5. 易错点:五个每年都有人翻车的地方

有些错误和水平无关,纯粹是考场状态下的疏忽。下面五条,按踩中的概率排序,每条都按“错在哪、为什么错、怎么答对”写。

5.1 前三条:参考电压、中断、偏置

第一条,把VDDA当3.300V用。错在哪:换算公式里硬写3.3,实际VDDA是3.27V或者3.32V。为什么错:LDO有精度,负载不同输出也不同,几十毫伏对应十几个码,做小信号测量时相对误差轻松超过2%。怎么答对:上电第一步用万用表实测VDDA,把实测值写成宏定义,报告里注明“实测参考电压”,这一句话在评分表上就是测量准确性的证据。

第二条,在中断里做浮点运算和串口打印。错在哪:定时器中断里算PID、算FFT、还顺手printf一句调试信息。为什么错:浮点运算几十个周期,printf重定向到串口是阻塞发送,一个中断进去几百微秒出不来,主循环被拖死,采样间隔全乱。怎么答对:中断里只置标志、存数据,运算和打印全部放主循环;如果一定要在中断里算,先把浮点改成定点,把打印改成环形缓冲+DMA发送。

第三条,单电源运放不加偏置,或者偏置阻抗太高。错在哪:反相放大电路的同相端直接接地,或者用一个100kΩ电阻分压接过去。为什么错:单电源下输入负半周直接被削掉,输出只有半个波形;偏置阻抗高,和前级输出阻抗分压,增益随信号变化。怎么答对:同相端接VCC/2,用两只10kΩ分压加一颗0.1μF,再经跟随器缓冲;示波器上看输出波形是否对称,不对称就是偏置没做好。

5.2 后两条:地线与“只调软件”

第四条,地线走成菊花链。错在哪:所有模块的地依次串联,模拟地和数字地共用一段细线。为什么错:数字电流在细线上产生压降,这段压降叠加到模拟地上,ADC读数跟着数字信号跳。怎么答对:模拟和数字各自汇聚一点,单点连接;ADC芯片下面铺一小片地;PWM和大电流回路远离模拟前端。验证方法是示波器看ADC输入端的纹波,和PWM同频就是这个问题。

第五条,不看波形只改代码。错在哪:数据不对就怀疑算法,改滤波、改平均、改PID,改了一下午。为什么错:八成的问题在模拟前端和时序,代码只是背锅的。怎么答对:建立“先测后改”的习惯,示波器看三处——信号源输出、运放输出、ADC输入端,三个波形对上了再动代码。这三处一测,问题基本定位到具体一级。

5.3 易错题演练:读数周期性跳动怎么答

题目:系统静止时ADC读数稳定,一旦电机启动,读数就以固定周期跳动,幅度约5%。问原因和排查顺序。

答法分三层。现象层:静止稳定、动态跳动,说明干扰来自电机,不是ADC本身。机理层:电机是感性负载,换向时产生尖峰,通过电源和地两条路径耦合进来;固定周期跳动说明和换向频率相关。排查层:先断开电机只留驱动信号,看跳动是否消失,消失则是功率回路耦合;再把ADC输入端短接到地,看读数是否还跳,还跳则是地回流和电源问题;最后在电机两端加续流二极管、在电源入口加大电容、把模拟地和功率地分开走,逐项验证。

这一题的得分点不在最终方案,而在排查顺序体现出的“分层定位”思路。阅卷人想看到的是你能不能把一个大现象切成几个可验证的小问题。

6. 八小时节奏表与押题思路:把分数锁在会做的题上

综合测评最残酷的一点是时间固定,做不完就是做不完。国一档的方案和普通方案最大的差别,不是发挥部分多做了多少,而是基本要求一分没丢。下面这张表是按常见时长排的节奏,可以根据实际时长等比压缩。

时段主要动作交付物卡点
0:00-0:30读题、拆指标、列元件清单一张指标-方案对照表别急着动手,先把“必做”和“选做”分开
0:30-1:30搭电源和最小系统,点亮、串口通能下载、能打印的板子供电实测值记下来
1:30-3:00模拟前端搭建与单点验证示波器上三处波形正常每搭一级测一级,别攒着
3:00-4:30采样链路打通,标定两点读数与万用表对得上标定数据当场记录
4:30-5:30闭环或主体功能跑通基本要求全部可演示先做能演示的版本
5:30-6:30发挥部分挑一到两项至少一项指标达标挑把握最大的,不要贪多
6:30-7:30复测、记录数据、整理报告完整数据表每个指标测三次取平均
7:30-8:00留白,处理突发备份程序、备份数据不要在这个时段改架构

押题思路上,B题这类综合测评的考点其实高度集中。模拟侧永远是运放拓扑加滤波,数字侧永远是定时器加ADC加串口,系统侧永远是标定加一个简单闭环。把这三块各准备一套能默写出来的代码和电路,考场上的大部分变化都能套进去。真正需要临场发挥的,只有题目给的特定指标怎么映射到这几个模块上。

我自己的血泪经验是:每次进考场前,强制走一遍“三件套检查”——电源实测了没有、示波器三处波形看了没有、标定验证点测了没有。这三件事花不了二十分钟,但能把大部分翻车挡在门外。有一年就是省了最后一步,报告里的数据和复测对不上,白白丢了一档分。从那以后我每次上场都先做一遍这个检查,宁可少做一个发挥项。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询