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

5.2 Air780E烧录说明

将Air780E通过USB数据线连接电脑:

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%

干货分享:开启PWM调光之门,一起来做呼吸灯的更多相关文章

  1. STM8S PWM 应用 呼吸灯

    //主功能接受:使用MCU STM8S105C6 的PWM通道2 PC2 来做呼吸灯 已经验证OK,呵 //呵,这个PWM设置刚開始用还是有点麻烦,由于是自己摸索.花点时间.还是解决了 . //所用子 ...

  2. 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...

  3. [问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题

    问题描述:由单片机的VCC引脚供电,使用L298N控制两个电机,发现左右两个轮子的转速老是不一样,更多的情况是左轮转速高(左轮电机接OUT1和OUT2),右轮转速低(右轮电机接OUT3和OUT4)甚至 ...

  4. ref:【干货分享】PHP漏洞挖掘——进阶篇

    ref:http://blog.nsfocus.net/php-vulnerability-mining/ [干货分享]PHP漏洞挖掘——进阶篇 王陶然     从常见的PHP风险点告诉你如何进行PH ...

  5. 最强最全干货分享:Android开发书籍、教程、工具等

    最全干货分享,本文收集整理了Android开发所需的书籍.教程.工具.资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益. 入门<Learning Android(中文版)& ...

  6. 干货分享:SQLSERVER使用裸设备

    干货分享:SQLSERVER使用裸设备 这篇文章也适合ORACLE DBA和MYSQL DBA 阅读 裸设备适用于Linux和Windows 在ORACLE和MYSQL里也是支持裸设备的!! 介绍 大 ...

  7. iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ②)

    距上一篇博客"APP引导页的高度集成 - DHGuidePageHUD - ①"的发布有一段时间了, 后来又在SDK中补充了一些新的内容进去但是一直没来得及跟大家分享, 今天来跟大 ...

  8. iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ①)

    好长时间没更新博客, 是时候来一波干货分享了;APP引导页话不多说每一个APP都会用到,分量不重但是不可缺少,不论是APP的首次安装还是版本的更新,首先展现给用户眼前的也就只有它了吧,当然这里讲的不是 ...

  9. 【干货分享】Google 的设计准则,素材和资源

    在谷歌,他们说, “专注于用户,所有其它的就会水到渠成 ”.他们遵循设计原则,寻求建立让用户惊喜的用户体验.谷歌一直挑战自己,为他们的用户创造一种视觉语言,综合优秀设计的经典原则和创新.谷歌设计规范是 ...

  10. 【干货分享】Node.js 中文资料导航

    这篇文章与大家分享一批高质量的的 Node.js 中文资料.Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用 Node ...

随机推荐

  1. harbor重启后无法自启动解决方案

    1. 创建 systemd 服务单元文件 编辑服务文件: 使用以下命令创建并编辑 systemd 服务文件: sudo vim /etc/systemd/system/harbor.service 添 ...

  2. 链接器 ld 名称的由来

    Linker 通常缩写为 LD,这是因为在 Unix 和类 Unix 系统中,ld 是链接器的常用命令名称.这个命名可以追溯到 Unix 系统的早期发展历史. 历史背景 Unix 早期:在 Unix ...

  3. IP服务正常,域名服务异常,报400 badrequest

    IP的情况下,访问接口都正常,使用域名访问,报错400 badrequest 经确认,ssl配置无问题,证书文件本身无问题 最后查出来原因,是域名格式的问题,原域名中包含_,需要修改为- 排查过程: ...

  4. 修改python打包后的窗体图标、任务栏图标、exe图标

    前言 我python开发的GUI界面(图形用户界面)一直是tkinter,打包exe一直是Pyinstaller.但是打包出来的exe图标.状态栏图标.窗体左上角图标一直是默认的羽毛,我想自定义. 效 ...

  5. 【YashanDB知识库】数据变化率超过阈值统计信息失效

    [问题分类]性能优化 [关键字]统计信息 [问题描述] SQL --创建表结构 drop table t1; create table t1 (id int,name varchar2(200)); ...

  6. 一步一步将PlantUML类图导出为自定义格式的XMI文件

    一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08 PlantUML官网: https://plantuml.com/zh/ PlantUML命令行 ...

  7. ASP.NET Core – Razor Class Library (RCL)

    前言 Razor Class Library 的用途是封装 Razor views, pages, controllers, page models, Razor components, View c ...

  8. JavaScript – Symbol

    前言 Symbol 是 es6 的特性. 如果只是写业务逻辑代码, 其实是不太会用到的. 如果是做架构, 封装, UI 组件才有需要. 但学它的概念是好的. es6 有需要内置的 Symbol 链接者 ...

  9. 从0到1,Flask全网最全教学!全文1w字,蓝图、会话、日志、部署等使用Flask搭建中小型企业级项目

    从0到1,Flask全网最全教学!全文1w字,蓝图.会话.日志.部署等使用Flask搭建中小型企业级项目 什么是flask? Flask是一个使用Python编写的轻量级Web应用框架,它简洁而灵活, ...

  10. Git 本地仓库与基础操作指令

    本地仓库 获取本地仓库 在电脑任意位置创建一个空目录(例如test)作为我们的本地Git仓库 进入这个目录中,右键打开Git Bash窗口 执行 git init命令 如果创建成功后可在文件夹下看到隐 ...