该函数应用于输出口(PWM波形输出口定期中断2(TIM2)的ETR通道2(TIM_CH2)
控制MG996R舵机需要调整50个频率Hz,即周期为20ms此时我选择了720分频器的波形,ARR重装器的值为2万
相信大家都会详细计算公式
` TIM_TimeBaseInitStucture.TIM_Period = 2000-1; //ARR自动重装器的值
TIM_TimeBaseInitStucture.TIM_Prescaler = 720-1; //PSC预分频器值
`
void PWM_SetCompare2(uint16_t ComPare) 这个函数是用来改变的CCR值是用来改变的PWM波形脉冲宽度,此时ComPare值的值范围为0-2000,对应0ms——20ms,例如,当调用此函数时,给予110ComPare后,MG996R舵机将顺时针速度运行一点。
void PWM_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); ///启用时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); TIM_InternalClockConfig(TIM2); ///选择内部时钟作为时基频率 GPIO_InitTypeDef GPIO_InitStucture; GPIO_InitStucture.GPIO_Mode = GPIO_Mode_AF_PP; ///复用推挽输出(指定) GPIO_InitStucture.GPIO_Pin = GPIO_Pin_1; //PA0口为TIM2_CH2通道输出口 GPIO_InitStucture.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStucture); TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStucture; TIM_TimeBaseInitStucture.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStucture.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStucture.TIM_Period = 2000-1; TIM_TimeBaseInitStucture.TIM_Prescaler = 720-1; TIM_TimeBaseInitStucture.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStucture); //时基单元配置 TIM_OCInitTypeDef TIM_OCInitStucture; TIM_OCInitStucture.TIM_Pulse = 0; //CCR的值 TIM_OCInitStucture.TIM_OCMode = TIM_OCMode_PWM1; ///输出比较模式 TIM_OCInitStucture.TIM_OCNPolarity = TIM_OCPolarity_High; ///极性设置 TIM_OCInitStucture.TIM_OutputState = ENABLE; TIM_OC2Init(TIM2,&TIM_OCInitStucture); //比较单元配置 TIM_Cmd(TIM2,ENABLE); } void PWM_SetCompare2(uint16_t ComPare) //改变通道2CCR的值 { TIM_SetCompare2(TIM2,ComPare); }