简介这份资料面向电子设计竞赛参赛者与电子类专业学生系统梳理了电赛中高频使用的硬件模块与配套程序帮助备赛者快速建立从器件选型到软件实现的整体认知。内容覆盖电源、最小系统、键盘、液晶显示、AD/DA、传感器、集成运放、可编程逻辑、电机驱动、继电器与信号处理等模块并延伸至LCD显示、键盘输入、AD数据处理、电机控制、PWM输出、延时计时及寻迹避障等常用程序还补充了模电数电与单片机选型等基础知识。资源包为1个doc文档约38KB结构紧凑便于打印或随时查阅。目前已有3071人学习下载适合作为赛前模块清点与知识查漏的参考清单也可用于日常训练中对照搭建电路与编写程序。1. 从一块 L298N 烧板说起电赛常用模块到底该怎么备每年电赛备赛期实验室里最常见的场景不是写代码而是有人举着一块冒烟的 L298N 问「为什么它带不动这个减速电机」。问题往往不在芯片本身而在于电源、驱动、信号调理这三块没有一起算过账。电赛常用模块这套东西本质是一份「控制类题目的最小可复现硬件清单」电源要能出 12V/9V/5V/3.3V 甚至负压最小系统要留够 I/O 和扩展位传感器要覆盖光、磁、声、角度几条线驱动要能同时伺候直流电机和步进电机信号链上还得有比较器和运放兜底。它适合第一次系统备赛的学生也适合带队的老师拿来当采购和打样对照表。真正拉开差距的不是模块数量而是每个模块的接口电平、供电余量和软件驱动能不能对得上。2. 电源与最小系统先把 12V/5V/3.3V 和负压这四路电算清楚2.1 为什么电源模块要按电压域而不是按芯片来备很多人备电源是「看到什么芯片就配什么电源」结果板子上堆了七八个 LDO一上电就互相打架。更稳的做法是按电压域划分12V 给电机和继电器9V 给部分运放或老式传感器5V 给单片机、LCD、光耦3.3V 给需要低电平的模块和部分传感器。如果用电池供电还要在电池输出后加升压块把 7.4V 锂电稳定到 12V 给驱动用。负压需求通常出现在需要双电源供电的运放或 AD 芯片上LM337 就是常见的负压三端稳压方案配合正压的 LM317 可以搭出 ±5V 或 ±12V。电压域典型负载常见方案注意点12V电机、继电器、电磁阀电池升压或适配器直供电流余量至少留 1.5 倍9V部分运放、老式传感器12V 经 7809 或 DC-DC 降压线性降压发热大注意散热5V单片机、LCD、光耦7805 或 MP1584 等 DC-DC数字和模拟 5V 建议分开走线3.3V低电平模块、部分传感器AMS1117 或 DC-DC注意压差和最大电流负压双电源运放、ADLM337 配合 LM317输入端要留滤波电容2.2 最小系统与 I/O 扩展的取舍最小系统一般指单片机加晶振、复位、下载口和基本去耦电容。电赛控制类题目里I/O 口不够是常态常见做法是先用 74HC595 或 74HC165 做并串转换把 LCD 和键盘这类慢速外设挂上去如果题目允许直接上 CPLD 做逻辑扩展更省事。下面这段是 51 或 STM32 上常见的 74HC595 驱动骨架用来把 8 位数据串行送出再并行锁存。// 74HC595 驱动骨架DS 数据SHCP 移位时钟STCP 锁存时钟 void hc595_send_byte(unsigned char dat) { unsigned char i; for (i 0; i 8; i) { DS (dat 0x80) ? 1 : 0; // 先送最高位 SHCP 0; SHCP 1; // 上升沿移位 dat 1; } STCP 0; STCP 1; // 上升沿锁存到输出 }逻辑说明每次循环把当前最高位放到数据脚然后给移位时钟一个上升沿8 次之后 8 位数据进入移位寄存器最后给锁存时钟一个上升沿数据出现在并行输出端。参数说明DS 接单片机任意 GPIOSHCP 和 STCP 也各占一个 GPIO如果级联多片把前一片的 Q7 接到下一片的 DS 即可。注意移位时钟和锁存时钟不要接反否则输出会一直抖动。3. 传感器与信号调理RPR220、A04E、LM339 这条链怎么接才不飘3.1 寻迹、测速、避障三类传感器的选型逻辑寻迹光耦里 RPR220 是很多队伍用顺手的一款它内部是红外发射加光敏接收输出是模拟量遇到黑线时反射光弱电压升高。霍尔传感器 A04E 配磁钢可以做轮速或位置检测输出是数字脉冲适合接外部中断计数。光电槽加码盘是测速的经典组合避障则常用光电开关或超声波。趋光用光敏电阻或光敏二极管接近开关用来探测金属角度传感器精度高的确实贵预算有限时可以用电位器式角度传感器先顶。3.2 光耦输出不是开关量时比较器怎么补RPR220 这类光耦直接输出的是随反射强度变化的模拟电压如果后面接的是单片机 IO就需要用比较器把它整形成干净的开关量。LM339 和 LM393 是四路和双路比较器常见接法是把光耦输出接到同相端反相端接一个由电位器分压得到的阈值输出加上拉电阻后接单片机。下面这段是阈值判断和去抖的软件配合逻辑。// 比较器输出接 P3.2下降沿表示检测到黑线 unsigned char line_detect(void) { static unsigned char last 1; unsigned char now LINE_IN; // 读比较器输出 if (last 1 now 0) { // 下降沿 last now; return 1; // 本次检测有效 } last now; return 0; }逻辑说明硬件比较器已经把模拟量变成高低电平软件这里只做边沿检测避免在阈值附近反复触发。参数说明LINE_IN 对应单片机输入引脚上拉电阻一般取 10k阈值电位器调到黑线电压和白底电压的中间值。注意比较器输出是开集电极不加上拉电阻读不到高电平。3.3 运放 TL082/TL084 在信号放大里的位置信号从传感器出来太弱时需要运放做放大或跟随。TL082 是双运放TL084 是四运放都是 JFET 输入输入阻抗高适合接高内阻传感器。常见做法是先用电压跟随器隔离传感器再用同相放大器放大到 AD 能采的范围。放大倍数由反馈电阻决定公式是 1 Rf/R1Rf 和 R1 的取值要兼顾带宽和噪声一般 Rf 不超过 1M。4. 电机驱动与 PWML298N、L297 和细分调速怎么调到位4.1 直流电机和步进电机的驱动差异L298N 是双 H 桥能同时驱动两个直流电机或一个步进电机逻辑电平和单片机 5V 兼容但它的导通压降大约 1.4V 到 2V大电流时发热明显。步进电机如果要求细分和平滑调速可以在 L298N 前面加 L297L297 负责产生相位序列和斩波控制L298N 只做功率输出。减速电机要做到像步进电机一样一步步走光靠调速不够需要加编码器做闭环或者用步进电机本身的开环步进特性。4.2 PWM 频率和占空比的设置PWM 调速的核心是频率和占空比。频率太低电机会听到啸叫太高则驱动芯片开关损耗大。常见做法是直流电机用 1kHz 到 20kHz步进电机斩波频率用 20kHz 以上。下面这段是 STM32 定时器输出 PWM 的配置骨架。// TIM3 CH1 输出 PWM假设系统时钟 72MHz void pwm_init(void) { RCC-APB1ENR | 1 1; // 使能 TIM3 时钟 TIM3-PSC 71; // 预分频 72计数时钟 1MHz TIM3-ARR 999; // 自动重装 1000PWM 频率 1kHz TIM3-CCR1 500; // 占空比 50% TIM3-CCMR1 | 6 4; // PWM 模式 1 TIM3-CCER | 1; // 使能 CH1 输出 TIM3-CR1 | 1; // 启动定时器 }逻辑说明预分频把 72MHz 降到 1MHz自动重装值决定周期比较值决定占空比。参数说明PSC 和 ARR 共同决定频率公式是 72M / ((PSC1)*(ARR1))CCR1 在 0 到 ARR 之间变化。注意改占空比时只改 CCR1不要动 ARR否则频率会跟着变。4.3 步进电机细分和频率调速的配合步进电机的细分由驱动器拨码或 L297 外围电路决定细分越高单步角度越小运行越平滑但同样转速下需要的脉冲频率越高。调速时先确定细分再算脉冲频率。比如 1.8 度步进电机16 细分转一圈需要 3200 个脉冲如果要求 1 秒转一圈脉冲频率就是 3200Hz。常见做法是用定时器中断翻转 IO 产生脉冲中断频率就是脉冲频率。5. AD 采集、数据处理与寻迹避障算法的落地细节5.1 AD 采集后的滤波和标定AD 采集回来的原始值往往带噪声常见做法是先做多次采样取平均再用中值滤波去掉脉冲干扰。如果传感器输出和物理量不是线性关系还需要做分段标定。下面这段是滑动平均加中值滤波的组合。#define N 8 unsigned int filter_buf[N]; unsigned int ad_filter(unsigned int new_val) { unsigned int i, j, tmp, sum 0; for (i N - 1; i 0; i--) filter_buf[i] filter_buf[i-1]; filter_buf[0] new_val; for (i 0; i N - 1; i) { // 冒泡排序取中值 for (j 0; j N - 1 - i; j) { if (filter_buf[j] filter_buf[j1]) { tmp filter_buf[j]; filter_buf[j] filter_buf[j1]; filter_buf[j1] tmp; } } } for (i 1; i N - 1; i) sum filter_buf[i]; // 去掉最大最小 return sum / (N - 2); }逻辑说明新数据进缓冲区排序后去掉最大和最小剩下的取平均兼顾去脉冲和去随机噪声。参数说明N 取 8 或 16太小滤波效果弱太大响应变慢。注意缓冲区初始化时先填满再开始滤波否则前几次结果不准。5.2 寻迹和避障算法的状态机写法寻迹常见的是多路光耦加权求偏差避障常用超声波或光电开关触发转向。更稳的写法是用状态机把直行、左偏、右偏、丢线、避障分成几个状态每个状态对应不同的电机输出。下面是一个简化的寻迹状态判断。// 五路寻迹返回偏差值负偏左正偏右 int track_error(void) { int err 0; if (L2) err - 2; if (L1) err - 1; if (R1) err 1; if (R2) err 2; if (!L2 !L1 !R1 !R2) err 99; // 丢线标志 return err; }逻辑说明每路传感器给不同权重偏差值送给 PID 或比例控制去调左右轮 PWM。参数说明权重可以根据传感器间距调整丢线时返回一个特殊值让主循环进入找线状态。注意传感器安装高度要一致否则同一黑线各路输出不一致。5.3 测速、测距和秒表的计时器用法测速一般用霍尔或光电槽加码盘每转产生固定脉冲数用定时器在固定时间内计数就能算转速。测距用超声波时发触发脉冲后测回波高电平时间再乘声速除以二。秒表用定时器中断累加精度取决于晶振。软件延时只适合短时间不精确的场合长时间计时一定用硬件定时器。6. 从备赛清单到上电验证一套可复用的模块自检流程备赛到最后阶段最怕的是模块单独测都正常连起来就出问题。我一般会按电压域先上电不插单片机用万用表确认每一路电压和极性然后插最小系统跑一个点灯程序确认下载和时钟接着逐个接传感器用串口或 LCD 打印原始值确认量程和极性最后接驱动和电机先空载再带载用示波器看 PWM 波形和电机两端电压。下面这张表是常见故障和排查顺序。现象优先检查常见原因单片机不运行电源和复位电压不足、复位电容不对传感器读数不变供电和信号线光耦没上拉、比较器阈值不对电机不转或抖动驱动使能和 PWM使能脚没拉高、频率太低AD 值跳动大地和参考电压模拟地数字地混走、参考不稳通信失败电平和波特率3.3V 和 5V 混接、波特率不匹配一个具体技巧是给每个模块做「最小验证固件」电源模块只测电压传感器模块只打印原始值驱动模块只做正反转通信模块只做回环。这样出问题时能快速定位到某一层而不是在整机里猜。另外联轴器和机械结构要提前装好电机空转和带载的电流差别很大电源余量要按带载算。最后所有模块的接口定义和引脚分配最好画一张表贴在工位上换板子的时候不用重新翻代码。本文还有配套的精品资源点击获取