手把手教你用74HC148搭建16线-4线优先编码器(附电路图详解)
做过单片机外扩按键、做过拨码开关矩阵的朋友都知道,最烦的就是I/O口不够用。16个按键如果一个个接,直接吃掉16个GPIO,遇到引脚紧张的单片机简直想哭。用编码器可以大幅压缩输入线数量,而74HC148就是干这个的经典芯片——一颗芯片处理8路输入,输出3位二进制编码,两片级联就能实现16线输入、4位编码输出,I/O占用直接从16根降到4根。
这篇文章就把16线-4线优先编码器的完整搭建过程拆开讲,从74HC148的引脚逻辑、真值表,到两片芯片的级联方式、或门合并细节,再到调试和排查,全部覆盖。适合电子爱好者、课程设计选手,以及所有想把“按键数量翻倍但I/O不加”的嵌入式开发者。内容偏实操,我会把原理和接线都说透,保证你看完能直接抄作业。
1. 先把74HC148吃透:引脚、真值表和优先级逻辑
1.1 引脚功能速览
74HC148是高速CMOS八输入优先编码器,封装形式常见的有DIP-16和SOIC-16,看下面这张引脚清单就明白了。
| 引脚编号 | 名称 | 方向 | 功能说明 |
|---|---|---|---|
| 1-3 | D4、D5、D6 | 输入 | 编码输入,低电平有效 |
| 4 | D7 | 输入 | 编码输入,低电平有效,优先级最高 |
| 5 | A2 | 输出 | 编码输出(反码),最高位 |
| 6 | A1 | 输出 | 编码输出(反码) |
| 7 | A0 | 输出 | 编码输出(反码),最低位 |
| 8 | GND | 电源 | 接地 |
| 9 | EO | 输出 | 输出使能(无有效输入时输出低电平) |
| 10 | GS | 输出 | 组信号(有有效输入时输出低电平) |
| 11 | A0 | 输出 | 编码输出(反码) |
| 12 | A1 | 输出 | 编码输出(反码) |
| 13 | A2 | 输出 | 编码输出(反码) |
| 14 | D0 | 输入 | 编码输入,低电平有效,优先级最低 |
| 15 | D1 | 输入 | 编码输入,低电平有效 |
| 16 | Vcc | 电源 | 正电源,范围2V-6V |
这个表看着有点绕,因为DIP封装下芯片引脚顺序是逆时针排列,所以数据手册里的引脚图和上面的表格感觉像“对不上号”。实际动手时先认准凹口方向,凹口朝上,左上角是D4(第1脚),右下角是Vcc(第16脚),就错不了。网上好多接线图把引脚画得五花八门,以数据手册为准最稳。
1.2 真值表与反码输出:为什么偏偏要低电平有效
74HC148的输出是反码,这一点非常容易踩坑。它的完整逻辑是这样:
- 当EI(输入使能,低有效)为高电平时,芯片被禁用,A0-A2全部输出高电平,EO为高,GS为高。
- 当EI为低电平时,芯片正常工作,但所有输入D0-D7也是低电平有效。也就是说,你按下按键使其接地(低电平)才会触发编码。
- 无任何输入(全部为高)时,EO输出低电平,GS输出高电平,A0-A2输出高电平(表示无编码)。
- 有输入时,GS输出低电平,表示“本组有有效编码输入”,A0-A2输出对应编号的反码。
截取核心部分如下:
| 输入(低有效) | A2 | A1 | A0 | GS | EO |
|---|---|---|---|---|---|
| D0 = 0 | 1 | 1 | 1 | 0 | 1 |
| D1 = 0 | 1 | 1 | 0 | 0 | 1 |
| D2 = 0 | 1 | 0 | 1 | 0 | 1 |
| D3 = 0 | 1 | 0 | 0 | 0 | 1 |
| D4 = 0 | 0 | 1 | 1 | 0 | 1 |
| D5 = 0 | 0 | 1 | 0 | 0 | 1 |
| D6 = 0 | 0 | 0 | 1 | 0 | 1 |
| D7 = 0 | 0 | 0 | 0 | 0 | 1 |
| 全为1 | 1 | 1 | 1 | 1 | 0 |
以D3输入有效为例,A2A1A0输出100,这是数字3的按位取反,把它再取反一次就得到正常的0011。所以很多人第一次用这芯片,发现输入3号键竟然输出电平“100”,还以为芯片坏了,其实就是反码的锅。
为什么要设计成低电平有效和反码输出?原因很实际:TTL/CMOS电路里,灌电流驱动能力通常比拉电流强,低电平有效的输入可以简化驱动电路。反码输出则方便直接驱动LED显示(LED共阳极一端接Vcc,另一端经限流电阻接输出脚,输出为低电平时LED点亮,亮灯的引脚组合刚好就是逻辑“0”对应的位置,非常直观)。在级联扩展时,反码输出也让高位组与低位组的合并变得更加顺理成章,后面会看到。
1.3 三个关键控制脚:EI、EO、GS在级联中分别干什么
EI、EO、GS这三个脚是74HC148的精华,也是能不能玩转级联的关键。
- EI(Enable Input,输入使能):低电平有效。EI为高时,芯片完全“罢工”,输出全为高,GS和EO也不反映任何输入状态。EI为低时,芯片才执行编码。
- EO(Enable Output,输出使能):当EI为低且没有任何有效输入时,EO输出低电平;其他情况EO输出高电平。换句话说,EO可以通俗理解为“本组芯片是否处于空闲状态”的低有效指示。用空闲状态去控制后面一片的EI,就能实现“前一组没输入,后一组才允许工作”的级联。
- GS(Group Select,组信号):当EI为低且有有效输入时,GS输出低电平,表示“本组有输入并且正在编码”;无输入或芯片禁用时GS输出高电平。GS在级联扩展中用来产生高位编码,同时也能区分“当前有输入”和“当前无输入”两种状态。
一句话总结:EO管“我空不空”,GS管“我有没有货”,EI管“允不允许我干活”。把这三脚的关系理顺,16线的级联方案就成功了一半。
2. 两片级联的整体方案设计:从8线到16线的思路
2.1 为什么不能直接把两片输出并在一起
既然一片74HC148只能处理8路输入,那两片加起来正好16路,最直接的想法就是把两片A0-A2对应短接,共用一组输出线。这个想法方向对,但操作上是错的。74HC148的A0-A2属于CMOS推挽输出结构,高电平由上面的PMOS导通提供,低电平由下面的NMOS导通提供。两片芯片的输出直接并联,一旦一片输出高、另一片输出低,两个管子就会形成从Vcc到GND的低阻通路,轻则逻辑混乱,重则芯片过热甚至烧毁。
正确的做法是在每路编码输出之间加“或门”合并。因为两片148在工作时是互斥的——同一时刻只有一片真正输出有效编码,另一片处于禁用状态,输出全为高。把两片的A0相或、A1相或、A2相或,结果就等于有效工作的那一片的输出。74HC32是一片四路2输入或门,刚好用三个门搞定三路合并,还剩一个门空着,特别合适。或者也可以用3输入或门74HC4075,但没必要,74HC32更常见。
2.2 主从式使能级联:让高8位整体优先
16线扩展的经典连接方式,是把两片74HC148分成“主芯片”和“从芯片”。
- 主芯片接高8位输入X15-X8,EI直接接地,也就是始终处于使能状态。
- 从芯片接低8位输入X7-X0,EI不接地,而是接主芯片的EO。
- 主芯片的GS经过一级反相,作为编码输出的最高位Y3。
逻辑过程是这样的:当高8位没有任何输入时,主芯片空闲,EO输出低电平,从芯片的EI被拉低,从芯片开始工作,对低8位输入编码。当高8位一旦有任何一个输入有效,主芯片立刻工作,EO变高,从芯片EI变高被禁用,低8位的输入全部被屏蔽。这保证了高8位的优先级整体高于低8位,做到了16线范围内“编号越大,优先级越高”。
这个设计有一个好处:不管有没有输入,主芯片始终在上电监测高8位,从芯片只是被动地等待主芯片“让位”。整体的响应延迟路径很短,实际测试从输入有效到输出稳定大概也就是几十纳秒,完全满足按键扫描这类低速应用,就算做信号源选择器也没问题。
2.3 输出编码如何组合成16线-4线
三路或门的输出只是低3位,还需要第4位来表示“当前编码来自高8位还是低8位”。这时候GS就派上用场了。
主芯片的GS逻辑是:高8位有输入时GS=0,无输入时GS=1。因此第4位Y3可以通过反相器把GS取反得到,也就是:高8位有输入时Y3=1,低8位输入有效时Y3=0。这和16进制编码的规则完全一致——X8-X15对应Y3=1,X0-X7对应Y3=0。
这里还要注意反码的处理。74HC148输出的A0-A2是反码,所以完整电路里在或门合并之后,再接三个反相器把A0-A2取正。最终得到的Y3Y2Y1Y0就是一个正码的4位二进制数,直接对应有效输入的编号。举例来说,X10按下,主芯片编码D2对应反码101,取反后低3位为010,Y3=1,合成1010也就是十进制10,正好对上。如果用不到正码,比如后级单片机也支持读反码,可以省掉这三个反相器,后面我再讲这个取舍。
3. 手把手接线:完整电路图详解与器件清单
3.1 器件清单
为了搭建这个16线-4线优先编码器,需要准备的材料如下:
| 器件 | 数量 | 说明 |
|---|---|---|
| 74HC148 | 2片 | U1主芯片(高8位),U2从芯片(低8位) |
| 74HC32 | 1片 | 四路2输入或门,用于合并编码输出 |
| 74HC04 | 1片 | 六反相器,用于取反GS和A0-A2 |
| 10kΩ电阻 | 16个 | 输入上拉电阻,确保空闲时为高电平 |
| 220Ω电阻 | 4个 | LED限流电阻 |
| 0.1uF瓷片电容 | 2个 | 芯片电源去耦电容 |
| 10uF电解电容 | 1个 | 电源入口滤波电容 |
| 按键或拨码开关 | 16个 | 输入信号源 |
| LED | 4个 | 编码结果显示 |
| 面包板或PCB | 1块 | 搭建平台 |
| 5V直流电源 | 1个 | 整板供电 |
选74HC系列不是因为只有它能用,而是因为74HC系列是CMOS工艺,功耗低、输入阻抗高、电源范围宽,2V到6V都能工作,跟5V单片机系统是最佳搭档。74LS148作为TTL老型号也能用,但功耗更大,输入高电平阈值更高,不建议新设计使用。
3.2 电源、去耦与输入电路设计
电源是整个电路稳定工作的基础。5V电源入口先接一个10uF电解电容,再在每个74HC148的Vcc和GND之间就近跨接一个0.1uF瓷片电容。去耦电容要尽量靠近芯片电源引脚,这样能吸收电源线上的高频噪声,防止芯片逻辑误翻转。面包板搭建时,很多新手容易忽略这一步,结果就是电路工作不稳定,输出偶尔乱跳。
16路输入统一接10kΩ上拉电阻到Vcc,按键的另外一端接GND。按键按下时,对应输入脚被拉低,形成有效低电平。之所以必须加上拉电阻,是因为CMOS芯片的输入不能悬空:悬空状态下引脚电平不定,静电或噪声都可能让芯片以为有输入。10kΩ算是折中值——静态功耗小,抗干扰能力也够,实际用4.7k到20k之间都可以,手头有什么用什么是常态。
LED指示电路方面,4个LED采用共阳极接法,LED正极统一接Vcc,负极串220Ω限流电阻后接到Y0-Y3。这样输出低电平时LED点亮,正好可以用“亮=0、灭=1”的逻辑来读数。测试时看到LED灯组合就能直接判断编码对不对,比拿万用表点来点去快太多。
3.3 主从级联与输出合并的详细接线
下面这张文字版电路图,把16线编码器的连接关系都标清楚了,照着接线即可。
+5V | +-----+-----+ | | 10uF | | | GND +---+ | +----+----+ | 0.1uF | | | +---------+ | +------------------+------------------+ | | U1: 74HC148(主/高8位) U2: 74HC148(从/低8位) | | X15 ---- D7 X7 ---- D7 X14 ---- D6 X6 ---- D6 X13 ---- D5 X5 ---- D5 X12 ---- D4 X4 ---- D4 X11 ---- D3 X3 ---- D3 X10 ---- D2 X2 ---- D2 X9 ---- D1 X1 ---- D1 X8 ---- D0 X0 ---- D0 EI ---- GND EI ---- U1.EO Vcc ---- +5V Vcc ---- +5V GND ---- GND GND ---- GND A0 ---- 74HC32(1A) A0 ---- 74HC32(1B) A1 ---- 74HC32(2A) A1 ---- 74HC32(2B) A2 ---- 74HC32(3A) A2 ---- 74HC32(3B) GS ---- 74HC04(4A) EO ---- U2.EO(悬空) EO ---- U2.EI GS ---- 悬空/指示LED 74HC32: 1Y = 1A OR 1B -> 74HC04(1A) -> Y0 2Y = 2A OR 2B -> 74HC04(2A) -> Y1 3Y = 3A OR 3B -> 74HC04(3A) -> Y2 74HC04: 4Y = NOT 4A (即NOT U1.GS) -> Y3有几处接线要特别提醒:
- U1的EI必须直接接GND,主芯片始终工作,不能悬空。悬空状态下CMOS输入电平不定,整个电路逻辑就是乱的。
- U2的EI接U1的EO,不要搞反。U1空闲时EO=0,U2才被允许工作;U1有输入时EO=1,U2被锁死。这个跨接关系是整个级联的核心。
- U1的GS经过反相后作为Y3。U2的GS在这个方案里用不上,可以悬空,也可以接一个LED作为“低8位有输入”的指示。
- U2的EO悬空即可,不需要接任何东西。
- 74HC32的三个或门分别合并U1和U2的A0、A1、A2,顺序别接错,否则编码全乱。
3.4 完整原理逻辑图(数据流视角)
如果从数据流的角度看,整个系统可以分成三级。
第一级是输入采集。16个按键信号经过上拉电阻稳定成高电平,按键按下时拉低,送入两片74HC148的D0-D7。这里X15-X8对应主芯片,X7-X0对应从芯片。
第二级是编码与级联。主芯片的EI接地持续工作,它的EO控制从芯片的EI。没有高8位输入时,从芯片接管低8位的编码任务;高8位有输入时,从芯片立刻罢工,主芯片负责全部编码。两片芯片各自的编码结果在或门合并,得到有效的3位反码。
第三级是正码换算与显示。三路反码经过反相器得到正码,主芯片GS再取反得到最高位,最后拼成一个4位二进制数,驱动LED或送往单片机读取。整条链路逻辑清晰,每个环节都可以单独测量,排查问题时很好下手。
4. 调试与功能验证:从静态电平到动态测试
4.1 上电前的基础检查
不要在面包板上搭完线就急着上电,先花两分钟做静默检查。用万用表蜂鸣档确认Vcc和GND之间没有短路,芯片的凹口朝向一致,电源正负极没有接反。74HC148的Vcc和GND在芯片两侧,跟74HC32、74HC04也不一样,新手上电前最容易犯的错就是把电源接到输出脚上。
确认无误后上电,用万用表测U1的EO对地电压,正常应接近0V,因为U1处于空闲状态。测U2的EI对地电压也应是0V左右,说明U2已经被使能。如果这两个电平不对,顺藤摸瓜检查电源和地线的连接。
实际上最省事的方式,是先单独测试一片74HC148。把一片芯片的EI接地,D0-D7全部通过10k电阻上拉,A0-A2分别接LED。然后逐个按下对应按键,观察三颗LED的组合是否等于反码。单芯片验证通过,再开始级联,这样能把问题范围缩小,避免两片芯片一起出错时不知道从哪里排查。
4.2 用按键和LED逐项验证优先级与编码
16路输入接好之后,我建议按“单输入验证、组间优先级验证、组内优先级验证”三个步骤来测试。
第一步,单输入验证。只按X0,理论上输出Y3Y2Y1Y0=0000,也就是四颗LED全亮;只按X8,输出1000,第三颗LED灭其余亮(具体亮灭取决于你的接线顺序)。其他输入逐一测试,对照二进制编码表确认。
第二步,组间优先级验证。同时按下X2和X9,由于高8位整体优先,输出应该是1001,也就是X9的编码。这一步验证的是U1的EO对U2的EI的禁用逻辑是否生效。如果输出变成0011(X2),说明U2没有被正确禁用,重点查U1的EO到U2的EI这根线。
第三步,组内优先级验证。同时按下X1、X3、X5,低8位组内X5优先级最高,所以输出0101。再测试主芯片组内同时按X10、X12、X15,输出应该锁定为1111(X15)。这三步走完,芯片的优先级逻辑基本就确认无误了。如果你的应用需要“低编号优先”,方向会相反,这个后面单独说。
4.3 用Multisim仿真先跑一遍
实物焊接之前先仿真能省一大笔时间。Multisim元件库里直接搜74HC148,在“74HC”目录下面能找到;74HC32和74HC04同样拖出来。仿真里用逻辑电平开关代替按键,用电压探针或者数码管代替LED,按实物电路的逻辑连一遍,按F5运行仿真。
仿真有一个好处:可以同时按下多个开关,直接用探针观察输出逻辑的变化,不会像实物那样出现接触不良或噪声干扰。我在仿真里测过,按下X9时Y3Y2Y1Y0=1001,按下X2时Y3Y2Y1Y0=0010,逻辑完全正确。把仿真跑通了再上实物,故障率会低很多。
如果用的是Proteus,方法和Multisim类似。74HC148在Proteus里位于“74HC”库,也可以直接用74LS148替代,逻辑功能相同,仿真输出一致。
5. 实测踩坑与常见问题排查
5.1 输入悬空导致误触发
这是新手最常遇到的现象:上电之后什么都没按,LED偶尔闪一下或者编码器乱输出。绝大多数原因是输入端悬空。CMOS芯片输入阻抗极高,悬空引脚会像一根天线一样捕捉周围的电磁干扰,尤其面包板上一堆飞线,噪声源太多了。
解决方法就是每个输入端接10kΩ上拉电阻到Vcc,确保静态时引脚稳定在高电平。有些同学想省电阻,觉得“不接按键的时候反正没有人碰它”,这个想法是错的,尤其是工作环境有开关电源、电机、继电器这些干扰源时,悬空输入能把整个系统带崩。16个电阻虽然多一点,但这是保证稳定性的底线。
5.2 输出编码看起来“倒过来了”
测试时可能会发现,按下X3,LED显示的是1100,而不是预期的0011。这不是芯片坏了,是74HC148输出反码。解决方案有两种。
一是按反码表对照,也省掉反相器。单片机读取时做一次取反运算即可,比如读到一个字节的低3位是0b100,按位取反得到0b011,就是3。二是硬件上补充反相器,也就是我前面电路图里那种74HC04取反的做法。两种方案各有适用场景——如果输出要直接驱动7段数码管或后级逻辑电路判断“1”表示有效,建议硬件取反;如果输出进单片机,完全可以在软件里取反,省一片芯片。
另外还有一个容易混淆的点:74HC148优先级最高的是D7,不是D0。同时按下D1和D3,输出的是D3的编码。有些学生误以为“编码器应该输出编号最小的那个”,这是对优先编码器含义的理解偏差。普通的编码器只允许一个输入有效,优先编码器则允许同时多个输入,并且只对最高优先级的那个输入进行编码。74HC148是后者,它解决的是“几个按键同时按下怎么办”的问题。
5.3 机械按键抖动导致输出不稳定
机械按键按下去的瞬间,簧片并不是一次接触到位,通常会抖动几个毫秒。对于编码器这种组合逻辑电路,抖动会造成输出的编码毛刺,表现为按下一次按键,LED快速闪烁好几个数字。
处理抖动有三种思路。第一种是RC低通滤波,在每个按键输入口串100Ω电阻、并0.1uF电容到地,把抖动产生的瞬态电平变化抹平。第二种是用施密特触发器,比如74HC14整形,把缓慢变化的边沿变成干净的陡峭边沿。第三种是在后级单片机读数据时做软件消抖,比如连续采样两次间隔10ms,一致才采用。如果是纯硬件电路直接带显示,RC滤波加施密特整形的组合最稳妥。
机械抖动对于“按一下键读取一次编码”的场景影响不大,因为人的手指按下时间远大于抖动时间。但如果你打算用这个编码器做旋钮编码、拨码开关等快速切换应用,消抖就不是可选项而是必选项了。
5.4 高频和动态输入时的毛刺处理
如果输入信号不是来自按键,而是来自其他数字电路或传感器,就要考虑信号跳变时的竞争冒险问题。74HC148从输入到输出的延迟,数据手册典型值在几十纳秒,两片级联再加或门和反相器,整体延迟大概100纳秒左右。在这段延迟窗口内,如果输入信号快速变化,输出可能出现短暂的中间态毛刺。
这个问题的关键在于应用场景。如果后级是单片机或锁存器,通常在特定时刻读取编码结果,只要读取时刻避开输入跳变,毛刺不影响结果。建议在单片机端加一个“数据有效”握手信号,比如利用GS的电平变化触发中断去锁存编码,这样就能彻底避开毛刺窗口。
如果用这个编码器直接驱动组合逻辑电路做实时控制,最好在输出端加一级74HC373或74HC574锁存器,用输入跳变沿触发锁存,让毛刺产生期间锁存器保持旧数据不变,直到输出稳定后才更新。这个做法相当于给电路加了一个“快照”功能,牺牲一点点延迟换来稳定输出,非常实用。
5.5 常见问题速查表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 上电后无任何输出 | Vcc或GND接反、芯片电源引脚虚接 | 用万用表逐个芯片测Vcc对GND电压 |
| 个别按键无效 | 该路输入上拉电阻脱落、按键接线错误 | 万用表测该输入脚空闲时是否为高电平 |
| 高8位和低8位互相干扰 | EO到EI的级联线接错或虚接 | 测U1.EO和U2.EI之间的电压是否随输入变化 |
| 输出编码是反码 | 未取反、或门合并顺序错误 | 对照反码真值表确认,必要时加74HC04 |
| 输出显示非有效编号 | 两片芯片的D0-D7接线顺序对调 | 检查X15-X8是否全接U1、X7-X0是否全接U2 |
| 同时按下多个键输出乱跳 | 按键抖动、输出竞争冒险 | 加RC滤波或锁存器,软件端做消抖 |
| U1空闲时U2仍不工作 | U1.EO到U2.EI断线、U1.EI未接地 | 测U1.EO应为低电平,U2.EI应为低电平 |
6. 从16线继续扩展:走向32线、64线的设计思路
16线编码器做出来之后,很多朋友会问:如果我的应用有32个按键或者更多输入,这套方案还能继续往上叠吗?答案是可以,但拓扑结构会从“两片级联”变成“树形级联”。我简单说一下方向,方便大家在现有电路基础上继续扩展。
32线-5线编码器的思路是:先用两层结构。第一层4片74HC148分别处理8组输入,共32路。这4片芯片的GS信号分别代表“这一组是否有输入”,把4个GS信号作为第二层一片74HC148的输入进行二次编码,得到组号。第一层4片芯片的编码输出通过多路选择或门合并,再加上第二层的组号,组合成5位输出。这里有几个细节要注意:各组之间的优先级分配、第一层芯片的EO级联顺序、以及跨芯片的或门合并线会明显增多。布线难度比16线高一个数量级,建议直接上PCB而不是面包板。
64线则在这个基础上再加一层。8片第一层芯片、2片或3片第二层芯片组成三级树形结构。层数越多,端到端延迟越大,74HC148级联后的传输延迟可能需要几百纳秒。对于按键扫描这种低速场景完全够用,但如果要处理高速编码信号,就不如直接上FPGA或者CPLD了。另外层级增加也会带来编码信号对齐的问题,低层芯片的编码输出和高层组号信号到达合并点的时间会有差异,严重时需要加寄存器同步。
如果只是要处理更多按键,还有一个更实用的替代方案:矩阵扫描。16个按键用4x4矩阵加4个I/O就够,32个按键用4x8矩阵也只需要12个I/O。不过矩阵扫描依赖单片机不断轮询,占用CPU时间,编码器方案则是纯硬件实时输出,不需要软件参与,在“实时性强、后级为纯逻辑电路、不希望占用CPU”的场景下更合适。两种技术路线各有利弊,按需取舍。
我个人的建议是:16到32路输入之间,74HC148级联方案性价比最高;超过32路,认真评估一下矩阵扫描或者移位寄存器方案,会更省事。这套16线的电路和调试经验,是整个扩展路径的基础,把优先级逻辑和三脚级联原理吃透了,后面无论做几层都是换汤不换药。
最后分享一个实际操作中的小心得:如果你准备把这套电路量产或者长期使用,面包板上验证通过之后一定要重画PCB。面包板的寄生电容和接触电阻在高频或者震动环境下会让人抓狂,而74HC148本身是高速CMOS芯片,PCB布局注意一点,每个芯片电源就近放去耦电容,输入走线短而粗,16线编码器的稳定性会非常好,我也确实在项目里用这套电路扛住了长时间不间断运行。