Вы находитесь на странице: 1из 7

Manuales y Currículo

(https://playground.arduino.cc/Main/ManualsAndCurriculum)
Arduino StackExchange
(http://arduino.stackexchange.com)
Configuración y configuración de la
placa
(https://playground.arduino.cc/Main/ArduinoCoreHardware)
Herramientas de desarrollo
(https://playground.arduino.cc/Main/DevelopmentTools)
Arduino en otras fichas
(https://playground.arduino.cc/Main/ArduinoOnOtherAtmelChips)
Interfaz con hardware
(https://playground.arduino.cc/Main/InterfacingWithHardware)
- Salida
(https://playground.arduino.cc/Main/InterfacingWithHardware#Output)
- Entrada
(https://playground.arduino.cc/Main/InterfacingWithHardware#InputTOC)
- Interfaz de usuario
(https://playground.arduino.cc/Main/InterfacingWithHardware#ui)
- Almacenamiento
(https://playground.arduino.cc/Main/InterfacingWithHardware#Storage)
- Comunicación
(https://playground.arduino.cc/Main/InterfacingWithHardware#Communication)
- Fuentes de alimentación
(https://playground.arduino.cc/Main/IntWithHW-
PwrSup)
- General
(https://playground.arduino.cc/Main/InterfacingWithHardware#General)
Interfaz con el software
(https://playground.arduino.cc/Main/InterfacingWithSoftware)
Biblioteca de códigos de usuario
(https://playground.arduino.cc/Main/GeneralCodeLibrary)
- Fragmentos y bocetos
(https://playground.arduino.cc/Main/SketchList)
- Bibliotecas
(https://playground.arduino.cc/Main/LibraryList)
- Tutoriales
(https://playground.arduino.cc/Main/TutorialList)
Sugerencias y errores
(https://github.com/arduino/arduino/issues)
Técnica electrónica
(https://playground.arduino.cc/Main/ElectroInfoResources)
Fuentes para piezas electrónicas
(https://playground.arduino.cc/Main/Resources)
Hardware e iniciativas relacionados
(https://playground.arduino.cc/Main/SimilarBoards)
Arduino Personas / Grupos y sitios
(http://playground.arduino.cc/Main/People)
Exposición
(http://playground.arduino.cc/Projects/ArduinoUsers)
Ideas de proyectos
(http://playground.arduino.cc/Projects/Ideas)
Idiomas
(https://playground.arduino.cc/Main/Languages)

Participar
(https://playground.arduino.cc/Main/Participate)
- Pautas de formato
(https://playground.arduino.cc/Main/Participate#contribrules)
- Todos los cambios recientes
(https://playground.arduino.cc/Site/AllRecentChanges)
- PmWiki
(https://playground.arduino.cc/PmWiki/PmWiki)
- Entrenamiento WikiSandBox
(https://playground.arduino.cc/Main/WikiSandbox)
- Edición básica
(https://playground.arduino.cc/PmWiki/BasicEditing)
- Índice de documentación
(http://www.pmwiki.org/wiki/PmWiki/DocumentationIndex)

Control de fase AC
Un método para controlar la potencia de los circuitos de CA utiliza un TRIAC para encender y apagar a
intervalos precisos que se sincronizan con la señal de CA. Este método se llama control de fase AC. Es el
método que se usa en muchos circuitos de control de potencia con regulador de luz y calentador.

Ver también
http://playground.arduino.cc/Code/ACPhaseControl
(https://playground.arduino.cc/Main/ACPhaseControl)

Circuito
Usando un microcontrolador Arduino con algunos circuitos simples, podemos monitorear la onda de
CA para determinar el momento adecuado para encender y apagar con el TRIAC (se necesita una
resistencia de elevación de 10 kOhm en el pin H11AA1 5). El circuito que solía hacer esto se muestra a
continuación.

OFILE%3ACORE+PROFILE%3APUBLIC+PROFILE%3ACONTACT+OFFLINE&RESPONSE_TYPE=CODE)
El circuito consta de un detector de cruce por cero optoaislado y un circuito disparador optoaislado
para el TRIAC. Los optoaisladores son necesarios para mantener los circuitos de señal de baja tensión
alejados de los circuitos de alimentación y proporcionar un nivel de seguridad apropiado. Como con
todos los circuitos que involucran voltaje de red, asegúrese de saber lo que está haciendo.

teoría de operación
El circuito de detección de cruce por cero proporciona un pulso de 5V cada vez que la señal de CA cruza
cero voltios. Detectamos esto con Arduino y apalancamos las interrupciones para sincronizar el circuito
de disparo precisamente en sincronización con estos eventos de cruce por cero. El método para
controlar la potencia se muestra en el siguiente diagrama.
Una vez que se detecta un cruce por cero, el TRIAC permanece apagado durante un período de tiempo
controlado (t1). Cuanto más tiempo esta vez, menos energía recibe el circuito de CA. Una vez que ha
transcurrido el "tiempo de inactividad", t1, el microcontrolador enciende el TRIAC aplicando un voltaje a
la compuerta (que se muestra en rojo). Una vez encendido, el TRIAC permanecerá encendido incluso
después de que se haya eliminado el voltaje de la compuerta. Se apagará si el voltaje de la compuerta
es cero la próxima vez que la onda de CA cruce a cero. Debido a esto, no es necesario que tengamos
cuidado de apagar el TRIAC cuando la señal de CA vuelva a cero. Todo lo que tenemos que hacer es
garantizar que el TRIAC se apague dentro del período de ½ onda (t3). La duración del pulso de
compuerta (t2) está determinada por un requisito mínimo de la traic. Si este pulso es demasiado corto,
el traic no se disparará Una vez que ocurre el segundo cruce por cero, ya que no hay voltaje en la
puerta, el TRIAC permanece apagado hasta que se active nuevamente en el próximo ½ ciclo. El
resultado neto aquí es que "cortamos" partes de la onda, lo que resulta en una potencia promedio
menor. Esto es esencialmente cómo se logra el control "PWM" de una onda de CA.

We will be using interrupts and the Arduino timer to precisely control the timing of the TRIAC gate. To
get a feel for the time intervals, we need to look at the AC signal and the Arduino clock.

The AC signal (in the US anyway) is 60 Hz. What this means is that the AC signal crosses zero, reaches
peak positive voltage, crosses zero, reaches peak negative voltage and returns to zero 60 times each
second. The period (length of time this takes) is 1/60 or 0.01667 seconds (16.67 milliseconds). A half
cycle (the time between two zero-crossings) occurs in 8.33 milliseconds. This is t3 in the figure above.

The Arduino clock runs at 16 MHz, which is 16,000,000 cycles per second: one clock cycle takes 0.0625
microseconds. A single half cycle of the 60 Hz AC signal contains 133,333 clock cycles. This is important
because we will be determining the time intervals by clock counts in the Arduino code, not by seconds.
There is quite a bit of good information on use of interrupts with the Arduino out on the web so I won’t
cover that in much detail here. Basically the way an interrupt works is that when some event happens
(either internal or external to the microprocessor), the microprocessor immediately stops what it is
doing to “service” the interrupt. This allows the microprocessor to handle very time sensitive events
such as the AC Phase control task here.

Other Resources
Printed circuit board available here: https://batchpcb.com/pcbs/93955
(https://batchpcb.com/pcbs/93955)

HeaterControl.pde
// AC Control V1.1
//
// This Arduino sketch is for use with the heater
// control circuit board which includes a zero
// crossing detect function and an opto-isolated TRIAC.
//
// AC Phase control is accomplished using the internal
// hardware timer1 in the Arduino
//
// Timing Sequence
// * timer is set up but disabled
// * zero crossing detected on pin 2
// * timer starts counting from zero
// * comparator set to "delay to on" value
// * counter reaches comparator value
// * comparator ISR turns on TRIAC gate
// * counter set to overflow - pulse width
// * counter reaches overflow
// * overflow ISR turns off TRIAC gate
// * TRIAC stops conducting at next zero cross

// The hardware timer runs at 16MHz. Using a


// divide by 256 on the counter each count is
// 16 microseconds. 1/2 wave of a 60Hz AC signal
// is about 520 counts (8,333 microseconds).

#include <avr/io.h>
#include <avr/interrupt.h>

#define DETECT 2 //zero cross detect


#define GATE 9 //TRIAC gate
#define PULSE 4 //trigger pulse width (counts)
int i=483;

void setup(){

// set up pins
pinMode(DETECT, INPUT); //zero cross detect
digitalWrite(DETECT, HIGH); //enable pull-up resistor
pinMode(GATE, OUTPUT); //TRIAC gate control

// set up Timer1
//(see ATMEGA 328 data sheet pg 134 for more details)
OCR1A = 100; //initialize the comparator
TIMSK1 = 0x03; //enable comparator A and overflow interrupts
TCCR1A = 0x00; //timer control registers set for
TCCR1B = 0x00; //normal operation, timer disabled

// set up zero crossing interrupt


attachInterrupt(0,zeroCrossingInterrupt, RISING);
//IRQ0 is pin 2. Call zeroCrossingInterrupt
//on rising signal

//Interrupt Service Routines

void zeroCrossingInterrupt(){ //zero cross detect


TCCR1B=0x04; //start timer with divide by 256 input
TCNT1 = 0; //reset timer - count from zero
}

ISR (TIMER1_COMPA_vect) {// comparador coincide con


digitalWrite (GATE, HIGH); // establece la puerta TRIAC en
TCNT1 alto = 65536-PULSE; // ancho de impulso de disparo
}

ISR (TIMER1_OVF_vect) {// timer1 overflow


digitalWrite (GATE, LOW); // apaga la puerta TRIAC
TCCR1B = 0x00; // deshabilita el cronómetro para detener los desencadenantes involuntarios
}

void loop () {// ejemplo de código para ejercitar el circuito

i--;
OCR1A = i; // establece el brillo de registro de comparación deseado.
if (i <65) {i = 483;}
retraso (15);

}
[Obtener código] (https://playground.arduino.cc/Main/ACPhaseControl?action=sourceblock&num=1)

Compartir

HOJA INFORMATIVA

ENTER YOUR EMAIL TO SIGN UP SUSCRIBIR

Aviso de copyright (//www.arduino.cc/en/Main/CopyrightNotice)


Contáctenos (//www.arduino.cc/en/Main/ContactUs)
Sobre nosotros (//www.arduino.cc/en/Main/AboutUs)
Carreras (//www.arduino.cc/Careers)
© 2017 Arduino

(https://www.facebook.com/official.arduino)
(https://twitter.com/arduino)
(https://plus.google.com/+Arduino)
(https://www.instagram.com/arduino.cc/)
(https://github.com/arduino/)
(https://www.flickr.com/photos/arduino_cc)
(https://www.youtube.com/user/arduinoteam)

Вам также может понравиться