51单片机PWM讲解

前言

51单片机我已经很久没用过了,毕竟是十年前的产物了,但是由于工作室的学弟学妹需要学习,加之马上就要举行循迹小车比赛,很多人反映看不懂PWM,或者看了不会用,于是写一篇文章简单介绍一下。

PWM普遍应用于惯性系统,我们知道单片机几乎只能输出“1”和“0”两种状态,即开和关,想要输出模拟量是不太容易实现的,那么怎样才能使单片机输出平滑的线性信号呢?没接触过PWM的小伙伴可能第一时间想到的就是高中时学过的电位器(也就是滑动变阻器),利用欧姆定律调整阻值而改变电流,但这种方法精度低,效率低,功耗高,故障率也高,于是聪明的人们发明出了PWM,它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中,如呼吸灯,电机控速、开关电源等(顺嘴一提,来工作室那条路上的灯,走近就缓缓变亮,也运用到了这种技术)。

一、PWM的介绍

 PWM(Pulse Width Modulation)即脉冲宽度调制,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量。

何为脉冲宽度调制?比如说,我们先输出1ms的高电平,再输出1ms的低电平以此快速进行输出(即周期时间为2ms,占空比则为50%),那么这段电信号并没有以全程高电平的状态输出,也没有以全程低电平的状态输出,而是以稳定的中间电平状态输出。再比方说周期的时间是10ms,脉宽时间是8ms 那么低电平时间就是2ms 总的占空比 8/(8+2)= 80%(高电平时间 / 周期时间=占比),就会以80%总电流的强度输出。根据这个就可以控制电机的速度或LED灯的亮度。
 

但是值得一提的是,这种调制方法只适用于惯性系统,例如电机的转动,当从高电平跳变到低电平时,电机不会马上停止转动,而是靠着惯性继续旋转。LED灯则是根据人眼的视觉暂留效果,当它熄灭的一瞬间会留有余晖,连当频率很快的时候,LED灯的亮暗过度就会看上去很自然,所以周期过长,就会出现肉眼可见的闪烁。

pwm的频率:

是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);

也就是说一秒钟PWM有多少个周期
单位: Hz
表示方式: 50Hz 100Hz

pwm的占空比:

是一个脉冲周期内,高电平的时间与整个周期时间的比例
单位: %

取值范围:(0%-100%)

pwm的周期:

即:一个脉冲信号的时间         1s内测周期次数等于频率

T=1/f
周期=1/频率
50Hz = 20ms 一个周期

如果频率为50Hz ,也就是说一个周期是20ms 那么一秒钟就有 50次PWM周期

pwm的脉宽时间:高电平时间

二、 如何在定时器中配置PWM

高级的MCU都有配备相应的PWM功能的,可见PWM这一技术的应用还是偏多的,而8051系列单片机没有配备这一功能,我们需要采用定时器中断的方法来生成。用定时器输出一段连续变化的方波,由于方波的占空比不同输出的电流也不相同,这样就可以模拟出稳定变化的电信号。

简单来说,PWM就是一个DA转换,通过产生数字信号模拟输出了模拟信号。

PWM实现的原理是通过锯齿波/三角波(上图)所需要合成的波形(下图)进行比较,然后确定PWM所需要输出的电平,锯齿波输入,将5V作为参考电压,给比较器同相参考电压输出0~10V的锯齿波,当锯齿波电压小于参考电压则输出低电平,而当锯齿波大于参考电压时比较器输出高电平。 

举一反三,如何产生一个不同占空比的PWM: 

当我们从反相端接锯齿波,大于参考电压输出为0,而小于参考电压为1,通过改变参考电压的值,从而产生了不同占空比的信号。

将PWM转换为正弦波:

三、代码

下边是通过延时的方法,实现LED的亮暗变换实现呼吸灯的代码

其中,100ms为一个周期,在第一个for循环中,Time为高电平,100-Time为低电平,同时Time的值还会变化,也就对应上了上图产生不同占空比的PWM,占空比不一样,电流输出强度也就不一样,灯的亮度自然也不一样,于是就产生了呼吸灯的效果。

使用PWM对电机的控制这里我仅给出部分代码,大家C语言都学的那么好,相信都能看懂。

这是我上学期循迹小车的部分代码

这两个代码其实大差不差 

说白了,PWM就是设置一个恒定的周期内,通过设置计时数和设置的比较值的大小,是在计时数比比较值小置高低电平,则要依据自己的需求来进行设置。

同时,由于单片机PWM信号强度弱,所以一般不直接接在负载上,而是通过驱动电路控制负载。

如L298N、TB6612。 

四、结语

上图的正弦波形只是在理想状态下的,也就是说,PWM的占空比和电机的转速其实并不完全成正比,随着学习的知识越来越多,就会了解到一个叫PID算法的东西(现在不需要了解,就你们做的小车用不了PID),PID算法会用到闭环调节,也就是根据当前误差、误差积分和误差变化率的信息,计算出一个控制量,用于调节输出,以使系统的实际值与期望值尽可能接近。PID控制适用于需要精确控制和稳定性的应用,通过根据实际值与期望值的误差来进行调整,以使系统保持在期望状态。也就是说他具有自适应能力,可以根据实际情况动态调整控制参数。它可以在稳定状态下快速响应,并且能够抵抗外部扰动和系统变化。

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

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

相关文章

Kubernetes学习笔记-Part.08 安装k8s环境

目录 Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退 第八章 K8s环境安装 8.1.准备安装文件 在外网服务器…

IDEA如何配置Git 遇到问题的解决

新建项目 点击 会变红 会生成.git隐藏文件 配置远程仓库路径:点击Manage Remotes:将远程仓库的链接放到这里: 得到如下样式: 此时提交到本地仓库 点击add,添加到暂存文件: 此时文件变绿&#xf…

【Ratis】Grpc.proto文件里定义的一些RPC

一、 总览 Raft的提供了三种类型的RPC。分别如下: RaftClientProtocolService:client与server之间的交互RPC,分为ordered和unordered,一种是有序的异步请求流、一种是无序的异步请求流。RaftServerProtocolService:r…

JDK中lock锁的机制,其底层是一种无锁的架构实现的,公平锁和非公平锁

简述JDK中lock锁的机制,其底层是一种无锁的架构实现的,是否知道其是如何实现的 synchronized与lock lock是一个接口,而synchronized是在JVM层面实现的。synchronized释放锁有两种方式: 获取锁的线程执行完同步代码,…

Elasticsearch一些函数查询

1. 根据价格分组统计数量,每组区间为2000, filter_pathaggregations 设置查询结果只展示函数结果 也有date_histogram函数根据日期分组等等 GET order/_search?filter_pathaggregations {"aggs": {"hist_price": {"histogr…

神经网络 代价函数

神经网络 代价函数 首先引入一些便于稍后讨论的新标记方法: 假设神经网络的训练样本有 m m m个,每个包含一组输入 x x x和一组输出信号 y y y, L L L表示神经网络层数, S I S_I SI​表示每层的neuron个数( S l S_l Sl​表示输出…

使用idea如何快速的搭建ssm的开发环境

文章目录 唠嗑部分言归正传1、打开idea,点击新建项目2、填写信息3、找到pom.xml先添加springboot父依赖4、添加其他依赖5、编写启动类、配置文件6、连接创建数据库、创建案例表7、安装MybatisX插件8、逆向工程9、编写controller10、启动项目、测试 结语 唠嗑部分 小…

MIT线性代数笔记-第21讲-特征值,特征向量

目录 21.特征值,特征向量打赏 21.特征值,特征向量 对于一个方阵 A A A,若 A x ⃗ λ x ⃗ A \vec{x} \lambda \vec{x} Ax λx ,即 A x ⃗ A \vec{x} Ax 平行于 x ⃗ \vec{x} x ,那么 λ \lambda λ是 A A A的特征值…

怎么防止死锁

目录 一、死锁的概念 1、互斥条件 2、 占有和等待条件 3、非抢占条件(No Preemption): 4、环路等待条件(Circular Wait): 二、防止死锁 死锁预防(Deadlock Prevention)&#xf…

内网穿透工具获取一个公网ip

下载地址:点击即可下载很简单 然后将他复制到上面的命令行窗口直接回车

LeetCode1423. Maximum Points You Can Obtain from Cards

文章目录 一、题目二、题解 一、题目 There are several cards arranged in a row, and each card has an associated number of points. The points are given in the integer array cardPoints. In one step, you can take one card from the beginning or from the end of…

Programming Contest 2023(AtCoder Beginner Contest 331)E题 Set Meal --- 题解

目录 E题 Set Meal 题目大意: 思路:(在求最大时和最小时,如果要求查询代价较小时,可以使用优先队列) 代码: E题 Set Meal E - Set Meal (atcoder.jp) 题目大意: 先给出n个…

知识图谱07——图片中表格开源ocr识别

对比了多种ocr识别算法,最终选择了百度paddle官方的ocr算法 在所在的虚拟环境下运行 pip install paddleocr --userfrom paddleocr import PaddleOCR import os import csv# 创建 PaddleOCR 对象 ocr = PaddleOCR(use_gpu=True) # 无gpu时选择False# 指定图片文件夹和结果保…

编程怎么学才能快速入门,分享一款中文编程工具快速学习编程思路,中文编程工具之边条主控菜单构件简介

编程怎么学才能快速入门,分享一款中文编程工具快速学习编程思路,中文编程工具之边条主控菜单构件简介 一、前言 零基础自学编程,中文编程工具下载,中文编程工具构件之扩展系统菜单构件教程编程系统化教程链接https://jywxz.blog…

SALib敏感性分析入门实践笔记

1. 敏感性分析 敏感性分析是指从定量分析的角度研究有关因素发生某种变化对某一个或一组关键指标影响程度的一种不确定分析技术。 其实质是通过逐一改变相关变量数值的方法来解释关键指标受这些因素变动影响大小的规律。 敏感性因素一般可选择主要参数(如销售收入、…

autojs-ui悬浮按钮模板

注释很详细,直接上代码 涵盖很多常用知识点,也可当知识点看 运行效果长这样: 开始按钮相当于开关,按钮内容会随点击变换控制台按钮可让运行框显示或隐藏退出按钮退出程序并在3s后关闭运行框只需在对应函数内添加需要实现的内容即可…

云服务器网站遇到HTTPS CC攻击了,有什么办法吗?

目前网站使用SSL证书,用443端口的情况非常普遍,大多数网站,用户都是会选择用证书,这样不仅可以提供数据传输的安全性,增强用户信任和品牌形象,还可以提高网站在搜索结果中的排名,从而增加流量和…

算法复习,数据结构 ,算法特性,冒泡法动态演示,复杂度,辗转相除法*,寻找最大公因数

算法复习 知识点 1. 程序 数据结构 算法 2. 算法: 求解问题的策略数据结构:问题的数学模型程序:微计算机处理问题编制的一组指令 3. **特性 ** 有穷性:算法在执行有穷步后能结束确定性:每一指令有确切的含义&a…

2023年12月4日支付宝蚂蚁庄园小课堂小鸡宝宝考考你今日正确答案是什么?

问题:你知道电杆上安装的“小风车”有什么用途吗? 答案:防止鸟类筑巢 解析:小风车一般做成橙色,因为橙色是一种可令野鸟产生恐慌感的颜色;小风车在转动时,会发出令野鸟害怕的噪声;…

LLM推理部署(四):一个用于训练、部署和评估基于大型语言模型的聊天机器人的开放平台FastChat

FastChat是用于对话机器人模型训练、部署、评估的开放平台。体验地址为:https://chat.lmsys.org/,该体验平台主要是为了收集人类的真实反馈,目前已经支持30多种大模型,已经收到500万的请求,收集了10万调人类对比大模型…