Eu projetei soft starters usando os processadores PIC16C74A / F77. O cruzamento de zero pode ser complicado se você também precisar trabalhar em ambientes ruidosos.
Se você não precisa que o processador seja isolado da linha, não há nada de errado com alguns resistores de alto valor alimentando um pino da CPU. Eu usaria alguns diodos shottky para aumentar os diodos de proteção interna apenas por uma questão de robustez, mas funcionará bem. Se você precisar de isolamento, use um optoisolador de saída de transistor. Preste atenção à velocidade de comutação do opto e minimize a corrente do coletor do transistor para maximizar a velocidade de comutação.
Dito isto, vamos ao barulho. Se você estiver controlando outra coisa que não seja aquecimento resistivo, terá um ruído para enfrentar, o que significa que é muito provável que você tenha um ruído de cruzamento nulo. Não cometa o erro de novato de alimentar a entrada de cruzamento zero para um pino de interrupção; isso transformará seu software em uma massa fumegante de maldade quando o processador tentar lidar com um zilhão de interrupções. (Falo por experiência própria.) Jogar um RC ou um filtro passa-baixo mais avançado na linha apenas introduzirá a mudança de fase. Se você pode trabalhar com isso, ótimo. Caso contrário (eu tive que lidar com sistemas 50/60 e 400Hz), você deve tentar outros meios.
Em meu próprio projeto, cuidei disso em software pesquisando a linha e essencialmente fazendo uma rotina de votação que ignorava os transientes. A mudança de fase estava dentro do que eu conseguia suportar, era rápida e não cagava nem com barulho pesado. (Testado em uma instalação em que eles removeram as tampas de filtro de um forno de indução, nunca vi uma linha tão barulhenta antes!) trava "a cruz zero e o microcontrolador reconheceria isso antes que a próxima interrupção pudesse ser definida.
Dito isso, acho que encontrar de maneira confiável o cruzamento de zero real em qualquer situação prática foi um dos aspectos mais complicados do design do soft starter. Fechar o loop de controle era secundário, mas na maioria das vezes era apenas sintonia. Parece uma coisa absolutamente simples de fazer, mas aprendi um pouco sobre a diferença entre teoria e prática durante esse período. :-)
edite para descrever a rotina de "votação":
Se bem me lembro, eu tinha uma linha de E / S alta quando a linha estava acima de zero e baixa quando a linha estava abaixo de zero. A rotina de votação simplesmente pesquisou essa linha e, se 2 das 3 últimas amostras eram iguais, eu aceitei o fato de que a linha havia cruzado zero. É muito semelhante ao circuito de votação do UART para detectar marcas e espaço. A vantagem de um circuito como esse é que sua mudança de fase é fixa (taxa de amostragem de 2 *) e você pode ajustá-lo para o tipo de ruído que está enfrentando. Não me lembro de antemão como a votação foi rápida, mas se eu arriscasse um palpite, diria 8kHz, pois esse número fica na minha mente.