Arduino的PWM功能应用:会呼吸的灯

目录

概述

1 认识PWM

1.1 PWM原理

1.2 PWM的应用

1.3 在Arduino中使用PWM

2.硬件

2.1 硬件结构

2.2 线路连接

3 软件

3.1 编译和下载代码

3.2 详细代码

4 测试

4.1 灯的变化测试

4.2 使用逻辑分析仪看波形


概述

       本文通过一个简单的案例,介绍Arduino中PWM的应用方法。搭建一个控制LED的电路,然后使用PWM来控制LED的暗亮程度,以加强对PWM功能的理解。还详细介绍PWM相关知识,便于更加详尽的理解PWM在工程实践中的应用。

1 认识PWM

1.1 PWM原理

        PWM( Pluse Width Modulation )是方波控制信号。其通过控制高电平在一个周期内的宽度,可以控制输出信号的变化。PWM信号应用中有一个非常重要的概念: 占空比(Duty Cycle)。那么什么是占空比呢?

占空比 f = t/T 

t:   高电平持续时间

T:  周期

1.2 PWM的应用

1)  实现模拟信号输出。其实现方法是: 使输出的PWM通过一个滤波电路,将PWM转变成连续的模拟信号

2)  实现直流电机调速,控制步进电机步长,舵机旋转角度等

3)控制LED或者蜂鸣器的引脚电平,使其按照一定的规律工作

1.3 在Arduino中使用PWM

       在Arduino板卡中,只有部分引脚可以输出PWM,这些引脚在扩展插槽上有标识符(~)。一个使用PWM功能的案例:

Step - 1:   配置引脚为输出模式

pinMode( pin,OUTPUT);

Step - 2: 改变占空比参数,控制输出信号的高电平时长

 analogWrite( pin,  para); 

上述伪代码中,para为占空比参数,其范围为(0 ~ 255 ),数值越大,占空比越大。在Arduino UNO 板卡中,一个PWM的周期为: 2ms左右

2.硬件

2.1 硬件结构

1) Arduino UNO主控板,实现PWM波功能,用于控制灯的状态

2)led灯珠, 指示灯

3)一个500欧姆电阻,限流作用

4)面包板,方便导线连接

5)杜邦线若干,用于连接元器件

2.2 线路连接

建议LED的线路连接方式  

LED控制引脚与Arduino主板的线路对应关系

Arduino IOLED trigger IO注释
PIN-3LED负端口

3 软件

3.1 编译和下载代码

3.2 详细代码

/*
Copyright  2024-2029. All rights reserved.
文件名     : breath_led
作者       : tangmingfei2013@126.com
版本       : V1.0
描述       : 呼吸灯
其他       : 无
日志       : 初版V1.0 2024/2/18  
文档路径   : 
*/
#include <MsTimer2.h>#define  LEDPIN   3void setup ()
{pinMode(LEDPIN,OUTPUT);
}void loop()
{//循环语句,控制PWM亮度的增加for (int a=0; a<=255;a++){analogWrite(LEDPIN,a);delay(5);      //当前亮度级别维持的时间,单位毫秒}//循环语句,控制PWM亮度减小 for (int a=255; a>=0;a--){analogWrite(LEDPIN,a);delay(5);     //当前亮度的维持的时间,单位毫秒  }delay(100);//完成一个循环后等待的时间,单位毫秒
}

4 测试

4.1 灯的变化测试

编译代码后,下载到板卡中,可以看到led由暗到亮,由亮到暗的变化特征

4.2 使用逻辑分析仪看波形

1)亮度大的波形

2)亮度中等波形

3)亮度暗时波形

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

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

相关文章

基于Springboot的新能源充电系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的新能源充电系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…

2.18作业

通过字符设备驱动分步注册过程实现LED驱动的编写&#xff0c;编写应用程序测试 头文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio…

《隐私计算简易速速上手小册》第3章:隐私计算的法律与伦理(2024 最新版)

文章目录 3.1 数据保护法规概览3.1.1 基础知识3.1.2 重点案例:企业适应 GDPR3.1.3 拓展案例 1:国际公司处理多地法规3.1.4 拓展案例 2:小型创业公司的数据保护实践3.2 隐私计算与伦理考量3.2.1 基础知识3.2.2 重点案例:数据隐私与公共卫生研究3.2.3 拓展案例 1:个性化推荐…

java.sql.SQLException: No operations allowed after statement closed.

背景 某天下午&#xff0c;客服反馈线上服务出现问题&#xff0c;不能分配了。于是我登录到系统上&#xff0c;进行同样的操作发现也不行。当然同时我已经登录到服务器打开了日志&#xff0c;发现报错了&#xff0c;下面就是日志的错误信息&#xff1a; java.sql.SQLExceptio…

五、Mybatis复杂映射开发

1.一对一查询 1.1 一对一查询的模型 用户表和订单表的关系为&#xff0c;一个用户有多个订单&#xff0c;一个订单只从属于一个用户一对一查询的需求&#xff1a;查询一个订单&#xff0c;与此同时查询出该订单所属的用户SQL: DROP TABLE IF EXISTS user; CREATE TABLE user …

网络模型及传输基本流程

1.OSI 七层模型 OSI &#xff08; Open System Interconnection &#xff0c;开放系统互连&#xff09;七层网络模型称为开放式系统互联参考模型&#xff0c;是一个逻辑上的定义和规范; 把网络从逻辑上分为了 7 层 . 每一层都有相关、相对应的物理设备&#xff0c;比如路由器…

IDEA2021版热部署配置

第一步 Settings中搜索compiler 勾选上Build project automatically 第二步 按快捷键 CtrlAltShift/ 选择第一个Registry 勾选上 注&#xff1a;2021版IDEA 被迁移到了这里 第三步 第四步 pom.xml中添加 配置文件中添加 #springdevtools spring.devtools.restart.…

基于springboot智慧外贸平台源码和论文

网络的广泛应用给生活带来了十分的便利。所以把智慧外贸管理与现在网络相结合&#xff0c;利用java技术建设智慧外贸平台&#xff0c;实现智慧外贸的信息化。则对于进一步提高智慧外贸管理发展&#xff0c;丰富智慧外贸管理经验能起到不少的促进作用。 智慧外贸平台能够通过互…

svg之全局组件,配合雪碧图解决vue2的svg优化问题

这里是vue2中的svg的完整解决方案的另一篇。 <template><svg :class"svgClass"><use :xlink:href"#${name}"></use></svg> </template><script>export default {name: icon,props: {name: {type: String,requi…

167基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序

基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序&#xff0c;可显示承载能力、压强、刚度及温升等图谱.程序已调通&#xff0c;可直接运行。 167 显示承载能力、压强、刚度及温升 (xiaohongshu.com)https://www.xiaohongshu.com/explore/65d212b200000000…

IO进程线程day1作业

1、使用fgets统计给定文件行数 代码&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h> int main(int argc, const char *argv[]) {if(argc ! 2){printf("inputs file error\n");printf("usage:./a.out filename\n&quo…

sonar-java 自定义规则

前言 最近在搞代码质量方面的项目&#xff0c;主要是针对Java语言&#xff0c;其他语言实际上也可以执行检查&#xff0c;核心原理是一样的&#xff0c;都是静态代码扫描&#xff0c;如果需要进行动态代码运行验证则可以通过单元测试的方式。以其中一个示例&#xff0c;实现自…