Saltar al contenido principal
LibreTexts Español

12.1: Introducción

  • Page ID
    83215
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    En este ejercicio examinaremos la salida analógica mediante el uso de PWM o modulación por ancho de pulso. PWM es un método para producir señales analógicas usando una salida digital en lugar de una salida verdadera continuamente variable. Si bien algunos microcontroladores y placas tienen verdaderos DAC incorporados (el Arduino Due es un ejemplo), la mayoría no. Por lo tanto, se utiliza una salida de pulso digital con un ciclo de trabajo variable. La señal “analógica” básicamente es el “área bajo la curva”. Si pensara en promediar el tren de pulsos con un filtro de paso bajo, un ciclo de trabajo pequeño lograría un valor bajo y un ciclo de trabajo alto lograría un valor alto. Algunas cargas pueden necesitar un filtrado adecuado del tren de pulsos pero otras no. En este ejercicio comenzaremos examinando un simple LED.

    Es bastante fácil encender y apagar un LED. Considera el siguiente código:

    /* PWM V1 Manual LED brightness test */
    
    #define LEDBIT   0x40
    
    // on/off time in msec
    #define LEDONTIME   300
    #define LEDOFFTIME  300
    
    void setup()
    {
          // set Arduino pin 6 for output to an LED
          DDRD |= LEDBIT;
    }
    
    void loop()
    {
          PORTD |= LEDBIT;    // turn on LED
          delay(LEDONTIME);
    
          PORTD &= (~LEDBIT); // turn off LED
          delay(LEDOFFTIME);
    }
    

    En este ejemplo, el LED parpadea en 300 milisegundos cada uno para un tiempo de ciclo total de 600 milisegundos. Conecte un circuito de controlador LED NPN estándar a alimentación, tierra y pin Arduino 6. Ingresa el código, compile, transfiéralo y ejecútelo para verificarlo. Reduce los tiempos de encendido/apagado a 30 milisegundos cada uno y repite. El LED debería parpadear mucho más rápido. Reduce los tiempos de encendido/apagado a 5 milisegundos cada uno y repite. Ocurre algo curioso. El LED ya no parece estar parpadeando; más bien simplemente parece atenuador. Una vez que el tiempo cae por debajo de aproximadamente 20 milisegundos, el ojo humano integra la entrada visual a lo largo del tiempo y ya no vemos destellos discretos 1. En cambio, vemos la iluminación promedio. Dado que el LED solo está encendido durante la mitad del tiempo total, parece más tenue que un solo flash largo. Puede verificar esto cambiando el tiempo de encendido a 1 milisegundo y el tiempo de apagado a 9 milisegundos, logrando aún un tiempo de ciclo de 10 milisegundos. El LED debería aparecer bastante tenue ya que el nivel promedio es ahora solo del 10 por ciento del máximo.

    En lugar de ajustar el tiempo manualmente, podemos usar la función de biblioteca analogWrite () en uno de los pines de salida con capacidad PWM (estos están marcados con un “~” junto al encabezado). Afortunadamente, el pin 6 es capaz de PWM así que todo lo que necesitamos es un pequeño cambio en el código:

    /* PWM V2 LED brightness using analogWrite */
    
    #define LEDPIN 6
    
    // brightness 0 to 255
    #define LEDBRIGHTNESS 230
    
    void setup()
    {
    }
    
    void loop()
    {
          analogWrite(LEDPIN,LEDBRIGHTNESS);
    }
    

    Tenga en cuenta que no es necesario establecer el pin 6 para el modo de salida ya que esto se realiza automáticamente mediante la función AnalogWrite () (consulte “Bits & Pieces: AnalogWrite” en el texto para obtener más detalles). Si colocas un osciloscopio en el pin 6, verás una onda cuadrada a aproximadamente 490 Hz con un ciclo de trabajo del 90 por ciento. Tenga en cuenta que el parámetro LEDBRIGHTESS se puede reemplazar con los resultados de una llamada a analogRead (). Entonces, podemos conectar un potenciómetro a un pin de entrada analógica y leer su voltaje que oscilará entre 0 y 1023. Luego escalamos este rango en la entrada de 0 a 255 (unsigned char) de analogWrite () para crear un atenuador. El escalado se puede realizar utilizando la función de la biblioteca Arduino map (). La plantilla es:

    result = map(value, fromLow, fromHigh, toLow, toHigh);
    

    En nuestro caso usaríamos:

    result = map(value, 0, 1023, 0, 255);
    

    Para continuar, conecte un\(\Omega\) potenciómetro de 10 k entre la alimentación y tierra, conectando el brazo del limpiaparabrisas al pin Arduino A0. Ingresa el código a continuación, compilarlo y transferirlo.

    /* PWM V3 LED dimmer using analogWrite and potentiometer */
    
    #define ANALOG_IN_PIN 0
    #define LEDPIN 6
    
    void setup()
    {
          analogReference( DEFAULT );
    }
    
    void loop()
    {
          int a;
    
          a = analogRead( ANALOG_IN_PIN );
    
          a = map(a,0,1023,0,255);
          analogWrite(LEDPIN,a);
    }
    

    Los LED están bien y son buenos pero tal vez deseemos controlar algo un poco más interesante como un motor. Obviamente, nuestro circuito de controlador LED será insuficiente para cualquier motor de tamaño decente, pero funcionará bien para un pequeño motor de pasatiempo de CC de 10 a 15 miliamperios (descargado) dadas algunas modificaciones menores. Un ejemplo se ve en la Figura\(\PageIndex{1}\).

    clipboard_ea16fd2d42c45b24c4a6d71d04d96bcc4.png

    Figura\(\PageIndex{1}\): Controlador de motor con BJT

    Primero tenga en cuenta que se requiere un mayor suministro. En este caso, serían apropiados 15 VCC. R1 tendría que ser aproximadamente 6.8 k\(\Omega\) para garantizar el encendido del transistor y C1 necesita ser de aproximadamente 100 nF. D1 debe ser un rectificador 1N4002. Se utiliza para evitar, o desaire, un pico repentino de voltaje causado por la inductancia del motor cuando el transistor cambia de estado entre la saturación y el corte 2. Para una carga mayor, se puede usar un FET de potencia como se muestra en la Figura\(\PageIndex{2}\). Una buena carga para esta variación sería un ventilador boxer común de 12 voltios (de disipación de uno o dos vatios). El EMOSFET ZVN4206A sería una opción decente para esta carga más grande, ya que maneja 600 miliamperios continuos y 8 amperios pulsados (establece Vdd en 12 VCC).

    clipboard_efec3958861d1b0302fc279b8cd5f0283.png

    Figura\(\PageIndex{2}\): Controlador de ventilador con EMOSFET

    Construye uno de los circuitos de control y conéctelo al pin 6 de Arduino en lugar del controlador LED. (Es posible que desee mantener el controlador LED conectado para las próximas modificaciones y adiciones). No hay necesidad de cambiar el código. Una vez que el circuito del motor está conectado, su velocidad ahora debe ser controlada por el potenciómetro.

    Referencias

    1 Si este no fuera el caso, no tendríamos la impresión de movimiento continuo mientras veíamos televisión o películas que utilizan velocidades de fotogramas de 30 y 24 fotogramas por segundo respectivamente. Los marcos se “difuminan juntos” en nuestro cerebro creando la ilusión de movimiento continuo.

    2 Recuerde, la corriente a través de un inductor no puede cambiar instantáneamente. La conmutación repentina del transistor resultaría en un voltaje inverso del inductor grande que a su vez causaría un gran pico de voltaje a través del transistor debido a KVL. Por lo que el diodo se coloca ahí para limitar dicho voltaje y proteger los dispositivos. Ver: http://en.Wikipedia.org/wiki/Flyback_diode


    This page titled 12.1: Introducción is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.