大家好,我是老张,一个在一线开发摸爬滚打十多年的嵌入式开发,从原理图设计、PCB设计到嵌入式程序开发、硬件联调和量产,诸多项目经验。

入坑的人都知道,不像纯软件那样有规范的教程或参考源码,硬件大部分技术和经验都是靠自己跌倒再爬起来,一步步积累起来,自己也是走过很多弯路,踩过很多小白的坑,所以希望总结出来的经验能够帮到更多的人。

这个专栏是我硬啃硬件的实战笔记,不列公式吓人,不讲玄学大道理,只求你能跟着我从认识电阻电容开始,一步步做到能自己设计并打样出一块STM32核心板。今天第一章,我们先搞定最基础也最重要的一件事:认清楚板子上那些常见的小零件,知道它们是干啥的,以及怎么用。


目录

一、三个概念,用“水管”类比一次说透

二、电阻:限流、分压和那个坑了我一天的上拉

三、电容:板子上的“蓄水池”和“噪声滤波器”

四、电感:DC-DC的心脏,一言不合就啸叫

五、二极管:单向阀,还能救命

六、三极管与MOS管:兄弟俩都是开关,脾气大不同

七、动手!用万用表把这些小东西测一遍

八、本章总结


一、三个概念,用“水管”类比一次说透

很多教科书一上来就甩一堆定义,搞得新手头晕。咱们换个思路——把电路想象成家里的水管系统,一切就好理解多了:

  • 电压(V) 就是水压,是推着电流往前走的力。你家水龙头的水压高,水就冲得猛;电路里电压高,电流就更容易流动。嵌入式里最常见的电压就三种:3.3V、5V、12V,再高了就得小心触电。

  • 电流(I) 就是水管里的水流,是实实在在在导线里流动的电荷。单位是安培(A),但咱们玩的板子上,一般都是毫安(mA)甚至微安(μA)级别。一个LED亮起来大概要几个毫安,一颗MCU正常跑起来也就几十毫安。

  • 电阻(R) 就是水管的粗细。管子越细,水流受到的阻力就越大。电阻的单位是欧姆(Ω),阻值越大,对电流的阻碍作用就越强。

把这三个家伙串起来的,就是大名鼎鼎的欧姆定律:V = I × R。别嫌它简单,嵌入式硬件里绝大多数计算,绕来绕去都是它。

我举两个每天都用到的实战例子,你就明白这公式的江湖地位了。

实战一:给LED配限流电阻

我在用STM32点亮一颗红色LED时,GPIO输出3.3V,红光LED本身有个约2.0V的“压降”(你可以粗暴理解为LED自己会吃掉2V电压),那真正落在电阻上的电压就剩3.3V – 2.0V = 1.3V。我想让流过LED的电流控制在5mA左右(电流太小灯不亮,太大烧LED),那该串多大电阻?

R = 1.3V / 0.005A = 260Ω。手头没有260Ω的,拿个270Ω或者330Ω焊上去,一点问题没有。如果忘了串这个电阻直接把LED怼到3.3V上,那一瞬间电流会飙到几十毫安,LED秒烧,你甚至能闻到一股焦味——别问我怎么知道的,初学者都交过这个学费。

实战经验:常用的LED串联电阻有510Ω、1KΩ、4.7KΩ等;阻值不同,功耗不同,LED灯亮度也有区别,有时候遇到面膜散光通过调节阻值也是不错的方案;

实战二:ADC采样时的分压

有一回我要器用STM32自带的ADC去测量一个输出为5V的传感信号,但STM32的ADC最大只能吃3.3V,直接怼上去会烧IO口。这时候祭出两个电阻分压就优雅解决了。我在传感器输出和地之间串了两个电阻R1和R2,从R1和R2中间抽头引到ADC引脚。只要让R2/(R1+R2) ≈ 3.3V/5V = 0.66就行。选了R1=10kΩ,R2=20kΩ,分出来的电压约3.33V,既安全又刚好在量程内。注意分压电阻的阻值别太大,否则ADC输入阻抗会引入误差,一般选几kΩ到几十kΩ之间。


二、电阻:限流、分压和那个坑了我一天的上拉

电阻在原理图里符号是R,实物有两种形态:直插的圆柱体带彩色环(色环电阻),贴片的黑色小方块两边有银亮焊盘(比如0805封装,当前也有排阻)。别小看这玩意儿,在嵌入式系统里它主要干四件事:

1. 限流。前面LED的例子就是。另外我习惯在每个GPIO输出串一个100Ω~1kΩ的小电阻,防止程序抽风把IO输出强拉到地或者电源造成短路烧毁引脚——几毛钱的电阻比换芯片划算多了。

2. 分压。不仅ADC采样用,有时候两个不同电平的器件通信也需要分压来匹配电平。

3. 上拉/下拉。这是电阻最隐蔽也最重要的用法。很多初学者都被按键抖动或者I²C通信失败坑过,根源就在这里。

想象一个按键,一头接MCU的GPIO,另一头接GND。按键没按下时,这根GPIO线是“悬空”的——既不确定是高也不确定是低,就像一根天线,随便一点电磁干扰就能让MCU读到错误电平,然后程序就发疯。解决办法就是在GPIO和VCC之间并一个10kΩ左右的电阻,这样按键没按下时,GPIO被电阻拉到高电平;按键按下时才被拉到低电平。这就是上拉电阻。反过来,在GPIO和GND之间接电阻叫下拉电阻。

I²C总线的SCL和SDA两根线更是必须有上拉电阻才能跑,因为I²C设备只能把线拉到低,释放后要靠上拉电阻把总线拉回高。上拉阻值要根据总线电容和速率来选,在STM32跑400kHz Fast Mode时,我一般用3.3kΩ到4.7kΩ。有次我画板子忘了加上拉,I²C死活不通,拿示波器一看波形压根就没拉到高,丢人。

诸如更多的TTL、232、485的信号线,加上上拉或者下拉可以让你的波形更方波。

4. 阻抗匹配。高速信号(比如USB、DDR)上会串一个小电阻来吸收反射,保证信号质量。这个初学阶段可以先不深究,知道有这么个用途就行。

选电阻记住三点:阻值、精度(分压采集用1%的,普通上下拉5%足够)、功率。功率千万别忽略,我有次用0805封装的电阻当LED限流,实际功耗快0.2W了,0805额定才0.125W,没一会儿电阻就烫手变色,后来换成1206封装的才稳住。简单粗暴的原则:实际功耗×2 ≤ 电阻额定功率。


三、电容:板子上的“蓄水池”和“噪声滤波器”

电容,符号是C,常见实物有圆柱形的电解电容(带极性,接反会炸!),还有米黄色小方块的贴片陶瓷电容。它的基本脾气就一句话:两端的电压不能突变。你可以把它当成一个微型水缸——电压高了它吸水(充电),电压低了它放水(放电),从而把电压波动“熨平”。

在嵌入式硬件里,电容的用处大到超乎想象:

1. 电源去耦——每个芯片旁边必须趴着的那颗0.1μF

打开任何一块开发板的PCB,你都会发现每个IC的VDD引脚旁边紧挨着一颗0.1μF(标号104)的陶瓷电容。这颗电容叫“去耦电容”或“旁路电容”,作用非常关键:数字芯片内部的晶体管每时每刻都在高速开关,对电流的需求是瞬间爆炸式的,比如从几微安突然蹦到几十毫安。电源走线因为存在寄生电感,根本来不及响应这么快的电流变化,导致芯片电源引脚上的电压瞬间往下掉,形成噪声。而旁边这颗小电容就像个贴身蓄水池,在芯片需要瞬时大电流时直接就地供给,把噪声吸收掉,保证芯片供电稳定。

布局要点就一条:电容离芯片电源引脚越近越好,线越短越粗越好。我有次图省事把去耦电容放得稍微远了一点,结果板子高频率运行时MCU无故复位,示波器一抓电源纹波足足有几百mV,把电容挪到紧贴引脚后纹波立刻降到几十mV。这个教训我现在记得门儿清。

一般还会再并一颗10uF或1uF的电容做低频储能,组成大小电容互补的经典组合。

2. 电源滤波

开关电源或者LDO的输出端,通常需要并上一颗大容量的电解电容(比如100μF)来滤除低频纹波,让输出电压更平滑。电解电容和钽电容有正负极性,焊反了会爆浆,会听到“砰”一声响,还会喷一板子纸屑,电容爆炸硬件开发中为数不多的对人产生威胁的风险,这方面带眼睛的同学对自身的保护更有利一些。

3. 信号耦合

这个在音频电路里常见,隔直流通交流。咱们做数字为主的嵌入式用的不多,了解即可。

选电容要盯紧两个参数:容量和耐压。耐压值至少是电路工作电压的1.5倍以上,5V电路我起码选10V耐压的电容,留足余量。贴片陶瓷电容容量大、高频特性好,去耦首选;电解电容容量大但体积大,适合电源滤波。


四、电感:DC-DC的心脏,一言不合就啸叫

电感符号是L,实物有工字形、环形磁芯、一体成型等。它跟电容的脾气刚好反着来:流过电感的电流不能突变,你可以把它看作一个惯性飞轮——电流要突然增大,它产生反向电压“拖住”;电流要突然减小,它又产生正向电压“推一把”。

在嵌入式电源领域,电感最重要的舞台就是DC-DC开关电源(比如把5V降到3.3V的Buck电路)。开关管高速开闭,电感在开关导通时储能(电流上升),关断时把储存的能量释放给负载。可以说没有电感,DC-DC就转不起来。我们选电感时关注几点:电感量(单位μH,按芯片数据手册推荐来)、饱和电流(一定要大于电路最大峰值电流,否则电感饱和后电流会失控,导致烧管子),还有直流电阻DCR(越小越好,DCR太大电感和发热严重,效率掉得厉害)。

另外说个有意思的事儿:电感如果工艺不好或者电流太大,会发出高频啸叫声,听起来就像耳鸣。下次板子有奇怪响声,别以为见鬼了,看看是不是电感在叫。

布线时注意,电感下方务必不要走信号线,尤其不要走敏感信号线。我有次在电感正下方走了一根ADC的模拟采样线,结果感应耦合进去巨大的开关噪声,采出来的值上下乱跳,绕开之后世界瞬间清净。


五、二极管:单向阀,还能救命

二极管符号像个三角形带一横杠,电流只能从三角往横杠方向流(正向),反过来几乎不通(反向)。实物有黑色小圆柱一端带白环(白环是阴极),LED也是二极管。在嵌入式电路里二极管的出场率很高:

1. 整流:把交流变直流,充电器里必有一堆整流桥。

2. 续流保护——救过我的IO口一命:驱动继电器、电磁阀这些感性负载时,线圈在断电瞬间会产生很高的反向感应电动势,这个高压能轻松把驱动它的三极管或MOS管击穿。我早年间用三极管驱动一个小继电器,没加续流二极管,开关了几十次后三极管就凉了。后来学乖了,在继电器线圈两端反向并联一个二极管(比如1N4148),负极接电源正极,线圈断电时感生电压通过二极管泄放掉,保护驱动管。这个二极管几乎是驱动继电器电路的标准配置。

3. 防反接:在电源输入正极串一个二极管,如果电池接反了,二极管不导通,后级电路不通电,不会烧。注意这样会吃掉约0.3V~0.7V的压降(肖特基二极管压降小,如SS14只有0.3V左右),电池供电时功耗要权衡。

4. 指示:LED指示灯,前面说过了。


六、三极管与MOS管:兄弟俩都是开关,脾气大不同

要用MCU的3.3V IO口去控制一个12V的风扇或者大功率LED,IO口那小身板肯定扛不住,这时候就需要一个“放大”元件当中间人。三极管和MOS管就是最常见的两位。

三极管(BJT):我最早用的NPN型,如S8050。工作原理是小电流控制大电流:基极(B)给一点点电流,集电极(C)和发射极(E)之间就能通过大得多的电流。比如我用MCU的GPIO串个1kΩ电阻接基极,GPIO输出高电平时,基极有(3.3V-0.7V)/1kΩ≈2.6mA电流,如果三极管放大倍数是100,理论上CE能通过260mA电流,驱动小继电器绰绰有余。作为开关用时,一定要让三极管“饱和导通”,即保证基极电流足够大,使得CE间压降降到0.2V~0.5V,否则三极管处在放大区会严重发热甚至烧毁。三极管的缺点是开关速度不够快,而且需要持续电流驱动,有点费电。

MOS管(MOSFET):电压控制型,栅极(G)和源极(S)之间加电压就能控制漏极(D)和源极导通,几乎不需要电流,损耗更低,开关频率也能做得很高。现在大功率场合基本都用MOS管。选择MOS管要看清阈值电压Vgs(th),很多功率MOS完全导通需要4.5V甚至10V,3.3V的GPIO直接驱动可能只能让管子“半开”,导通电阻很大,发热量惊人。所以我一般会选用“逻辑电平MOS管”,比如AO3400,它在2.5V时就能较好地导通,3.3V妥妥能用。或者增加一级三极管做电平转换来驱动高压MOS。

我做了个小对比:曾经用三极管PWM调光驱动LED灯带,三极管热得烫手,后来换成合适的低压MOS管,温度明显降下来。所以搞智能硬件,对功耗和发热敏感的地方,优先考虑MOS管,但要留意Vgs。


七、动手!用万用表把这些小东西测一遍

光学不练假把式,硬件知识必须上手。别怕,先学会用万用表最基本的三个功能:

表笔接法永不变:黑笔插COM,红笔测电压电阻时插VΩmA孔。
三个常用档位:

  • 直流电压档(DCV):测电路板上的3.3V、5V、12V、24V等;

  • 电阻档(Ω):测电阻阻值,记住一定要断电测量;

  • 蜂鸣通断档:用来检查导线是否导通,焊点有没有虚焊,响了表示连通。

八、本章总结

这一章我们没讲啥高深理论,就是扎扎实实把嵌入式板子上最常见的六种元器件认了个脸熟:电阻用来限流分压和上下拉,电容用来去耦滤波,电感是DC-DC的心脏,二极管单向导电还能续流保护,三极管和MOS管是控制大负载的两种开关。配合欧姆定律,你已经可以看懂很多简单的接口保护电路了。

更多推荐