Puedes intentar buscar el detector de cruce por cero en Google. Se puede hacer con un transformador u optoacoplador.
http://www.edn.com/design/analog/4368740/Mains-driven-zero-crossing-detector-uses-only-a-few-high-voltage-parts
https://sound-au.com/appnotes/an005.htm
Luego configuras una ISR en cada evento de disparo que inicie una nueva ISR temporizada, o simplemente tienes una interrupción de tiempo cada 200us y cuentas para cada retardo de fase de salida requerido, en la ISR de ZC reinicias los contadores.
ISR_ZC():
1. phaseCounter = 0;
2. Todas las salidas apagadas
3. Establecer interrupción en el momento en que el ángulo de fase es 160 grados - ISR_Off()
4. Habilitar la interrupción ISR cada 200us - ISR_Cnt
ISR_Cnt():
phaseCounter = phaseCounter + 1;
si phaseCounter >= setCnt1 entonces ouput1 = ON;
si phaseCounter >= setCnt2 entonces ouput2 = ON;
si phaseCounter >= setCnt3 entonces ouput3 = ON;
ISR_Off():
1. Deshabilitar ISR_Cnt
2. Todas las salidas apagadas