780ehv_pwm
一、PWM 概述
1.1 pwm 是什么
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
要想使用 pwm 还需了解 PWM 的相关参数:
1. PWM 的频率: 是指 1 秒钟内信号从高电平到低电平再回到高电平的次数(一个周期),也就是说一秒钟 PWM 有多少个周期 单位:Hz
2. PWM 的周期: T=1/f 周期=1/频率 例:如果频率为 50Hz ,也就是说一个周期是 20ms,那么一秒钟就有 50 次 PWM 周期
3. PWM 的占空比: 是一个脉冲周期内,高电平的时间占整个周期时间的比例 单位: % (0%-100%) 例:一个周期 10ms,高电平占 8ms,那么此占空比就是 8/10=80%
1.2 pwm 原理
单片机的 IO 引脚输出的是数字信号,且只能输出 1 和 0,那如果 TTL 电平中,高电平为 5V,低电平为 0V,但是我们想要输出不同的模拟电压,比如输出 3.75V 应该怎么操作?
此时要用到 PWM,通过改变 IO 口输出方波的占空比,得到不同的模拟电压。
3.75/5=0.75 ,也就是高电平时间占整个周期的 75%,即占空比为 75%,可得到模拟电压 3.75V.
注意上图中蓝线,代表着输出的模拟电压,占空比越大,则模拟电压也越大。
1.3 pwm 通道说明
1. 查阅 https://docs.openluat.com/air780ehv/luatos/hardware/design/gpio/内的 GPIO 复用表,可知 Air780EHV 的实际可用 PWM 通道有 4 个(0/1/2/4), 4 个通道可单独使用,互不影响。
二、演示功能概述
2.1 本教程实现的功能定义:
本章节分别用两个示例演示了如何使用 Air780EHV 的 PWM 功能
1. 控制 Air780EHV 核心板 pwm0 通道的 pwm 输出,设置不同的占空比。
2. 使用 Air780EHV 核心板的 pwm0 通道,外接发光二极管来演示呼吸灯效果。
三、准备硬件环境
参考:https://docs.openluat.com/air780ehv/luatos/common/hwenv/,准备好硬件环境。
3.1 Air780EHV 核心板
淘宝购买链接:https://e.tb.cn/h.h6xWC05u0LlEU7N?tk=fOhG4avYByf
四、准备软件环境
4.1 文章内容应用
在开始实践本示例之前,先筹备一下软件环境:
1. 烧录工具:LuaTools 工具 - luatos@air780ehv - 合宙模组资料中心;
2. 内核固件:https://docs.openluat.com/air780ehv/luatos/firmware/version/
3. 脚本文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air780EHV/DEMO/pwm
4. IO 复用工具:https://docs.openluat.com/air780epm/common/luatio/
5. LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件。
准备好软件环境之后,接下来查看如何烧录固件,将本篇文章中演示使用的项目文件烧录到 Air780EHV 核心板中。
4.2 API 介绍
这里仅介绍本篇文档所使用的 API,详情请查看:https://docs.openluat.com/osapi/core/pwm/
pwm.open
功能:开启指定的 PWM 通道,并配置信号的频率和占空比。
gpio.setup(pin, mode, pull, irq_type, alt)
该函数用于 GPIO 使用前的初始化,把 GPIO 设置为输入模式,输出模式,是否配中断处理。
4.3 PWM 的 GPIO 配置
本例使用默认的 pwm0,并不需要通过 LuatIO 工具配置复用关系表,如需复用,请看下文介绍。
例如通过查看 IO 复用表,发现 PIN16 默认是 GPIO27,可以复用成 PWM4。
具体 GPIO 配置,参考如下:
1. 按照 LuatIO 初始化配置工具 - common@air780epm - 合宙模组资料中心下载 LuatIO 软件,打开后选择为 Air780EHV:
2. 设置 PIN16 为 PWM4 功能:
3. 设置完毕后点击保存,烧录时需要将保存的 pins_Air780EHV.json 文件也一并烧录进 Air780EHV 中:
五、代码示例介绍
5.1 PWM 输出
打开 PWM0 通道的 PWM 输出,设置不同的占空比,输出不同的波形。
5.1.1 代码介绍
local PWM_ID = 0
local function pwm_output()
while true do
-- 开启pwm通道0,设置脉冲频率为1kHz,分频精度为1000,占空比为10/1000=1% 持续输出
pwm.open(PWM_ID, 1000, 10, 0, 1000)
sys.wait(1000)
-- 开启pwm通道0,设置脉冲频率为1kHz,分频精度为1000,占空比为500/1000=50% 持续输出
pwm.open(PWM_ID, 1000, 500, 0, 1000)
sys.wait(1000)
-- 开启pwm通道0,设置脉冲频率为1kHz,分频精度为1000,占空比为1000/1000=100% 持续输出
pwm.open(PWM_ID, 1000, 1000, 0, 1000)
sys.wait(1000)
end
end
sys.taskInit(pwm_output)
5.1.2 输出波形验证
通过示波器抓取波形验证,如下图所示:
5.2 呼吸灯效果
本例通过一个发光二极管接到 Air780EHV 核心板的 PIN22(GPIO1),对应 pwm 通道 id=0 来查看呼吸灯效果
呼吸灯效果就是小灯由亮到暗逐渐变化,很有节奏感地一起一伏,”感觉,好像人在呼吸“,我们可以通过不断调高占空比让小灯一点点亮起,再不断调低占空比让小灯一点点熄灭从而达到此效果。
如果外接3.6V的耐压LED灯,不需要外接限流电阻;如果外接的LED灯耐压较小,如1.1V、1.8V时,则需要外接限流电阻。
5.2.1 代码介绍
local PWM_ID = 0
local function breathing_led()
log.info("pwm", "ch", PWM_ID)
while 1 do
-- 仿呼吸灯效果
log.info("pwm", ">>>>>")
for i = 10, 1, -1 do
pwm.open(PWM_ID, 1000, i*9) -- 频率1000hz, 占空比从 90% 递减到 9%
sys.wait(100 + i*10)
end
for i = 10, 1, -1 do
pwm.open(PWM_ID, 1000, 100 - i*9) -- 频率1000hz, 占空比从 10% 递增到 91%
sys.wait(100 + i*10)
end
sys.wait(2000)
end
end
5.2.2 效果展示
外接发光二极管,效果如下图所示:
六、总结
本教程旨在通过合宙开发板展示 PWM(脉冲宽度调制)输出呼吸灯的实现方法,帮助读者深入理解如何在项目中应用 PWM 技术。PWM 作为一种灵活且高效的信号调制手段,在电气设备的性能控制和调节中发挥着重要作用。通过精确控制信号的占空比,PWM 能够实现电能的有效管理。
PWM 的主要应用:
1、电机控制:通过调节电机供电的 PWM 信号,控制电机转速和扭矩。
2、灯光调光:用于调节 LED 灯的亮度,改变状态的快慢来实现不同亮度效果。
3、音频信号生成:在音频电子设备中生成不同的声音频率和音量。
4、加热控制:在加热元件中使用 PWM 来调整输出功率,从而实现精确的温度控制。
PWM 的优点:
1、高效性:PWM 有效降低能量损耗,因为其开关操作使功率元件始终处于全导通或全关闭状态。
2、控制精度高:可以通过调节占空比进行非常精确的控制。
3、实现简便:可以通过简单的数字电路或微控制器轻松实现。
PWM 的缺点:
1、高频噪声:由于快速切换,PWM 信号可能产生高频噪声,需要滤波以减小干扰。
2、硬件要求:某些应用需要特定的硬件支持,如支持 PWM 输入的微控制器或电路。
七、常见问题
1、如何验证所产生的 PWM 信号?
可以使用示波器检测 PWM 输出,查看频率、占空比和波形的完整性。确保波形按照设计参数正常工作,必要时进行调整。
2、PWM 的信号的频率如何选择?
频率的选择通常取决于具体应用,根据自己的项目需要来选择:
(1)电机控制:常用频率为 1 kHz 到 20 kHz,以确保足够的反应速度和控制精度。
(2)LED 调光:频率通常在 1 kHz 以上,以避免人眼感知到闪烁。
(3)音频信号:频率设置应高于音频信号的最高频率(例如,至少为 20 kHz)。
3、什么是占空比,如何计算 PWM 的占空比?
占空比即是一个脉冲周期内,高电平的时间占整个周期
例如,如果 PWM 信号的高电平时间为 2 ms,周期为 10 ms,占空比 = (2 / 10) × 100 = 20%。