3.6. 电子学基础¶
要用 GPIO 引脚驱动任何外部器件,都需要在引脚的另一侧搭建一个电路。基础电子学中的三个概念——电压、电流,以及它们通过电阻建立的关系——会出现在每一个这样的电路中。
3.6.1. 电压、电流、电阻¶
电压(伏特,V)是电路中两点之间的电位差。芯片的供电轨相对于地可能为 3.3 V;被拉高的 GPIO 引脚同样处于 3.3 V。
电流(安培,A,或毫安,mA)是电荷通过导线的流动。电流总会回流到它的起点,因此要让任何电流流动,电路都必须从电源到地形成一个完整的回路。
电阻(欧姆,Ω)表示路径对这种流动的阻碍程度。电阻的作用是在已知电压下把电流设定为一个已知的值。
欧姆定律把它们联系在一起:
欧姆定律的三种形式。¶
用文字表述:电阻两端的电压等于流过它的电流乘以电阻。已知三者中的任意两个,便可通过代数运算求出第三个。
3.6.2. 二极管¶
二极管是一种双端器件,它只在一个方向(从阳极到阴极)导通电流,而在另一个方向阻断电流。
二极管只能从阳极向阴极导通。LED 是一种在导通时会发光的二极管。¶
二极管还具有正向电压(Vf)——即电流沿导通方向流动时它两端的压降。一旦施加的电压达到 Vf,二极管就大致表现得像一根导线;低于此值时,几乎没有电流流过。
3.6.3. LED¶
发光二极管(LED)是一种把其导通电流转换为可见光或红外光的二极管。亮度随电流变化;颜色由 LED 的化学成分决定,而非由驱动方式决定。
典型的 LED 正向电压:
红色:1.8 -- 2.2 V
绿色或黄色:2.0 -- 2.4 V
蓝色或白色:2.8 -- 3.4 V
指示用 LED 的合适工作电流为 5 -- 20 mA。电流越大越亮,但会缩短 LED 的寿命,并且可能超出 GPIO 引脚的驱动上限。
3.6.4. 限流电阻¶
把 LED 直接接在 GPIO 引脚与地之间,会让几乎不受限制的电流流过:一旦达到正向电压,LED 看起来就像一个近似短路。在引脚与 LED 之间串联一个串联电阻可将电流设定到安全值。
串联电阻设定 LED 的电流。¶
供电电压在电阻和 LED 之间进行分配:LED 上承担其正向电压,其余部分由电阻承担。根据欧姆定律:
R = (Vsupply - Vf) / If
对于一个由 3.3 V GPIO 引脚以 10 mA 驱动的红色 LED(Vf ≈ 2.0 V):
R = (3.3 - 2.0) / 0.010 = 130 Ω
在实践中,应选取最接近的较大标准值(150 Ω 或 220 Ω)。结果是 LED 稍暗一些,但安全裕度更健康。当对精确亮度无要求时,200 -- 470 Ω 是一个合理的默认选择。
3.6.5. 为什么每个部分都重要¶
每个 GPIO 输出电路的形态都源自上面的四个概念:
电压决定了引脚处可用的能量。一个 3.3 V 的 GPIO 拥有 3.3 V 的电压,可分配给接在它与地之间的任何器件。
二极管(本例中是 LED)以其正向压降的形式消耗掉一部分电压,并拒绝沿错误方向导通——它决定了导通方向和固定的分担份额。
限流电阻消耗掉剩余的电压,把剩下的预算转化为受控的电流。如果没有它,LED 会汲取引脚所能提供的全部电流——通常足以毁掉其中之一或两者。
欧姆定律使得电阻的阻值可以计算:给定剩余电压和期望电流,
R便可通过代数运算得出。
电压、电流、电阻、二极管,再加上一个变换后的方程,就足以设计出所有基本的 GPIO 输出级电路。
这些相同的部件一直都隐藏在板载 LED 的背后。machine.LED("LED_RED").on() 之所以能点亮 LED,是因为摄像头的电路板已经提供了它周围的一切——限流电阻、通往地的导线、LED 本身——而该类只是切换它们背后硅片的 GPIO。“一行代码点亮一个 LED”的说法是正确的;它只是“驱动那个电路”的简短说法而已。剥去这层抽象,剩下的正是上面那个电路。
machine.Pin 是同一块硅片,只是去掉了周围的部件后暴露出来。脚本直接控制引脚的电压;电阻(按欧姆定律取值)、LED 以及通往地的回流路径都由你来提供。这同样的四个概念会以略有不同的组合,重新出现在按键去抖、PWM 滤波和电机驱动的背后。