ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

不写一行代码也能做循迹小车:纯硬件方案从传感器到电机驱动全解析

不写一行代码也能做循迹小车:纯硬件方案从传感器到电机驱动全解析 最近在电子爱好者的群里老是有人问不烧程序能不能做循迹小车答案当然是可以。我搭过好几版纯硬件电路的循迹小车用不着单片机也用不着写一行代码全靠传感器、比较器、逻辑门和电机驱动这些模拟数字混合电路拼出来。这篇文章就把这套方案完整展开先讲红外检测原理再讲LM393比较器怎么把信号变成干净的0和1然后是转向逻辑门电路的设计思路最后接上L298N驱动和电源系统附一张可以直接照着焊接的接线对照表以及一堆我踩出来的避坑经验。适合刚学完模电数电、想动手做个看得见摸得着的项目的人也适合那些想给竞赛小车先搭个纯硬件底子的同学。1. 纯硬件循迹的整体思路不写一行代码也能跑1.1 为什么我推荐先做纯硬件方案很多人一提到循迹小车第一反应就是STM32、Arduino、OpenMV好像不上单片机就做不了。但实际上循迹这个任务本质上是一个逻辑判断问题传感器检测到黑线告诉电机怎么转。这个过程完全可以用模拟电路和组合逻辑电路实现。我推荐新手先做纯硬件方案有三个很现实的原因。第一它能逼你把传感器原理、比较器、逻辑门、H桥这些课本上的东西真正串起来光看电路图和真刀真枪搭一遍是完全两种体验。第二成本低核心物料加起来可能不到五十块钱坏了也不心疼。第三调试相对直观用万用表量电平、用电位器调阈值每一个环节都是可见、可测的不像单片机出了问题你还要猜是代码bug还是硬件bug。当然纯硬件方案的扩展性肯定不如单片机。它做不了复杂的PID控制也做不了路径规划但恰恰因为简单它更适合用来验证“小车循迹”这件事的底层逻辑。等你把纯硬件版本跑通了再去看单片机PID循迹的代码理解完全不一样。1.2 系统由哪四块组成整个纯硬件循迹小车可以拆成四个功能模块每一块都有非常明确的职责。第一块是传感器检测模块我用的是TCRT5000红外反射式传感器它的作用就是判断当前地面是白色还是黑色输出一个模拟电压。第二块是信号调理模块核心是一颗LM393双路电压比较器把传感器输出的模拟电压和预设阈值比较转成标准的TTL电平也就是高电平1或者低电平0。第三块是逻辑决策模块我用CD4071或门芯片和CD4069反相器芯片搭了一个组合逻辑输入是两路传感器信号输出是左右电机的使能信号。第四块是电机驱动模块用L298N驱动板控制两个直流电机再配合电池和7805稳压器构成完整的电源系统。这四个模块的划分很重要。很多人做小车失败就是因为把所有电路混在一起出了问题根本不知道从哪里查。把系统拆开以后每一步都可以单独测试。传感器输出对不对用万用表量比较器输出逻辑门对不对把比较器输出接到逻辑输入量逻辑输出电机不转就把逻辑输出直接短接到高电平看驱动板有没有反应。模块化调试这是所有硬件项目的通用方法论。2. 传感器与信号调理先让小车“看得见”2.1 TCRT5000红外反射式检测原理TCRT5000是一个集成的红外反射式传感器内部有一个红外发射管和一个光电接收管两个管子并排封装朝同一个方向工作。发射管发出波长为950nm左右的红外光照射到地面后发生反射反射光被接收管接收。接收管本质上是一个光电三极管接收到红外光后导通电流增大接收不到红外光时近似截止电流很小。这里的关键在于黑线和白线对红外光的反射能力完全不同。白色地面对红外光的反射强接收到的信号电流大黑色线条会吸收大部分红外光反射回来的信号非常弱。利用这个差异就能区分小车当前是骑在黑线上还是偏离到了白色地面。实际电路里发射管不能直接接电源需要在正极串联一个限流电阻。我用的限流电阻是150Ω在5V供电下发射管工作电流大概在15mA左右既能保证发射功率又不会烧管子。接收管的接法稍微讲究一点我习惯把光电三极管的发射极接地集电极通过一个10kΩ上拉电阻接到5V电源从集电极取电压输出。这个接法的原理很简单接收管接收到反射光时导通集电极电压被拉低到接近0V接收不到反射光时截止集电极被上拉电阻拉到接近5V。所以白色地面时输出低电平黑线时输出高电平。需要注意的是TCRT5000的输出电压信号并不是标准的数字电平它受距离、环境光、地面材质影响很大直接送给逻辑电路是不可靠的所以必须先经过比较器整形。2.2 LM393比较器把模拟信号变成干净的0/1LM393是一颗非常经典的双路电压比较器里面集成了两个独立的比较器刚好可以处理小车左右两路传感器信号。它的输出是集电极开路结构外部必须接上拉电阻才能输出高电平这个细节很多人第一次用都会踩坑。以左路为例连接方法是这样的TCRT5000集电极输出的电压送到LM393的第3脚也就是同相输入端第2脚反相输入端接一个由10kΩ电位器分压得到的参考电压。两个输入一比较如果传感器输出电压高于参考电压第1脚输出高电平反之输出低电平。右路同理用第5脚同相输入、第6脚反相输入、第7脚输出。电位器的作用特别关键它决定了判黑线的阈值。调试的时候我把小车放在白色地面转动电位器观察比较器输出应该保持低电平再把小车推到黑线上比较器输出应该翻转为高电平。找到一个临界位置让两个状态都能稳定输出这个阈值就算调好了。有一个很实用的小技巧我给传感器供电端并联了一颗100nF的陶瓷电容用来滤掉电源上的高频噪声。红外接收管本身对环境的干扰很敏感如果不加电容比较器输出可能在小车震动时抖动导致逻辑混乱后面查起来很难排查。2.3 传感器安装位置与灵敏度调节传感器离地高度和左右间距是最容易被忽视、却最关键的两个参数。离地高度方面TCRT5000的推荐检测距离是2.5mm到5mm我实际测试下来离地3mm左右信号最干净。太近了稍微有点不平的路面就会刮擦传感器太远了反射信号变弱比较器的阈值窗口会很窄稍微有点环境光变化就误判。所以安装传感器支架时最好设计成可上下微调的结构哪怕用热熔胶固定也要先确定好高度。左右间距方面两个传感器的中心距离一般取1.5到2倍的黑线宽度。如果跑道黑线宽度是2cm那传感器间距取3cm到4cm比较合适。因为传感器的逻辑是“左传感器压线说明车偏右右传感器压线说明车偏左”太近了两个传感器很可能同时压线失去纠偏能力太远了小车会在黑线两侧大幅摆动走S形看起来就像喝醉了。这个间距原则直接决定后面的转向逻辑是否有效。3. 转向逻辑用逻辑门替代“大脑”3.1 两路传感器四种状态怎么对应动作现在小车有了左、右两个传感器信号我把它们命名为A和BA代表左传感器B代表右传感器高电平表示压到黑线。两个传感器的状态组合总共只有四种对应四种动作逻辑非常清晰。第一种情况A和B都是0说明两个传感器都在白色地面上而黑线应该就在两个传感器之间的某个位置小车跑得比较正这时左右轮都正转直行。第二种情况A是1、B是0说明左传感器压到黑线也就是小车整体偏右了必须向左修正。怎么修正左轮停转右轮继续正转小车就会向左偏。第三种情况A是0、B是1说明右传感器压到黑线小车偏左了需要向右修正。这时候左轮继续正转右轮停转。第四种情况相对特殊A和B都是1一般出现在十字路口、黑线太宽、或者小车车头正对黑线横跨过去的时候。这时候我选择让两个轮子都正转也就是直行。这样处理比较保守至少不会让小车卡死在原地。3.2 用真值表推导开关表达式这四种状态其实是数字电路里的标准真值表。我把它列出来通过卡诺图或者直接观察就能写出布尔表达式。根据逻辑左轮正转的条件是情况一直行或者情况三右偏或者情况四直行。化简一下左轮正转等于A等于0或者B等于1表达式就是L_EN !A B。右轮正转的条件是情况一直行、情况二左偏、情况四直行化简得到R_EN A !B。我当时推导到这里眼神一亮因为这个表达式太简洁了。每个电机只需要一个反相器加一个或门就能解决。左轮用A的反相信号和B信号相或右轮用A信号和B的反相信号相或。这个方案相当优雅它意味着系统里没有复杂的时序逻辑没有锁存器没有单片机只有纯粹的组合逻辑。传感器状态一变电机使能几乎同步跟着变响应速度是纳秒级的对小车的循迹来说绰绰有余。3.3 逻辑门的实际接法与电平匹配具体的芯片选型我用的是CD4071里面集成了四个两输入或门再加一颗CD4069里面集成了六个反相器。两颗芯片都是4000系列CMOS器件功耗低电压范围宽5V供电下完全没问题。接线方式是A信号进CD4069第一个反相器输出!A接到CD4071第一个或门的第1脚B信号直接接到这个或门的第2脚或门第3脚输出就是L_EN左轮使能。右轮对称处理B信号进CD4069第二个反相器输出!B接到CD4071第二个或门的第6脚A信号接到第5脚第4脚输出R_EN右轮使能。有一点要特别提醒CMOS芯片的输入引脚一定不能悬空不用的输入要统一接到电源或者地否则会引入噪声甚至导致芯片工作异常。我用的是4000系列而不是74HC系列原因是4000系列在5V下输出高电平就是接近5V和L298N使能引脚的逻辑兼容性很好。74HC系列虽然速度更快但在这个低频应用里完全体现不出优势反而要注意其输出驱动能力的问题。4. 电机驱动与供电纯硬件也要“跑得动”4.1 L298N驱动电路的基本接法逻辑门输出的信号毕竟只是小电流的控制信号没法直接驱动直流电机必须经过功率放大。电机驱动方案我选了经典的L298N这颗芯片内部集成了两个H桥可以独立控制两个电机的正反转、停止和制动。L298N的控制逻辑很简单。每个电机对应三个引脚两个方向引脚IN1、IN2一个使能引脚ENA。当ENA为高电平时IN1为高、IN2为低电机正转IN1为低、IN2为高电机反转IN1和IN2相同电机停止。当ENA为低电平时不管IN1、IN2什么状态电机都处于脱机状态靠惯性滑行。我在这个项目里把左右两个电机的方向引脚全部固定左电机IN1接5V、IN2接地右电机IN3接5V、IN4接地。这样电机的正转方向是确定的逻辑模块输出的两个使能信号L_EN和R_EN分别接到L298N的ENA和ENB引脚。使能为高电机正转使能为低电机滑行。整个控制链路就打通了。4.2 电源分配与共地要点电源是整个系统里最容易出问题的环节搞不好就会陷入“传感器不灵敏、电机没力、逻辑门乱跳”的死循环。我的方案是用两节18650锂电池串联得到7.4V电池组给L298N芯片电机侧供电同时从7.4V取电通过一颗7805三端稳压器降到5V给传感器、比较器、逻辑门单独供电。这里最容易被忽略的是共地问题。所有模块的GND必须接在一起否则信号根本没有参考地比较器和逻辑门都会乱套。我建议把整个系统的地分成两路走线电机大电流回路的地和逻辑小信号回路的地在电池负极处汇合。油门一踩电机电流会有波动如果逻辑地也走在电机地线上电平容易被干扰。实际操作中我建议逻辑部分和电机部分分别使用粗短线最后统一回到电池负极。另外7805的输入输出两端都要加电容输入端加100μF电解电容输出端加0.1μF陶瓷电容不然稳压器容易自激输出带上毛刺传感器阈值就漂了。4.3 完整接线对照表很多人看我前面的文字还是觉得抽象这里直接上一份完整的接线对照表。从传感器到比较器从比较器到逻辑门从逻辑门到L298N每一个连接点都写清楚照着接就是一张完整的电路图。模块起点终点说明电源电池组正极7.4VL298N的VS端子电机供电电源电池组正极7.4V7805的IN引脚稳压输入电源7805的OUT引脚系统5V母线逻辑供电电源所有GND端子电池组负极系统共地左传感器TCRT5000发射管正极5V红外发射左传感器TCRT5000发射管负极150Ω电阻接GND限流电流约15mA左传感器TCRT5000接收管集电极10kΩ上拉到5V信号输出点左比较器传感器信号点LM393第3脚同相输入信号输入左比较器电位器滑臂LM393第2脚反相输入阈值设置左比较器LM393第1脚10kΩ上拉到5V开漏输出上拉右比较器右传感器信号点LM393第5脚同相输入信号输入右比较器电位器滑臂LM393第6脚反相输入阈值设置右比较器LM393第7脚10kΩ上拉到5V开漏输出上拉逻辑门左比较器输出ACD4069第1脚反相输入逻辑门CD4069第2脚输出!ACD4071第1脚或门输入逻辑门右比较器输出BCD4071第2脚或门输入逻辑门CD4071第3脚输出L_ENL298N的ENA左轮使能逻辑门右比较器输出BCD4069第3脚反相输入逻辑门CD4069第4脚输出!BCD4071第6脚或门输入逻辑门左比较器输出ACD4071第5脚或门输入逻辑门CD4071第4脚输出R_ENL298N的ENB右轮使能驱动L298N OUT1/OUT2左侧电机电机线驱动L298N OUT3/OUT4右侧电机电机线驱动L298N IN1接5V, IN2接GND固定左电机正转方向锁定驱动L298N IN3接5V, IN4接GND固定右电机正转方向锁定这张表本质上就是完整电路图的另一种表达方式。你把它画到草稿纸上再连线就是一张不逊于任何教程的电路原理图。5. 洞洞板布局与实操过程从原理图到能跑的小车5.1 焊接顺序与布局原则电路方案确定以后接下来就是动手焊电路。我建议用洞洞板手工焊接因为这个电路元件不多难度不大没有必要为了这个单独打样PCB。焊接顺序非常重要顺序错了后面调试会很痛苦。我习惯按“先电源再逻辑最后输入输出”的顺序来。先把7805稳压器焊上去然后把5V母线和GND母线用粗铜丝横贯整块板子所有芯片的电源脚都从这两根母线上取。接着焊CD4069和CD4071先焊插座再插芯片方便后面更换。接着焊LM393比较器最后焊传感器接口和排针。布局方面有一个原则是让信号流向尽量呈直线从左到右或者从前到后。传感器的接口放在板子前端比较器和逻辑门放在中间输出排针放在靠近L298N的一侧。如果信号线在板子上绕来绕去不仅难看还会引入干扰排查起来也困难。焊接的时候还有一个小细节每个芯片的电源引脚旁边都要加一颗0.1μF去耦电容这颗电容要尽可能靠近芯片的电源脚越近越好。它的作用是为芯片提供高频噪声的低阻抗回路能有效防止逻辑门在电平翻转时把电源电压拉出毛刺。5.2 车体组装与传感器固定车体我就不推荐具体型号了原则是底盘轻、双电机独立驱动、转向轮用万向球或者牛眼轮。最常见的是亚克力三层小车底盘买来基本都是散件需要自己组装。组装的时候注意两个电机要装得对称两个驱动轮的轴心要尽量在一条直线上否则小车会朝一个方向跑偏让循迹逻辑背黑锅。传感器安装在车头靠近地面的位置我用一个L型的铝片做了个支架一端固定在车底盘上另一端伸出车头TCRT5000传感器直接拧在铝片末端。这样安装的好处是传感器和底盘之间有悬空距离方便调整离地高度。装好以后一定要用尺子量一下两个传感器离地高度必须一致否则左右两路的检测灵敏度会不一样小车总是朝一侧偏。还有一个容易被忽略的细节TCRT5000对可见光也有响应直射的太阳光、强光手电筒都会干扰检测。我在传感器上方贴了一块黑色热缩管做的遮光罩只留下传感器朝下的检测窗口。这个小东西成本几乎为零但能大幅提升稳定性和一致性。5.3 联调三部曲电路焊好、车体装好进入联调阶段。很多新手一上来就整车跑结果小车原地转圈根本不知道哪里有问题。我的习惯是分三步调试每一步都确认没问题再进入下一步。第一步是调传感器。把小车放在不同位置用万用表分别量左右两路比较器的输出。白色地面输出应该是0V左右黑线上面输出应该是接近5V。如果输出不对就微调电位器直到两路切换都干脆利落。这一步必须做扎实后面所有环节都建立在传感器输出干净可靠的基础上。第二步是测逻辑门。把传感器信号接进逻辑电路用万用表量CD4071的输出端。手动把传感器放到黑线上模拟各种状态对照前面的真值表检查输出是否符合预期。比如左传感器压线、右传感器悬空时L_EN应该是低电平R_EN应该是高电平。这一步能确保逻辑设计真正在电路上落地。第三步才接电机和整车。接上L298N先不放到赛道上把小车举起来空转用手在传感器下方晃动黑白纸板观察两个轮子的响应。如果一切正常再把小车放到贴好黑线的地面上用比较低的速度开始试跑。跑起来以后如果转向不及时优先调电位器降低阈值灵敏度或者把传感器间距向外扩一点。6. 常见问题与避坑指南6.1 传感器误判环境光和阈值小车在跑的过程中最让人头疼的就是传感器误判明明没压线车轮却突然转了。最常见的原因是环境光干扰红外传感器对太阳光、白炽灯光都有响应这个问题我在前面提过解决办法就是加遮光罩。另外如果传感器离地高度超过1cm反射信号会非常弱阈值怎么调都调不出一个稳定的窗口这时候优先降低离地高度到3mm左右。还有一个坑是阈值调得太临界。有些同学调试的时候用万用表看到输出刚好能翻转就收手了结果小车跑起来震动一下信号抖动一下逻辑就乱套。正确的做法是把电位器调到阈值窗口的中间位置也就是让白色地面的输出余量尽量大黑线上的输出也尽量远离阈值点。这样系统才对器件参数漂移和电源波动有冗余。如果两路传感器严重不匹配一个灵敏一个迟钝小车会一直偏向一边。这时候先检查两个传感器是否在同一直线上离地高度是否一样再检查两个电位器阻值是否调得一致。元件的离散性很正常不必强求两路电阻值相同只要两路输出在同样的黑白条件下翻转一致就行。6.2 电机不转或没力电源/使能/共地排查整车搭好以后发现电机不转先不要怀疑芯片烧了。我排障的顺序是先量电池电压再量L298N电源脚再量使能脚最后量逻辑输出。很多“电机不转”的案例根源是电池没电了听着很好笑但真的一抓一大把。如果电池有电电机还是不转大概率是共地问题。L298N板子的GND、7805的GND、电池的GND三者在电路板上必须保证是同一根地线。有人从锂电池保护板引出电源逻辑部分和电机部分各走各的地中间没有联通整个系统就是悬空的什么信号都白搭。还有一个常见问题是L298N的使能引脚没有拉高。L298N的ENA、ENB在有些模块出厂时默认是低电平必须外部给高电平才能启用。我们的电路里ENA、ENB接的是逻辑门输出如果逻辑门输出正常但电机不转用一根杜邦线直接把ENA接到5V试试如果电机转了就说明问题在逻辑模块或者信号线上。6.3 转向不积极间距、速度与策略很多小车能跑但总是冲出赛道尤其是过弯的时候。这里面的核心原因是速度太快和传感器间距太宽。纯硬件方案没有PID调速电机转速是固定的所以转弯能力完全靠传感器探测的提前量和车轮差速来实现。速度越快留给修正的时间越短就越容易冲出去。解决思路有三个层次。第一降低车速最简单直接。可以在电机供电回路上串联两颗硅二极管利用二极管的正向压降把电机电压从7.4V降到6V左右消耗的能量不算大但效果立竿见影。第二把传感器间距收窄一些让两个传感器贴近黑线边界压线后的纠偏动作会更早触发。第三改造成反转转向在转向时一侧电机不是停转而是反转这个需要改变方向引脚的逻辑用逻辑门控制IN1、IN2效果会激进很多。我自己实验下来入门阶段用“停轮式”转向就够用了关键是速度要压下来。先让小车以比较低的速度稳定跑完整圈再逐步提升速度一点一点往上加才是纯硬件循迹的正确调法。6.4 避坑速查表问题现象可能原因解决办法传感器输出一直抖动阈值太临界电位器调到余量最大的位置传感器在强光下失效可见光干扰加遮光罩小车总朝一侧偏左右传感器高度不一致重新校准安装高度电机完全不动电池没电或共地断路检查电源和GND连通性电机能转但不听使唤逻辑门输出电平不对对照真值表逐级量电压过弯总是冲出赛道速度太快串二极管降压或缩小传感器间距逻辑门芯片发热输出电压短路断电后检查输出线是否有搭锡CD4071输出一直是低输入有悬空引脚不用的输入接5V或GND这张表是我做纯硬件循迹小车时踩坑的浓缩版。遇到的问题基本都是这几类只要沉住气按照表格里的思路一项一项排查就一定能找出原因。我个人在实际操作里的体会是这套纯硬件小车虽然看起来不如单片机方案“高级”但它把从物理世界到逻辑判断再到功率驱动的整个链路完整地串了一遍。做完之后你对光电器件怎么用、比较器开漏输出为什么必须上拉、组合逻辑怎么化简、H桥驱动为什么需要使能脚这些问题的理解会比看十遍课本都牢固。最后再分享一个小技巧调试的时候在小车底盘侧面贴一段胶带写上日期和速度档位每次调整完都做记录。这个习惯帮我节省了大量重复试错的时间也让我在后续做单片机版本的时候能直接复用这套纯硬件方案里的传感器电路和逻辑设计思路。
返回列表