por MOR_AL » 11 Jan 2008 15:49
Olá Fábio_
Se os períodos Ton de seus PWM variam entre 0% e 90%, você tem pelo menos 10% (durante Toff) para trabalhar, correto?. 10% de T = 1/200 dão 500us. Se o seu PIC16F877 trabalhar com cristal de 20MHz, você tem cerca de 2000 instruções dentro deste intervalo para atualizar o Ton.
Use um timer para gerar os pulsos de 200Hz e 8 bytes para guardar os instantes de mudança de cada PWM de '1' para '0'. Seu sistema deverá ficar monitorando o timer e verificando se a contagem foi maior (ou menor) que os valores guardados nos 8 registros. Estes registros podem possuir um fator de escala múltiplo de 2. Assim você consegue comparar o contador de 16 bits com o seu valor gravado no byte. Leia o valor do contador e shifte os dois bytes, para a direita, tantas vezes quantas forem necessárias e faça a operação de subtração com 8 bits "SUBWF". Se o resultado for positivo ou negativo (dependendo do contador. Acho que a contagem é sempre de incremento), então o pino de saída deve ser "zerado". Na interrupção do timer todos os pinos do PWM tem que ir para '1'. Em tempo, o limite inferior do delta nos PWMs não chega a ir para zero, né?
Se as 2000 instruções não forem suficientes para atualizar, procure fazer a rotina de atualização em assembler, que não é difícil. Caso ainda assim não for possível, não atualize todos os PWMs dentro deste intervalo. Atualize apenas 4 e deixe para atualizar os outros 4 no ciclo seguinte. Se, ainda assim não der tempo, atualize apenas um PWM por ciclo. Esta solução tem seu preço. A velocidade de atualização.
Por fim, você pode fazer um PWM com um 555 e um operacional. A entrada é um sinal analógico e a saída é um PWM.
Para esta frequência que você quer, me parece que não há necessidade de tanta precisão, né? Talvez uma destas opções lhe ajudem.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain