Voltaje de salida del ventilador USB

En mi proyecto reciente, estoy trabajando en el control de velocidad del ventilador USB de 5 V CC.

El motor de mi ventilador se ve a continuación:

ADMIRADOR

Aquí el control del ventilador se realiza mediante PWM que proviene del controlador Arduino NANO. Para controlar la velocidad de FAN, desarrollé un circuito que se encuentra a continuación:

Circuito

Ahora, cuando doy PWM completo significa valor completo 255 y en ese momento cuando mido el voltaje a través del motor, entonces es solo alrededor de 3.50 V. Solo pensé que podría ser 5 V completo. No sé por qué ocurre tanta pérdida. Cualquier sugerencia al respecto.

Y mi código Arduino está a continuación:

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;
  }
}
Como punto de partida, determine la corriente que requiere la carga (el ventilador), que es el circuito integrado de corriente del colector del BJT. La corriente base del BJT debe ser IB=IC/Beta(sat). Para un BJT de potencia, Beta (sat) suele estar entre 4 y 10; verifique la hoja de datos para determinar el valor de Beta (sat) que usa el mfgr para las pruebas paramétricas. Deberá ajustar el valor de la resistencia para permitir una corriente de amperios IB desde el pin DIO hacia la base del BJT. IIRC, un pin DIO puede generar corriente hasta 40 ma, máx., para una salida lógica alta.
Además, ¿cuál es el voltaje de ese GPIO? si es un pin de 1,8 V, necesita una resistencia de base mucho más baja.

Respuestas (3)

Como seguimiento a mi comentario anterior, si el ventilador consume una corriente de 400 mA cuando está ENCENDIDO y usa β s a t = 10 para la beta de saturación del BJT, entonces

I B ( s a t ) = I C s a t / β s a t = 400 metro A / 10 = 40 metro A

La hoja de datos del ATmega328P permite una corriente máxima de 40 mA por pin de entrada/salida digital (DIO), por lo que con I B ( s a t ) = 40 metro A estás en ese máximo. (nb Basado en el cálculo anterior para I B , cuando el pin DIO es lógico ALTO, el pin DIO debe suministrar (también conocido como "fuente") una corriente de 40 mA en la base del BJT para saturar correctamente, para ENCENDER completamente, el BJT).

La sección "Características eléctricas" de la hoja de datos del ATmega328P no muestra (por lo que pude encontrar) el valor de V O H (voltaje de salida lógico ALTO) para una corriente de salida de 40 mA. Pero dada la información en la Fig. 33-34 "Voltaje de salida del pin de E/S frente a corriente de fuente (V CC = 5 V)" en la hoja de datos, estimaría V O H 4 V @ I O H = 40 metro A .

Puede calcular el valor de la resistencia limitadora de corriente base del BJT de la siguiente manera:

R B = V R B I R B = V O H V B mi ( s a t ) I B ( s a t ) = ( 4 V ) V B mi ( s a t ) ( 40 metro A )

dónde V B mi ( s a t ) es el voltaje base-emisor del BJT cuando el BJT está operando en modo de saturación con una corriente de colector de I C s a t = 400 metro A . Es probable que pueda determinar el valor de V B mi ( s a t ) de la información del modo de saturación proporcionada en la hoja de datos del BJT.

El valor real (físico) de la resistencia no necesita ser exactamente igual al valor calculado R B , pero su valor debe estar cerca de R B . Por ejemplo, si el calculado R B el valor es 1234, puede usar una resistencia de 1,2 kohm al 5 % o una resistencia de 1,24 kohm al 1 %.

Cuando el pin DIO es lógico ALTO, la potencia disipada por la resistencia limitadora de corriente base R B es dado por:

PAG R B = I B ( s a t ) 2 R B = ( 40 metro A ) 2 R B

Seleccione una resistencia cuya potencia nominal sea 2 PAG R B o mas alto. Por ejemplo, si R B disipa 122 mW, luego use una resistencia cuyo índice de disipación de potencia sea de 244 mW o superior; por ejemplo, puede usar una resistencia de 1/4 vatio (250 mW) o una resistencia de 1/2 vatio (500 mW), pero no debe usar una resistencia de 1/8 Watt (125 mW).

Para reducir la caída de voltaje en el interruptor del transistor, use un transistor MOSFET con baja "resistencia de encendido" en lugar de un transistor BJT

¿Leí correctamente en la imagen que el ventilador consume una corriente de 0,4 A?
En ese caso, suponiendo h F mi = 100 , la corriente base sería de 4 mA y provocaría una caída de voltaje de 4 V sobre la resistencia base de 1 kOhm. Esa es una gran cantidad de voltaje que perder. Sugiero hacer R b = 200 Ω , o incluso 100 Ω y ver qué pasa con ese valor.
Incluso con h F mi = 200 perderías 2 V, más V C mi de aproximadamente 0,7 V o más, ya que el transistor no se satura.
No hay necesidad de un MosFet. El BJT, si se satura, tendrá solo 0.2..0.3 V V C mi durante el estado activado.

Pero gabonator tiene razón por otra razón al recomendar un MOSFet: reducirá la carga actual en la salida PWM de 50 mA (de hecho, la h F mi = 10 en el punto de saturación donde I C puede ser 0.4 A, como señaló Jim Fischer) si solo se usa un BJT.
Y debido a que no se requiere un comportamiento lineal, es simplemente encendido/apagado, la no linealidad del MOSFet no es un gran problema aquí. Aquí hay un candidato.

Por lo general, uno quiere operar el BJT en modo de saturación (totalmente "ENCENDIDO"), y no en modo activo directo (modo de amplificador de señal pequeña), para que este tipo de circuito minimice la potencia del estado "ENCENDIDO" que está disipando el BJT . Los valores de hFE en el rango de 100 a 300 son para el modo activo directo. Los valores de hFE (sat) suelen estar alrededor de 10 para BJT de pequeña señal y de 4 a 10 para BJT de potencia.
Eso confirma que la resistencia base realmente es el problema. hFE es simplemente demasiado pequeño para saturar el transistor con esa resistencia de 1kOhm en serie. Como consecuencia, el voltaje del colector solo verá una caída moderada y es posible que el ventilador ni siquiera funcione.
Descargué la imagen, la amplié y creo que realmente dice 5V/0.4A y 'hecho en China' ;-) El máximo absoluto para I C de un BC547 es de 100 mA, por lo que incluso si su circuito base estuviera configurado correctamente, no hará funcionar el ventilador. Sí, por un tiempo muy corto, y luego se quemará. Una mejor opción sería el 2N2219 o el 2N2222 con I C , METRO A X = 800 metro A . h F mi @0.4A es 100 para el 2219, 50 para el 2222. V C mi @0.4A para el 2219 es 0.2V@ I C I B = 10 Entonces, incluso si toma el 2N2219, que en sí mismo podría funcionar, necesitaría una corriente de 50 mA. Se requiere salida con búfer. Enfriarlo.
En vista de la alta corriente de base y la baja ganancia en el punto de saturación, creo que @gabonator tiene razón en que un MOSFet es la mejor solución.
Pero si se apega al BJT, tal vez pueda usar 2 o tres pines de salida PWM, igualmente programados, cada uno conectado a través de una resistencia de 200 Ω a la base del BJT. O use un (número de) búfer(es) en paralelo.