Air780EPM PWM 硬件电路说明
一、PWM 基本概念
PWM(Pulse Width Modulation,脉宽调制)是一种通过控制数字信号的占空比来模拟模拟信号的技术,常用于控制电机速度、LED 亮度、蜂鸣器等场景;
在 Air780EPM 中,PWM 功能通过特定的 GPIO 引脚复用实现,需结合 LuatOS 的 API 进行配置;
二、PWM 功能支持
Air780EPM 的 PWM 功能需满足以下条件:
1. 硬件支持:
-
模组支持部分 GPIO 引脚复用为 PWM 功能(需参考 GPIO 复用表,确定哪些引脚支持 PWM);
-
具体引脚及功能需查阅 Air780EPM 的硬件手册或 LuatOS 官方文档中的 GPIO 复用表;
2. 软件支持:
-
LuatOS 提供 PWM API:通过 Lua 脚本控制 PWM 参数(如频率、占空比、极性等);
-
需注意:Air780EPM 的 PWM 功能可能受限于硬件设计,例如支持的频率范围、通道数等;
三、开发注意事项
1. GPIO 引脚选择
-
复用功能确认:
-
确保所选 GPIO 支持 PWM 功能(需查阅 GPIO 复用表,例如:某些引脚可能仅支持普通 GPIO 或 UART、SPI 等其他功能)。
-
示例:若引脚
GPIO1
支持 PWM 复用,则需在代码中配置其为 PWM 模式。
-
2. PWM 参数配置
-
频率限制:
-
硬件支持的 PWM 频率范围需参考数据手册(Air780EPM 支持 1Hz 到 13MHz)。
-
过高的频率可能导致占空比精度下降。
-
-
占空比精度:
-
PWM 的分辨率由硬件定时器位数决定(如 10 位分辨率对应 0.1% 精度)。
-
确保配置的占空比在合理范围内(0%~100%)。
-
3. 代码开发注意事项
-
API 使用规范:
-
使用 LuatOS 提供的 PWM API(如
pwm.setup()
、pwm.close()
等)。 -
示例代码:
-- 配置 PWM 参数并启动 PWM pwm.open(pwm_channel, frequency, duty_cycle) -- 关闭 PWM pwm.close(pwm_channel)
- 注意:
pwm_channel
需对应Air780EPM的硬件PWM通道编号(请参考Air780EPM硬件手册相关说明)。
-
-
资源冲突:
-
确保同一GPIO引脚未被其他功能(如UART、ADC)占用。
-
多通道PWM需确认硬件是否支持多路独立输出。
-
4. 功耗与稳定性
-
低功耗模式:
- Air780EPM无法在低功耗模式和PSM+模式下保持PWM输出;
-
信号干扰:
- PWM信号因为频率较大,可能对其他模拟电路(如ADC)产生干扰,需通过硬件滤波或布局优化(如隔离走线)解决。
-
温度影响:
- 高频PWM可能导致GPIO引脚过热,需确保散热设计合理。
5. 其他关键点
-
波形校准:
- 使用示波器验证PWM波形的频率和占空比是否符合预期。
-
固件版本:
- 确保使用的LuatOS固件版本支持PWM功能。
-
错误处理:
- 在代码中添加异常处理(如PWM配置失败时的重试机制)。
四、典型应用场景
1. 电机控制:通过PWM调节电机转速。
2. LED调光:模拟LED亮度变化。
3. 传感器控制:周期性触发红外传感器或超声波模块。
4. 通信协议模拟:如PWM编码的红外信号发射。
五、应用举例
我们以Air780EPM开发板上,PWM驱动蜂鸣器,为例介绍PWM在硬件电路中的实际应用;
1. 硬件电路
2. 软件代码
- 示例代码:
local PWM_ID = 4
mcu.altfun(mcu.PWM, 4, 39, 5, nil)
--PWM4 对应的 Air780EPM 的 GPIO 复用管脚为 GPIO33
--39 这个数字对应的是 Air780EPM 所使用芯片的 PAD 管脚
--mcu.altfun() 这个函数比较晦涩难懂,在下个版本会取消这个函数
--GPIO 管脚复用的配置,会从 mcu.altfun() 改为更为直观的 PINS.json 配置方式,敬请期待
--2025/4/9,LuXiangcheng
sys.taskInit(function()
log.info("pwm", "ch", PWM_ID)
while 1 do
sys.wait(5000)
--PWM 接的蜂鸣器响的频率是 1000 和 8000
log.info("pwm", ">>>>>3K")
pwm.open(PWM_ID, 1000, 50) -- 频率 4000hz, 占空比 50%
sys.wait(5000)
log.info("pwm", ">>>>>8K")
pwm.open(PWM_ID, 8000, 50)
sys.wait(5000)
log.info("pwm", ">>>>>CLOSE")
-- pwm.open(PWM_ID, 0, 50)
pwm.close(PWM_ID)
end
end)
六、总结
在Air780EPM中使用PWM功能需结合硬件GPIO复用和LuatOS API,重点注意引脚选择及参数配置。
1. Air780EPM硬件手册:获取GPIO复用表和PWM硬件参数。
2. LuatOS官方文档:查询PWM API的具体用法API索引 - luatos@air780epm - 合宙模组资料中心。
3. 社区案例:参考合宙社区或Gitee上的Air780EPM PWM示例代码demo/780EPM_1.3版本开发板全功能测试/pwm780epm.lua · 合宙Luat/LuatOS-Air780EPM - Gitee.com。