PWM作为一种灵活且高效的信号调制手段,在电气设备的性能控制和调节中发挥着重要作用,常用于电机控制、灯光调光、音频信号生成、加热控制等应用。
本文将以合宙低功耗4G模组经典型号——Air780E为例,展示PWM(脉冲宽度调制)输出呼吸灯的实现方法,帮助大家深入理解如何在项目中应用PWM技术。
一、PWM概述
1.1 PWM介绍
脉冲宽度调制PWM,是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
PWM具有高效、控制精度高及实现简便等优点,但PWM信号可能产生高频噪声,需要滤波以减小干扰。另外,某些应用需要特定的硬件支持,如支持PWM输入的微控制器或电路。
要想使用PWM,还需先了解PWM的相关参数:
-
PWM的频率:
是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期),也就是说一秒钟PWM有多少个周期。单位:Hz。 -
PWM的周期:
T=1/f 周期=1/频率例:如果频率为50Hz,T=1/50=0.02s,也就是说一个周期是20ms; 1s=1000ms,那么一秒钟就有50次PWM周期。
-
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通道说明
当前版本为:
《Air780E_GPIO_table_20240812.pdf》
由上方GPIO复用表可知:
Air780E的实际可用PWM通道有4个(0/1/2/4), 但每个都有3种配置。
PWM3/PWM5已经被底层使用,例如PWM1和PWM11都使用硬件通道1,只能选其中一个使用。启用PWM1就不能启用PWM11,调用PWM库的API时,填软件通道id。
相关注意事项:
-
软件通道10/11/12/14需要V1002以上的固件,即20221219之后编译的版本。
-
软件通道20/21/22需要V1016以上的固件,即20230330之后编译的版本。
-
上述映射是固定的,mcu.iomux也没有配置项, 而且已经枚举了全部可用PWM通道。
二、演示功能概述
接下来本文将用两个示例,演示如何使用Air780E的PWM功能:
PWM输出:
控制Air780E核心板pwm4通道的pwm输出,设置不同的占空比,让小灯有不同的亮度;
呼吸灯效果:
使用Air780E核心板的pwm1通道,外接发光二极管来查看呼吸灯效果。
三、准备硬件环境
3.1 开发板
本文使用Air780E核心板进行演示:
详见Air780E产品手册开发板使用说明:
https://docs.openluat.com/air780e/product/
写这篇文章时最新版本的使用说明为:
<<开发板Core_Air780E使用说明 V1.0.5.pdf>>
核心板使用过程中遇到任何问题,可以直接参考这份使用说明pdf文档。
3.2 PC电脑
Win7及其以上版本的Windows系统。
3.3 数据通信线
USB转Type-C数据线一根;
四、准备软件环境
4.1 下载调试工具
https://docs.openluat.com/Luatools/
4.2 源码及固件
最新固件下载:
https://docs.openluat.com/air780e/luatos/firmware/
固件详见core_V1112压缩包:
LuatOS-SoC_V1112_EC618_FULL.soc
五、PWM软硬件资料
5.1 API接口介绍
本教程使用API接口详见:
https://wiki.luatos.com/api/pwm.html?highlight=pwm
1)按住下载模式按键(boot 键)不放,同时再长按开机键开机,这时开发板会进入下载模式,Luatools下载进度条会开始跑,这时可以松开boot按键。直到工具提示下载完成。
2)如果未能成功进入下载模式,而是进入正常开机模式,这时可以按住 boot 键,再短按复位按键,让开发板重启,重新进入下载模式。
如何判断有没有进入下载模式:
可以通过PC端的设备管理器中虚拟出来的USB端口数量来判断。
正常开机模式:
下载模式:
六、代码示例介绍
6.1 PWM输出
本例使用Air780E核心板上的NetLed(网络状态灯),pwm通道id=4,打开pwm4通道的pwm输出,设置不同的占空比,小灯会有不同的亮度。
6.1.1 代码介绍
6.1.2 效果展示
6.2 呼吸灯效果
本例使用Air780E核心板的pwm1通道,外接发光二极管来查看呼吸灯效果:
呼吸灯效果就是小灯由亮到暗逐渐变化,很有节奏感地一起一伏,”感觉,好像人在呼吸“,我们可以通过不断调高占空比让小灯一点点亮起,再不断调低占空比让小灯一点点熄灭从而达到此效果。
6.2.1 硬件接线
GPIO24 --------发光二极管正极
GND -----------发光二极管负极
6.2.2 代码介绍
6.2.3 效果展示
外接发光二极管,效果如下图所示:
也可用Air780E核心板上的NetLed(网络状态灯)来观察呼吸灯效果,但demo里的PWM通道要改成相应的id,可查看上文的PWM通道说明。
我们通过示波器查看PWM的输出波形,可以看到占空比在10%-90%之间变化。
七、常见问题
1. 如何验证所产生的PWM信号?
可以使用示波器检测PWM输出,查看频率、占空比和波形的完整性。确保波形按照设计参数正常工作,必要时进行调整。
2. PWM的信号的频率如何选择?
频率的选择通常取决于具体应用,根据自己的项目需要来选择:
-
电机控制:常用频率为1kHz到20kHz,以确保足够的反应速度和控制精度。
-
LED调光:频率通常在1kHz以上,以避免人眼感知到闪烁。
-
音频信号:频率设置应高于音频信号的最高频率(例如,至少为20kHz)。
3. 什么是占空比,如何计算PWM的占空比?
占空比即是一个脉冲周期内,高电平的时间占整个周期。
例如:
如果PWM信号的高电平时间为2ms,周期为10ms。
则:占空比 = (2 / 10) × 100 = 20%