PWM可控制电压原理
主要通过PWM 输入模式根据控制单位时间内输出的平均电压,以调节电压大小。而PWM输出模式通过调节占空比,控制平均电压大小;
设置TIM为PWM输出模式
第一步:时钟使能:
GPIO,TIM;
第二步:设置引脚为复用模式
第三步:复用为指定TIM的PWM输出模式
第四步:定时器时基单元的配置
第五步:配置定时器的输出比较功能
cpp
void timeer14PWM_init(){
// 开启时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
//设置PWM输出引脚位复用模式
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Low_Speed;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOF,&GPIO_InitStruct);
//设置配置GIPO
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
// 设置分频 将84MH降为10000Hz
TIM_TimeBaseInitStruct.TIM_Prescaler=84-1;
// 设置计数模式往上加,还是往下减
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
// 设置自动复位计数器为10000,恰好为1秒,2000相当于0.2秒
TIM_TimeBaseInitStruct.TIM_Period=2000-1;
// 设置通用定时器分频为1
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
// 初始化定时器
TIM_TimeBaseInit(TIM14, &TIM_TimeBaseInitStruct);
//设置寄存器模式
TIM_OCInitTypeDef TIM_OCInitStruct;
//设置位PWM输出模式
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse=100;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OC1Init(TIM14, &TIM_OCInitStruct);
// 开启定时器
TIM_Cmd( TIM14, ENABLE);
}