1 votos

No se obtiene la tensión esperada en el LED

Recientemente he cogido un kit de arduino nano y he jugado con todos los proyectos sencillos. No tengo mucha experiencia EE además de los que tengo una pregunta que podría ser bastante básico.

Estoy tratando de hacer una linterna de viaje simple con un paquete de baterías recargables de iones de litio. Está funcionando, pero el voltaje en el LED está por debajo de lo que calculé que debía ser y por lo tanto el LED es más tenue de lo esperado.

Estoy usando una batería 18650 3.7v Li-ion para la alimentación que está conectada a una placa de carga/protección TP4056. La salida del TP4056 está conectada a un convertidor elevador MT3608 para elevar los 3,7v a 7v que alimenta al Nano a través del pin 30. Sé que no es una forma eficiente de alimentarlo pero lo cambiaré en el futuro.

Quiero usar PWM para controlar el brillo usando un codificador rotatorio y el botón para encenderlo/apagarlo. El LED fue rescatado de una linterna que tenía por ahí y después de algunas investigaciones parece que es un cree xp-c que tiene un voltaje de 3.6v @ 350mA. Para reducir la salida máxima de 5v de los pines del arduino hice un divisor de voltaje con R1 siendo una resistencia de 100 ohmios y R2 de 330 ohmios. Esto debería hacer que la salida entre las resistencias sea de ~3.8v, pero como el arduino pone un poco menos de 5v yo esperaba una salida de ~3.6v.

El problema es que estoy recibiendo 2,6v al LED en lugar de los 3,6v que debería ser. He medido 4,5v desde el pin D6 a GND pero sólo 2,6v después del divisor. ¿Qué puede causar que el voltaje sea 1v más bajo de lo esperado?

Lantern circuit design

Aquí está el código que tengo en el nano:

int tempPin = 0;

volatile boolean TurnDetected;  // need volatile for Interrupts
volatile boolean rotationdirection;  // CW or CCW rotation
volatile boolean isOn;
volatile boolean buttonPress;

const int PinCLK=2;   // White
const int PinDT=4;    // Orange
const int PinSW=3;    // Brown
const int PinLED=5;

int counter = 100;

// Interrupt routine runs if CLK goes from HIGH to LOW
void isr ()  {
  delay(4);  // delay for Debouncing
  if (digitalRead(PinCLK))
    rotationdirection= digitalRead(PinDT);
  else
    rotationdirection= !digitalRead(PinDT);
  TurnDetected = true;
}
void isr1 ()  {
  delay(4);  // delay for Debouncing
  if(!digitalRead(PinSW)){
    isOn = !isOn;
  }
  buttonPress = true;
}

void setup() {
  isOn=false;
  Serial.begin(9600);
  pinMode(PinCLK,INPUT);
  pinMode(PinDT,INPUT);  
  pinMode(PinSW,INPUT);
  pinMode(PinLED,OUTPUT);
  digitalWrite(PinSW, HIGH); // Pull-Up resistor for switch

  attachInterrupt (0,isr,FALLING);
  attachInterrupt (digitalPinToInterrupt(PinSW),isr1,FALLING);

}

void loop() {

  if(buttonPress){
    if(isOn){
      int val = map(counter, 0, 100, 0, 255);
      analogWrite(PinLED, val);
    } else {
      digitalWrite(PinLED, LOW);
    }
    buttonPress=false;
  }

  if (TurnDetected)  {
    if (rotationdirection) {
      counter+=2;
    }
    else {
      counter-=2;
    } 
    if(counter > 100){
      counter=100;
    }else if (counter < 30){
      counter = 30;
    }
    int val = map(counter, 0, 100, 0, 255);
    analogWrite(PinLED, val); 
    TurnDetected = false;  // do NOT repeat IF loop until new rotation 
detected
    Serial.println(counter);
  }
}

1voto

Passerby Puntos 28913

Las salidas de Arduino suelen estar limitadas a 20mA con una caída de tensión de 0,3 a 0,8V dependiendo del microcontrolador utilizado.

Para leds de 350mA, necesitas como mínimo un mosfet o transistor, y preferiblemente un driver de corriente constante.

Los divisores de tensión de resistencia serán muy muy pobres en este tipo de situación. Será mejor que utilices una sola resistencia.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X