2020-05-10 07:12 AM
1. I have written below code for PWM generation for STM8S003F3. Two pwm pins are used inverted with dead time.
2. But I observed this graph on CRO of two pins is this. I was expecting one pin to turn off before another turn on i.e deabband.. But reverse is happening here.
More I increase deadband it has reverse effect. What I am doing wrong here?
void all_tasks_manager(void)
{
uint8_t key;
uint8_t start = 0U;
float32_t arr,ccr,y;
uint16_t temp1,temp2;
g_segment_display = 0U;
SEG_1_DISABLE();
SEG_2_DISABLE();
segment_register_update(5); // display ht
g_segment_display = 1U;
/* TIM1 Peripheral Configuration */
TIM1_DeInit();
/* Time Base configuration
TIM1_Prescaler = 0
TIM1_CounterMode = TIM1_COUNTERMODE_UP
TIM1_Period = 65535
TIM1_RepetitionCounter = 0
*/
TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 1067,0);
/* Channel 1, 2 and 3 Configuration in PWM mode */
/*?
TIM1_OCMode = TIM1_OCMODE_PWM2
TIM1_OutputState = TIM1_OUTPUTSTATE_ENABLE
TIM1_OutputNState = TIM1_OUTPUTNSTATE_ENABLE
TIM1_Pulse = CCR1_Val
TIM1_OCPolarity = TIM1_OCPOLARITY_LOW
TIM1_OCNPolarity = TIM1_OCNPOLARITY_LOW
TIM1_OCIdleState = TIM1_OCIDLESTATE_SET
TIM1_OCNIdleState = TIM1_OCIDLESTATE_RESET
*/
TIM1_OC1Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE,
CCR1_Val, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_LOW, TIM1_OCIDLESTATE_RESET,
TIM1_OCNIDLESTATE_RESET);
/* Automatic Output enable, Break, dead time and lock configuration */
/*
TIM1_OSSIState = TIM1_OSSISTATE_ENABLE
TIM1_LockLevel = TIM1_LOCKLEVEL_1
TIM1_DeadTime = 117
TIM1_Break = TIM1_BREAK_ENABLE
TIM1_BreakPolarity = TIM1_BREAKPOLARITY_HIGH
TIM1_AutomaticOutput = TIM1_AUTOMATICOUTPUT_ENABLE
*/
TIM1_BDTRConfig( TIM1_OSSISTATE_DISABLE, TIM1_LOCKLEVEL_OFF, 5, TIM1_BREAK_ENABLE,
TIM1_BREAKPOLARITY_HIGH, TIM1_AUTOMATICOUTPUT_ENABLE);
/* TIM1 counter enable */
TIM1_Cmd(ENABLE);
/* Main Output Enable */
TIM1_CtrlPWMOutputs(DISABLE);
TIM1_Cmd(DISABLE);
temp1 = (uint16_t)851;
temp2 = (uint16_t)425;
TIM1->CCR1H = (uint8_t)(temp2 >> 8);
TIM1->CCR1L = (uint8_t)(temp2);
TIM1->ARRH = (uint8_t)(temp1 >> 8);
TIM1->ARRL = (uint8_t)(temp1);
TIM1_CtrlPWMOutputs(ENABLE);
TIM1_Cmd(ENABLE);
while(1)
{
}
}