跳转至

如何用 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):调整占空比。

八、总结

  1. 直接驱动:适用于低功耗 LED,需合理计算电阻。

  2. 三极管/MOSFET:扩展驱动能力,支持高电压/大电流 LED。

  3. PWM 调光:通过占空比调节亮度。

  4. RGB LED:分通道设计,蓝色通常需要外接驱动电路。

  5. LuatOS 开发:通过 GPIO 和 PWM 函数实现控制,注意 AGPIO 的电流限制和休眠特性。

通过以上方案,可灵活控制 Air780EPM 的 LED 灯,满足从简单指示到复杂调光的需求。