Estoy haciendo un circuito que controla una carga para TRIAC, con detección de cero. Siempre que he probado el circuito, independientemente de lo que enviaba desde el microcontrolador, el TRIAC siempre enviaba toda la corriente a la carga.
Cuando miré un osciloscopio para la detección del cero, me di cuenta de que sólo detectaba el cero una vez en una onda completa (no dos). Investigué el componente que estaba utilizando y me di cuenta de que el 4N35 sólo tiene un LED, así que como antes no rectificaba mi onda, sólo detectaba la parte positiva de la misma.
No encuentro ningún circuito integrado que tenga dos LEDs en mi ciudad, así que decidí cambiar el software. Esta es la función que he estado utilizando cuando capta la interrupción:
int dimtime = (65*dimming); // For 60Hz => 65
usleep(dimtime); // Wait for start TRIAC
digitalWrite(AC_LOAD1, HIGH); // Start TRIAC
usleep(8.33); // Delay TRIAC
digitalWrite(AC_LOAD1, LOW); // Turn off
Este 65 vino de: 1 onda completa de 60Hz = 1/60 = 16.6ms Llegará al punto cero en: (60Hz) -> 8,3ms (1/2 ciclo) 8,3ms = 8300us (8300us - 8,33us) / 128 = 65 (Aproximadamente) (y 128 fue la cantidad de pasos que dividí)
En mi país, tengo 220V y 60Hz para AC.
Mi pregunta es: ¿cómo puedo cambiar mi código para controlar el TRIAC detectando el cero sólo en el lado positivo de la onda? ¿Es posible?
Con este código por ahora, cuando envío 128, simplemente deja pasar la onda completamente, y cuando digo 2, por ejemplo, la onda de salida sale toda "mal", sin seguir la onda AC.