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

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

                  

 

时间: 2024-08-02 00:54:00

stm32之PWM的相关文章

pwm-使用GPIO模拟PWM,实现呼吸灯。

问题描述 使用GPIO模拟PWM,实现呼吸灯. 各位大神好,我使用的板子是MT7620A,里面没有PWM功能,从而使用GPIO控制LED,使用延时的方法模拟PWM功效,实现呼吸灯的功能.可是...几番调试,这个LED依然呼吸不正常. 遂来请教各位, 是不是 在下思路上误入歧途了,有没有大神解救一下的.程序如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 10

stm32 定时器-STM32定时器1控制电机输出两路PWM波形问题

问题描述 STM32定时器1控制电机输出两路PWM波形问题 本人刚学stm32,用定时器1的CH1和CH2输出pwm波形是不知道为什么没有高电平输出,电机根本不转求大家看看 #include "include.h" /* 硬件连接: (PE9->EN1---TIME1_CH1 右) (PE11->EN2---TIME1_CH2 左) PA4->INT4 PA5->INT3 PA6->INT2 PA7->INT1 */ /*0011 1010---&g

【STM32 .Net MF开发板学习-13】用PWM驱动智能小车

这段时间一直忙着开发基于.NET Micro Framwork系统的远程医疗系统(参见:http://space.cnblogs.com/group/topic/41835/),所以隔了近一个礼拜的时间,才有精力继续研究PWM驱动智能小车的问题. 以前对步进电机和直流电机的控制了解不深,以为仅对步进电机而言,才能进行PWM控制,及到购买相关的驱动板和步进电机后,才发现由于驱动板的原因,控制步进电机的方向.速度只能通过IO控制. 在介绍具体的控制代码之前,为了便于更深入的了解PWM控制直流电机的机

【STM32 .Net MF开发板学习-12】跳动的音符(PWM合成)

PWM除了可驱动电机外,还可以设置不同频率以模拟不同音阶的音符输出,实际测试发现,声音还是蛮动听的,不过常见的有源蜂鸣器可不行(红牛开发板自带),需要专门采购无源蜂鸣器,这二者的区别是有源蜂鸣器通电就响,而无源蜂鸣器需要输入一定频率的信号才能发声. 我们采用Timer3作为PWM的输出源,我们计数固定为为36,占空比也固定为1/2,通过分频系数来设定相对应的PWM输出频率. 底层代码如下,由于官方无PWM驱动模板,如下函数由我自行定义. //采用Timer3 36M PB0输出 CPU_TIME

【STM32 .Net MF开发板学习-11】步进电机控制(非PWM模式)

选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动电路选用uln2003芯片的驱动板,其控制时序图如下: 开发板学习-11]步进电机控制(非PWM模式)-">四相八拍:A->AB->B ->BC ->C ->CD ->D ->DA 其A.B.C.D指的是uln2003芯片驱动板的1N1.1N2.1N3.1N4,波形在上表示有输入信号,波形在下表示无输入信号. 我们采用红牛开发板进行步进电机控制,为了便于接线,我们需

《stm32嵌入式系统开发实战指南》一2.2 主要板载资源

2.2 主要板载资源 本节介绍STM32F107微控制器的主要片内外设,着重介绍10/100M以太网接口.CAN总线接口和RS485总线接口. 2.2.1 10/100M以太网接口 1.功能介绍 STM32F107的以太网模块支持通过以太网收发数据,符合IEEE 802.3-2002标准.STM32F107以太网模块灵活可调,能适应各种不同客户的需求.该模块支持两种标准接口连接到外接的物理层(PHY)模块:IEEE 802.3协议定义的独立于介质的接口(MII)和简化的独立于介质的接口(RMII

单片机-如何通过调节电位器,控制pwm占空比

问题描述 如何通过调节电位器,控制pwm占空比 初学stm8单片机,用stm8s003F 编写的一个小程序 1. RT1是色温调节3200K/5600K转换电位器外接PD5的AD口 2. RT2是亮度调节电位器外接PD6的AD口 3.PC6.PC7是PWM输出32khz的频率,根据检测到PD5/PD6的电压调节占空比,达到调光的效果 下面是我的功能代码,不知哪里有误,一直输不出pwm,麻烦各位大神帮忙看看. void Init_ADC_GPIO(void) { GPIO_Init(GPIOD,

《STM32库开发实战指南:基于STM32F4》----导读

目 录 前 言第1章 如何安装KEIL51.1 温馨提示1.2 获取KEIL5安装包1.3 开始安装KEIL51.4 安装STM32芯片包第2章 如何用DAP仿真器下载程序2.1 仿真器简介2.2 硬件连接2.3 仿真器配置2.4 选择目标板2.5 下载程序第3章 初识STM323.1 什么是STM323.2 STM32能做什么3.2.1 智能手环3.2.2 微型四轴飞行器3.2.3 淘宝众筹3.3 STM32选型3.3.1 STM32分类3.3.2 STM32命名方法3.3.3 选择合适的MC

如下,STM32F103RCT6怎么产生15.6K占空比可调的PWM

问题描述 如下,STM32F103RCT6怎么产生15.6K占空比可调的PWM 现在硬件已经确定 引脚A8,A9,A10 功能有TIM1 CH 1,2,3 左电机A,B,C三相 0时关断 1时导通 上MOSFET接VIN 引脚B13,B14,B15 功能有TIM1 CH 1 N,2 N,3 N 左电机A,B,C三相 1时关断 0时导通 下MOSFET接GND 引脚C6,C7,C8 功能无 重定义功能TIM3 CH 1,2,3 右电机A,B,C三相 0时关断 1时导通 上MOSFET接VIN 引脚