PWM最重要的就是占空比,所有都是在为占空比服务,通过设置不同的占空比,产生不同的电压,产生不同的效果
定时器的输出通道
基本定时器:
基本定时器没有通道
通用定时器:
4个通道(CH1, CH2, CH3, CH4)
高级定时器:
6个通道(CH1, CH2, CH3, CH4, CH5, CH6)
一、定时器和输出通道的初始化
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//定时器初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//输出通道初始化
二、配置输出端的属性
每个定时器对应着哪几个端口,一般在手册上应该有有写,大家可以根据自己使用的芯片信号,具体去查
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//使用复用推免输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
配置时钟源,默认也是内部时钟源,这里知识代码确认一下
/*配置时钟源*/
TIM_InternalClockConfig(TIM3); //选择TIM2为内部时钟,若不调用此函数,TIM默认也为内部时钟
三、时基模块在PWM输出中的作用
例如我这里的配置的时间周期是1ms,那么我在main函数或者哪里调用
TIM_SetCompare1(TIM3, Compare);
的时候就不可以使延时低于1ms,具体会出现什么情况,大家可以自己去尝试,实践出真知,你的延时至少让人走完一个时间周期才行。不能太快也不能太慢,大家可以多尝试看看效果
TIM_InternalClockConfig(TIM3);
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR
TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; //PSC
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
四、输出比较初始化和参数配置
/*输出比较初始化*/
TIM_OCInitTypeDef TIM_OCInitStructure; //定义结构体变量
TIM_OCStructInit(&TIM_OCInitStructure); //结构体初始化,若结构体没有完整赋值
//则最好执行此函数,给结构体所有成员都赋一个默认值
//避免结构体初值不确定的问题
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //输出比较模式,选择PWM模式1
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性,选择为高,若选择极性为低,则输出高低电平取反
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //输出使能
TIM_OCInitStructure.TIM_Pulse = 0; //初始的CCR值
TIM_OC1Init(TIM2, &TIM_OCInitStructure); //将结构体变量交给TIM_OC1Init,配置TIM2的输出比较通道1
1、PWM的两种工作模式
PWM模式1的工作原理
- 向上计数模式:
-
- 计数器从0开始递增,直到达到自动重载寄存器(ARR)的值。
- 当计数器值小于或等于CCR值时,输出为高电平。
- 当计数器值大于CCR值时,输出为低电平。
- 当计数器达到ARR值时,计数器重新从0开始计数。
- 向下计数模式:
-
- 计数器从ARR值开始递减,直到达到0。
- 当计数器值大于或等于CCR值时,输出为高电平。
- 当计数器值小于CCR值时,输出为低电平。
- 当计数器达到0时,计数器重新从ARR值开始计数。
PWM模式2的工作原理
- 输出电平翻转时机:
-
- 向上计数模式:
-
-
- 当计数器值小于捕获/比较寄存器(CCR)的值时,输出为低电平。
- 当计数器值大于或等于CCR的值时,输出为高电平。
- 当计数器达到ARR值时,输出电平再次翻转,并且计数器重新从0开始计数。
-
-
- 向下计数模式:
-
-
- 当计数器值大于CCR的值时,输出为低电平。
- 当计数器值小于或等于CCR的值时,输出为高电平。
- 当计数器达到0时,输出电平再次翻转,并且计数器重新从ARR值开始计数。
-
- 占空比计算:
-
- 在PWM模式2中,占空比由公式
(ARR - CCR) / ARR
计算得出。这意味着CCR值越大,占空比越小;CCR值越小,占空比越大。
- 在PWM模式2中,占空比由公式