ARTICLE DETAIL

资讯详情

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

出租车计价器数电课设:从规则到电路的全套设计指南

出租车计价器数电课设:从规则到电路的全套设计指南 又到数电课程设计的扎堆季出租车计价器几乎是每年必现的“保留题目”。但真正动手的时候很多同学才发现这个题目看着简单真拆起来涉及计数、译码、预置、分频、组合逻辑判幅、信号消抖一整套东西全串在一起远不是“接几个计数器”就能交差的。这篇文章就把我做这个课设的完整思路、芯片选型、电路设计、调试踩坑全部写出来给正在被这个题目折磨的同学一份能直接落地的参考。1. 先把计价规则吃透从需求到设计指标1.1 计价器到底要完成什么功能出租车计价器表面上看就是“显示里程和金额”但拆开来看它要同时处理三种完全不同的信号流第一路是里程信号。车轮每转一圈传感器输出若干个脉冲这些脉冲经过整形和分频后变成“每公里一个脉冲”或者“每0.1公里一个脉冲”。计数器对脉冲累加就是行驶里程。第二路是时间信号。出租车低速行驶或停车等待时计价器要按“等待时间”计费这需要有一个稳定的时基脉冲通常是1Hz的秒脉冲再通过分频产生“每5分钟一个脉冲”的等待计费信号。第三路是金额信号。金额不是单纯计数它包含起步价、超程单价、等待单价分段计算。起步价是固定预置进去的超程和等待的费用则要按规则累加。把这三路信号梳理清楚课程设计的基本轮廓就出来了里程计数模块、时间计数模块、起步判幅模块、计费脉冲生成模块、费用计数显示模块、清零复位模块。每个模块各司其职最后在数码管上呈现结果。1.2 课程设计版本的需求简化实际出租车计价器的计价规则非常复杂有夜间加价、燃油附加费、低速等待与正常行驶的状态切换等等。如果完全复制真实规则一个课设做不完。我做课设时采用的是一套“简化但不失原理”的规则这也是大多数教材和题目默认的方案项目规则起步价3公里以内统一收费8元超程计费超过3公里后每公里加收2元等待计费每等待5分钟加收2元里程脉冲每公里产生1个脉冲通过传感器分频实现时间脉冲1Hz秒脉冲每300秒产生1个等待计费脉冲显示范围里程两位0-99公里金额两位0-99元这个方案的优点是每个模块的逻辑都很清晰计数器的位数可控演示效果直观。按下“模拟里程按钮”一次里程加1公里里程超过3公里后金额开始按每公里2元累加按下“模拟等待按钮”一次相当于过了5分钟金额加2元。如果你拿到的题目要求精度到0.1公里问题也不大。只需要把里程计数器的位数加长一位并且把“3公里起步”的判幅逻辑对应改成“30个脉冲”计费脉冲的倍率同步调整。文章后面会专门讲这个升级方案。1.3 整体方案选型分立芯片还是FPGA做课程设计首先面临路线选择用74系列/4000系列分立芯片搭还是用FPGA写Verilog实现。两条路都能完成题目但侧重点完全不同。分立芯片方案是我推荐优先考虑的。原因在于数电课设的核心考察点就是组合逻辑和时序逻辑的实际运用用CD4518做计数、CD4511做译码、74LS192做预置计数、555做时基每一步都能跟教材上的知识点一一对应。老师验收时问“你这个进位怎么实现的”“预置端为什么接这个电平”你都能指着电路图讲清楚。FPGA方案的优势是灵活、修改方便、代码复用性好但劣势也很明显如果题目要求“使用中小规模集成电路设计”FPGA属于超纲如果实验箱的数码管驱动方式比较特殊还要花时间调引脚约束和显示刷新逻辑反而比搭面包板更容易卡住。对于大多数学校的大纲要求分立芯片方案最稳妥、最好讲、也最容易拿高分。如果你对FPGA感兴趣可以等分立方案做完后用Verilog把同一个功能重新写一遍做对比写在课设总结里反而是加分项。2. 系统架构与模块裁剪2.1 以“脉冲-计数-显示”为主线的整体架构出租车计价器的本质是“脉冲进来数字出来”。我把整个系统分成五条主要链路里程计数链路外部里程脉冲进入两位BCD计数器计数结果同时送数码管显示和超程判幅电路。起步判幅链路当里程计数达到3时判幅电路输出一个“起步完成”信号用RS触发器锁存这个状态。锁存的意义在于大于3公里的所有时刻超程计费都有效而不是只在等于3的那一刻有效。超程计费脉冲链路起步完成后里程每再来一个脉冲就通过倍频电路产生2个计费脉冲输入到费用计数器。等待计费链路1Hz时基脉冲经过300分频后每5分钟产生一个脉冲同样经过倍频电路产生2个计费脉冲。费用计数显示链路费用计数器采用可预置芯片上电或按下复位键时预置数字8之后每收到计费脉冲就加1实时的金额显示通过译码器送到数码管。整体思路就这么简单计程靠计数器判起步靠组合逻辑计费靠预置加法计数等待靠分频。各模块之间的信号流向是单向的不存在复杂的反馈控制这对用分立芯片搭电路非常友好。2.2 每个模块选什么芯片、为什么芯片选型是整个设计里最体现“经验值”的部分。我最终确定的清单如下模块芯片选择理由里程计数CD4518双BCD加法计数器一片管两位级联方便起步判幅74LS85 或 门电路比较里程是否达到3公里起步状态锁存74LS74双D触发器用Q端输出起步完成标志计费脉冲倍频74LS74 或 RC延时与非门将1个输入脉冲扩展为2个输出脉冲费用计数74LS192可预置BCD加减计数器预置端实现起步价8元译码驱动CD4511BCD转七段码驱动共阴数码管时基脉冲555定时器产生1Hz基准信号分频CD4060 或 74LS90将1Hz分频为每300秒1个脉冲消抖双输入与非门构成RS触发器消除机械按键抖动有几个选型细节值得多说一句。CD4518虽然便宜好用但它只能加法计数没有预置端所以费用计数不能用它来做。费用计数必须能预置起步价所以要用74LS192。74LS192的预置是异步的只要PE端拉低数据立刻从D0-D3进入计数器这在复位时非常方便不需要等待时钟边沿。CD4511译码器要注意是驱动共阴数码管的如果你实验箱上配的是共阳数码管就需要换CD4513或者加反相驱动。这个细节如果搞反了数码管要么不亮要么显示乱码。2.3 最容易被忽略的三个信号调理环节很多同学的电路原理图看着没问题一上电就各种乱跳问题几乎都出在信号调理上。这里分享三个我反复踩过坑的环节。第一个是机械按键消抖。课程设计里模拟里程脉冲和等待信号基本都是通过按键手动产生。机械按键在按下和释放的瞬间会产生毫秒级的抖动直接接到计数器时钟端一次按压可能被计成3到5次。解决方法是按键信号先经过由两个与非门交叉反馈构成的RS触发器消抖或者并联一个0.1uF电容做RC硬件消抖。RS触发器消抖效果最好响应也快推荐优先用。第二个是TTL与CMOS混用电平匹配。74LS系列是TTL电平CD4000系列是CMOS电平两者的输入输出高电平阈值不一样。TTL输出高电平最小为2.7VCMOS在高电源电压下要求输入高电平接近VCC。如果CD4518的电源接5V74LS74输出直接连过去有时候会出现“逻辑高但就是触发不了”的奇怪问题。稳妥做法是把CMOS芯片和TTL芯片尽量放在同一条信号链路上必要时在TTL输出端加上拉电阻到5V。第三个是计数器异步清零端的防干扰处理。CD4518的Cr端是高电平清零如果这个引脚悬空很容易感应噪声导致计数器莫名其妙归零。所有不用的清零端、置数端、使能端一律要接到确定的电平上不能悬空。这个习惯能帮你少排查一半的诡异故障。3. 核心电路设计一步一步焊出来3.1 里程计数与“3公里起步”判幅电路里程计数部分很直接CD4518内部有两个独立的BCD计数器把第一个计数器个位的进位输出Q4接到第二个计数器的时钟输入端就构成了两位十进制计数。CD4518是上升沿触发所以级联时要用低位的Q4输出而不是Q4取反。接反了的话个位从9跳变到0的下降沿不会触发十位计数十位就永远不走。判幅电路是实现“3公里起步”的关键。里程是两位BCD码个位和十位都是4位二进制。要判断“是否大于等于3”分情况讨论十位大于0说明里程已经超过9公里必然大于3十位等于0且个位大于等于3说明里程在3到9公里之间十位等于0且个位小于3未达到起步里程。用门电路实现时我用了最简单的方案把个位BCD码的8、4、2、1位分别引出判断“个位大于等于3”等价于“Q2为1或Q1为1且Q4为1”这里的Q4是BCD码的8位Q1是BCD码的2位Q2是BCD码的1位。这个组合逻辑加上十位非零的判断一起接到74LS74的D端当条件满足时在时钟作用下把Q置1以后一直保持。实际搭建时有个更巧妙的做法不用74LS85比较器直接用一片74LS74的D触发器。把里程计数器输出的“等于3”译码信号接D端时钟端再接一个固定脉冲。当里程到达3公里时D端为高触发后Q输出高电平“起步完成”标志。这个标志一方面打开超程计费的与门另一方面反向后可以点亮一个LED指示灯演示时很有仪式感。3.2 超程“每公里加2元”的倍频电路起步完成后里程计数器每收到1个脉冲费用计数器要加上2元。但费用计数器只有一个时钟端来一个脉冲只能加1。所以必须设计一个倍频电路把1个里程脉冲变成2个费用计数脉冲。倍频的做法有很多种我实验后觉得最稳定的是“延时异或”方案。核心思路把输入脉冲分成两路一路直接送另一路经过RC延时约几毫秒后再送两路信号经过异或门后由于边沿时间错开每个输入脉冲会产生一正一负两个输出沿。再配合整形电路就得到了两个间隔几毫秒的计数脉冲。如果你手头有74LS74也可以用双D触发器搭一个简单的“双沿输出”电路。把输入脉冲接到两个D触发器的时钟端一个触发器的Q端输出到费用计数时钟另一个触发器的Q非端输出利用上升沿和下降沿分别触发等效于每个输入脉冲产生两个输出脉冲。无论用哪种方案都需要注意倍频出来的两个脉冲之间要有足够的时间间隔至少几微秒确保74LS192在一个脉冲的建立保持时间内完成计数否则第二个脉冲可能丢失。RC延时的阻容参数建议取1kΩ和1uF延时约1毫秒实测足够稳定。3.3 费用计数与起步价8元的预置实现费用计数部分我选用两片74LS192级联形成两位十进制加法计数器。74LS192的预置端是低电平有效的PED0-D3是预置数据输入。把十位的D3D2D1D0接成0000个位的D3D2D1D0接成1000也就是十进制8。复位逻辑这样设计按下清零按键时一方面给里程计数器CD4518的Cr端一个高电平让里程清零另一方面给74LS192的PE端一个低电平把8预置进去同时把起步标志触发器清零。因为预置是异步的所以在按下按键的瞬间费用显示就会立刻变成“08”效果非常直观。等待计费的自检方法是费用预置为8之后手动给等待计费倍频电路输入一个脉冲费用立刻变成10再输入一个变成12。每5分钟加2元的规则在演示时只需口头说明“这个脉冲是由秒脉冲经过300分频产生的”然后把一个模拟按键接到分频输出端就可以反复演示。如果你希望费用计数器的进位显示更清晰还可以把十位74LS192的借位/进位输出接一个LED当金额超过99元时提示溢出。课程设计演示中一般不会跑到这么多钱但加上这个输出可以作为冲刺满分的细节。3.4 显示驱动与数码管接口显示部分最关键的一步是确认你手头的数码管是共阴还是共阳。CD4511只能驱动共阴数码管。如果是共阳管需要将公共端接VCC并且用CD4511的输出经过PNP三极管或者用OC门反相器驱动。CD4511有3个控制引脚实际使用时必须处理正确。LT灯测试要接高电平否则数码管全灭BI消隐要接高电平否则所有段都被强制关闭LE锁存使能要接低电平否则数据被锁存后不更新显示会凝固在旧值上。这三个引脚只要有一个接错显示就出问题而且是那种“看起来电路都对但就是没反应”的隐形故障。里程显示和费用显示各需要两位数码管一共四位。CD4511的驱动电流不大但驱动四位数码管完全够用。需要注意的是多个CD4511并联在同一个5V电源上每个译码器工作时会有几毫安的电流脉冲电源线要尽量粗一点避免公共阻抗耦合导致显示亮度波动。4. 实操调试与常见问题排查4.1 推荐调试顺序先分模块再联调拿到电路板或面包板不要急着把所有模块一次接通。联调时一旦出问题信号链路长排查范围大很容易心态崩溃。我习惯按照从简单到复杂的顺序分步调试。第一步先调时基电路。用示波器看555输出端确认1Hz方波正常频率可调。如果没有示波器用万用表测平均电压1Hz方波接LED可以看到明显的闪烁肉眼可判断。第二步单独调里程计数。把按键消抖电路接到CD4518时钟端每按一次观察里程数码管加1。连续按10次十位从0变1个位归0说明级联正确。第三步调费用计数预置。接通复位按键确认费用显示为08。然后手动给费用计数时钟端加脉冲每来一个脉冲费用加1说明74LS192加法方向正确。第四步调判幅与倍频联动。先把里程手动加到3观察起步标志LED是否点亮。再继续加到4、5观察费用是否正确按“每公里加2元”的规律增加。第五步联调等待计费。按下“等待按键”确认费用加2元。最后把所有信号接成自动模式让555时基驱动整个系统做全自动演示。4.2 高频故障速查表调试过程中故障集中出现在几个固定位置我把高频问题整理成一张速查表遇到类似现象可以直接对号入座。故障现象可能原因处理方法数码管全灭电源未通/公共端接错/译码器LT或BI引脚电平错误查5V供电确认共阴管公共端接地LT、BI接高数码管显示乱码、笔画错乱BCD输入线顺序接反/译码器型号与数码管类型不匹配核对A、B、C、D与CD4511引脚的对应关系按键按一下计数多次机械抖动未消除加RS触发器消抖或RC滤波计数器不计数时钟端信号未到达/清零端悬空导致一直复位用示波器测CP端波形Cr端接确定电平十位不进位CD4518级联方式错误确认个位Q4接到十位CP端且是上升沿触发里程到了3费用不增加起步判幅输出未锁存/倍频电路没工作检查74LS74 Q端电平用LED监测中间信号倍频只输出一个脉冲RC延时时间不够/异或门输入翻转太快增大RC常数到1ms以上复位后费用不显示874LS192预置数据端接错/PE端电平时序不对核对D0-D3的接线确认按下复位时PE确实拉低4.3 几个我踩过的坑第一个坑是CD4511的LE引脚悬空。我做第一版的时候只关注了LT和BILE没接结果数码管显示“8”但怎么按键数字都不更新。查了半天才发现LE悬空在某些芯片内部等效为高电平数据一直处于锁存状态。这个教训之后我所有控制引脚一律强制接高或接低绝不悬空。第二个坑是倍频脉冲“丢失一半”。用RC延时异或门做倍频时第一次测试发现每公里费用只加1元说明第二个脉冲没进去。后来用示波器一看两个输出脉冲的间隔只有几十纳秒74LS192根本来不及响应。把RC改大到1kΩ加1uF后两个脉冲间隔约1毫秒计数稳定。第三个坑是TTL和CMOS混用时的高电平不够。74LS74的输出直接连CD4518的时钟端低速时看起来正常一旦脉冲频率提高偶发漏计。用万用表量到TTL高电平只有3.2V左右而CD4518在5V供电下要求高电平至少3.5V。解决办法是在74LS74输出端对5V接一个2.2kΩ上拉电阻电平拉到接近5V问题立刻消失。5. 这个设计还能怎么升级5.1 从1公里精度升级到0.1公里精度很多题目的验收要求显示到0.1公里这时把里程计数器扩展为三位BCD计数即可显示格式是“XX.X”公里。起步判幅条件从“等于3”改为“等于30个脉冲”超程计费改为每0.1公里加0.2元。这个改动需要把计费倍频从“1脉冲变2脉冲”改为“每5个里程脉冲产生2元”用模5计数器配合组合逻辑可以实现。5.2 增加日间/夜间切换和低速等待判断更贴近真实计价器的扩展方案是增加日间夜间模式切换。白天超程单价2元每公里夜间3元每公里。用拨码开关控制倍频电路的倍率即可夜间模式把倍频从“输入1脉冲出2脉冲”切换为“输入1脉冲出3脉冲”。低速等待判断则相对复杂需要引入车速信号与设定阈值比较产生“低速模式”信号后里程计数暂停时间计数开始。这个扩展可以用两片74LS85比较器实现。5.3 用Verilog/FPGA重做的思路如果后续想用FPGA实现核心模块可以用三段式状态机来做出租车计价器的控制逻辑。里程计数、费用累加、显示刷新各写一个always块然后用一个顶层模块例化。相比分立芯片FPGA方案最大的好处是修改计价规则只需要改代码里的状态转移条件不用动硬件。唯一需要注意的是数码管显示要做动态扫描避免多位数码管同时点亮时电流过大。6. 个人体会与最后一点建议这个出租车计价器题目表面上是做电路实际上是在训练你把一个真实问题拆解成若干可实现的数字电路模块的能力。我做完之后最大的体会是不要急着焊板子先在纸上把计价规则写清楚再把规则翻译成“什么信号触发什么动作”最后才落成芯片和连线。这三步走完电路图自然就出来了调试也顺得多。最后再分享一个实用的小技巧如果时间允许先用Multisim或者Proteus把完整电路仿真一遍再动手做实物。仿真时可以把里程脉冲、等待脉冲都用信号源设置成固定频率观察数码管的时序变化。仿真通过后实物的成功率会高很多因为你在软件里已经把逻辑关系理清楚了剩下的就主要是硬件焊接和电平匹配的体力活。祝大家的课设一次通过。
返回列表