PWM是pulse width modulation的缩写,即脉冲宽度调制。其通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形;

  1、PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制,用来对一个具体模拟信号的电平进行编码。等效的实现是基于采样定理中的一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量即指窄脉冲的面接。这里所说的效果基本相同,是指该环节的输出响应波形基本相同。

  2、如把各输出波形用傅立叶分析,则它们的低频特性非常接近,仅在高频段略有差异;

PWM信号是数字的,在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全没有(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上面去的。(简单的说就是 用数字的信号来控制负载达到模拟信号控制负载的效果;负载比如舵机)

  改变脉冲的周期可以达到调频的效果,改变脉冲的宽度或占空比可以达到调压的效果,因此,采用适当控制方法即可使电压或电流与频率协调变化;

  PWM控制具有很多优点:

    1、从处理器到被控系统信号都是数字形式的,无需进行数模转换;

    2、让信号保持为数字形式可将噪声影响降到最小,噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响,这是PWM用于通信的主要原因;

STM32的PWM:

  stm32的定时器除了TIM6和7。其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出。

  而通用定时器也能同时产生多达4路PWM输出,这样,stm32最多可以同时产生30路PWM输出;(如果加上重映像的话,还可以更多)

  要使用STM32下的通用定时器TIMx产生PWM输出,我们会用到3个寄存器,来控制PWM的。这三个寄存器是:捕获/比较模式寄存器TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。注意,还有个TIMx的ARR寄存器是用来控制PWM输出频率的

PWM输出模式:

 STM32的pwm输出用两种模式,模式1和模式2,由TIMx_CCMRx寄存器的OCxM位确定的(“110”为模式1,“111”为模式2).模式1和模式2的区别如下:

  “110”:pwm模式1-----在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向上计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1).

  "111":pwm模式2-----在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平;

  而从计数模式上看,PWM和TIMx作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式;

PWM的输出管脚:

  pwm的输出管脚是确定好的 :

           

不同的TIMx有分配不同的引脚,但是考虑到管脚复用功能,STM32提出了一个重映像的概念,就是说通过设置某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出PWM.

  比如说TIM3的第2个通道,在没有重映像的时候,指定的管脚是PA.7,如果设置部分重映像之后,TIM3_CH2的输出就被映射到PB.5上了;如果设置了完全重映像的话,TIM3_CH2的输出就被映像到PC.7上了;

PWM输出信号:

  pwm输出的是一个方波信号,信号的频率是由TIMx的时钟频率和TIMx_ARR预分频器所决定的。具体的设置方法在前面定时器部分中详细说明了;二输出信号的占空比则是由TIMx_CRRx寄存器确定的。计算公式如下:

      占空比=(TIMx_CRRx/TIMx_ARR)*100%

  因此,可以通过向CRR中填入适当的值来输出自己需要的频率和占空比的方波信号;

具体操作步骤:

  1、设置RCC时钟;

  2、设置GPIO时钟;GPIO模式应该设置为复用推挽输出GPIO_Model_AF_PP,如果需要引脚重映像的话,则需要用GPIO_PinRemapConfig()函数进行设置;

  3、设置TIMx定时器的相关寄存器;与之前定时器寄存器设置一样;

  4、设置TIMx定时器的PWM相关寄存器;

      a、设置PWM模式(默认情况下PWM是董洁的)

      b、设置占空比(公式计算)

      c、设置输出比较极性(前面的介绍)

      d、最重要的是使能TIMx的输出状态和使能TIMx的PWM输出使能;

 相关设置完成之后,通过TIMx_Cmd()来打开TIMx定时器,从而得到PWM的输出;

stm32之PWM的更多相关文章

  1. STM32之PWM君

    PWM..英语好的人估计又知道这三个大写字母代表哪三个英语单词了.小弟不才,就说中文意思好了:脉冲宽度调制,玩过飞思卡尔的人估计对PWM非常的不陌生吧.电机驱动需要PWM,控制舵机的转向需要PWM,总 ...

  2. STM32之PWM波形输出配置总结

    一.   TIMER分类: STM32中一共有11个定时器,其中TIM6.TIM7是基本定时器:TIM2.TIM3.TIM4.TIM5是通用定时器:TIM1和TIM8是高级定时器,以及2个看门狗定时器 ...

  3. 【转载】 stm32之PWM

    发现这位博主的博客被大量的转发,我也转载一篇,谁叫人家写的好呢. 原文地址:http://blog.sina.com.cn/s/blog_49cb42490100s6uh.html 脉冲宽度调制(PW ...

  4. 【STM32】PWM DAC基本原理(实验:PWM实现DAC)

    虽然STM32F103ZET6具有内部DAC,但是也仅仅只有两条DAC通道,并且STM32还有其他的很多型号是没有DAC的.通常情况下,采用专用的D/A芯片来实现,但是这样就会带来成本的增加. 不过S ...

  5. STM32的PWM输入模式设置并用DMA接收数据

    参考 :STM32输入捕获模式设置并用DMA接收数据 PWM input mode This mode is a particular case of input capture mode. The ...

  6. stm32之PWM博客好文收藏

    https://www.cnblogs.com/jiwangbujiu/p/5616376.html STM32F103 使用TIM3产生四路PWM https://www.cnblogs.com/c ...

  7. stm32之PWM学习

    下图是一个STM32普通PWM形成的图形原理说明 自动重装载寄存器(ARR)用于确定波形的频率(即周期).捕获比较寄存器(CCRx)(用于确定占空比的) PWM的工作过程如下:首先ARR寄存器里面的值 ...

  8. 关于STM32 定时器 PWM 实时调节占空比时,预装载特性

    最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图1).反映到器件上也有不同的电压显示,但是在设备运行的时候,就不行了(图2). 图1 图 ...

  9. STM32基础分析——PWM配置

    在使用STM32F103产生固定频率.固定占空比的PWM波时,虽然有官方以及众多开发板提供的例程,但是关于有点问题并没有说的很清晰,并且<STM32F10X参考手册>的中文翻译可能容易造成 ...

随机推荐

  1. 原生javascript实现老.虎机抽奖点名demo源码思路解析

    想着使用原生Javascript做一个随机点名的小应用, 也可以做抽奖使用. html简单化,人名单可以通过js生成并处理. 可以非常随意的添加修改人名字. 应用想带点特效,比如老.虎机转动的特效. ...

  2. wamp+thinkphp环境配置

    下载wamp并安装,启动wamp,会出现一个小图标,然后点击它——>Start All Services.我点击之后是橙色,不是绿色.绿色代表成功启动.我是IIS占用了80端口的缘故,所以我修改 ...

  3. VC++ 编译过程

    一 前言 一开始编译C++代码的时候可能会对编译的错误觉得很难理解,搞不清楚究竟是哪里错了.了解编译过程,能够更好的处理编译错误. 二 名词解释 编译单元:当一个c或cpp文件在编译时,预处理器首先递 ...

  4. python中3个帮助函数help、dir、type的使用

    1.help函数:查看模块.函数.变量的详细说明: 查看模块 help("modules") 查看包  help("json") 查看类 help(json.J ...

  5. IOS 定位服务与地图的应用开发

    1.定位服务 现在的移动设备很多都提供定位服务,IOS设备提供3种不同定位途径: (1)WiFi定位,通过查询一个WiFi路由器的地理位置的信息,比较省电:IPhone,IPod touch和IPad ...

  6. 浅谈USB设备的VID和PID

    根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备,VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向U ...

  7. [置顶] java 枚举

    1. 什么是枚举?枚举就是用来存放一组固定的常量. 2. 枚举有什么作用?一些程序在运行时,它需要的数据不能是任意的,而必须是一定范围内的值:例如性别  男和女. public enum Gender ...

  8. [转]WIBKIT技术资料

    WebKit结构和流程分析 http://inedx.blog.hexun.com/28830354_d.html webkit架构 http://inedx.blog.hexun.com/28795 ...

  9. ExpandableListView(二)替换箭头图标被拉伸的问题

    之前写过一篇替换系统默认图标的文章,之后又发现了问题,当替换成自己的图片之后,图片被拉伸了!为了解决这个问题,我几乎尝试了所有方法,结果都不理想 我试过的方法,在布局里,把textview上的内容字体 ...

  10. Score(规律)

    Score Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...