定时器两路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);

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部