打印

STM32高级定时器死区疑问

[复制链接]
5610|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zxh11d|  楼主 | 2013-5-29 09:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zxh11d 于 2013-5-29 09:18 编辑

在用STM32做SVPWM输出时发现不管怎么修改配置,都是N通道先拉低,然后P通道在死区之后才拉高,请问有办法让这个逻辑翻过来吗?
沙发
zxh11d|  楼主 | 2013-5-29 09:18 | 只看该作者
本帖最后由 zxh11d 于 2013-5-29 09:20 编辑

上图中,1通道是N,2通道是P。因为外面的驱动电路有个反相的过程,所以这个地方如果能够取个反的话,就刚好能够匹配了。

使用特权

评论回复
板凳
zxh11d|  楼主 | 2013-5-29 09:22 | 只看该作者
定时器配置代码如下:
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef        TIM_OCInitStructure;
        TIM_BDTRInitTypeDef          TIM_BDTRInitStructure;
        NVIC_InitTypeDef         NVIC_InitStructure;

        /* Enable the TIM1 BRK Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQChannel;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//TIM1_UP_PRIORITY;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
         
        GPIO_PinRemapConfig(GPIO_FullRemap_TIM1,ENABLE);                         // TIM1 Full Remap
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);

//  /* GPIOE Configuration: BKIN pin */   
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//  GPIO_Init(GPIOB, &GPIO_InitStructure);  
    TIM_DeInit(TIM1);       
  /* Automatic Output enable, Break, dead time and lock configuration*/               
        TIM_BDTRInitStructure.TIM_OSSRState                         = TIM_OSSRState_Disable;                  //定时器不工作时输出无效电平
        TIM_BDTRInitStructure.TIM_OSSIState                         = TIM_OSSIState_Disable;

        TIM_BDTRInitStructure.TIM_LOCKLevel                         = TIM_LOCKLevel_OFF;              //死区时间可随时设置
        TIM_BDTRInitStructure.TIM_DeadTime                                 = DEADTIME/*100*/;                                                          
        TIM_BDTRInitStructure.TIM_Break                                 = TIM_Break_Enable;//Enable;      //制动使能
        TIM_BDTRInitStructure.TIM_BreakPolarity         = TIM_BreakPolarity_Low;          //低电平有效
        TIM_BDTRInitStructure.TIM_AutomaticOutput       = TIM_AutomaticOutput_Disable;    //自动输出不使能
        TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);          
       
        /* Time Base configuration */       
        TIM_TimeBaseStructure.TIM_Period                = TS/2;          
        TIM_TimeBaseStructure.TIM_Prescaler             = 0;
        TIM_TimeBaseStructure.TIM_ClockDivision         = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode           = TIM_CounterMode_CenterAligned1; //TIM中心对齐模式1计数模式
        TIM_TimeBaseStructure.TIM_RepetitionCounter     = 1;
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

        /* Channel 1, 2,3 and 4 Configuration in PWM mode */
//        TIM_OCInitStructure.TIM_OCMode       = TIM_OCMode_PWM1;                                        // 输出电平
        TIM_OCInitStructure.TIM_OCMode       = TIM_OCMode_PWM2;                                        // 输出电平
        TIM_OCInitStructure.TIM_OutputState  = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity   = TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OCNPolarity  = TIM_OCNPolarity_High;
//        TIM_OCInitStructure.TIM_OCPolarity   = TIM_OCPolarity_Low;
//        TIM_OCInitStructure.TIM_OCNPolarity  = TIM_OCPolarity_Low;
        TIM_OCInitStructure.TIM_OCIdleState  = TIM_OCIdleState_Set;
        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;
       
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);
        TIM_OC3Init(TIM1, &TIM_OCInitStructure);
               
        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
        TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
        TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);

        TIM_ITConfig(TIM1, TIM_IT_Break,ENABLE);
        TIM_ITConfig(TIM1, TIM_IT_Update,DISABLE);
        TIM_Cmd(TIM1, ENABLE);       
        TIM_CtrlPWMOutputs(TIM1, DISABLE);

使用特权

评论回复
地板
zxh11d|  楼主 | 2013-5-29 09:25 | 只看该作者
试过采用TIM_OCMode_PWM1 / TIM_OCMode_PWM2;TIM_OCPolarity_High/TIM_OCPolarity_Low;
输出的死区逻辑都是一样。

使用特权

评论回复
5
yunzhuxiao| | 2014-5-14 16:33 | 只看该作者
同问   你现在知道怎么弄吗?

使用特权

评论回复
6
拿起书本| | 2014-5-14 22:23 | 只看该作者
决定死区时间设置的位是‘刹车和死区寄存器TIM1->BDTR’中的DTG[7:0],设置范围是0x00~0xff

使用特权

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

本版积分规则

26

主题

113

帖子

0

粉丝