定时器两路PWM 相位差180
使用普通定时器TIM3 TIM1使用不了
1.系统时钟确定 MM32F0020 系统时钟 sysclk = 48 000 000
2.选择中间对齐计数TIM_CounterMode_CenterAligned3。即从0-N-0 = 2*N
3.TIM_Period(频率) = sysclk / (2*N) = 300(HZ) N = 80000
4. N = 100*800 TIM_Period=100用来设置占空比 TIM_Prescaler800
5. tim ch1 选择PWM1模式 TIM_Pulse = 60 即为60%占空比
6. tim ch2 选择PWM2模式 TIM_Pulse = 40 即为60%占空比
7. tim ch1 tim ch2 差180相位
void TIM1_PWM_Init_N()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM3, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);
TIM_TimeBaseStruct.TIM_Period = 100;//定时器周期 自动重装载寄存器的值,累计 TIM_Period+1 个频率后产生一个更新或者中断
TIM_TimeBaseStruct.TIM_Prescaler = 800;//驱动 CNT 计数器的时钟 = Fck_int/(psc+1)
//Setting Clock Segmentation
TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频
TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;//重复计数器的值
///TIM Upward Counting Mode
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_CenterAligned3;//中央对齐计数 3
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);
TIM_OCStructInit(&TIM_OCInitStruct);
//Select Timer Mode: TIM Pulse Width Modulation Mode 2
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_Pulse = 60;
//Output polarity: TIM output is more polar
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
// TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCNPolarity_Low; //设置互补端输出极性
// TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Enable;//使能互补端输出
// TIM_OCInitStruct.TIM_OCIdleState=TIM_OCIdleState_Set; //死区后输出状态
// TIM_OCInitStruct.TIM_OCNIdleState=TIM_OCNIdleState_Set;//死区后互补端输出状态
TIM_OC1Init(TIM3, &TIM_OCInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStruct.TIM_Pulse=40;//600;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low; //设置输出极性
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC2Init(TIM3, &TIM_OCInitStruct);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_CtrlPWMOutputs(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
