He diseñado arrancadores suaves utilizando los procesadores PIC16C74A / F77. El cruce por cero puede ser complicado si también tiene que trabajar en entornos ruidosos.
Si no necesita que el procesador esté aislado de la línea, no hay nada de malo en que un par de resistencias de alto valor alimenten un pin de CPU. Usaría un par de diodos shottky para aumentar los diodos de protección interna solo por una cuestión de robustez, pero funcionará bien. Si necesita aislamiento, use un optoaislante de salida de transistor. Preste atención a la velocidad de conmutación del opto y minimice la corriente del colector del transistor para maximizar la velocidad de conmutación.
Habiendo dicho eso, sigamos con el ruido. Si está controlando la fase, cualquier otra cosa que no sea el calentamiento por resistencia, tendrá que lidiar con el ruido, lo que significa que es muy probable que tenga que enfrentar el ruido de cruce cero. No cometa el error de novato de alimentar la entrada de cruce por cero a un pin de interrupción; eso hará que su software se convierta en una masa humeante de maldad cuando el procesador intente lidiar con una gran cantidad de interrupciones. (Hablo por experiencia). Lanzar un filtro de paso bajo más avanzado o RC en la línea solo introducirá el cambio de fase. Si puedes trabajar con eso, genial. Si no (tuve que lidiar con sistemas de 50/60 y 400Hz), entonces tienes que probar otros medios.
En mi propio diseño, me encargué del software al sondear la línea y, esencialmente, realizar una rutina de votación que ignoraba los transitorios. El cambio de fase estaba dentro de lo que podía manejar, era rápido y no se podía ni siquiera en un ruido fuerte. (Probados en una instalación donde quitaron las tapas de filtro de un horno de inducción, ¡nunca antes había visto una línea tan ruidosa!) Si tuviera que rediseñarla, creo que podría intentar una solución externa que involucre una toma única que " trabe "la cruz cero y luego el microcontrolador lo reconocerá antes de que se pueda configurar la siguiente interrupción.
Todo lo dicho, creo que encontrar el cruce con cero real en cualquier situación práctica de manera confiable fue uno de los trucos más complicados del diseño del arrancador suave. Cerrar el bucle de control fue secundario, pero en su mayoría fue solo un ajuste. Parece algo sencillo pero aprendí bastante sobre la diferencia entre la teoría y la práctica durante ese tiempo. :-)
edite para describir la rutina de "votación":
Si recuerdo correctamente, tuve una línea de E / S que era alta cuando la línea estaba por encima de cero y baja cuando la línea estaba por debajo de cero. La rutina de votación simplemente encuestó esa línea y si 2 de las últimas 3 muestras eran iguales, acepté el hecho de que la línea había cruzado cero. Es muy similar al circuito de votación de un UART para detectar la marca y el espacio. La ventaja de un circuito como este es que su cambio de fase es fijo (2 * frecuencia de muestreo) y puede ajustarlo para el tipo de ruido que está experimentando. No recuerdo de antemano lo rápido que fue el sondeo, pero si tuviera que arriesgarme a adivinar, diría 8 kHz, ya que ese número me viene a la mente.