"Aquí nadie está loco, solo vive un realidad distinta"
Jim Morrison.

" ¿De qué serviría hablar de aquello? Nadie me creería"
Napoleón Bonaparte.

jueves, 1 de agosto de 2019

Comunicación serial utilizando Advanced Serial Port Terminal (ASPT)

   Ha pasado un tiempo desde la publicación de la última entrada en este blog, una disculpa a todos(as) los seguidores(as), ya que por diversas situaciones, me mantuve distanciado de este blog. Agradezco a todos(as) aquellos(as) que han estado pendientes de mi persona y a los suscriptores(as) del canal de youtube que administro. 

En la institución donde trabajo, se desarrollan algunos prototipos con microcontroladores en donde la comunicación es mediane el puerto serie, como éste puerto ya ha sido descontinuado en el hardware de una computadora, la conexión se realiza utilizando un convertidor de USB a serie o mediante los módulos bluetooth HC-05 y HC-06.

Para realizar pruebas de transmisión/recepción entre los dispositivos conectados, he utilizado software como el Hyperterminal que en su momento fue incluido con el sistema operativo Windows de Microsoft, el Monitor Serie de la interfáz de Arduino, el Monitor Serie de Energia y el Advanced Serial Port Terminal (ASPT) de la empresa Eltima Software, éste último me ha parecido muy interesante y completo, ya que posee la mayor parte de las características de los programas ya mencionados, además de que permite múltiples sesiones de comunicación serie en la misma ventana haciendo uso de pestañas.

El software Advanced Serial Port Terminal (ASPT) lo pueden descargar del siguiente enlace, tiene una versión de prueba de 14 días y la licencia está en $39.95 USD:


Al abrir el software aparece la siguiente interfáz grafica de inicio:  

ASPT - microsysoftware.blogspot.com
Figura 1. Aspecto de la pantalla de bienvenida de ASPT.
(clic en la imagen para ampliar)


Figura 2. Datos de contacto para adquirir el ASPT.
(clic en la imagen para ampliar)
 
A continuación, se muestran tres ejemplos de circuitos que utilizan comunicación serie, y al final, se incluye un video del uso simultáneo de comunicación serie mediante ASPT en donde se envían o reciben datos de los tres circuitos:

1. Encendido/apagado del LED del pin 24 del microcontrolador ATMEGA328 ahora propiedad de Microchip, o el pin digital 13 de la tarjeta Arduino UNO R3.

En la siguiente figura, se muestra la ubicación del LED de prueba de la tarjeta Arduino UNO R3: 


Figura 3. PCB de Arduino UNO R3.
(clic en la imagen para ampliar)

El código que se muestra a continuación se compila con la IDE de Arduino, permite encender/apagar el LED de prueba de la tarjeta Arduino UNO R3, enviando un "1" desde la PC mediante comunicación serial: 


////////////////////////////////////////////
//  Blog: microsysoftware.blogspot.com    //
//  País: México                          //
//  Fecha: 01/12/2018                     //
////////////////////////////////////////////

//  Programa que controla el encendido/apagado
//  del LED de prueba de la tarjeta Arduino UNO R3 (pin 13),
//  el control se hace mediante comunicación serial a 9600 baudios,
//  se envía el número "1" desde la PC.

//  Material Requerido:
//  * Tarjeta Arduino UNO R3 o similar
//  * Cable USB de la tarjeta Arduino
//  * Computadora con puerto USB

byte LED = 13;         // Variable de 8 bits para declarar el LED
                       // de prueba incluido en el PCB de Arduino (Pin 13).
byte indicador = 0;    // Variable de 8 bits que indica si el LED 
                       // está apagado(0) o encendido(1).
char dato;             // Variable de tipo caracter para almacenar
                       // el dato procedente de la computadora.

void setup() 
{
Serial.begin(9600);   // Habilita la comunicación serial a 9600 bauds del uC.
pinMode(LED,OUTPUT);  // Se declara el pin del LED de prueba, como salida.
}

void loop() 
{
while(Serial.available() > 0) // Revisa si existe un dato en el puerto serie.
  {
    dato = Serial.read();     // Lee el dato presente en el puerto serie.
    if (dato == '1' && indicador == 0)
    { 
    digitalWrite(LED,HIGH);  // Enciende el LED.
    Serial.println("LED encendido");  // Envía esta frase y un salto de línea
                                      // por el puerto serie del uC.
    indicador = 1; // El LED está encendido.
    }
    else if (dato == '1' && indicador == 1)
    { 
    digitalWrite(LED,LOW);  // Apaga el LED.
    Serial.println("LED apagado");// Envía la frase y un salto de línea 
                                  // por el puerto serie del uC.
    indicador = 0; // El LED está apagado.
    }
    else
    { 
    Serial.println("Dato no valido");// Envía la frase y un salto de línea
                                     // por el puerto serie del uC.
    }
  }
}

2. Lectura de datos de una entrada analógica del micrcontrolador MSP430G2553 de la tarjeta MSP430 Launchpad de Texas Instruments.
  
La tarjeta MSP430 Launchpad, tiene la capacidad de muestrear una señal analógica que varíe en un rango máximo de 0 V a 3.3 V de CD, en este ejemplo, se utilizan los pines de alimentación que incluye el PCB, y un potenciómetro de 10 k.


Figura 4. Diagrama de conexión para la MSP430 Launchpad.
(clic en la imagen para ampliar)

El siguiente código elaborado para Energia, habilita la comunicación serial del MSP430G2553 con una velocidad de 9600 baudios, y configura el pin P1.4 como entrada analógica para voltaje de CD, cuyo muestreo se realiza cada 200 ms.
 

////////////////////////////////////////////
//  Blog: microsysoftware.blogspot.com    //
//  País: México                          //
//  Fecha: 30/11/2018                     //
////////////////////////////////////////////

//  Programa que lee la entrada analógica pin A4 (P1.4),
//  y envía al valor a una computadora usando 
//  comunicación serial.

//  Hardware Requerido:
//  * MSP-EXP430G2 LaunchPad
//  * Potenciómetro de 10 kilo-Ohms
//  * Cables de conexión

int ADC = 0;          // Variable de tipo entero de 16 bits,
                      // utilizada para almacenar el valor obtenido por el ADC.

void setup() 
{
Serial.begin(9600);   // Habilita la comunicación serial a 9600 bauds del uC.
}

void loop() 
{
ADC = analogRead(A4); // Realiza la lectura del pin analógico A4 (P1.4).
Serial.println(ADC);  // Envía el valor del ADC por el puerto serie del uC.
                      // se incluye el salto de línea y retorno.
delay(200);           // Retardo de 200 ms (5 muestras de la señal en 1 s).
}

3. Recepción de caracteres ASCII mediante un módulo bluetooth HC-05, y despliegue de los mismos utilizando un PIC16F877A y una pantalla LCD 16 x 2.

El siguiente diagrama muestra la conexión básica entre el PIC16F877A y el módulo bluetooth HC-05:

Figura 5. Diagrama de conexión para el PIC16F877A y el módulo bluetooth HC-05.
(clic en la imagen para ampliar)
Aspecto físico del diagrama anterior:

Figura 6. Aspecto físico del circuito de prueba.
(clic en la imagen para ampliar)

El siguiente código para el circuito anterior, escrito para el compilador C CCS, permite recibir caracteres ASCII por el puerto serie del PIC16F887A a través de un módulo bluetooth, y mostrarlos en una pantalla LCD; así también, permite enviar una secuencia de prueba al terminal de la computadora:


////////////////////////////////////////////
//  Blog: microsysoftware.blogspot.com    //
//  País: México                          //
//  Fecha: 01/12/2018                     //
////////////////////////////////////////////

/* CÓDIGO PARA EL PIC16F877A, QUE UTILIZA EL
PUERTO SERIE DEL MICROCONTROLADOR PARA 
ENVIAR/RECIBIR DATOS HACIA UNA PC CON PUERTO SERIE.

PARA INICIAR LA COMUNICACIÓN, SE DEBE CONECTAR
EL PUERTO SERIAL DEL PIC AL PUERTO DE LA PC, 
UTILIZANDO UN CONVERTIDOR USB A SERIE O UN MÓDULO
BLUETOOTH, POSTERIORMENTE ENVIAR EL COMANDO "AT" 
Y UN SALTO DE LÍNEA, DESPUÉS ENVIAR LOS CARACTERES
DESEADOS SIEMPRE QUE NO EXCEDA DE 29, INCLUYENDO ESPACIOS.

UTILIZA UN CRISTAL DE CUARZO DE 4 MHz Y UNA LCD DE 16x2.

------ CARACTERES ESPECIALES --------
\n -> 0x0A -> CAMBIO/SALTO A LA SIGUIENTE LÍNEA/FILA.
\f -> BORRA PANTALLA/DATOS DEL TERMINAL.
\r -> RETORNA EL CURSOR AL INICIO DE UN RENGLÓN.

*/
#INCLUDE <16F877A.H>       // MICROCONTROLADOR UTILIZADO.
#USE DELAY(CLOCK=4000000)  // 4 MHz
////////////////////// FUSIBLES ////////////////////////////
#FUSES XT,NOWDT,PUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOPROTECT
//////// CONFIGURACIÓN DEL PUERTO SERIE DEL PIC ////////////
#USE RS232(BAUD=9600,XMIT=PIN_C6,RCV=PIN_C7,PARITY=N,BITS=8)
////////////// CONEXIÓN DE LOS PINES DEL LCD ///////////////
#DEFINE  LCD_DB4  PIN_D2
#DEFINE  LCD_DB5  PIN_D3
#DEFINE  LCD_DB6  PIN_D4
#DEFINE  LCD_DB7  PIN_D5
#DEFINE  LCD_RS   PIN_D0
#DEFINE  LCD_RW   1        // PIN R/w CONECTADO A GND.
#DEFINE  LCD_E    PIN_D1
#INCLUDE <FLEX_LCD.C>      // LIBRERÍA PARA LA LCD.
#DEFINE  BOTON    PIN_A0   // PUSH-BUTTON.

INT A=1;    // VARIABLE DE 8 BITS.
CHAR DATO;  // VARIABLE QUE ALMACENA EL DATO RECIBIDO
            // EN EL PUERTO SERIE DEL PIC.
/////// ARREGLO PARA ALMACENAR HASTA 29 CARACTERES ////////
CHAR DATO1[29]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
                ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
                ' ',' ',' ',' ',' ',' ',' ',' ',' ',};

#INT_RDA          // INTERRUPCIÓN DE RX DEL PUERTO SERIE.
VOID RECIBE (VOID)// NOMBRE DE LA SUBRUTINA DE LA #INT_RDA.
{
DATO = GETCH();   // LEE DATO EN EL BUFFER Y LO GUARDA EN DATO.
   IF (DATO != 0x0A)// SI NO SE RECIBE UN SALTO DE LÍNEA...
   {
   DATO1[A]=DATO; // ALMACENA EL DATO EN EL ARREGLO DATO[A].
   A=A+1;         // INCREMENTA "A" EN UNA UNIDAD.
   }
   
   ELSE           // SI SE RECIBE UN SALTO DE LÍNEA...
   {
  //// VERIFICA SI SE RECIBE EL COMANDO "AT" ////
     IF(DATO1[1]=='A' && DATO1[2]=='T' && DATO==0x0A)
      {
  //// BORRA LA LCD Y MUESTRA EL MENSAJE RX: ////
       PRINTF(LCD_PUTC,"\fRX:");
  //// ENVÍA EL SIGUIENTE MENSAJE POR EL PUERTO SERIE ////     
       PRINTF("\n\rOK\n\rLISTO PARA RECIBIR DATOS...\n\r");
  //// BORRA LOS DATOS UTILIZANDO EL CARACTER ASCII, ESPACIO ////
       DATO1[1]=' ';
       DATO1[2]=' ';
      }
      ELSE
  //// EN CASO SE NO RECIBIR EL COMANDO "AT"
      {
  //// POSICIONA EL CURSOR EN LA FILA 1 COLUMNA 4 DEL LCD ////
       LCD_GOTOXY(4,1);
  //// BUCLE QUE IMPRIME EN EL LCD LOS CARACTERES RECIBIDOS ////
       FOR (A=1;A<14;A=A+1)
       {
        PRINTF(LCD_PUTC,"%c",DATO1[A]);
  //// BORRA EL CARACTER DESPUÉS DE IMPRIMIRLO EN EL LCD ////
        DATO1[A]=' ';
       }
  //// ENVÍA UN SALTO DE LÍNEA AL CURSOR DEL LCD ////
       PRINTF(LCD_PUTC,"\n");
  //// CONTINÚA LA IMPRESIÓN DE CARACTERES EN LA 2a LÍNEA ////
       FOR (A=A;A<30;A=A+1)
       {
        PRINTF(LCD_PUTC,"%c",DATO1[A]);
  //// BORRA EL CARACTER DESPUÉS DE IMPRIMIRLO EN EL LCD ////
        DATO1[A]=' ';
       }
      }
     A=1; // NUEVAMENTE INICIA LA VARIABLE A EN 1.
   }
}

VOID MAIN (VOID) // SUBRUTINA PRINCIPAL.
{
LCD_INIT(); // COMANDO PARA INICIALIZAR EL LCD.
PRINTF(LCD_PUTC,"INICIANDO...\n"); // IMPRIME FRASE EN EL LCD.
SET_TRIS_A(0B000001);   // RA0 (IN), RA1 -> RA5 (OUT).
//// HABILITA LA INTERRUPCIÓN DE RX EN EL PUERTO SERIE DEL PIC ////
ENABLE_INTERRUPTS(INT_RDA);
ENABLE_INTERRUPTS(GLOBAL);
DELAY_MS(1000); // RETARDO DE 1 s.
PRINTF(LCD_PUTC,"LISTO!"); // IMPRIME FRASE EN EL LCD.
DELAY_MS(1000); // RETARDO DE 1s.
//// BORRA LOS CARACTERES EN LCD E IMPRIME FRASE ////
PRINTF(LCD_PUTC,"\fENVIE COMANDO AT\nDESDE TERMINAL..");
   WHILE(TRUE) // BUCLE INFINITO.
   {
      //// MIENTRAS NO SE PULSE EL BOTÓN ////
      WHILE(INPUT(BOTON)==1)
      {
      // ELPROGRAMA SE QUEDA ESPERANDO AQUÍ.
      }
      //// SE PULSA EL BOTÓN ////
      WHILE(INPUT(BOTON)==0)
      {
      //// EL PROGRAMA ESPERA QUE SE LIBERE NUEVAMENTE ////
      }
      //// DESHABILITA LA INTERRUPCIÓN RX DEL PIC ////
      DISABLE_INTERRUPTS(INT_RDA);
      //// BORRA LOS CARACTERES DEL LCD E IMPRIME FRASE //// 
      PRINTF(LCD_PUTC,"\fTX DATOS\nPRUEBA...");
      DELAY_MS(1000); // RETARDO DE 1 s.
      PRINTF("HEX:"); // ENVÍA FRASE HACIA EL PC.
      PUTC(0x31); // ENVÍA EL "0" EN HEXADECIMAL HACIA EL PC.
      PRINTF(" DEC:"); // ENVÍA FRASE HACIA EL PC.
      PUTC(50); // ENVÍA EL "1" EN DECIMAL HACIA EL PC.
      PRINTF(" BIN:"); // ENVÍA FRASE HACIA EL PC.
      PUTC(0B00110011); // ENVÍA EL "2" EN BINARIO HACIA EL PC.
      DELAY_MS(1000); // RETARDO DE 1 s.
      PRINTF(LCD_PUTC,"LISTO!"); // ENVÍA FRASE AL LCD.
      DELAY_MS(1000); // RETARDO DE 1 s.
      //// HABILITA LA INTERRUPCIÓM RX DEL PIC ////.
      ENABLE_INTERRUPTS(INT_RDA);
      //// BORRA CARACTERES EN LCD Y ENVÍA FRASE ////.
      PRINTF(LCD_PUTC,"\fENVIE COMANDO AT\nDESDE TERMINAL..");
   }
}
Por último, se muestra un video de aplicación en donde se realiza la comunicación simultánea de los tres ejemplos mencionados arriba:


Video de Youtube


¡Muchas gracias por visitar el blog y leer esta entrada!

Alfredo Alcázar

domingo, 22 de febrero de 2015

Dimmer digital (con 3 niveles de luminosidad) utilizando un microcontrolador PIC (1a. Parte, diseño).

  Que tal, ésta entrada es la primera del año 2015 en éste blog.  En la presente ocasión, la información que aquí se presenta servirá como referencia para la materia de Microcontroladores (que estoy impartiendo en estas fechas), a través de ella, se intentará mostrar el cómo realizar un proyecto con microcontrolador PIC.

Por cuestiones de trabajo, no he tenido tiempo de colocar la segunda parte de este diseño. Pero al final de esta entrada, se ha colocado un link (contiene publicidad) donde pueden descargar el código en lenguaje C y el diagrama mejorado de este dimmer digital.

  El proyecto consistirá en hacer variar la intensidad de un foco de 60W - 100W conectado a una fuente de corriente alterna (CA), a éste circuito comúnmente se le conoce como dimmer. Y el circuito completo se ha dividido en las siguientes cuatro etapas o bloques:

1. Detector de cruce por cero (o paso por cero).
2. Etapa de control.
3. Etapa de potencia.
4. Fuente de alimentación.

  Antes de comenzar con la descripción de cada uno de los bloques, primero se expondrá un poco de teoría sobre el funcionamiento de un dimmer.

  Como se mencionó, el dimmer es un circuito que funciona con corriente alterna (CA), y como seguro se recordará, la corriente alterna posee los siguientes elementos:

Figura 1. Elementos básicos de una onda senoidal.
(Para expandir, clic sobre la imagen).

Donde:

Es el voltaje pico, se puede decir que, es el voltaje máximo alcanzado durante el semiciclo positivo o semiciclo negativo de la onda senoidal. Se obtiene multiplicando .
 Root Mean Square o valor cuadrático medio, se define como el valor de una señal de cd que entregaría la misma potencia si sustituyera a la onda variable en cuestión, se obtiene dividiendo.
Es la frecuencia o número de ciclos que suceden durante 1 segundo (ciclos por segundo), cuya unidad de medida es el hertz (Hz, denominado así en honor a Heinrich Hertz). Se obtiene mediante.
Es el periodo o el tiempo de duración de un ciclo, expresado en segundos. Se obtiene mediante.

  En los hogares mexicanos, el voltaje de CA más común que suministra la empresa gubernamental (que tiene presencia prácticamente en el 98% del territorio nacional), llamada Comisión Federal de Electricidad (CFE); posee los siguientes parámetros: Voltaje monofásico de 2 hilos,= 115 a 130 VCA, = 60 Hz aproximadamenteY cuya señal visualizada mediante un osciloscopio, se muestra a continuación:


Figura 2. Onda senoidal visualizada en un osciloscopio digital.
(Para expandir, clic sobre la imagen).

  El dimmer conectado a la corriente alterna (CA), permite controlar mediante una perilla (o por un elemento que se desliza), la intensidad luminosa de las lámparas incandescentes o focos, y cuya forma básica de conexión se muestra en la siguiente imagen:

Figura 3. Forma básica de conectar un Dimmer
(Para expandir, clic sobre la imagen).

  Para controlar el brillo, el dimmer limita la corriente hacia el foco utilizando un resistor variable, o hace abrir/cerrar un "interruptor" de estado sólido en determinado tiempo de la señal senoidal, para que la lámpara reciba sólo una porción del voltaje pico, por lo regular en la segunda forma, el circuito consta de un arreglo de resistores, capacitores, diodos y tiristores (normalmente TRIACS, porque conducen la corriente en ambos sentidos), un ejemplo del circuito de un dimmer sencillo se muestra a continuación:

Figura 4. Circuito de un dimmer, utilizando un TRIAC MAC12N.
(Para expandir, clic sobre la imagen).

  La construcción de forma física del circuito anterior, se muestra en la siguiente imagen:


 Figura 5. Circuito de un dimmer ensamblado en un protoboard.
(Para expandir, clic sobre la imagen).

  Y el video de funcionamiento del circuito, es el siguiente:




  1. Detector de cruce por cero (o paso por cero).


  Comenzando con la descripción de las etapas del circuito del dimmer, la primera que se intenta construir es un detector de cruce por cero, que quiere decir ésto; que es un circuito que generará una señal o pulso (que para éste caso tendrá una amplitud de 5VCD), cada vez que la onda senoidal (Figura 1) alcance un voltaje mínimo (aproximadamente 0 VCA), éste pulso le indicará al microcontrolador (bloque de control) que la señal senoidal ha cruzado por cero, y generar un retardo determinado antes de activar un TRIAC (etapa de potencia), para que éste último pase a un estado de conducción, y la carga (foco) perciba un determinado porcentaje de la onda senoidal.

  Para diseñar el detector de cruce por cero, se supondrá lo siguiente:

  1. El detector estará conectado a las terminales + y - de un puente rectificador con diodos (WB152 o el 2W04), y éste último estará conectado al devanado secundario de un transformador reductor de 127 a 9VCA.

  2. El circuito a utilizar para el detector será un optoacoplador matrícula 4N25.

  Por otra parte, el circuito propuesto para el detector es el siguiente:


Figura 6. Circuito propuesto para el detector de cruce por cero.
(Para expandir, clic sobre la imagen).

  Como se observa, el único elemento del circuito cuyo valor no ha sido asignado, es del resistor limitador de corriente (R); para calcular el valor de dicho resistor se considerará que el en el devanado secundario del transformador 9 VCA, por lo que el será. Al pasar por el puente rectificador de diodos,sufre una pérdida, quedando un voltaje menor, el cual se estima mediantePosteriormente, al tener la señal senoidal rectificada, los semiciclos positivos alcanzarán un voltaje pico de 8.102 VCD; y como dicho voltaje se distribuirá entre las terminales de R y el LED del 4N25, se consultan las hojas de especificaciones de éste último, para saber la corriente y el voltaje ( ,) necesarios, para el correcto funcionamiento del LED y poder estimar el valor de R.




Nota: El derecho de autor de ésta hoja de datos pertenece a VISHAY y en éste caso, sólo se usa con fines de información.
Note: The Copyright of this Datasheet belongs to VISHAY and is provided for information only.


  En éste caso, habrá que tomar los valores máximos que marca el fabricante:= 60 mA,= 1.5 V. Y para calcular el valor de R, se empleará la siguiente fórmula (Fórmula No.1):


(Para expandir, clic sobre la imagen).

  Como se ha calculado, el valor de R es de 110 ohms. Para calcular la potencia máxima (cuando el voltaje pico rectificado alcance el máximo) que disipará R, se tiene que (Fórmula No.2)


(Para expandir, clic sobre la imagen).

  La potencia que disiparía R sería de 0.4 W, pero como éste detector de cruce por cero también se espera que pueda conectarse a un transformador de 127 a 12 VCA, el valor de R seleccionado para el circuito final, será de 220 ohms a 1 W. Por lo que el circuito del detector de cruce por cero queda como se muestra a continuación (como se conecta para la simulación):


Figura 7. Circuito final para el detector de cruce por cero.
(Para expandir, clic sobre la imagen).

  A continuación se muestra un video con la simulación del detector, así como su funcionamiento real:



  Los pulsos que se generan procedentes del detector, tienen una amplitud de 5 VCD y una duración aproximada de 880 a 980 microsegundos, como se muestra en la siguientes imágenes:


Figura 8. Señales procedentes del rectificador con diodos (canal 1 del osciloscopio) y del detector de cruce por cero (canal 2 del osciloscopio).
(Para expandir, clic sobre la imagen).


Figura 9. Medida de la duración del pulso procedente del detector de cruce por cero (canal 2 del osciloscopio).
(Para expandir, clic sobre la imagen).

Observaciones: El resistor de 220 ohms a 1W incrementa su temperatura después de 5 minutos de funcionamiento del circuito, por lo que se recomienda cambiar la capacidad de disipar calor a 2W o una capacidad superior. 


  2. Etapa de control.

  La siguiente etapa, que será la encargada de controlar el encendido o "disparo" del TRIAC y también de mostrar en un display de 7 segmentos, los números del 0 al 3 para determinar en que escala de luminosidad se encontrará el foco, éste bloque se intentará construir utilizando un microcontrolador PIC, se sugiere el uso del PIC16F84A o del PIC16F628A, para ello el microcontrolador tendrá las señales distribuidas de la siguiente manera:

1. Botón de reset del sistema (MCLR).
2. Botón de encendido/apagado del foco (RB1).
3. Señal del detector de cruce por cero (RB0).
4. Pines de control para el display de 7 segmentos (RA0 y RA1).
5. Pin para el control de la etapa de potencia (RA2).

  El circuito propuesto para la etapa de control se muestra a continuación:


Figura 10. Circuito de control del dimmer.
(Para expandir, clic sobre la imagen).

  3. Etapa de potencia.

  La etapa de potencia (que será la encargada de energizar el foco), estará constituida por un optoaclopador MOC3011, ésto permitirá tener un aislamiento óptico entre la etapa de control (que funciona con VCD y VCC) y la etapa de potencia (que funciona con VCA); para evitar daños al microcontrolador si es que llegase a presentarse algún problema con el foco.

  El optoacoplador MOC3011, recibirá un pulso procedente del pin RA2 del microcontrolador, para activar (o disparar) un TRIAC MAC12N, y así encender el foco en determinado instante de la onda senoidal.


  El circuito propuesto para la etapa de potencia, es el que se muestra en la siguiente figura:


Figura 11. Circuito propuesto para la etapa de potencia.
(Para expandir, clic sobre la imagen).

  Como se observa en la Figura 11, falta calcular el valor de R13, para ello; se utilizarán los valores máximos del Peak Repetitive Surge Current del MOC3011 y del Gate Trigger Current del MAC12N,  cuyas hojas de especificaciones se muestran a continuación:



Nota: El derecho de autor de ésta hoja de datos pertenece a FAIRCHILD SEMICONDUCTOR y en éste caso, sólo se usa con fines de información.
Note: The Copyright of this Datasheet belongs to FAIRCHILD SEMICONDUCTOR and is provided for information only.




Nota: El derecho de autor de ésta hoja de datos pertenece a ON SEMICONDUCTOR y en éste caso, sólo se usa con fines de información.
Note: The Copyright of this Datasheet belongs to ON SEMICONDUCTOR and is provided for information only.

  Para estimar el valor de R13, se han consultado (22/02/15) las fórmulas y diagramas planteados en los siguientes documentos:

*2013 Corporación Universitaria Autónoma del Cauca 
Autor: Edwin Micolta 
Estudiante de ingeniería Electrónica. 
Revisado y corregido: 
Ing. Francisco Franco
http://archivos.edicy.co/files/Circuitos_disparo.pdf

*Valor del resistor limitador de corriente de compuerta para un TRIAC, en uno de los diagramas propuestos en las hojas de especificaciones del MOC3011 (R = 180 Ohms).

  Por lo que la fórmula empleada para estimar R13 será la siguiente (Fórmula No.3):
Donde:

Resistor de protección contra un exceso de corriente, conectada en serie a la terminal de compuerta (G) del TRIAC MAC12N. Se expresa en Ohms.
(Peak On–State Voltage) Voltaje necesario en las terminales del Foto-TRIAC del MOC3011, para que éste conduzca (se dispare) la corriente eléctrica.
(Gate Trigger Voltage) Voltaje necesario en la terminal de compuerta (G) del TRIAC MAC12N, para que éste último, permita la conducción de la corriente eléctrica.
(Gate Trigger Current) Corriente necesaria aplicada a la terminal de compuerta (G) del TRIAC MAC12N, para que éste último, permita la conducción de la corriente eléctrica.

  Al consultar las hojas de especificaciones del MAC12N y MOC3011 mostradas anteriormente, se toman los siguiente valores := 1.8 V, = 0.78V e = 13 mA. Y se sustituyen en la fórmula anterior:



  El valor  calculado del resistor R13 es de 260 Ohms, por otra parte, en un diagrama de las hojas de especificaciones del MOC3011 sugiere un resistor de 180 Ohms; citando las palabras de algunos de mis conocidos, que dicen: "Algunos ingenieros cucharean los resultados", creo éste caso no será la excepción, ya que considero que el valor de 260 ohms es un valor pequeño, así que se elegirá un resistor de 1 Kilo-Ohm a 1 W.

  El circuito final para la etapa de potencia se muestra a continuación:



Figura 12. Circuito final para la etapa de potencia.
(Para expandir, clic sobre la imagen).

4. Fuente de alimentación.

  El último bloque que será el encargado de suministrar la energía a todo el circuito, será construido de forma sencilla, utilizando un regulador LM7805 (debido a que la mayoría de los componentes del circuito funcionan con 5VCC) con sus correspondientes capacitores, ésto se ha estimado tomando en cuenta los componentes que conforman el dimmer, por lo que el consumo de corriente esperado será menor a 1 Ampere. 

   El circuito de la fuente de alimentación queda como se muestra en la siguiente figura:



Figura 13. Circuito propuesto para la fuente de alimentación.
(Para expandir, clic sobre la imagen).

  Por último, el diagrama final del proyecto se muestra a continuación: 

  Nota: En el diagrama se han hecho modificaciones a los componentes reales seleccionados para que la simulación sea lo más fiel posible a la realidad, para la distribución correcta de pines de los circuitos integrados, se recomienda consultar las hojas de especificaciones (Datasheet) de los mismos.




   En la segunda parte de ésta entrada, se explicará el cómo programar la etapa de control y se muestra el funcionamiento final de todo el circuito. Por falta de tiempo y cansancio, no he todavía concluido al segunda parte, pero en el siguiente link (contiene publicidad)se adjunta la simulación del cruce por cero, el diagrama completo actualizado y un archivo txt que contiene el código para programar el microcontrolador PIC16F1827 del diagrama actualizado, espero les ayude (http://yabuilder.com/QSX).

¡Muchas gracias por leer ésta nueva entrada!

ALF