cancel
Showing results for 
Search instead for 
Did you mean: 

pwm with asymmetric dead-time

Danish1
Lead II

I am looking into the possibility of using a stm32 microcontroller (probably stm32f030) to directly* control the power transistors in a switch-mode power supply, in order to generate a high-power waveform.

My current thinking has a PMOS switch transistor and an NMOS synchronous rectifier. These have different turn-off times (one of them is 290 ns according to its data sheet), so I would want one dead-time when turning the PMOS off and the NMOS on, and a different dead-time when turning the NMOS off and the PMOS on.

Looking at the Reference Manual, I see only one register to program the dead-time on TIM1.

Does anyone have suggestions as to how I might achieve different dead-times for otherwise-complementary PWM? If a different stm32 would do the job better, please suggest which.

I should add that in order to keep the inductor size reasonable, I do want to switch as fast as I can, so I don't want to bit-bang the outputs.

Thanks,

Danish

*Probably via a FAN3268 MOSFET driver or similar

1 ACCEPTED SOLUTION

Accepted Solutions
Danish1
Lead II

If anyone is interested, I've now found a way to do this:

  1. Use two PWM Channels
  2. Use the normal output of one e.g. CC1
  3. Use the complementary output of the other e.g. CC2N
  4. The dead-time from CC2N going inactive to CC1 going active is the dead-time programmed in BDCR
  5. The dead-time from CC1 going active to CC2N going inactive is the dead-time programmed in BDCR + the difference between CCR1 and CCR2.

When updating CCR1 and CCR2, I could either synchronise them to the counter reload or do it in whichever order momentarily increases dead-time.

This works on a nucleo64 board. Now I know which pins to use I can get my own pcb made up!

View solution in original post

4 REPLIES 4
Danish1
Lead II

If anyone is interested, I've now found a way to do this:

  1. Use two PWM Channels
  2. Use the normal output of one e.g. CC1
  3. Use the complementary output of the other e.g. CC2N
  4. The dead-time from CC2N going inactive to CC1 going active is the dead-time programmed in BDCR
  5. The dead-time from CC1 going active to CC2N going inactive is the dead-time programmed in BDCR + the difference between CCR1 and CCR2.

When updating CCR1 and CCR2, I could either synchronise them to the counter reload or do it in whichever order momentarily increases dead-time.

This works on a nucleo64 board. Now I know which pins to use I can get my own pcb made up!

I wish this would be a normal forum. This would then have to go to the HOWTO section.

Thanks for sharing the trick.

JW

I added the topic "STM32 HOWTO", this post is the 1st content there: https://community.st.com/s/topic/0TO0X000000Bo2uWAC/stm32-howto.

Let's enrich it with more "how to" proposals from your side.

-Amel

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

Thanks.

JW