Ausgangsspannung des USB-Lüfters

In meinem letzten Projekt arbeite ich an der Geschwindigkeitssteuerung von 5-V-DC-USB-Lüftern.

Mein Lüftermotor sieht wie folgt aus:

FAN

Hier erfolgt die Lüftersteuerung durch PWM, das vom Arduino NANO-Controller kommt. Zur Steuerung der Geschwindigkeit von FAN habe ich eine Schaltung entwickelt, die unten ist:

Schaltkreis

Wenn ich jetzt volle PWM gebe, bedeutet das volle Wert 255 und zu diesem Zeitpunkt, wenn ich die Spannung am Motor messe, beträgt sie nur etwa 3,50 V. Ich dachte nur, es könnten volle 5 V sein. Ich weiß nicht, warum so viel Verlust passiert? Irgendwelche Vorschläge diesbezüglich.

Und mein Arduino-Code ist unten:

const int kPinSw1 = 8;
const int kPinSw2 = 9;

const int kPinPWM = 3;

int oneBtnState = 0;         
int lastOneBtnState = 0;

int twoBtnState = 0;         
int lastTwoBtnState = 0;

int count = 0;

void setup() {

  Serial.begin(9600);

  pinMode(kPinSw1, INPUT_PULLUP);
  pinMode(kPinSw2, INPUT_PULLUP);

  pinMode(kPinPWM, OUTPUT);
}

void loop() {

//-------------------------------------//

  oneBtnState = digitalRead(kPinSw1);

  if(oneBtnState != lastOneBtnState)
  {
    if(oneBtnState == HIGH)
    {
      count--;

      if(count <= 0)
      {
        count = 0;
      }
    }
    delay(50);
  }

  lastOneBtnState = oneBtnState;

//-------------------------------------//

  twoBtnState = digitalRead(kPinSw2);

  if(twoBtnState != lastTwoBtnState)
  {
    if(twoBtnState == HIGH)
    {
      count++;

      if(count >= 4)
      {
        count = 4;
      }
    }
    delay(50);
  }

  lastTwoBtnState = twoBtnState;

  Serial.println(count);

//-------------------------------------//

  switch(count) {

    case 1:
            analogWrite(kPinPWM, 0);
    break;

    case 2:
            analogWrite(kPinPWM, 128);
    break;

    case 3:
            analogWrite(kPinPWM, 192);
    break;

    case 4:
            analogWrite(kPinPWM, 255);
    break; 

    default:
            analogWrite(kPinPWM, 0);
    break;
  }
}
Bestimmen Sie als Ausgangspunkt den Strom, den die Last (der Lüfter) benötigt, der der Kollektorstrom IC des BJT ist. Der Basisstrom des BJT muss IB = IC / Beta (sat) sein. Bei einem Power-BJT liegt Beta(sat) typischerweise zwischen 4 und 10; Überprüfen Sie das Datenblatt, um den Wert von Beta (sat) zu bestimmen, den der Hersteller für parametrische Tests verwendet. Sie müssen den Widerstandswert anpassen, um einen Strom von IB-Ampere vom DIO-Pin in die Basis des BJT zu ermöglichen. IIRC, ein DIO-Pin kann einen Strom von bis zu 40 mA für einen logisch hohen Ausgang liefern.
auch, was ist die Spannung von diesem GPIO? Wenn es sich um einen 1,8-V-Pin handelt, benötigen Sie einen viel niedrigeren Basiswiderstand.

Antworten (3)

Als Fortsetzung meines früheren Kommentars, wenn der Lüfter im eingeschalteten Zustand einen Strom von 400 mA zieht und Sie verwenden β S A T = 10 für das Sättigungs-Beta des BJT also

ICH B ( S A T ) = ICH C S A T / β S A T = 400 M A / 10 = 40 M A

Das Datenblatt des ATmega328P erlaubt einen maximalen Strom von 40 mA pro Digital Input/Output (DIO) Pin, also mit ICH B ( S A T ) = 40 M A Du bist an diesem Maximum. (Anm. Basierend auf der obigen Berechnung für ICH B , wenn der DIO-Pin logisch HIGH ist, muss der DIO-Pin einen Strom von 40 mA in die Basis des BJT liefern (auch bekannt als "Quelle"), um den BJT richtig zu sättigen - um ihn vollständig einzuschalten.)

Der Abschnitt "Elektrische Eigenschaften" des Datenblatts des ATmega328P zeigt (nach dem, was ich finden konnte) nicht den Wert von v Ö H (logische HIGH-Ausgangsspannung) für einen Ausgangsstrom von 40 mA. Aber angesichts der Informationen in Abb. 33-34 "E/A-Pin-Ausgangsspannung vs. Quellenstrom (V CC = 5 V)" im Datenblatt würde ich schätzen v Ö H 4 v @ ICH Ö H = 40 M A .

Sie können den Wert des Basisstrombegrenzungswiderstands des BJT wie folgt berechnen:

R B = v R B ICH R B = v Ö H v B E ( S A T ) ICH B ( S A T ) = ( 4 v ) v B E ( S A T ) ( 40 M A )

Wo v B E ( S A T ) ist die Basis-Emitter-Spannung des BJT, wenn der BJT im Sättigungsmodus mit einem Kollektorstrom von arbeitet ICH C S A T = 400 M A . Sie können wahrscheinlich den Wert von bestimmen v B E ( S A T ) aus den Informationen zum Sättigungsmodus im Datenblatt des BJT.

Der tatsächliche (physikalische) Widerstandswert muss nicht genau gleich dem berechneten Wert sein R B , aber sein Wert sollte in der Nähe von sein R B . Zum Beispiel, wenn die berechnet R B Wert 1234 ist, könnten Sie einen 1,2 kOhm 5% Widerstand oder einen 1,24 kOhm 1% Widerstand verwenden.

Wenn der DIO-Pin logisch HIGH ist, wird die Leistung durch den Basisstrombegrenzungswiderstand verbraucht R B wird gegeben von:

P R B = ICH B ( S A T ) 2 R B = ( 40 M A ) 2 R B

Wählen Sie einen Widerstand, dessen Nennleistung ist 2 P R B oder höher. Zum Beispiel, wenn R B 122 mW abführt, dann verwenden Sie einen Widerstand, dessen Verlustleistung 244 mW oder mehr beträgt – Sie könnten z. B. einen 1/4 Watt (250 mW) Widerstand oder einen 1/2 Watt (500 mW) Widerstand verwenden, sollten dies aber nicht verwenden ein 1/8 Watt (125 mW) Widerstand.

Um den Spannungsabfall am Transistorschalter zu reduzieren, verwenden Sie anstelle des BJT-Transistors einen MOSFET-Transistor mit niedrigem "Einschaltwiderstand".

Habe ich auf dem Bild richtig gelesen, dass der Lüfter 0,4 A Strom zieht?
In diesem Fall vorausgesetzt H F E = 100 , würde der Basisstrom 4 mA betragen und einen Spannungsabfall von 4 V über dem 1kOhm Basiswiderstand verursachen. Das ist eine ernsthafte Menge an Spannung zu verlieren. Ich würde vorschlagen zu machen R B = 200 Ω , oder auch 100 Ω und sehen, was mit diesem Wert passiert.
Sogar mit H F E = 200 Sie würden 2 V verlieren, plus v C E von etwa 0,7 V oder mehr, da der Transistor nicht in die Sättigung getrieben wird.
Ein MosFet ist nicht erforderlich. Der BJT hat, wenn er in die Sättigung getrieben wird, nur 0,2..0,3 V v C E während des eingeschalteten Zustands.

Aber gabonator hat aus einem anderen Grund recht, wenn er zu einem MOSFET rät: Er reduziert die Strombelastung des PWM-Ausgangs von 50 mA (in der Tat die H F E = 10 im Sättigungspunkt wo ICH C kann 0,4 A betragen, wie Jim Fischer betonte), wenn nur ein BJT verwendet wird.
Und da kein lineares Verhalten erforderlich ist, es ist einfach ein/aus, ist die Nichtlinearität des MOSFETs hier kein großes Problem. Hier ist ein Kandidat.

Typischerweise möchte man den BJT im Sättigungsmodus (vollständig "EIN") und nicht im aktiven Vorwärtsmodus (Kleinsignalverstärkermodus) betreiben, damit diese Art von Schaltung die vom BJT verbrauchte Leistung im "EIN" -Zustand minimiert . hFE-Werte im Bereich von 100 bis 300 gelten für den aktiven Vorwärtsmodus. hFE(sat)-Werte liegen üblicherweise bei etwa 10 für Kleinsignal-BJTs und 4 bis 10 für Leistungs-BJTs.
Das bestätigt, dass der Basiswiderstand wirklich das Problem ist. hFE ist einfach zu klein, um den Transistor mit diesem 1-kOhm-Widerstand in Reihe zu sättigen. Als Folge fällt die Kollektorspannung nur geringfügig ab und der Lüfter läuft möglicherweise nicht einmal.
Ich habe das Bild runtergeladen, vergrößert und ich finde da steht wirklich 5V/0.4A und 'made in China' ;-) Das absolute Maximum für ICH C eines BC547 beträgt 100 mA, selbst wenn seine Basisschaltung korrekt konfiguriert wäre, wird der Lüfter nicht betrieben. Ja, für eine sehr kurze Zeit, und dann brennt es aus. Eine bessere Wahl wäre der 2N2219 oder 2N2222 mit ICH C , M A X = 800 M A . H F E @0.4A ist 100 für den 2219, 50 für den 2222. v C E @0,4A für den 2219 sind 0,2V@ ICH C ICH B = 10 Selbst wenn Sie den 2N2219 nehmen, der an sich funktionieren könnte, benötigen Sie 50 mA Strom. Gepufferte Ausgabe ist erforderlich. Kühl es.
Angesichts des hohen Basisstroms und der geringen Verstärkung im Sättigungspunkt gibt @gabonator meiner Meinung nach recht, dass ein MOSFET die beste Lösung ist.
Aber wenn Sie sich an den BJT halten würden, können Sie vielleicht 2 oder drei gleich programmierte PWM-Ausgangspins verwenden, die jeweils über einen Widerstand verbunden sind 200 Ω an der Basis des BJT. Oder verwenden Sie (eine Anzahl von) Puffer(n) parallel.