Sunteți pe pagina 1din 10

Detector cruce por cero

Introducción

Muchos circuitos electrónicos operan con doble polaridad, el detector de cruce por cero,
muestra cuando se produce el cambio de polaridad. Los detectores de cruce por cero se
utilizan para detectar los tipos de señales, o diferentes significados de señales. Algo muy
simple sería considerar una señal que 'en su parte positiva' indicará un uno y en su parte
negativa un cero. El detector de cruce por cero es la parte del circuito de detección para
determinar si se ha recibido un 'uno' o un 'cero'. Con señales analógicas los detectores de
cruce por cero operan con formas de ondas mucho más variantes que las del caso digital,
se pueden utilizar para determinar el tipo de la forma de onda, el nivel promedio de la señal,
ayudar a integrar o diferenciar señales, etc.

Ilustración 1. Señal sinodal.

Se observa que esta señal posee dos semiciclos uno donde se considera un voltaje positivo
y uno negativo. En algunos casos y para ciertas aplicaciones es necesario detectar el cambio
de polaridad y esto se hace cuando la señal cruza por cero. En la transmisión de señales
digitales en la corriente alterna, o AC, es muy difícil el tratamiento, sin la asistencia de un
detector de cruce por cero. En una gráfica de ondas, como se ve en la ilustración 1, el cruce
por cero es la línea recta que atraviesa la onda. En electrónica de potencia, el cruce por cero
identifica donde la función de onda cambia de positivo a negativo o viceversa. En un
interruptor atenuante de luz, por ejemplo, un detector de cruce por cero permite ajustes
del nivel de poder en la corriente eléctrica, ya que esos puntos no tienen voltaje. La
interrupción de la corriente en cualquier otro punto del circuito eléctrico crea un pico de
poder potencialmente dañino.
Marco teórico

¿QUÉ ES UN H11AA1?

El H11AA1 es un detector de cruce por cero (zero crossing), un dispositivo que emite un
pulso cuando una señal de tensión pasa por 0V. Por supuesto, podemos conectar un
detector de paso por cero a un procesador como Arduino. Otro uso frecuente es determinar
el momento para conmutar una carga, por ejemplo, mediante un relé o un relé de estado
sólido. Las cargas deberían ser conectadas y desconectadas únicamente cuando la tensión
atraviesa el cero en sentido ascendente. De lo contrario estaríamos realizando la conexión
con la carga en tensión lo que provoca la generación de armónicos y, posiblemente, la
reducción de la vida útil de los componentes. Los detectores de paso por cero como el
H11AA1 también son necesarios para realizar una regulación de potencia (dimmer) con un
SSR, por ejemplo, para regular la intensidad de la luz de una bombilla o la velocidad de giro
de un motor. Es necesario sincronizar la señal de disparo del SSR con la frecuencia de red,
o y aplicar un desfase temporal entre el paso por cero y el disparo, o provocaremos
parpadeos en la carga.

Ilustración 2. H11AA1 y su composición.


¿CÓMO FUNCIONA EL H11AA1?

El H11AA1 es un optoacoplador bidireccional, compuesto por dos LED de GaAr junto con un
fototransistor NPN en un único integrado DIP de 6 pins. Cuando cualquiera de dos LED emite luz, el
fototransistor está en conducción. Únicamente estará en corte cuando ambos LED estén apagados.

Por tanto, el H11AA1 nos permite conectar una corriente alterna en el principio primario. El
secundario se comportará como un interruptor cerrado excepto cuando la tensión en el primario
inferior a una tensión próxima a 0V, que se comportará como interruptor abierto.
Ilustración 3. Voltaje de la red vs salida del detector de cruce por cero con ARDUINO Y OPTOACOPLADOR.

ESQUEMA DE MONTAJE

Montaje 1.

Por un lado, conectamos la señal en la que queremos detectar los pasos por cero a los terminales
A/C y C/A, que controlan los LED del optoacoplador. Deberemos añadir en serie resistencias que
limiten la corriente que atraviesa los LED.

Deberemos ajustar el valor de estas resistencias a le tensión que estemos empleando. Vimos como
calcular este valor en la entrada Conectar un LED con Arduino. Por ejemplo, para una tensión de
230VAC podemos usar una resistencia de entre 22K-47K de 2W.

Por otro lado, conectamos el secundario a una entrada digital cualquiera de Arduino. Si
empleamos la resistencia interna de Pull-Up, no necesitaremos ningún componente adicional para
conectar el secundario a Arduino.

Ilustración 4. Conexión del H11AA1.


Ilustración 5. Puerto de conexión al Arduino.

CÓDIGOS

 LECTURA DEL ESTADO

En el primer ejemplo, aprendemos a leer el estado del H11AA1 con las entradas digitales de
Arduino, como si fuera un pulsador.

const int inputPin = 2;


1
2
int value = 0;
3
4
void setup() {
5
Serial.begin(9600);
6
pinMode(inputPin, INPUT_PULLUP);
7
}
8
9
void loop(){
10
value = digitalRead(inputPin); //lectura digital de pin
11
12
//mandar mensaje a puerto serie en función del valor leido
13
if (value == HIGH) {
14
Serial.println("Encendido");
15
}
16
else {
17
Serial.println("Apagado");
18
}
19
delay(1000);
20
}
21

 MEDIR LA FRECUENCIA CON INTERRUPCIÓN

En este ejemplo, realizamos la lectura del H11AA1 con el uso de interrupciones, y medimos la
frecuencia entre pulsos.
1 // period of pulse accumulation and serial output, milliseconds
2 const int inputPin = 2;
3 const int MainPeriod = 100;
4 long previousMillis = 0; // will store last time of the cycle end
5
6 volatile unsigned long previousMicros=0;
7 volatile unsigned long duration=0; // accumulates pulse width
8 volatile unsigned int pulsecount=0;
9
10 // interrupt handler
11 void freqCounterCallback()
12 {
13 unsigned long currentMicros = micros();
14 duration += currentMicros - previousMicros;
15 previousMicros = currentMicros;
16 pulsecount++;
17 }
18
19 void reportFrequency()
20 {
21 float freq = 1e6 / float(duration) * (float)pulsecount;
22 Serial.print("Frec:");
23 Serial.print(freq);
24 Serial.println(" Hz");
25
26 // clear counters
27 duration = 0;
28 pulsecount = 0;
29 }
30
31 void setup()
32 {
33 Serial.begin(19200);
34 pinMode(inputPin, INPUT_PULLUP);
35 attachInterrupt(digitalPinToInterrupt(inputPin), freqCounterCallback, RISING);
36 }
37
38 void loop()
39 {
40 unsigned long currentMillis = millis();
41 if (currentMillis - previousMillis >= MainPeriod)
42 {
43 previousMillis = currentMillis;
44 reportFrequency();
45 }
46 }

Montaje 2.

En este montaje se ve, en los terminales A y B la conexión de la corriente alterna. A fase y B Neutro.
La resistencia 1 puede variar entre 33k y 100k (2 W) es usada como protección. R2 (Pull UP) que va
a Vcc= 5V y R2=10K.
Ilustración 6. ZERO CROSS DETECTION.

Ilustración 7. Valores para ejemplo teórico.

En la entrada recibimos los 220VAC mediante un par de resistencias, para limitar la intensidad de
corriente, ya que solo queremos detectar el paso por cero de la tensión. Cuando la tensión de
entrada cae a 0, los diodos se apagan ambos y el transistor entra en corte lo que eleva a 5V (Por la
resistencia de pull up R3) en el conector 5. En cuanto la tensión de entrada alcance un valor mínimo
un diodo hará que el transistor entre en conducción y la señal del conector 5 caerá a 0V, y se
obtendrá algo así:
Ilustración 8. Tensión de entrada vs tensión de detección de cruce por cero.

Como la corriente alterna en Europa es de 50HZ, eso significa que un ciclo completo dura: 1/50 =
20 ms (1/60 = 8.5 ms en América).

Ilustración 9. Imagen del montaje

PROGRAMA DE CONTROL

Una vez que hemos montado el circuito de paso por cero, es de lo más sencillo, usar una interrupción
con Arduino para detectarlo.

void setup()

{ pinMode(2, INPUT_PULLUP);

Serial.begin(115200);

attachInterrupt(0, Zero_Cross, FALLING) ;

}
Metemos la señal del detector de paso por cero a la puerta digital 2 de Arduino y hacemos un
attach de la interrupción 0 (O sea el pin 2, recordar que Arduino tiene sus manías). Como el Pull up
R3 nos mantiene la tensión alta hasta que detecta el paso por cero, vamos a usar un FALLING
como trigger de la interrupción y llamamos a una función CallBack llamada Zero_cross. Lo que va a
hacer la función de servicio de la interrupción es simplemente incrementar un contador para
controlar el número de disparos:

void Zero_Cross()

{ contador++ ; }

Y ahora solo tenemos que controlar el número de pasos por cero en digamos un segundo por
ejemplo:

void loop()

{ if ( millis()-t >= 1000)

{ Serial.println(contador) ;

t = millis() ;

contador =0 ;

}
Datasheet h11AA1

Bibliografía.

https://www.prometec.net/zero-crossing-detection/

https://www.luisllamas.es/arduino-cruce-por-cero-h11aa1/
http://pdf1.alldatasheet.com/datasheet-pdf/view/3037/MOTOROLA/H11AA1.html

S-ar putea să vă placă și