互补输出 死区 调试存在问题
使用的是TIM1 CH1 CH1N , 目前的问题就是波形的前后死区时间不一样,根据示波器的测量得知,前面的死区是后面的两倍。
根据官方手册可知
代码配置如下
tim1_oc.Instance = TIM;
tim1_oc.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
tim1_oc.Init.Prescaler = TIM_PRESCALER - 1; // 1us
tim1_oc.Init.CounterMode = TIM_COUNTERMODE_UP;
tim1_oc.Init.Period = TIM_PERIOD - 1; // 50us
tim1_oc.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
HAL_TIM_OC_Init(&tim1_oc);
sConfigOC.OCMode = TIM_OCMODE_ACTIVE;
sConfigOC.Pulse = 0 ;
sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_OC_ConfigChannel(&tim1_oc, &sConfigOC, TIM_CHANNEL_1);
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_2;
sBreakDeadTimeConfig.DeadTime = 0xC8;//0xC8; // dead time keep 5us constant
sBreakDeadTimeConfig.BreakState = TIM_BREAK_ENABLE;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.BreakFilter = 0;
sBreakDeadTimeConfig.Break2State = TIM_BREAK2_ENABLE;
sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
sBreakDeadTimeConfig.Break2Filter = 0;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_ENABLE;
HAL_TIMEx_ConfigBreakDeadTime(&tim1_oc, &sBreakDeadTimeConfig) ;