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控制适用于需要精确控制和稳定性的应用,通过根据实际值与期望值的误差来进行调整,以使系统保持在期望状态。也就是说他具有自适应能力,可以根据实际情况动态调整控制参数。它可以在稳定状态下快速响应,并且能够抵抗外部扰动和系统变化。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“B2B+OMS方案”,赋能家电巨头构建BC订单一体化能力,促进业务增长|徐礼昭

某国际知名家电电器品牌,年营收超过5000亿元。该电器企业其整体业务分三大类:线上线下B2B2C业务、线下B2B业务以及DTC零售业务。 随着业务的发展,该电器品牌对2B业务及DTC业务的数字化系统能力支撑需要更加全面和立体,以适应业务…

5个优质免费自然语言处理学习资源 | 语言技术导航

探索并利用我们的5个免费自然语言处理(NLP)学习资源,更有效地理解和实施自然语言处理技术。适合初学者和进阶者,涵盖基础理论到实际应用。 近年来,随着人工智能(AI)解决方案的商业应用&#xff…

前后端数据传输格式(上)

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 作为后端,写…

springboot足球社区管理系统

springboot足球社区管理系统 成品项目已经更新!同学们可以打开链接查看!需要定做的及时联系我!专业团队定做!全程包售后! 2000套项目视频链接:https://pan.baidu.com/s/1N4L3zMQ9nNm8nvEVfIR2pg?pwdekj…

【论文阅读】Bayes’ Rays:神经辐射场的不确定性量化

【论文阅读】Bayes’ Rays:神经辐射场的不确定性量化 1. Introduction2. Related work3. Background3.2. Neural Laplace Approximations 4. Method4.1. Intuition4.2. Modeling perturbations4.3. Approximating H4.4. Spatial uncertainty 5. Experiments & A…

多线程(初阶七:阻塞队列和生产者消费者模型)

一、阻塞队列的简单介绍 二、生产者消费者模型 三、模拟实现阻塞队列 一、阻塞队列的简单介绍 首先,我们都知道,队列是先进先出的一种数据结构,而阻塞队列,是基于队列,做了一些扩展,在多线程有就非常有意…

Task中Wait()和Result造成死锁

在使用Task的时候,一不留神就会造成死锁,而且难以发现,尤其是业务繁多的情况下,一个Task嵌套另一个Task的时候,下面就演示一下,在什么情况下,会产生Wait()和Result的死锁,因此&#…

Java系类 之 String、StringBuffer和StringBuilder类的区别

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 ✈️已经旅游的地点 | 新疆-乌鲁木齐、新疆-吐鲁番、广东-广州…

07、基于LunarLander登陆器的强化学习案例(含PYTHON工程)

07、基于LunarLander登陆器的强化学习(含PYTHON工程) 开始学习机器学习啦,已经把吴恩达的课全部刷完了,现在开始熟悉一下复现代码。全部工程可从最上方链接下载。 基于TENSORFLOW2.10 0、实践背景 gym的LunarLander是一个用于…

【论文 | 联邦学习】 | Towards Personalized Federated Learning 走向个性化的联邦学习

Towards Personalized Federated Learning 标题:Towards Personalized Federated Learning 收录于:IEEE Transactions on Neural Networks and Learning Systems (Mar 28, 2022) 作者单位:NTU,Alibaba Group,SDU&…

【设计模式-4.1】行为型——观察者模式

说明:本文介绍设计模式中行为型设计模式中的,观察者模式; 商家与顾客 观察者模式属于行为型设计模式,关注对象的行为。以商家与顾客为例,商家有商品,顾客来购买商品,如果商家商品卖完了&#…

go语言学习-并发编程(并发并行、线程协程、通道channel)

1、 概念 1.1 并发和并行 并发:具有处理多个任务的能力 (是一个处理器在处理任务),cpu处理不同的任务会有时间错位,比如有A B 两个任务,某一时间段内在处理A任务,这时A任务需要停止运行一段时间,那么会切换到处理B任…

DockerFile常用保留字指令及知识点合集

目录 DockerFile加深理解&#xff1a; DockerFile常用保留字指令 保留字&#xff1a; RUN&#xff1a;容器构建时需要运行的命令 COPY&#xff1a;类似ADD&#xff0c;拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 …

【动态规划】LeetCode-面试题 17.16. 按摩师

&#x1f388;算法那些事专栏说明&#xff1a;这是一个记录刷题日常的专栏&#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目&#xff0c;在这立下Flag&#x1f6a9; &#x1f3e0;个人主页&#xff1a;Jammingpro &#x1f4d5;专栏链接&…

vs 安装 qt qt扩展

1 安装qt 社区版 免费 Download Qt OSS: Get Qt Online Installer 2 vs安装 qt vs tools 3 vs添加 qt添加 bin/cmake.exe 路径 3.1 扩展 -> qt versions 3.2

【STM32】STM32学习笔记-新建工程(04)

00. 目录 文章目录 00. 目录01. 创建STM32工程02. STM32工程编译和下载03. LED测试04. 型号分类及缩写05. 工程结构06. 附录 01. 创建STM32工程 【STM32】STM32F103C8T6 创建工程模版详解(固件库) 02. STM32工程编译和下载 2.1 选择下载器位ST-Link Debugger 2.2 勾选上电…

04. 函数

目录 1、前言 2、Python中的函数 2.1、内置函数 2.2、自定义函数 2.3、函数调用 3、函数的参数 3.1、形参和实参 3.2、位置参数&#xff08;Positional Arguments&#xff09; 3.3、默认参数&#xff08;Default Arguments&#xff09;&#xff1a; 3.4、关键字参数&a…

如何为C#WinFrom编译的.exe添加个性化图标

1、在VS中点击菜单栏上的“项目”,找到最下面的属性&#xff0c;单击进去 2、加载自定义的.ico文件&#xff0c;如果没有此格式的文件可以使用此网站去转换&#xff1a;图标制作大师 - 轻松制作网站favicon图标 3、重新编译文件即可

【【水 MicroBlaze 最后的介绍和使用】】

水 MicroBlaze 最后的介绍和使用 我对MicroBlaze 已经有了一个普遍的理解 了 现在我将看的两个 一个是 AXI4接口的 DDR读写实验 还有一个是 AXI DMA 环路实验 虽然是 水文 但是 也许能从中 得到一些收获 第一个是 AXI DDR 读写实验 Xilinx 从 Spartan-6 和 Virtex-6 系列开始…

SSM框架(六):SpringBoot技术及整合SSM

文章目录 一、概述1.1 简介1.2 起步依赖1.3 入门案例1.4 快速启动 二、基础配置2.1 三种配置文件方式2.2 yaml文件格式2.3 yaml读取数据方式&#xff08;3种&#xff09; 三、多环境开发3.1 yml文件-多环境开发3.2 properties文件-多环境开发3.3 多环境命令行启动参数设置3.4 多…