目录

  • 基本原理

  • PWM是如何实现?

  • 分类

  • 程序实现

  • 总结

基本原理

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

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

具体如下图所示;

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

如果我们考虑一个周期为  的脉冲波  ,低值 ,高值为  ,跟占空比(duty cycle),此波的平均值为:

当  是一个脉冲波,它的值在  是  而在 是

上式的描述可以变为:

以上公式可以在很多状况下被简化,当  及 。

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

占空比

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

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

PWM是如何实现?

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

振荡器和比较器

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

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

simulink

最终输出波形如下:

50%占空比

这里简单说明一下:

  • 锯齿波(图中橙色波形)最大为10,然后我希望输出平均为5的波形(图1中红色的水平直线);

  • 那么通过比较,当锯齿波小于5时;PWM输出低电平,即为OFF

  • 当锯齿波大于5时,PWM输出高电平,即为ON

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

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

占空比逐渐增大

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

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

SPWM

分类

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

  • 完整周期包括两个过程,先递增,再递减:增加增加减少减少,这种也叫中央对齐PWM;

  • 完整周期只有递增过程:增加增加;

中央对齐PWM

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

中央对齐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,可以通过锯齿波作为载波和调制波经过比较强,产生相应的PWM输出波形,最后结合STM32实现了一个呼吸灯的简单程序。

https://mp.weixin.qq.com/s/TKJ2Ddig_0AJfd6iz39vmw

原来PWM这么简单!通过锯齿波作为载波和调制波经过比较,产生相应的PWM输出波形相关推荐

  1. 天哪!原来PWM这么简单

    目录 基本原理 PWM是如何实现? 分类 程序实现 总结 基本原理 PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递 ...

  2. PWM呼吸灯之三角波、锯齿波、正弦函数波

    脉冲宽度调制(PWM),是英文"Pulse Width Modulation" 的缩写,简称脉宽调制,是利用 微处理器(MCU)的数字输出来对模拟电路进行控制的一种非常有效的技术. ...

  3. python正弦波和等腰三角波_51proteus仿真:生成方波、正弦波、锯齿波和三角波

    51proteus仿真:生成方波.正弦波.锯齿波和三角波 这个proteus仿真是一个网友做的,该仿真可以生成方波.正弦波.锯齿波和三角波,并且还可以用按键调整波形. 不过,对初学者来讲,可能有点复杂 ...

  4. python 处理锯齿波信号

    python 处理锯齿波信号 预期学习目标(ILO): 您应该 了解傅里叶分析在时域中周期性信号的基础,即如何将周期性时域信号分解为基频. 能够从头编程周期波形,并将其与"scipy&quo ...

  5. 51proteus仿真:生成方波、正弦波、锯齿波和三角波

    51proteus仿真:生成方波.正弦波.锯齿波和三角波 这个proteus仿真是一个网友做的,该仿真可以生成方波.正弦波.锯齿波和三角波,并且还可以用按键调整波形. 不过,对初学者来讲,可能有点复杂 ...

  6. 函数信号发生器:本设计中要求输出方波、三角波、锯齿波、正弦波,电压0-10V可调,调节精度0.1V;输出信号的频率0-100Hz;占空比可调

    函数信号发生器:本设计中要求输出方波.三角波.锯齿波.正弦波,电压0-10V可调,调节精度0.1V:输出信号的频率0-100Hz:占空比可调. 本次课题设计将利用单片机控制来实现信号发生系统所要求的功 ...

  7. stm32锯齿波_工程师实战:基于STM32的波形发生器设计

    本文摘自21ic论坛,作者:21ic网友 一路向北lm) 为了调动大家的积极性,先开个贴,万一你们都不参加呢!哈哈侥幸心理............... 先发个波让你们看看 ,吓吓你们,快点来参赛!! ...

  8. MATLAB绘制正弦波、方波、三角波、锯齿波的mif文件

    MATLAB绘制正弦波.方波.三角波.锯齿波的mif文件 % 对波形进行等间隔采样,以采样次数作为 ROM 存储 % 地址,将采集的波形幅值数据做为存储数据写入存储地址对应的存储空间 % 采样次数为 ...

  9. python画锯齿波_用Python控制硬件35-自制二三十元成本的信号测量采集控制系统

    如前篇所介绍,用Shell Lab测试台软件配合之前介绍的任意款实验板,都能方便地实现ADC电压测量,但遇到两个问题: 示例代码虽然众多,但大都默认ShellLab类型的控制器,需要手动改为Mcush ...

最新文章

  1. CodeForces - 1263A Sweet Problem(思维,水题)
  2. leetcode 640. Solve the Equation | 640. 求解方程(字符串处理)
  3. H323plus的学习使用(3)——加载H.264插件
  4. python 代理服务器 身份验证_使用httplib2处理身份验证和代理服务器
  5. 狗屎的Easy UI ,链接页面出错!搞了我一上午!
  6. Unity3D基础38:角色控制器组件
  7. 20165329 Java实验四 Android程序设计
  8. 入选司法部案例库,效率源协助的这起网络游戏外挂案到底“优”在何处?
  9. 命名实体消歧的代码实现
  10. 聊聊 GPU 的计算能力上限
  11. air换电池 macbook_大加分!苹果 2018 新款 MacBook Air 电池可独立更换
  12. 苹果8屏幕测试软件,iPhone8人脸识别软件
  13. SSM之spring事务管理
  14. 请写出sfr和sbit的语句格式_单片机关键字sfr和sbit区别
  15. QST青软实训学员学习总结-2020/5/24-STM32
  16. 完全用Linux工作——看清华学子痛批Windows
  17. MYSQL的地理信息数据库_国家基础地理信息系统数据库
  18. 中国各省市编号(具体到二级市、区、县)
  19. 华为进入公有云的为与不为
  20. springboot学校快递站点管理系统的设计与实现 毕业设计-附源码111544

热门文章

  1. 助创cms二手车众筹系统:汽车众筹平台绝佳时机来临!
  2. Springboot+Mysql在线众筹系统
  3. 电脑如何通过数据线连接手机网络?(USB共享网络)
  4. 受邀参加2009中国电子商务创新发展高峰论坛
  5. Kaggle竞赛 —— 泰坦尼克号(Titanic)
  6. msdn和系统下载位置
  7. 读书笔记:《权力之治:人工智能时代的算法规制》
  8. mapper method ......attempted to return null from.....
  9. 如何截取第一个括号_王者荣耀如何取空白名和重复名
  10. 企业邮箱搭建模式优劣分析