打印

请教GD32F303Rxx,Timer0,启动死区就无波形输出。谢谢

[复制链接]
1299|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
汽车电子|  楼主 | 2021-4-19 18:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void timer0_config(void)
{
    /* -----------------------------------------------------------------------
    TIMER0 configuration:
    generate 1 complementary PWM signal.
    TIMER0CLK is fixed to systemcoreclock, the TIMER0 prescaler is equal to 120 so the
    TIMER0 counter clock used is 1MHz.
    the duty cycle is computed as the following description:
    the channel 0 duty cycle is set to 25% so channel 0N is set to 75%.

    insert a dead time equal to ((32+31)*16*4)/systemcoreclock = 33.6us

    configure the break feature, active at high level, and using the automatic
    output enable feature.

    use the locking parameters level1.
    ----------------------------------------------------------------------- */
    timer_oc_parameter_struct                 timer_ocintpara;
    timer_parameter_struct                                 timer_initpara;
    timer_break_parameter_struct         timer_breakpara;
       
                dma_config();
       
          rcu_periph_clock_enable(RCU_TIMER0);
                rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_AF);

    /*configure PA8(TIMER0 CH0) as alternate function*/
    gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_8);

    /*configure PB13(TIMER0 CH0N) as alternate function*/
    gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_13);

   

    timer_deinit(TIMER0);

    /* TIMER0 configuration */
    timer_initpara.prescaler         = 0;
    timer_initpara.alignedmode       = TIMER_COUNTER_CENTER_BOTH;//TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 1250;                                // 24KHz
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER0,&timer_initpara);

    /* CH0/CH0N configuration in PWM mode0 */
    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;
    timer_ocintpara.outputnstate = TIMER_CCXN_ENABLE;
    timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;
    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_HIGH;
    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;

    timer_channel_output_config(TIMER0,TIMER_CH_0,&timer_ocintpara);

    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_0,BufferSPWM[0]);
    timer_channel_output_mode_config(TIMER0,TIMER_CH_0,TIMER_OC_MODE_PWM0);
    timer_channel_output_shadow_config(TIMER0,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);

    /* automatic output enable, break, dead time and lock configuration         启用死区功能,无波形输出
    timer_breakpara.runoffstate      = TIMER_ROS_STATE_DISABLE;
    timer_breakpara.ideloffstate     = TIMER_IOS_STATE_DISABLE ;
    timer_breakpara.deadtime         = 100;
    timer_breakpara.breakpolarity    = TIMER_BREAK_POLARITY_LOW;
    timer_breakpara.outputautostate  = TIMER_OUTAUTO_ENABLE;
    timer_breakpara.protectmode      = TIMER_CCHP_PROT_0;
    timer_breakpara.breakstate       = TIMER_BREAK_ENABLE;
    timer_break_config(TIMER0,&timer_breakpara);                        */

    /* TIMER0 primary output function enable */
    timer_primary_output_config(TIMER0,ENABLE);
               
                /* TIMER0 update DMA request enable */
    timer_dma_enable(TIMER0,TIMER_DMA_UPD);

    /* auto-reload preload enable */
    timer_auto_reload_shadow_enable(TIMER0);

    /* TIMER0 counter enable */
    timer_enable(TIMER0);
}

使用特权

评论回复
沙发
汽车电子|  楼主 | 2021-4-19 18:34 | 只看该作者
官方样例原样不修改,也不行。启动死区功能,就根本无波形输出。不启用死区时波形正常。

使用特权

评论回复
板凳
zeshoufx| | 2021-4-20 10:14 | 只看该作者
可以参考我的帖子,,,https://bbs.21ic.com/icview-3013678-1-1.html

使用特权

评论回复
地板
sonicll| | 2021-4-20 10:29 | 只看该作者
是不是死区时间设置的比占空比还大了?

使用特权

评论回复
5
汽车电子|  楼主 | 2021-4-20 10:45 | 只看该作者
sonicll 发表于 2021-4-20 10:29
是不是死区时间设置的比占空比还大了?

没有,死区时间才100,定时器周期1250,系列脉冲中,占空比小于100的极少数

使用特权

评论回复
6
汽车电子|  楼主 | 2021-4-20 13:28 | 只看该作者
zeshoufx 发表于 2021-4-20 10:14
可以参考我的帖子,,,https://bbs.21ic.com/icview-3013678-1-1.html

谢谢,验证是可以的

使用特权

评论回复
7
喂什么玩意| | 2021-4-24 22:39 | 只看该作者
去参考贴看看

使用特权

评论回复
8
770621431| | 2022-8-24 10:10 | 只看该作者
timer_breakpara.breakstate       = TIMER_BREAK_ENABLE 这句话使能了中止功能,必须PB12脚接高电平才能输出,直接disable就行了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

366

主题

2057

帖子

5

粉丝