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. C#WebService 客户端通过Http调用请求(转)

    1.webservice帮助类 public class WebServiceHelper    {               public static string CallServiceByG ...

  2. XML方式实现Spring声明式事务管理

    1.首先编写一个实体类 public class Dept { private int deptId; private String deptName; public int getDeptId() ...

  3. centos7源以及相关的一些命令

    yum makecache:将服务器上的软件包信息在本地缓存,以提高 搜索安装软件的速度. yum update:更新所有的rpm包 yum upgrade:大规模的版本升级,与yum update不 ...

  4. BZOJ 1016: [JSOI2008]最小生成树计数( kruskal + dfs )

    不同最小生成树中权值相同的边数量是一定的, 而且他们对连通性的贡献是一样的.对权值相同的边放在一起(至多10), 暴搜他们有多少种方案, 然后乘法原理. ----------------------- ...

  5. [LeetCode]题解(python):115-Distinct Subsequences

    题目来源: https://leetcode.com/problems/distinct-subsequences/ 题意分析: 给定字符串S和T,判断S中可以组成多少个T,T是S的子串. 题目思路: ...

  6. Protel99se教程三:新建PCB文件以及PCB基本设定

    在上一课,我们绘制好SCH原理图后,在这一节课开始,我们介绍,如何将SCH转化成PCB文件,在这一节课,我们主要给大家讲解,如果新建PCB文件以及载入封装图. 第一步:在Documents目录下,新建 ...

  7. oracle命令大全

    内容包括三大项:    1.oracle基本操作语句 2.SQLServer基本操作语句 3.各种数据库连接方法 ******************************************* ...

  8. Android开发中怎样调用系统Email发送邮件(多种调用方式)

    在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...

  9. live555 RTSP服务器建立及消息处理流程

    DynamicRTSPServer::creatnew():    1.调用继承自RTPSever::setUpOurSocket:        1.调用 GroupsockHelper 的 set ...

  10. Mobile上的viewport及各种概念澄清贴

    device Pixel & CSS Pixel 物理像素指显示设备上的物理像素点,比如HTC G11宽是480px,这的480是用物理像素衡量的. CSS像素的话则指我们写页面时理解的那个像 ...