el LED se atenúa cuando el MOSFET cambia a una velocidad mayor

1

Quiero conducir los LED utilizando un Arduino Due y un MOSFET. A continuación se muestra el circuito que estoy usando, tomado de otra publicación: Conduciendo la tira de LED del microcontrolador

ReemplazéeltransistorenlaimagenconunIRLB8721PbF.Hojadedatos: enlace

El LED_STRIP se reemplaza con dos LED blancos LH351B conectados en serie. Hoja de datos: enlace

El voltaje directo del LH351B es de aproximadamente 3V, así que estoy usando 6V como fuente de alimentación. Básicamente quiero seguir encendiendo y apagando los LEDs. Noté que cuando aumentaba la frecuencia de conmutación, por ejemplo 100 kHz, los LED eran más tenues que los de una frecuencia más lenta, como 1 kHz. ¿Qué podría estar causando la disminución del brillo?

¿Creo que el LED debería poder cambiar en el rango de nano segundos? Y el MOSFET que estoy usando también tiene un tiempo de subida / caída en nano segundos. ¿Tiene que ver con el microcontrolador? A continuación se muestra el código que estoy usando, solo una simple escritura digital utilizando la manipulación de puertos:

    PIOD->PIO_SODR = 1<<8; //HIGH on pin 12
    //digitalWrite(12, HIGH);
    delayMicroseconds(10);


    PIOD->PIO_CODR = 1<<8; //LOW on pin 12
    //digitalWrite(12,LOW);
    delayMicroseconds(10);
    }

--EDITED--

código completo:

    #include <SPI.h>
    #include <SD.h>
    File dataFile;

    void setup() {
      pinMode(12, OUTPUT);
      Serial.begin(210000);

      if (!SD.begin(10)) {
        Serial.println("Card failed, or not present");
        return;
      }
      Serial.println("card initialized.");
    }

    void loop() {
      int myData_read;
      dataFile = SD.open("DATALOG.dat");
      myData_read = dataFile.read();
      //Serial.println(myData_read);
      for(int i=0; i < 8; i++){
         if((myData_read & (1<<i)) >> i){

            PIOD->PIO_SODR = 1<<8; //HIGH on pin 12
            //digitalWrite(12, HIGH);

            delayMicroseconds(5);
          } else {

            PIOD->PIO_CODR = 1<<8; //LOW on pin 12
            //digitalWrite(12,LOW);
            delayMicroseconds(5);
            }
      }
    dataFile.close();
    } 
    
pregunta Wei T

2 respuestas

3

No nos has mostrado suficiente de tu código, pero presumiblemente este fragmento está incrustado en un bucle de algún tipo, quizás incluso una función loop() específica de Arduino.

Lo que esto significa es que su tiempo de "apagado" no es igual a su tiempo de "encendido". El tiempo de "encendido" es simplemente el retardo de 10 µs, pero el tiempo de "apagado" es el retardo de 10 µs más la sobrecarga del bucle, que puede incluir la sobrecarga de salir de la función loop() y luego volver a -entrar de nuevo.

A medida que disminuye el valor de retardo nominal, la sobrecarga del bucle se convierte en una fracción mayor del período total, sesgando el ciclo de trabajo y, por lo tanto, el brillo del LED.

Esto será obvio si simplemente mira el pin de salida con un osciloscopio.

Mirando el "código completo" en su edición, hay muchas maneras de optimizarlo. Probaría algo como esto:

#include <SPI.h>
#include <SD.h>
File dataFile;
int myData_read;

void setup() {
  pinMode(12, OUTPUT);
  Serial.begin(210000);

  if (!SD.begin(10)) {
    Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("card initialized.");
  dataFile = SD.open("DATALOG.dat");
  myData_read = dataFile.read();
  //Serial.println(myData_read);
  dataFile.close();
}

void loop() {
  for (int i=0; i < 8; i++) {
    if (myData_read & (1<<i)) {
      PIOD->PIO_SODR = 1<<8; //HIGH on pin 12
      //digitalWrite(12, HIGH);
    } else {
      PIOD->PIO_CODR = 1<<8; //LOW on pin 12
      //digitalWrite(12,LOW);
    }
    delayMicroseconds(5);
  }
}

No hay razón para leer el archivo una y otra vez en el bucle, y el >> i en la declaración if es completamente superfluo.

    
respondido por el Dave Tweed
0

El LED no se puede alternar a una frecuencia tan alta. No se obtendrá suficiente voltaje en ese intervalo de tiempo para encenderse por completo y, por lo tanto, permanecerá tenue o incluso apagado.

    
respondido por el MITU RAJ

Lea otras preguntas en las etiquetas