Skip to main content
Danish1
Lead III
September 18, 2019
Solved

pwm with asymmetric dead-time

  • September 18, 2019
  • 4 replies
  • 2979 views

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

This topic has been closed for replies.
Best answer by Danish1

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!

4 replies

Danish1
Danish1AuthorBest answer
Lead III
September 27, 2019

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!

waclawek.jan
Super User
September 27, 2019

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

Thanks for sharing the trick.

JW

Amel NASRI
ST Technical Moderator
September 30, 2019

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 "Best Answer" on the reply which solved your issue or answered your question.
waclawek.jan
Super User
September 30, 2019

Thanks.

JW