Skip to main content
Visitor II
May 10, 2020
Question

Inverse of dead band observed in PWM, STM8S003F3

  • May 10, 2020
  • 0 replies
  • 519 views

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)
 {
 
 
 }
 
} 

0693W000000X9gtQAC.jpg

    This topic has been closed for replies.