什么是PWM波:
脉冲宽度调制,简称脉宽调制,是利用微处理器的数字输出对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、功率控制与变换的等领域中。
具有一定频率,其(占空比:高电平所占整个周期的比例)高电平可以调节的波。通过PWM波改变设备在一定时间内的做功。可以用于调节电动机转速、改变直流电压、调节舵机角度等;
PWM波的频率:指在一秒内信号从高电平到低电平再回到高电平的次数(周期次数),也就是说一秒钟有多少个PWM周期就有多少HZ;
脉宽时间:高电平的时间;
STM32通用定时器实现PWM波输出配置流程:
通用定时器的PWM模式下有两种计数模式:互为相反,根据电路区分有效电平是高还是低
通用定时器产生PWM波的过程:
打开定时器时钟
定时器的时基单元:预分频、重载值、时钟源的初始化
输出通道的配置:有效电平、PWM模式、比较寄存器的初值
使能定时器
打开预装载寄存器
具体配置代码:
void TIM4_PWM_config(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure = {0};
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period= (10000-1);
TIM_TimeBaseStructure.TIM_Prescaler= (72-1);
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_Cmd(TIM4, ENABLE);
TIM_CtrlPWMOutputs(TIM4, ENABLE);
}
对应舵机角度:传入参数:定时器和比较值
void Server_180_Angle(void)
{
TIM_SetCompare1(TIM4,5);//0
Delay_ms(1000);
TIM_SetCompare1(TIM4,10);//45
Delay_ms(1000);
TIM_SetCompare1(TIM4,15);//90
Delay_ms(1000);
TIM_SetCompare1(TIM4,20);//135
Delay_ms(1000);
TIM_SetCompare1(TIM4,25);//180
Delay_ms(1000);
}