电赛常用模块入门指南:从零搭建能跑的小车 简介面向电子设计竞赛参赛者与备赛学生的常用模块知识整理文档围绕控制类赛题梳理硬件选型与软件编程两条主线帮助读者在有限时间内搭建起完整的知识框架。文档内容覆盖电源模块12V、9V、5V、3.3V 及 LM337 负压方案、最小系统、键盘与液晶显示、AD/DA 转换、寻迹光耦 RPR220、霍尔传感器 A04E、光电开关、集成运放与比较器 LM339/LM393、可编程逻辑、步进与直流电机驱动 L298/L297、继电器及信号调理等硬件要点并配套 LCD 显示、键盘输入、AD 数据处理、电机控制、PWM 输出、延时计时、寻迹避障测速测距等常用程序思路。资源包共 1 个 doc 文件约 38KB以文字条目形式归纳模块清单与程序要点便于打印或对照备料。已有 3080 人学习下载适合作为赛前模块准备与方案自查的参考清单。1. 电赛常用模块入门从一堆“看不懂的板子”到能跑起来的小车第一次打开电赛常用模块的资料很多人的反应是电源、最小系统、传感器、运放、电机驱动、AD/DA……名字都认识连在一起就不知道从哪下手。其实你可以把它想成一个“电子积木箱”电源是插座最小系统是大脑传感器是眼睛耳朵电机是腿显示和键盘是嘴巴和手。电赛入门真正要做的不是把每个模块的原理啃透而是先认清每块积木管什么、怎么把它们接成一个能动的整体。这份资料适合刚接触电赛、零基础但愿意动手的新手它把硬件模块和常用程序按“备什么、写什么”列清楚让你少走“买错件、接错线、程序跑不通”的弯路。下面按学习路径一步步来先讲清概念再给第一个能跑的例子。2. 先搞懂硬件清单电赛常用模块到底备哪些2.1 电源和最小系统先让板子“活过来”零基础入门电赛第一件事不是写代码而是让手里的板子有电、能跑。资料里把电源模块放在第一位常用电压是 12V、9V、5V、3.3V。为什么这么多档因为电机驱动往往要 12V传感器和单片机常用 5V 或 3.3V不同芯片吃不同的“饭”。如果你用电池供电还要考虑升压块把电池电压抬到需要的档位如果遇到必须负电压供电的芯片就得用 LM337 这类器件做出负压。新手最容易忽略的是电源不是“插上就行”而是要先想清楚“我这套系统里有哪些电压需求”再决定买哪几种模块。最小系统就是单片机能工作的最小电路资料里特别提到“以备 I/O 口不够的特殊情况”。入门阶段建议先准备一块常见的最小系统板把下载口、复位、供电搞清楚。我第一次学的时候光是把程序下载进去就折腾了半天后来才发现是供电跳线没插对。所以第一步不是追求复杂而是确认板子上电后指示灯亮不亮、下载器能不能识别、一个最简单的闪灯程序能不能跑。这三件事过了才算真正“活过来”。2.2 输入输出模块键盘、显示和反馈板子活了之后新手最需要的是“看得见、按得动”。资料里把键盘、液晶显示、数码管、LED、蜂鸣器都归到输入输出这一类。键盘负责输入液晶和数码管负责显示数字和字符LED 和蜂鸣器负责给反馈。为什么用了 LED 还要数码管因为 LED 只能告诉你“亮没亮”数码管能告诉你“现在是几”蜂鸣器也算显示模块是因为它用声音给你反馈比如平衡点稳定了让它叫一声你就知道程序走到哪一步了。入门建议先做一个“按键控制 LED”的小实验再升级到“按键在数码管上显示数字”。不要一上来就驱动液晶屏液晶的时序和初始化对新手来说容易翻车。先把 GPIO 的输入输出搞明白按键按下时引脚电平怎么变、LED 怎么点亮、数码管怎么动态扫描。这些看起来简单但它们是后面所有复杂功能的地基。资料里提到的 LCD 显示程序和键盘输入程序本质上就是把这些基础操作封装成可复用的函数等你把单个模块调通再去套用这些程序就顺了。2.3 传感器和信号处理让系统“感知”外界传感器是电赛里花样最多的部分。资料列了寻迹光耦RPR220、霍尔传感器A04E和磁钢、光电槽和码盘、避障光电开关、趋光光敏电阻或光敏二极管、接近开关、角度传感器、超声波等。新手看到这一长串容易发怵其实可以按“输出什么信号”来分有的是开关量比如避障光电开关碰到障碍就输出高低电平有的是模拟量比如光敏电阻光线越强电压越变。开关量直接接单片机引脚就能读模拟量则要经过 AD 转换。这里有个关键概念叫信号处理。资料里说得很实在光耦我们希望它出来的是开关量但要不是就得加比较器推荐 LM339、LM393信号回来需要放大就用运放比如 TL082、TL084。你可以把比较器理解成“裁判”电压超过某个门槛就判“1”低于就判“0”运放则是“放大镜”把微弱的信号放大到单片机能读的程度。入门阶段不用自己搭复杂电路先买现成的比较器模块和运放模块用万用表量输入输出搞清楚“什么电压进、什么电压出”再接到单片机上去读。这一步走稳了后面做寻迹、避障才不会一头雾水。2.4 电机和驱动让小车真正动起来控制类题目很容易出现小车所以资料里专门提到车模、减速电机、步进电机、测速电机还有联轴器这种机械件。电机驱动方面L298 是必备步进电机可以考虑加 L297继电器电路可以用 2803 或 2003。新手最容易踩的坑是“电机一转单片机就复位”——这通常是电源被电机拉垮了或者驱动模块和单片机没共地。所以入门时建议先单独给电机供电把驱动模块的使能、方向、PWM 引脚搞清楚再和单片机连起来。PWM 是电机调速的核心。资料里说“要把减速电机做到像步进电机一样一步步走光调速是不够的”这句话的意思是只调占空比只能改快慢想精确控制走多远还得配合编码器或测速反馈。入门第一个电机实验不用追求闭环先让电机能正转、反转、停再用 PWM 把速度从慢调到快。代码里关键就三件事方向引脚给高低电平、使能引脚给 PWM、占空比从 0 慢慢加到满。等这个跑通了再去理解步进电机的频率和细分调速就不会觉得玄学。3. 再搞懂软件套路第一个能跑的例子怎么写3.1 从闪灯到按键显示最小可跑通的程序结构很多新手一上来就想写“寻迹避障小车”的完整程序结果卡在第一步。入门建议按“闪灯 → 按键读引脚 → 数码管显示数字 → 串口打印”的顺序走。下面给一个伪代码结构的例子语言用 C因为电赛常用单片机开发大多绕不开 C。这段代码不依赖具体芯片型号重点看结构初始化、主循环、输入读取、输出控制。// 入门级结构示例按键控制 LED并在串口打印状态 #include board.h // 假设这是板级支持包封装了引脚定义 void setup(void) { led_init(); // 初始化 LED 引脚为输出 key_init(); // 初始化按键引脚为上拉输入 uart_init(9600); // 串口初始化波特率 9600 } int main(void) { setup(); while (1) { int key key_read(); // 读按键按下返回 1 if (key 1) { led_on(); // 点亮 LED uart_send(KEY1\r\n); // 串口输出状态 } else { led_off(); } delay_ms(10); // 简单延时防止抖动误判 } }这段代码的逻辑很直白先初始化 LED、按键和串口然后在一个死循环里不断读按键按下就点亮 LED 并打印。delay_ms(10)是软件延时作用是让按键抖动过去再读下一次新手常忽略这个结果按一下灯闪好几下。uart_send是串口输出方便你在电脑上看程序到底跑没跑。参数上波特率 9600 是入门常用值两边要一致延时 10 毫秒是经验值太长会反应慢太短会抖。把这段跑通你就有了“输入 → 处理 → 输出”的完整闭环后面加传感器、加电机都是往这个骨架上挂。3.2 AD 采集和数据处理把传感器电压变成数字传感器里的模拟量要进单片机就得靠 AD 转换。资料里说 AD 在控制类里经常出现比如角度传感器进来的电压信号通过 AD 转化成数字。入门第一个 AD 实验建议用光敏电阻或电位器电压变化明显现象好观察。下面是一个 AD 采集加简单平均滤波的示例结构。// AD 采集示例读 8 次取平均减少抖动 #define ADC_CHANNEL 0 // 假设传感器接在通道 0 #define SAMPLE_TIMES 8 // 采样次数 int adc_read_average(void) { int sum 0; for (int i 0; i SAMPLE_TIMES; i) { sum adc_read(ADC_CHANNEL); // 单次 AD 读取返回 0~4095 delay_ms(2); // 每次采样间隔 2ms } return sum / SAMPLE_TIMES; // 返回平均值 }这里adc_read返回的是数字量常见 12 位 AD 范围是 0 到 4095对应 0 到参考电压。取 8 次平均是为了压掉随机抖动这就是资料里说的“AD 采集后数据处理算法”的最简版本。参数上采样次数不是越多越好8 到 16 次对入门够用采样间隔 2 毫秒是给信号一点稳定时间。跑通之后你可以把平均值通过串口打印出来用手遮住光敏电阻看数值变化确认“物理量 → 电压 → 数字”这条链路是通的。这一步不玄学看到数字跟着手变心里就有底了。3.3 PWM 和电机控制让轮子按你的意思转电机控制入门先别想闭环。资料里提到 PWM 通道和比特率输出PWM 的本质就是快速开关占空比高就平均电压高电机就快。下面是一个电机正反转加调速的示例结构。// 电机控制示例方向 PWM 调速 void motor_set(int dir, int duty) { if (dir 1) { dir_pin1_high(); // 方向引脚 1 高 dir_pin2_low(); // 方向引脚 2 低正转 } else { dir_pin1_low(); dir_pin2_high(); // 反转 } pwm_set(duty); // duty 范围 0~100对应占空比 } // 主循环里慢慢加速 for (int d 0; d 80; d 10) { motor_set(1, d); delay_ms(500); }dir_pin1和dir_pin2控制方向pwm_set控制速度duty从 0 到 80 慢慢加电机就会逐渐加速。注意占空比不要一上来给 100容易电流冲击太大导致复位。入门时先把电机架空看轮子转不转、方向对不对再放到地上。如果电机不转先查驱动模块供电和共地如果一转就复位先查电源是不是被拉低。这些排查经验比背原理管用。4. 新手避坑电赛常用模块最容易翻车的几个地方4.1 电源不共地信号全乱套现象传感器读数乱跳电机一转单片机就重启。原因单片机、传感器、电机驱动各用各的电源地线没连在一起电压没有共同参考点。解决所有模块的 GND 必须连到一起电机大电流单独走线但地要共。入门时拿万用表量一下各模块地之间是不是通的不通就先接线。4.2 传感器输出类型没分清直接接单片机现象避障开关接上后读不到变化或者光敏电阻接上后数值不变。原因开关量传感器输出的是高低电平模拟量传感器输出的是连续电压前者可以直接读引脚后者必须过 AD。解决先看传感器输出是“开关”还是“电压”开关量接数字引脚模拟量接 AD 通道别混。4.3 电机驱动不隔离电流倒灌现象电机停转时单片机死机或者驱动模块发烫。原因电机是感性负载启停会产生反向电流驱动模块没有续流保护或电源容量不够。解决驱动模块电源端加滤波电容电机和单片机分开供电共地但不共用一条细线。入门选带保护电路的驱动模块别自己搭分立元件。4.4 软件延时当计时精度全靠猜现象测速不准秒表功能误差大。原因资料里专门区分了“软件延时”和“计时器”软件延时受中断和代码长度影响不适合精确计时。解决需要测时间就用硬件定时器软件延时只用在按键消抖、闪灯这类对精度没要求的地方。4.5 一上来就追复杂算法基础没打牢现象寻迹小车程序写了几百行结果连直走都走不稳。原因电机没调平、传感器阈值没标定、PWM 没限幅算法再好也白搭。解决先把直走、原地转、单传感器读值这三件事做稳再叠加寻迹和避障。资料里说的“复线”这类算法等基础跑通再看。5. 下一步学什么从能跑到能赛的学习路径把前面几章跑通之后你已经有了一个能读按键、能显示、能采 AD、能转电机的最小系统。接下来不建议东学一块西学一块而是按“一条主线加两个支线”走。主线是控制类小车的完整流程电源分配 → 最小系统 → 传感器标定 → 电机驱动 → PWM 调速 → 简单寻迹。支线一是信号处理把比较器 LM339/LM393 和运放 TL082/TL084 用熟知道什么时候该放大、什么时候该比较支线二是显示和交互把 LCD 或数码管加按键做成一个能调参数的小面板比赛时调阈值会快很多。具体到每周的安排可以这样第一周只做电源和最小系统确认各档电压正常、下载程序稳定第二周做按键加显示把输入输出闭环跑顺第三周做 AD 采集加传感器用手遮光、用磁钢靠近霍尔看数值变化第四周做电机驱动和 PWM让小车能直走能转弯第五周再把寻迹或避障算法叠上去。每一步都保留一个能回退的版本别一次性全改不然出了问题不知道是哪块的锅。入门阶段还要补一点基础课。资料里提到模电、数电知识以及熟练掌握 51 单片机最好用 MSP430、C8051 系列有条件学 ARM、FPGA。对零基础来说不用一开始就啃完模电数电先带着问题学电机驱动为什么要续流二极管、比较器为什么有阈值、AD 参考电压是什么遇到再查查完就用。单片机方面先把一款芯片的 GPIO、定时器、AD、PWM、串口这五个外设用熟换芯片时你会发现套路差不多。最后给一个我自己的习惯每次焊完或接完一个新模块先不写业务代码只写一个“最小测试程序”——让灯闪、让串口打印、让电机转一下。这个程序跑通了再往系统里加。从那以后我每次搭新电路都强制走一遍这个最小测试翻车次数少了很多。希望帮到你先从手边一块最小系统板和一颗 LED 开始把第一个闪灯跑起来后面的模块就有了落脚点。本文还有配套的精品资源点击获取