In meinem letzten Projekt arbeite ich an der Geschwindigkeitssteuerung von 5-V-DC-USB-Lüftern.
Mein Lüftermotor sieht wie folgt aus:
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:
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;
}
}
Als Fortsetzung meines früheren Kommentars, wenn der Lüfter im eingeschalteten Zustand einen Strom von 400 mA zieht und Sie verwenden für das Sättigungs-Beta des BJT also
Das Datenblatt des ATmega328P erlaubt einen maximalen Strom von 40 mA pro Digital Input/Output (DIO) Pin, also mit Du bist an diesem Maximum. (Anm. Basierend auf der obigen Berechnung für , 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 (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 .
Sie können den Wert des Basisstrombegrenzungswiderstands des BJT wie folgt berechnen:
Wo ist die Basis-Emitter-Spannung des BJT, wenn der BJT im Sättigungsmodus mit einem Kollektorstrom von arbeitet . Sie können wahrscheinlich den Wert von bestimmen aus den Informationen zum Sättigungsmodus im Datenblatt des BJT.
Der tatsächliche (physikalische) Widerstandswert muss nicht genau gleich dem berechneten Wert sein , aber sein Wert sollte in der Nähe von sein . Zum Beispiel, wenn die berechnet 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 wird gegeben von:
Wählen Sie einen Widerstand, dessen Nennleistung ist oder höher. Zum Beispiel, wenn 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
, 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
, oder auch
und sehen, was mit diesem Wert passiert.
Sogar mit
Sie würden 2 V verlieren, plus
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
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
im Sättigungspunkt wo
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.
Jim Fischer
Wladimir Cravero