Skocz do zawartości

Grzejący się MOSFET w układzie inwertera 3 - fazowego


Januszxd

Pomocna odpowiedź

Cześć,

Próbowałem przy pomocy układu inwertera 3 - fazowego sterować silnikiem BLDC. Jednakże silnik zamiast się kręcić to buczy i drży w miejscu, z małą pomocą w rozruchu jakoś tam się kręci. Dodatkowo zauważyłem, że na 6 tranzystorów w układzie, to jeden z nich o oznaczeniu AA2 (oznaczenia na schemacie niżej) jako jedyny zaczyna się nagrzewać w znaczący sposób.

Oznaczenia par tranzystorów:

stanowisko2.thumb.jpg.17c6c44ebf605fa3d5795505599d942e.jpg

Tranzystory przełączają się w taki sposób

  1. BB2, CC1
  2. BB2, AA1
  3. CC2, AA1
  4. CC2, BB1
  5. AA2, BB1
  6. AA2, CC1

Zbudowałem taki układ wg schematu jak na zdjęciu (z tą różnicą, że użyłem rezystorów 100 Ω). Tranzystory IRFP 250 typu N są sterowane poprzez driver IR2110. 

schemat2.thumb.png.f67b8c0283298bff592ccb3a7526e5a4.png

Sygnał sterujący pochodzi z arduino, tak wygląda kod:

#define AA1 3
#define AA2 5
#define BB1 6
#define BB2 9
#define CC1 10
#define CC2 11
#define val A0

int faza = 1;
int tempo = 100;
int Stop = 0;
unsigned long previousMillis = 0;

void setup() {

  Serial.begin(9600);
  pinMode(AA1, OUTPUT);
  pinMode(AA2, OUTPUT);
  pinMode(BB1, OUTPUT);
  pinMode(BB2, OUTPUT);
  pinMode(CC1, OUTPUT);
  pinMode(CC2, OUTPUT);

  delay(1000);

  previousMillis = micros();

}

void loop() {
  if (tempo > 1950) {
    Stop = 0;
    tempo = 1950;
    digitalWrite(AA1, LOW);
    digitalWrite(AA2, LOW);
    digitalWrite(BB1, LOW);
    digitalWrite(CC2, LOW);
    digitalWrite(BB2, LOW);
    digitalWrite(CC1, LOW);
  } else {
    Stop = 1;
  }


  if (Stop == 1) {
    unsigned long currentMillis = micros();


    if (currentMillis - previousMillis >= tempo) {

      previousMillis += tempo;

      //Faza1 C-B
      switch (faza) {
        case 1:
          digitalWrite(AA1, LOW);
          digitalWrite(AA2, LOW);
          digitalWrite(BB1, LOW);
          digitalWrite(CC2, LOW);
          digitalWrite(BB2, HIGH);
          digitalWrite(CC1, HIGH);
          break;

        //Faza2 A-B
        case 2:
          digitalWrite(AA2, LOW);
          digitalWrite(BB1, LOW);
          digitalWrite(CC1, LOW);
          digitalWrite(CC2, LOW);
          digitalWrite(AA1, HIGH);
          digitalWrite(BB2, HIGH);
          break;

        //Faza3 A-C
        case 3:
          digitalWrite(AA2, LOW);
          digitalWrite(BB1, LOW);
          digitalWrite(BB2, LOW);
          digitalWrite(CC1, LOW);
          digitalWrite(CC2, HIGH);
          digitalWrite(AA1, HIGH);
          break;

        //Faza4 B-C
        case 4:
          digitalWrite(AA1, LOW);
          digitalWrite(AA2, LOW);
          digitalWrite(BB2, LOW);
          digitalWrite(CC1, LOW);
          digitalWrite(BB1, HIGH);
          digitalWrite(CC2, HIGH);
          break;

        //Faza5 B-A
        case 5:
          digitalWrite(AA1, LOW);
          digitalWrite(BB2, LOW);
          digitalWrite(CC1, LOW);
          digitalWrite(CC2, LOW);
          digitalWrite(AA2, HIGH);
          digitalWrite(BB1, HIGH);
          break;

        //Faza6 C-A
        case 6:
          digitalWrite(AA1, LOW);
          digitalWrite(BB1, LOW);
          digitalWrite(BB2, LOW);
          digitalWrite(CC2, LOW);
          digitalWrite(CC1, HIGH);
          digitalWrite(AA2, HIGH);
          break;
      }


      if (faza < 6) {
        faza = faza + 1;
      }
      else {
        faza = 1;
      }
    }
  }

  int t = analogRead(val); //wartosc z potencjometru
  tempo = map(t, 0, 1024, 1, 2000); //opoznienie uzyskane z nastawy potencjometru

  Serial.print(faza);
  Serial.print("  ");
  Serial.println(tempo);

W zasadzie to układ nie generuje 3 niezależnych faz, a po prostu po kolei włącza odpowiednie dwa tranzystory. 

Dodatkowo pomierzyłem oscyloskopem przebiegi na wyjściu poszczególnych "faz". Nie mam pewności co do wiarygodności pomiarów z oscyloskopu (dopiero się uczę). 

Pomiary wykonałem w następujący sposób:

Sonde przykładałem do wyjścia danej fazy, a krokodylek do minusa zasilania

  • Tłumienie sondy - X10
  • Volty / działka - 500 mV / dz
  • milisekundy / działka - dla L1: 2 ms / dz, dla L2 i L3: 5 ms / dz
  • Tryb AC

Wyniki pomiarów

Faza 1

image.thumb.png.862973f903ba0e3a9cb0434072966ae0.png

Faza 2

image.thumb.png.454c88c77b0cbdae108fe26f1ba2920a.png

Faza 3

image.thumb.png.b3a81fbcb129b9b72931e54d15b66da8.png

 

Dlaczego na L2 i L3 powstają takie dziwne przebiegi? Dlaczego tranzystor AA2 tak się nagrzewa? Wydaje się jakby on całą pracę dał na siebie, a przecież w programie wyraźnie widać, że powinien każdy pracować po równo. Z góry dziękuję za pomoc.

Edytowano przez Januszxd
Link do komentarza
Share on other sites

Ja tylko podpowiem, że brakuje dead time, przy przejściu wszystkie tranzystory powinny być wyłączone przez pewien czas.

Są diody?

Tak jak teraz to nie może działać, bez diod to może już dawno ubiles tranzystory

Edytowano przez BananWszyscy
  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.