Mosfets brûlant dans H-Bridge

Sep 23 2020

J'ai un problème avec un pont en H, qui entraîne un moteur.


Schématique

Voici le schéma du pont en H. Les signaux H [4: 1] sont générés par un microcontrôleur. mX et mY sont les sorties d'un moteur à courant continu.


Comment ça fonctionne

Le microcontrôleur reçoit un message externe via UART. Lorsque le message est reçu, le microcontrôleur commute le pont en H, inversant le sens du moteur. Ces messages sont reçus environ une fois toutes les 4 secondes. Ainsi, en pratique, le moteur doit changer de sens de rotation toutes les 4 secondes.


Micrologiciel du microcontrôleur

while(TRUE) {
    if(receivedCmd == 0x01) {   //direction1
        GPIO_WriteLow(GPIOD, (GPIO_Pin_TypeDef) (GPIO_PIN_2 | GPIO_PIN_3));    //H1-H4
        GPIO_WriteHigh(GPIOC, (GPIO_Pin_TypeDef) (GPIO_PIN_3 | GPIO_PIN_4));   //H2-H3
    }
    else if(receivedCmd == 0x02) {  //direction2
        GPIO_WriteLow(GPIOC, (GPIO_Pin_TypeDef) (GPIO_PIN_3 | GPIO_PIN_4));    //H2-H3
        GPIO_WriteHigh(GPIOD, (GPIO_Pin_TypeDef) (GPIO_PIN_2 | GPIO_PIN_3));   //H1-H4
    }
    else {    //do not activate
        GPIO_WriteLow(GPIOC, (GPIO_Pin_TypeDef) (GPIO_PIN_3 | GPIO_PIN_4));    //H2-H3
        GPIO_WriteLow(GPIOD, (GPIO_Pin_TypeDef) (GPIO_PIN_2 | GPIO_PIN_3));    //H1-H4
    }
}

Le problème

Au début, le circuit fonctionne comme prévu, mais après environ 1 minute, les mosfets Q3 et Q4 finiront par brûler.


Des questions

Je n'ai plus que 2 mosfets de rechange avec moi pour le moment, j'ai donc décidé de demander de l'aide ici avant d'essayer d'implémenter quelques changements.

  1. Je n'ai pas ajouté de diodes flyback en parallèle avec les mosfets. Sont-ils vraiment nécessaires? Dois-je les ajouter? Cela pourrait-il être le problème avec mon circuit?
  2. Y a-t-il un problème avec mon firmware? Dois-je ajouter un temps mort avant d'inverser le sens du moteur?
  3. La rupture du moteur (activation de Q1 et Q3, et désactivation de Q2 et Q4) avant de l'inverser pourrait-elle être une solution?
  4. Avez-vous d'autres idées sur ce qui peut se passer?

Réponses

4 UweD Sep 24 2020 at 03:40

Tandis que j'interprète le code:

if(receivedCmd == 0x01) {   //direction1
    GPIO_WriteLow(GPIOD, (GPIO_Pin_TypeDef) (GPIO_PIN_2 | GPIO_PIN_3));    //H1-H4
    GPIO_WriteHigh(GPIOC, (GPIO_Pin_TypeDef) (GPIO_PIN_3 | GPIO_PIN_4));   //H2-H3
}

Dans le code ci-dessus, dans la direction 1, les broches 3 et 4 sont activées.

else if(receivedCmd == 0x02) {  //direction2
    GPIO_WriteLow(GPIOC, (GPIO_Pin_TypeDef) (GPIO_PIN_3 | GPIO_PIN_4));    //H2-H3
    GPIO_WriteHigh(GPIOD, (GPIO_Pin_TypeDef) (GPIO_PIN_2 | GPIO_PIN_3));   //H1-H4
}

Maintenant, dans la direction 2, les broches 2 et 3 sont activées. La broche 1 n'est jamais utilisée.

Cela signifie que dans les deux sens, la broche 3 est activée. Cela signifierait un court-circuit à travers Q3 et Q4 pendant la direction 2. Vos commentaires pour les lignes "H2-H3" et "H1-H4" sont corrects, mais je pense que les broches ne sont pas implémentées comme ça.