如何用 Air780EPM 的 GPIO 来驱动或控制 LED 灯的亮灭?
一、GPIO 直接驱动 LED
1. 适用场景
- 低功耗场景:LED 电流 ≤ 5mA(普通 GPIO 的驱动能力限制)。
- 休眠需求:若需 LED 在休眠时保持亮灭状态,需使用 AGPIO(Air780EPM 所有 AGPIO 的驱动电路总和上限是 5mA)。
2. 电路设计
GPIO → 限流电阻 → LED正极 → LED负极 → GND
3. 限流电阻计算
公式:
R=(VGPIO−VLED)/ILED
其中:
-
VGPIO=3.0V(Air780EPM 的 GPIO 电平)。
-
VLED:不同颜色 LED 的正向压降(典型值):
- 红色 LED:2.0V∼2.2V
- 绿色 LED:2.8V∼3.3V
- 蓝色/白色 LED:3.0V∼3.6V
-
ILED:目标电流(通常选 5mA)。
示例计算:
- 红色 LED(VLED=2.0V,I=5mA):
R1=(3.0V−2.0V)/5mA=200Ω(选 220Ω 标准电阻)
- 绿色 LED(VLED=2.8V,I=5mA):
R2=(3.0V−2.8V)/5mA=40Ω(选 51Ω 标准电阻)
- 蓝色 LED(VLED=3.3V,I=5mA):
R3=(3.0V−3.3V)/5mA=−60Ω(无法直接驱动,需三极管或 MOSFET)
4. LuatOS 代码示例
-- 初始化GPIO为输出模式(普通GPIO或AGPIO)
gpio.setup(23, 0)
-- 控制LED
gpio.set(23, gpio.HIGH) -- 点亮LED
sys.wait(1000)
gpio.set(23, gpio.LOW) -- 熄灭LED
二、三极管驱动 LED(中高功率场景)
1. 适用场景
- 电流需求:LED 电流 > 5mA(如蓝色/白色 LED)。
- 高电压支持:需外部电源(如 5V)驱动高亮度 LED。
2. 电路设计
GPIO → R4(2.2kΩ)→ 三极管基极(NPN,如2N3904)
外部电源(如5V)→ R3 → LED正极 → LED负极 → 三极管集电极
三极管发射极 → GND
3. 电阻计算
- 基极电阻 R4:
R4=(VGPIO−VBE)/IB=(3.0V−0.7V)/1mA=2.3kΩ(选 2.2kΩ 或 2.7kΩ)
- LED 限流电阻 R3(以 5V 电源驱动蓝色 LED 为例):
R3=(5V−3.3V)/20mA=85Ω(选 82Ω 或 100Ω)
4. LuatOS 代码
与 GPIO 直接驱动代码相同,通过控制 GPIO 电平开关三极管。
-- 初始化GPIO为输出模式(普通GPIO或AGPIO)
gpio.setup(23, 0)
-- 控制LED
gpio.set(23, gpio.HIGH) -- 点亮LED
sys.wait(1000)
gpio.set(23, gpio.LOW) -- 熄灭LED
三、PWM 调光(亮度调节)
1. 适用场景
- 调光需求:通过占空比调节 LED 亮度。
- 呼吸灯效果:结合 PWM 和延迟实现渐变效果。
2. 电路设计
- 直接驱动小功率 LED:
PWM → 限流电阻 → LED → GND
- 驱动大功率 LED:通过三极管/MOSFET 连接 PWM 信号。
3. LuatOS 代码示例
-- 初始化PWM
pwm.open(4, 1000, 50) -- PWM通道4,频率1kHz,占空比50%
sys.wait(2000)
pwm.stop(23) -- 停止PWM
-- 调整亮度
pwm.setDuty(4, 75) -- 占空比75%
sys.wait(2000)
pwm.stop(4) -- 停止PWM
四、其他驱动方式
1. NMOS 驱动(大功率场景)
- 适用场景:LED 电流 > 500mA(如高亮度 LED 灯带)。
- 电路设计:
GPIO → 限流电阻 → MOSFET栅极(如IRF510)
外部电源(如12V)→ 限流电阻 → LED正极 → LED负极 → MOSFET漏极
MOSFET源极 → GND
2. 继电器驱动(高电压场景)
- 适用场景:控制 220V 交流 LED 灯。
- 电路设计:
GPIO → 三极管 → 继电器线圈 → GND
继电器触点 → LED负载 → 电源
五、RGB LED 驱动方案
1. 电路设计
- 共阴极 RGB LED:
GPIO_R → R1(220Ω)→ 红色LED正极
GPIO_G → R2(51Ω)→ 绿色LED正极
GPIO_B → R4(2.2kΩ)→ 三极管基极(NPN,如2N3904)
外部电源(如5V)→ R3(100Ω)→ 蓝色LED正极 → 蓝色LED负极 → 三极管集电极
三极管发射极 → GND
所有负极 → GND
- 共阳极 RGB LED:需通过三极管分别控制各通道。
2. LuatOS 代码示例
-- 初始化RGB LED的GPIO,输出,高
gpio.setup(23, gpio.HIGH) -- 红色
gpio.setup(24, gpio.HIGH) -- 绿色
gpio.setup(25, gpio.HIGH) -- 蓝色(通过三极管)
六、注意事项
1. GPIO 驱动能力与 LED 兼容性
- 红色 LED:可直接驱动(需合理电阻)。
- 绿色 LED:若压降 ≤3.0V,可直接驱动(如_VLED_=2.8_V_)。
- 蓝色/白色 LED:需通过三极管/MOSFET 驱动。
- RGB LED:蓝色/白色需外接驱动电路。
2. AGPIO 的使用限制
-
总电流限制:所有 AGPIO 的总驱动电流不能超过 5mA。
- 例如:同时驱动 3 个 LED,每个 LED 电流 2mA,总电流 6mA,需降电流或改用普通 GPIO。
- 休眠特性:AGPIO 在休眠时保持电平,适合常亮指示灯。
3. 休眠模式下的 GPIO 行为
- 普通 GPIO:休眠时断电,需加下拉电阻保持低电平,LED 熄灭。
- AGPIO:休眠时保持电平,适合需要常亮的指示灯。
- Wakeup IO:仅支持输入,不可作为输出。
4. 电路保护
- TVS 防护:按键或机械开关需加 TVS 管(如 5V TVS)。
- 过流保护:使用保险丝或自恢复保险器。
七、LuatOS 开发关键函数
1. GPIO 控制,详见 gpio - luatos@air780epm - 合宙模组资料中心
gpio.setup(pin, mode, pull, irq_type)
:配置 GPIO 模式。gpio.set(pin, level)
:设置电平(gpio.HIGH
/gpio.LOW
)。gpio.get(pin)
:读取输出电平状态。
2. PWM 控制,详见 pwm - luatos@air780epm - 合宙模组资料中心
pwm.setup(pin, freq, duty)
:初始化 PWM 参数。pwm.start(pin)
/pwm.stop(pin)
:启停 PWM。pwm.setDuty(pin, duty)
:调整占空比。
八、总结
-
直接驱动:适用于低功耗 LED,需合理计算电阻。
-
三极管/MOSFET:扩展驱动能力,支持高电压/大电流 LED。
-
PWM 调光:通过占空比调节亮度。
-
RGB LED:分通道设计,蓝色通常需要外接驱动电路。
-
LuatOS 开发:通过 GPIO 和 PWM 函数实现控制,注意 AGPIO 的电流限制和休眠特性。
通过以上方案,可灵活控制 Air780EPM 的 LED 灯,满足从简单指示到复杂调光的需求。