He diseñado arrancadores suaves con 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. Utilizaría un par de diodos shottky para aumentar los diodos de protección interna solo por cuestión de robustez, pero funcionará bien. Si necesita aislamiento, use un optoaislador 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.
Dicho esto, pasemos al ruido. Si está controlando la fase con otra cosa que no sea el calentamiento resistivo, tendrá que lidiar con el ruido, lo que significa que es muy probable que tenga que lidiar con el ruido de cruce por cero. No cometas el error de novato de alimentar la entrada de cruce por cero a un pin de interrupción; eso convertirá su software en una masa de maldad humeante cuando el procesador intente lidiar con miles de interrupciones. (Hablo por experiencia). Lanzar un RC o un filtro de paso bajo más avanzado en la línea solo introducirá el cambio de fase. Si puedes trabajar con eso, genial. Si no (tuve que lidiar con sistemas 50/60 y 400Hz), entonces tienes que probar otros medios.
En mi propio diseño, me ocupé de ello en el software sondeando la línea y esencialmente haciendo una rutina de votación que ignoraba a los transitorios. El cambio de fase estuvo dentro de lo que pude manejar, fue rápido y no funcionaría incluso con mucho ruido. (Probado en una instalación donde quitaron las tapas de los filtros 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 probar una solución externa que implicara un disparo único que " bloquear "el cruce por cero y luego el microcontrolador lo reconocerá antes de que se pueda establecer la próxima interrupción.
Dicho todo esto, creo que encontrar confiablemente el cruce por cero real en cualquier situación práctica fue una de las partes más complicadas del diseño de arranque suave. Cerrar el bucle de control fue secundario, pero en su mayoría fue solo un ajuste. Parece algo muy simple de hacer, pero aprendí bastante sobre la diferencia entre teoría y práctica durante ese tiempo. :-)
editar para describir la rutina de "votación":
Si recuerdo correctamente, tenía 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 sondeó 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 UART para detectar marcas y espacios. El beneficio de un circuito como este es que su cambio de fase es fijo (frecuencia de muestreo de 2 *) 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 adivinar, diría 8kHz, ya que ese número se me viene a la mente.