PWM妙用:解锁LED亮度调节与呼吸灯的LuatOS开发之旅

news/2025/11/11 19:05:40/文章来源:https://www.cnblogs.com/luatos/p/19211330

在嵌入式开发的精彩世界里,PWM技术有着举足轻重的地位。本次,我们将聚焦于PWM的经典应用——LED亮度控制及呼吸灯效果的实现。通过LuatOS开发环境,详细展示如何运用PWM功能,让开发者能够迅速掌握这一实用技能,开启创意硬件开发的新征程。

PWM脉冲宽度调制(Pulse Width Modulation,也称为脉宽调制)——是利用微处理器的数字输出对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变换等诸多领域。

日常开发中比较典型的应用场景:

电机控制:通过调节电机供电的PWM信号,控制电机转速和扭矩。

灯光调光:用于调节LED灯的亮度,改变状态的快慢来实现不同亮度效果。

音频信号生成:在音频电子设备中生成不同的声音频率和音量。

加热控制:在加热元件中使用PWM来调整输出功率,从而实现精确的温度控制。

本文特别分享PWM相关基础知识,并以Air8000核心板为例,演示LuatOS开发中如何使用PWM功能实现LED亮度控制及呼吸灯效果,帮助开发者快速上手。

一、PWM相关基础知识

PWM具有高效、控制精度高及实现简便等优点,但PWM信号可能产生高频噪声,需要滤波以减小干扰。另外,某些应用需要特定的硬件支持,如支持PWM输入的微控制器或电路。

要想使用PWM,还需先了解PWM的相关参数和原理。

1.1 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。

image
注意上图中蓝线,代表着输出的模拟电压,占空比越大,则模拟电压也越大。

二、PWM应用示例

Air8000相关管脚具有复用功能,结合原理图引脚指示可知板载红色LED由PIN24 GPIO21控制。本示例demo中已有配置好的pins_Air8000.json文件,测试demo时一并烧录进Air8000核心板。

image

image

Air8000系列应用示例持续更新中,本示例最新资料详见下方链接。

最新示例源码:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/pwm

实操教程详见:https://docs.openluat.com/air8000/luatos/app/driver/pwm/

2.1 PWM输出示例

本例使用Air8000核心板上的NetLed(网络状态灯),pwm通道id=4,打开pwm4通道的pwm输出,设置不同的占空比,小灯会有不同的亮度。

image

示例效果如下:
image

2.2 PWM呼吸灯

本例使用Air8000核心板上的NetLed(网络状态灯),pwm通道id=4来查看呼吸灯效果。呼吸灯效果就是小灯由亮到暗逐渐变化,很有节奏感地一起一伏,好像人在呼吸的感觉。

我们可以通过不断调高占空比让小灯一点点亮起,再不断调低占空比让小灯一点点熄灭从而达到此效果。

image

示例效果如下:
image

今天的内容就分享到这里了~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/962652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主子式与顺序主子式

主子式 (Principal Minor)是线性代数中一个与矩阵相关的重要概念。 定义 对于一个nnn cross n 𝑛𝑛的方阵 Abold cap A 𝐀 ,它的 kk 𝑘阶主子式是指从矩阵中选取相同的行号和列号构成的一个 kkk cross k �…

python项目跟练 外星人入侵 01 3个位置

3个位置 1、游戏屏幕大小 2、飞船图片大小 3、飞船在游戏屏幕中位置游戏屏幕大小 # 将屏幕大小设置存到一个单独设置类中 self.screen_width = 1000 # 定义屏幕 宽xx像素 self.screen_height = 800 # 定义屏幕 高xx…

ONES 重磅升级|全新内核,深度可配置,适配复杂业务流

ONES 于近期完成创业十年来最大范围内核代际升级。深度灵活的自定义引擎,完善的开放平台体系,AI 友好的数据交互架构。此次内核升级的首批上层功能已正式发布。 此次 ONES Project 全新升级,围绕工作项信息管理与多…

类的继承

类的继承子类: public class teacher extends stu{}父类 public class stu {public String name="111";public void say(){System.out.println("shuohua");} }使用 public class Main {public st…

CUDA安装注意事项

参考网站:https://blog.csdn.net/weixin_52677672/article/details/135853106?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522f12aadfcb1121e89732052c8440ee6c5%2522%252C%2522scm%2522%253A%252220140…

豆包Seed-Coder编程能力小试

豆包Seed-Coder编程能力小试背景 最近字节发布doubao-seed-code-preview-251028模型面向Agentic编程任务深度优化 - 支持256K长上下文,让模型轻松处理长代码文件、多模块依赖等复杂场景,更好支持端到端自主编程…

数据类型 标识符 键盘录入

数据类型 标识符 键盘录入数据类型 标识符 键盘录入 数据类型 基本数据类型 ![基本数据类型](/Users/eefile/Documents/截屏2025-11-11 17.37.18.png) 代码测试 public class num { public static void main(String[]…

102302145 黄加鸿 数据采集与融合技术作业2

作业2目录作业2作业①1)代码与结果2)心得体会3)Gitee链接作业②1)代码与结果2)心得体会3)Gitee链接作业③1)代码与结果F12调试分析Gif2)心得体会3)Gitee链接作业① 1)代码与结果 中国气象网在之前任务中已经…

详细介绍:Spring Boot

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

echarts获取坐标上的点距离顶部底部高度

const height = echarts_instance.getHeight()const max_distance = (max_y - y_value) / (max_y - min_y) * height;const min_distance = (y_value - min_y) / (max_y - min_y) * height;

K8S(九)—— Kubernetes持久化存储深度解析:从Volume到PV/PVC与StorageClass动态存储 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JAVA 随机函数

目录1. 日常开发(非安全场景):ThreadLocalRandom(推荐)2. 单线程/简单场景:Random3. 安全场景(如密码、Token生成):SecureRandom4. Java 8+ 流式处理:Random 结合流关键总结 在 Java 中生成随机数的“靠谱”…

GPIO 也是一个接口,还有 QEMU GPIODEV 和 GUSE - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CF1327F AND Segments

经典问题。 首先拆位,那么限制变成强制一段全为 \(1\),或者强制一段存在 \(0\),先把第一个限制填完,再考虑第二个限制。 然后对于第二个条件,将包含关系给干掉,那么按照 \(l\) 排序后 \(r\) 也是递增的,考虑容斥…

Air780EPM系列低功耗模组USB设计进阶:硬件要点与LuatOS API开发赋能

本文将以Air780EPM系列低功耗模组为对象,探讨USB接口硬件设计的关键要点,并介绍LuatOS高效开发API的赋能作用。旨在帮助开发者避开常见设计误区,快速实现稳定可靠的USB应用开发目标。 在设计USB接口时,不少刚接触嵌…

如何项目管理软件中计算预算?

项目管理的过程中,我们需要考录很多方面因为许多公司为他们的客户创建项目。所以他们需要有项目报表,工时报表,也需要计算项目预算。按照工时计算预算才可以为客户请求钱。 Zoho Projects 中,计算预算很简单。这个…

Kimi会员双11砍价成功!0.99元首月链接分享

活动时间:2025.11.11-11.25(仅剩14天) 已砍成功的0.99元优惠链接,首月体验Kimi Andante会员: 👉 0.99元优惠购买链接 https://www.kimi.com/membership/pricing?from=d11_2025_bargain&track_id=19a7249d-…

实用指南:【Qt】9.信号和槽_信号和槽存在的意义

实用指南:【Qt】9.信号和槽_信号和槽存在的意义pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …