文章目录

  • 基本原理
  • PWM是如何实现?
  • 分类
  • 程序实现
  • 总结

基本原理

PWM的全称是脉冲宽度调制Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式;

所以根据面积等效法则,可以通过对改变脉冲的时间宽度,来等效的获得所需要合成的相应幅值频率的波形;

具体如下图所示;

由上图可知,脉冲宽度调制使用一个脉冲宽度会被调制的方波,并且波型的平均值会有所变化。

如果我们考虑一个周期为 T{\displaystyle T}T 的脉冲波 f(t){\displaystyle f(t)}f(t) ,低值 ymin{\displaystyle y_{\text{min}}}ymin​,高值为 ymax{\displaystyle y_{\text{max}}}ymax​ ,跟占空比DDD(duty cycle),此波的平均值为:
yˉ=1T∫0Tf(t)dt{\displaystyle {\bar {y}}={\frac {1}{T}}\int _{0}^{T}f(t)\,dt} yˉ​=T1​∫0T​f(t)dt
当 f(t){\displaystyle f(t)}f(t) 是一个脉冲波,它的值在 0<t<D⋅T{\displaystyle 0<t<D\cdot T}0<t<D⋅T 是 ymax{\displaystyle y_{\text{max}}}ymax​ 而在 D⋅T<t<T{\displaystyle D\cdot T<t<T}D⋅T<t<T 是 ymin{\displaystyle y_{\text{min}}}ymin​

上式的描述可以变为:
yˉ=1T(∫0DTymaxdt+∫DTTymindt)=1T(D⋅T⋅ymax+T(1−D)ymin)=D⋅ymax+(1−D)ymin{\displaystyle {\begin{aligned}{\bar {y}}&={\frac {1}{T}}\left(\int _{0}^{DT}y_{\text{max}}\,dt+\int _{DT}^{T}y_{\text{min}}\,dt\right)\\&={\frac {1}{T}}\left(D\cdot T\cdot y_{\text{max}}+T\left(1-D\right)y_{\text{min}}\right)\\&=D\cdot y_{\text{max}}+\left(1-D\right)y_{\text{min}}\end{aligned}}} yˉ​​=T1​(∫0DT​ymax​dt+∫DTT​ymin​dt)=T1​(D⋅T⋅ymax​+T(1−D)ymin​)=D⋅ymax​+(1−D)ymin​​
以上公式可以在很多状况下被简化,当 ymin=0{\displaystyle y_{\text{min}}=0}ymin​=0 及 yˉ=D⋅ymax{\displaystyle {\bar {y}}=D\cdot y_{\text{max}}}yˉ​=D⋅ymax​。

从这里可以看出,波型的平均值非常明显地直接与占空比 DDD 有关。

占空比

图中存在三种占空比状态,25%50%75%占空比状态,不难发现,假设占空比为D,则满足:

D=TonTD = \cfrac{T_{on}}{T}D=TTon​​

其中TTT是PWM的周期,通常和载波的周期相同;

PWM是如何实现?

PWM实现的原理是通过锯齿波/三角波(载波)所需要合成的波形(调制波)进行比较,然后确定PWM所需要输出的极性,通常是ON或者是OFF,因为一般都是作用到开关元器件上;如下图所示;

振荡器输出的锯齿波和参考值 VTHV_{TH}VTH​ 进行比较,然后就可以输出PWM波形了;

matlabsimulink中搭建了一下仿真,具体如下图所示;

最终输出波形如下:

这里简单说明一下:

  • 锯齿波(图中橙色波形)最大为10,然后我希望输出平均为5的波形(图1中红色的水平直线);
  • 那么通过比较,当锯齿波小于5时;PWM输出低电平,即为OFF
  • 当锯齿波大于5时,PWM输出高电平,即为ON

所以再换一个思路,如果我希望输出一个电压逐渐升高的波形呢,该如何设计呢?

其实很简单,只要把需要调制的波形设置为斜坡输出的波形就可以了,具体如下图所示;

可以看到,最终占空比逐渐从0%增大到100%

然后我们继续想,能不能调制出其他的波形,比如调制一个正弦波sin wave,那也就是我们常说的SPWM,其实是可以的,具体如下图所示;

分类

参考STM32中PWM的配置,根据载波波形的形状,假设三角波最大值是10,那么它的变化过程可能存在以下两种情况:

  • 完整周期包括两个过程,先递增,再递减:0→增加5→增加10→减少5→减少00\xrightarrow{增加}5\xrightarrow{增加}10\xrightarrow{减少}5\xrightarrow{减少}00增加​5增加​10减少​5减少​0,这种也叫中央对齐PWM;
  • 完整周期只有递增过程:0→增加5→增加100\xrightarrow{增加}5\xrightarrow{增加}100增加​5增加​10;

中央对齐PWM

脉冲波的中心将会被固定在时间窗格的中心,同时脉冲波的两边可以移动,使得波的宽度被延伸或压缩,具体如下图所示;

另一种类型的PWM脉冲波形如下图所示;

程序实现

现在的MCU大部分都自带硬件PWM发生器,即配置好相应的寄存器,就能直接产生PWM,下面的例子基于NUCLEO-F767ZI,通过cubemx配置了三路PWM输出,然后实现了呼吸灯的效果;

int main(void)
{HAL_Init();MX_GPIO_Init();MX_TIM4_Init();MX_TIM3_Init();MX_TIM12_Init();int32_t time_stamp = 0;int32_t time_stamp_old = 0;int32_t ccr_val = 0;uint8_t add_flag = 1;HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);    while (1){time_stamp = HAL_GetTick();if(time_stamp - time_stamp_old > 5){time_stamp_old = time_stamp;if(add_flag){ccr_val+=25;if(ccr_val >= 0xFFFF){ccr_val = 0xFFFF;add_flag = 0;}}else{ccr_val-=25;if(ccr_val <= 0){add_flag = 1;ccr_val = 0;}}TIM4->CCR2 = ccr_val;TIM12->CCR1 = ccr_val;TIM3->CCR3 = ccr_val;}}
}

整体效果如下:

通过示波器看其中的一路PWM输出的占空比也是随时间变化;

总结

本文简单介绍了PWM的原理,以及如何产生PWM,可以通过锯齿波作为载波和调制波经过比较强,产生相应的PWM输出波形,最后结合STM32实现了一个呼吸灯的简单程序。

关于PWM脉冲宽度调制的点滴总结相关推荐

  1. 脉冲宽度调制 matlab,关于PWM脉冲宽度调制的点滴总结

    基本原理 PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式: 所以根据面积等效法则,可以通过对改 ...

  2. 微雪树莓派PICO笔记——3.PWM(脉冲宽度调制)

    文章目录 什么是PWM PWM的应用 RP2040 PWM框架图 PWM流程图 PWM内部框架图 [MicroPython]machine.PWM类函数详解 代码实现 什么是PWM 脉冲宽度调制 (P ...

  3. 蓝桥杯模块学习9——PWM脉冲宽度调制(深夜学习——单片机)

    一.什么是PWM脉冲宽度调制: 对PWM简单理解(佛科院--深夜学习)_佛科院深夜学习的博客-CSDN博客 二.脉冲宽度调制实验: 1.代码思路: (1)我们可以利用定时器规定周期为10ms(100H ...

  4. 拓展模块使用教程和心得(四):PWM脉冲宽度调制及普通有刷马达和空心杯电机(测试平台:STC8A8K,STM32F103)

    成就更好的自己 这次内容是给未来的新专栏(控制算法)打一个小基础,而且是为了完善上一期拓展模块教程三:步进电机的内容(https://blog.csdn.net/qq_36098477/article ...

  5. 嵌入式STM32入门之定时器控制LED闪烁与产生PWM脉冲宽度调制信号

    定时器控制LED闪烁与产生PWM脉冲宽度调制信号 一.前言 二.定时器基本介绍 (一)STM32定时器 (二)通用定时器主要功能 (三)计数器模式 (四)定时器工作原理 三.实验(1)初识定时器 (一 ...

  6. 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考

    提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...

  7. PWM脉冲宽度调制(一)

    一.PWM模式 脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率.由TIMx_CCRx寄存器确定占空比的信号. PWM本质是一个定时器,ARR寄存器中填充一个最大值,计数器从0计数至ARR ...

  8. PWM脉冲宽度调制技术控制LED亮度

    1.PWM控制 PWM控制--脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要的波形.PWM是一种对模拟信号电平进行数字编码的方法.通过高分辨率计数器的使用,方波的占空比被调制用来 ...

  9. PWM脉冲宽度调制——它是什么?

    脉冲宽度调制 (PWM) 的良好定义就在名称本身.为了更好地理解 PWM 是什么,让我们首先看一些基本术语. 微控制器是基于二进制信号的智能数字元件.二进制信号的最佳表示是方波(高低电平).下图解释了 ...

  10. PWM脉冲宽度调制,实现呼吸灯_领航者开发板

    1.脉冲宽度调制(Pulse Width Modulation,PWM) 仅从本次实验(呼吸灯)的角度进行解释:通过不断调节信号的占空比来改变LED灯的亮度,如占空比逐渐递增会使得LED逐渐变亮,占空 ...

最新文章

  1. Python基础之:Python中的模块
  2. html h1转换为行内,css中转换为行内样式的解决方案(css-inline)
  3. ref绑定dom的三种写法
  4. C++ PAT 乙级 1007——素数对猜想
  5. Kafka中副本机制的设计和原理
  6. 设计素材模板丨极简风简历模板
  7. linux下mongodb 安装,linux下mongodb安装
  8. 2020 年,程序员如何拥抱 5G ?
  9. maven scala plugin 使用教程笔记之jvmArgs配置-D参数中使用.md
  10. AP注册不上线(现网中存在其它厂商的控制器)
  11. 使用虚拟机搭建Centos7
  12. 2022-05-14 ubuntu下OpenCV环境搭建成功
  13. 红外线人体感应灯arduino_Arduino 各种模块篇 人体红外感应模块 proximity sensor
  14. php 2038年,php如何取2038年后的时间戳|php时间日期处理到2038年之后该怎么办 - PS下...
  15. 人才测评技术与应用【2】
  16. H.264向H.265的转变及其相关技术
  17. linux查看exif软件,EXIF信息查看器使用教程及功能解析
  18. 记一次Mysql并发死锁,引出的问题及讨论
  19. word-spacing、word-break、letter-spacing和white-space
  20. 刘诚昊20162316 第一周作业

热门文章

  1. 【FinE】债券久期和凸性
  2. 悉尼大学 GC in Data Science 学习总结
  3. 竞争情报的网络信息源
  4. oracle 查看表历史记录,Oracle 查看表操作历史记录并恢复
  5. FaceBook 遭遇有史以来全球最大宕机
  6. 坐着童年纸飞机的C语言for循环!超好玩!超详细!
  7. kindle 4 简易电子书格式转换(txt转mobi)
  8. 2013我爱逻辑题(2)
  9. 树莓派python虚拟环境的设置与使用
  10. 服务器运维 考什么证书,腾讯云服务器运维高级工程师认证(TCP)证书有效期、考试内容、费用...