本帖最后由 WCM1998 于 2022-4-11 08:10 編輯
void TIM1_PWM_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler = psc;
//Setting Clock Segmentation
TIM_TimeBaseStructure.TIM_ClockDivision = (TIMCKD_TypeDef)0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;//中心對齊;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
/** 通道 1 **/
TIM_OCStructInit(&TIM_OCInitStructure);
//Select Timer Mode: TIM Pulse Width Modulation Mode 2
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //OC*輸出
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; // 互補輸出關閉。關
閉OC*N輸出
TIM_OCInitStructure.TIM_Pulse = 200; //占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //匹配時輸出高電平
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Disable);
/** 通道 3 **/
TIM_OCStructInit(&TIM_OCInitStructure);
//Select Timer Mode: TIM Pulse Width Modulation Mode 2
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //OC*輸出
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; // 互補輸出關閉。關
閉OC*N輸出
TIM_OCInitStructure.TIM_Pulse = 200; //占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //匹配時輸出高電平
TIM_OC3Init(TIM1, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Disable);
TIM_ARRPreloadConfig(TIM1, ENABLE); //重裝載ARR
TIM_Cmd(TIM1, ENABLE);
TIM_CtrlPWMOutputs(TIM1, ENABLE);
}
//===占空比
void TIM1_PWM_Duty(u8 Duty)
{
Puls1=arr-Duty-dy;//dy是死區時間,72M/13.89ns一個周期,1000ns;dy=1000/2/((psc+1*13.89))=36
Puls3=arr-CCR1; TIM_SetCompare1(TIM1,Puls1);
TIM_SetCompare3(TIM1,Puls3);
}
這種方法不正確。如果占空比太小就沒死區了
|