stm32之PWM

  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输出;(如果加上重映像的话,还可以更多)

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的输出;

时间: 2024-10-25 12:13:46

stm32之PWM的相关文章

STM32之PWM君

PWM..英语好的人估计又知道这三个大写字母代表哪三个英语单词了.小弟不才,就说中文意思好了:脉冲宽度调制,玩过飞思卡尔的人估计对PWM非常的不陌生吧.电机驱动需要PWM,控制舵机的转向需要PWM,总之.可以说,PWM,you are so good. 好了..言归正传,广大的互联网的网友们,咱们又见面了,大家早上晚上中午好好好.额..好像也没见过面,STM32的PWM,可谓是小强中的小强,STM32的PWM,就是由定时器产生的,但是奇怪的是除了定时器TIM6和TIM7不能产生PWM外,其他的定

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

STM32的PWM输入模式设置并用DMA接收数据 项目中需要进行红外学习,如果采用输入捕获的方式,因为定时器只能捕获上升沿或者下降沿, 所以只能获得周期,而不能得到具体的红外波的高低电平的时间. 所以采用PWM输入的方式进行捕获. 采用的是PA8脚,对应TIM1的通道1. /********************************************************************* * 函数 *************************************

详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!(转)

一.stm32的pwm输出引脚是使用的IO口的复用功能. 二.T2~T5这4个通用定时器均可输出4路PWM--CH1~CH4. 三.我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!). 四.给出了PWM频率和占空比的计算公式. 步骤如下: 1.使能TIM3时钟 RCC->APB1ENR |= 1 << 1; 2.配置对应引脚(PA6)的复用输出功能 GPI

stm32之PWM学习

下图是一个STM32普通PWM形成的图形原理说明 自动重装载寄存器(ARR)用于定波形的频率(即周期).捕获比较寄存器(CCRx)(用于确定占空比的) 如图为向上计数: 定时器重装载值为ARR,比较值CCRx t时刻对计数器值和比较值进行比较 如果计数器值小于CCRx值,输出低电平 如果计数器值大于CCRx值,输出高电平 PWM的一个周期 定时器从0开始向上计数 当0-t1段,定时器计数器TIMx_CNT值小于CCRx值,输出低电平 t1-t2段,定时器计数器TIMx_CNT值大于CCRx值,输

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

最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图1).反映到器件上也有不同的电压显示,但是在设备运行的时候,就不行了(图2). 图1 图2 纠结了N天后,也没有办法解决,只好乖乖的看STM32 控制器手册找找看了,结果还真找到了. 从图中可以看到,如果使能预装载特性,则数据会立即写入寄存器中,如果没有使能,那就得等到有事件(?)发生了.这我就明白了,在调试状态下,给寄存器赋值,不会产生什么影响,因为人的反应速度很慢,但是在运行的时候

基于stm32的pwm呼吸灯

这一节的程序所涉及到的硬件是比较简单,主要是考察对stm32时钟的应用 原理性质的东西我就不多说了,参考书目为: <STM32库开发实战指南> 刘火良,杨森著 <STM32开发指南(库函数版本)> 正点原子著 使用定时器来控制I/O口输出PWM波形,从而驱动LED灯出现类似呼吸频率一般的亮灭. 硬件电路图: 我的收获: 1 这是STM32数据手册上对TIM3通用定时器复用功能重映象的描述,假设让PA6作为PWM输出,从图中可以看出PA6对应TIM3的通道1, 使能TIM3通道1的函

STM32输出PWM

最近要用STM32来输出PWM,花了一个晚上写完了,记录一下 (我用的是STM32F303CCT6) 1.打开定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 2.打开输出引脚的GPIO时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); 3.配置相应引脚为 AF模式(具体AFx要看手册) GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, G

STM32学习笔记6(TIM通用模块生成PWM)

1.     TIMER输出PWM基本概念   脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单一点,就是对脉冲宽度的控制.一般用来控制步进电机的速度等等. STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出. 1.1   PWM输出模式 S

在Keil中做stm32的软件仿真,查看输出PWM波形时,在逻辑分析仪中规定IO口signal,出现&quot;unknow signal&quot;

文章源地址:http://blog.sina.com.cn/s/blog_dc9244010102vtn1.html 最近在学习STM32的PWM波输出,由于手中没有示波器,于是按照野火的教程使用软件仿真,使用MDK5自带的逻辑分析仪观察波形,前边一路顺利,在打开逻辑分析仪往里添加signal时,问题出现了——Unknown Signal!信号无法添加进去.在百度文库看到一篇关于MDK460相关问题的解决方案,于是我抱着试一试的态度,试了一试,结果挺好的,于是想到了和大家分享一下. 1.错误提示