10 PWM输出10 STM32PWM输出讲解_第1页
10 PWM输出10 STM32PWM输出讲解_第2页
10 PWM输出10 STM32PWM输出讲解_第3页
10 PWM输出10 STM32PWM输出讲解_第4页
10 PWM输出10 STM32PWM输出讲解_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、10 PWM输出PWM:脉冲宽度调制10.1通用定时器工作分析 相比之下,通用定时器TIM2 TIM5 就比基本定时器复杂得多了。除了基本的定时,它主要用在测量输入脉冲的频率、脉冲宽与输出PWM 脉冲的场合,还具有编码器的接口,PWM包括输出几路占空比可调,频率可调的PWM,以及捕获多路PWM的频率和占空比。如下图。(1) 捕获/ 比较寄存器通用定时器的基本计时功能与基本定时器的工作方式是一样的,同样把时钟源经过预分频器输出到脉冲计数器TIMx_CNT 累加,溢出时就产生中断或DMA 请求。而通用定时器比基本定时器多出的强大功能,就是因为通用定时器多出了一种寄存器捕获/ 比较寄存器TIMx_C

2、CR(capture/compare register),它在输入时被用于捕获(存储) 输入脉冲在电平发生翻转时脉冲计数器TIMx_CNT 的当前计数值,从而实现脉冲的频率测量;在输出时被用来存储一个脉冲数值,把这个数值用于与脉冲计数器TIMx_CNT 的当前计数值进行比较,根据比较结果进行不同的电平输出。(2) PWM 输出过程分析通用定时器可以利用GPIO 引脚进行脉冲输出,在配置为比较输出、PWM 输出功能时,捕获/比较寄存器TIMx_CCR 被用作比较功能,下面把它简称为比较寄存器。这里直接举例说明定时器的PWM 输出工作过程:若配置脉冲计数器TIMx_CNT 为向上计数,而重载寄存器

3、TIMx_ARR 被配置为N,即TIMx_CNT 的当前计数值数值X 在TIMxCLK 时钟源的驱动下不断累加, 当TIMx_CNT 的数值X 大于N 时, 会重置TIMx_CNT 数值为0 并重新计数。而在TIMx_CNT 计数的同时,TIMx_CNT 的计数值X 会与比较寄存器TIMx_CCR 预先存储的数值A 进行比较。当脉冲计数器TIMx_CNT 的数值X 小于比较寄存器TIMx_CCR 的值A 时,输出高电平(或低电平);相反地,当脉冲计数器的数值X 大于或等于比较寄存器的值A 时,输出低电平(或高电平)。如此循环,得到的输出脉冲周期就为重载寄存器TIMx_ARR 存储的数值(N+1

4、)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器TIMx_CCR 的值A 乘以触发脉冲的时钟周期,即输出PWM 的占空比为A/(N+1) 。见下图PWM 输出模式,图中为重载寄存器TIMx_ARR 被配置为N=8,向上计数;比较寄存器TIMx_CCR 的值被设置为4、8、大于8、等于0 时的输出时序图。图中OCxREF 即为GPIO 引脚的输出时序、CCxIF 为触发中断的时序。 PWM 输出模式(3)PWM 输入过程分析而当定时器被配置为输入功能时,可以用于检测输入到GPIO 引脚的信号(频率检测、输入PWM 检测),此时捕获/ 比较寄存器TIMx_CCR 被用作捕获功能,下面把它简称为捕

5、获寄存器。见下图,为PWM 输入时的脉冲宽检测时序图。按照上图所示时序图来分析PWM 输入脉冲宽检测的工作过程:要测量的PWM 脉冲通过GPIO 引脚输入到定时器的脉冲检测通道,其时序为图中的TI1。把脉冲计数器TIMx_CNT 配置为向上计数,重载寄存器TIMx_ARR 的N 值配置为足够大。在输入脉冲TI1 的上升沿到达时,触发IC1 和IC2 输入捕获中断,这时把脉冲计数器TIMx_CNT 的计数值复位为0,于是TIMx_CNT 的计数值X 在TIMxCLK 的驱动下从0 开始不断累加,直到TI1 出现下降沿,触发IC2 捕获事件,此时捕获寄存器TIMx_CCR2 把脉冲计数器TIMx_

6、CNT 的当前值2 存储起来,而TIMx_CNT 继续累加,直到TI1 出现第二个上升沿, 触发了IC1 捕获事件, 此时TIMx_CNT 的当前计数值4 被保存到TIMx_CCR1。很明显TIMx_CCR1(加1)的值乘以TIMxCLK 的周期,即为待检测的PWM 输入脉冲周期,TIMx_CCR2(加1)的值乘以TIMxCLK 的周期,就是待检测的PWM 输入脉冲的高电平时间,有了这两个数值就可以计算出PWM 脉冲的频率、占空比了。可以看出,正因为捕获/ 比较寄存器的存在,才使得通用定时器变得如此强大。10.2硬件接口及实现功能10.2.1实现功能定时器TIM2 的CH2输出1KHZ,占空比

7、50%信号,TIM2 的CH3输出1KHz,占空比70%信号。(1)屏幕初始化:第1行: TIMER DEMO 第3行: TIM2 PWM MODE 第6行:PA1-PWMVALUE:50% 第8行:PA2-PWMVALUE:70% (2)用逻辑分析仪、示波器分别观察PA1、PA2的波形。10.2.2硬件接口打开相关手册,TIM2的通道2、3分别从PA1、2输出。10.3固件库驱动实例及函数详解在固件库的 Project-STM32F10x_StdPeriph_Examples-TIM-PWM_Output文件夹下,打开main.c: 基本TIM_TimeBaseInit()配置可以参考定时器

8、章节,定义输出模式结构体变量后,再配置输出模式。1).TIM_OCMode :输出模式配置,主要使用的为 PWM1 和 PWM2 模式。PWM1 模式是 :在向上计数时,当 TIMx_CNTTIMx_CCRn 时通道 n 为无效电平,否则为有效电平。PWM2 模式与 PWM1模式相反。其中有效电平和无效电平并不是固定地对应高电平和低电平,也是需要配置的,由下面介绍的 .TIM_OCPolarity 成员配置。我们可以使用 PWM2 输出模式。2).TIM_OutputState :配置输出模式的状态,使能或关闭输出。我们可以向该成员赋值为 TIM_OutputState_Enable(使能输出

9、)。3).TIM_OCPolarity :有效电平的极性,把 PWM 模式中的有效电平设置为高电平或低电平。我们可以向该成员赋值为 TIM_OCPolarity_Low(有效电平为低电平)。4).TIM_Pulse :直译为跳动,本成员的参数值即为比较寄存器 TIMx_CCR 的数值,当脉冲计数器 TIMx_CNT 与 TIMx_CCR 的比较结果发生变化时,输出脉冲将发生跳变。当我们向 2、3 通道的该成员分别赋值为 998/2,998*7/10。而定时器向上计数、PWM2模式、有效电平为低,定时周期为 1000(.TIM_Period=999),所以各通道输出PWM 的占空比为 D=TIM

10、_Pulse/(TIM_Period+1),即分别为 50%、70%。(注 :上面占空比的计算公式仅针对特定的配置。)填充完输出模式初始化结构体后,要调用输出模式初始化函数 TIM_OCxInit() 对各个通道进行初始化,其中 x 表示定时器的通道。如 TIM_OC1Init() 用来初始化定时器的通道1,TIM_OC2Init() 用来初始化定时器的通道 2,在调用各个通道的初始化函数前,需要对初始化结构体的 .TIM_Pulse 成员重新赋值,这是因为本实验中其他成员的配置都一样,而占空比不同。然后用 TIM_Cmd()使能定时器 TIM3,定时器外设就开始工作了。再调用TIM_Ctrl

11、PWMOutputs()函数使能输出PWM。例如:TIM_CtrlPWMOutputs(TIM2, ENABLE);另外,GPIO配置,也可以直接参考代码。10.4完整代码实现/* * 文件名称:定时器PWM输出实验* 实验目的:掌握STM32定时器功能和配置方法* 程序说明:配置TIM2 CH2、CH3为PWM输出模式,CH2输出1KHZ,占空比50%信号,* CH3输出1KHz,占空比70%信号* 日期版本:2011-9-19/V1.0a */* Includes -*/#include stm32f10x.h#include lcd.h#include stdio.h/* Private

12、 typedef -*/* Private define -*/* Private macro -*/* Private variables -*/uint32_t TimingDelay = 0;uint16_t Channel2Pulse = 0, Channel3Pulse = 0;/* Private function prototypes -*/void Delay_Ms(uint32_t nTime);void NVIC_Configuration(void);void TIM_Config(uint16_t Channel2Pulse, uint16_t Channel3Puls

13、e);void PWM_IO_Config(void);/* Private functions -*/* * 说明 主函数 * 参数 None * 返回值 None */int main(void) SysTick_Config(SystemCoreClock/1000); /1ms中断一次PWM_IO_Config();TIM_Config(998/2,998*7/10);/LCD工作模式配置STM3210B_LCD_Init();LCD_Clear(White);LCD_SetTextColor(White);LCD_SetBackColor(Blue); LCD_ClearLine(L

14、ine0);LCD_ClearLine(Line1);LCD_ClearLine(Line2);LCD_ClearLine(Line3);LCD_ClearLine(Line4);LCD_DisplayStringLine(Line1, TIMER DEMO );LCD_DisplayStringLine(Line3, TIM2 PWM MODE );LCD_SetTextColor(Blue);LCD_SetBackColor(White);LCD_DisplayStringLine(Line6,PA1-PWMVALUE:50% );LCD_DisplayStringLine(Line8,P

15、A2-PWMVALUE:70% ); while(1);/* * 说明 通用定时器TIM2配置函数,PWM输出工作模式 * 参数 none * 返回值 None */void TIM_Config(uint16_t Channel2Pulse, uint16_t Channel3Pulse)TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;/* TIM2 clock enable */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENA

16、BLE);/* Time base configuration */TIM_TimeBaseStructure.TIM_Period = 999; /1KHz:从0计数到999为一个计数周期TIM_TimeBaseStructure.TIM_Prescaler = 71;/设置预分频,频率为:72M/(71+1)=1MTIM_TimeBaseStructure.TIM_ClockDivision = 0;/时钟分频系数为0,该处不影响定时器频率TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;/向上计数TIM_TimeBase

17、Init(TIM2, &TIM_TimeBaseStructure);/* Channel 2 and 3 Configuration in PWM mode */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;/配置为PWM2模式TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = Channel2Pulse;/设置跳变值,当计数器计数到该值时电平发生跳变TIM_OCInitStructure.TIM_OCPol

18、arity = TIM_OCPolarity_Low;/当定时器的计数值大于TIM_Pulse时电平为低TIM_OC2Init(TIM2, &TIM_OCInitStructure);/TIM2的通道2使能TIM_OCInitStructure.TIM_Pulse = Channel3Pulse;TIM_OC3Init(TIM2, &TIM_OCInitStructure); /TIM2的通道3使能TIM_Cmd(TIM2, ENABLE); /使能TIM2定时计数器TIM_CtrlPWMOutputs(TIM2, ENABLE); /使能TIM2 PWM输出模式/* * 说明 PWM输出模式 PA1(TIM2-CH2)、PA2(TIM2-CH3)引脚配置 * 参数 None * 返回值 None */void PWM_IO_Config(void) GPIO_InitTypeDef GPIO_InitS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论