por MOR_AL » 20 Fev 2010 18:23
Bom.
Você pode implementar um PWM em um pino.
1 - Primeiro você tem que saber a relação entre a largura de um pulso e a tensão. Na realidade é a relação Ton / T (delta). É algo assim:
v = Vmáx * delta. Vmáx = Vcc = 5V --> delta = v / 5
Para delta máx --> Ton = T --> delta máx = T / T = 1 --> v = 5V
Para delta mín --> Ton = 0 --> delta mín = 0 / T = 0 --> v = 0V
2 - Considere a equação de uma senóide. v_sen = A * sen (teta). No nosso caso (em um uC com alimentação entre 0 e 5V), a senóide NÃO tem valores negativos, então, deve-se acrescentar um valor positivo à equação. Este valor vai fazer com que a senóide não tenha valores negativos:
v_sen = A * sen(teta) + A --> v_sen = A[1 + sen(teta)]
3 - Agora basta saber que o valor mínimo é zero e o máximo é 5 volts.
v_sen_mín = 0 = A[1 + sen(teta)]. O valor de A Não pode ser zero, logo, quando a equação der zero volts, significa que o ângulo teta vale 270º, ou 3pi / 4.
O valor máximo vale 5V, quando teta vale 90º, ou pi / 4. Logo:
v_sen = 5 = A[1 + sen(90º)] = A[1 + 1] = 2A ---> A = 5 / 2--> A = 2,5V
A equação fica então:
v_sen = 2,5 * [1 + sen(teta)]
4 - Agora que você conhece a equação do seno (v_sen), crie uma tabela com n valores. Esta tabela relaciona o delta com o ângulo teta.
Como delta = v / 5, substituindo o v por v_sen, a nova relação fica:
delta = v_sen / 5 --> delta = A[1 + sen(teta)] / 5
Dê valores de teta e calcule o delta correspondente.
Por exemplo: (Aí vai depender da sua precisão) Se você escolher valores de teta espaçados de apenas um grau, vai ter mais precisão, mas também vai ter mais valores de delta, o que leva a muitos pontos que vão formar a sua senóide. Logo, para criar um ciclo, então vai ter que fazer 360 deltas, o que implica em mais processamento. Isso leva inevitavelmente a maiores períodos, ou menores freqüências. Escolha variações de teta de 5º. Acho que é bom. Depois você pode alterar.
Com isso você terá [(360 - 0) / 5] + 1 valores, ou 73 valores.
5 - Note que ainda não falamos da frequência. Vamos falar agora.
Você cria uma senóide, gerando os 73 pulsos que variam no tempo. Estas larguras de pulsos estão relacionadas com a relação Ton / T, ou delta. Repare que o seu delta varia de 0 a 1. Mas quantos valores de delta existirão? Resposta 73. Porquê? Porque vai ter um valor de teta para cada valor de ângulo escolhido por você!
Bom. Se você tem 73 valores, e o maior deles (o um) vai corresponder ao período T, então você tem que relacionar o período com o seu tempo de processamento. Explico melhor! Imagina que você quer fazer uma senóide com 1MHz. O período seria 1us. Como construir um monte (73) de pulsos, e com largura variável, que esteja contido em 1us? Seu processador teria que ter um clock de, chutando, 1GHz. Imagine que estes pulsos fossem fixos, com delta valendo 0,5. Isso daria um período de uns e zeros de T(1 ou 0) = 1us / (2 * 73) = 6,9ns!!! Agora, como os seus pulsos variam no tempo, estes 6,9ns seriam ainda reduzidos. Pense ainda que são necessárias algumas instruções para buscar estes valores da tabela. Então o seu uC precisaria ser mais rápido ainda!!!
Conclusão: Este processo só é válido se você precisar construir senóides de baixas freqüências.
Você teria ainda que, na saída destes pulsos incluir um filtro, que não é simples, pois depois de tudo isso, este filtro teria que deixar passar a senóide com pouca atenuação, mas bloquear (e muito) as outras freqüências que estão presentes nesse trem. E essas freqüências não estão longe (no espectro de freqüências) da frequência de sua senóide. Caso contrário, sua senóide teria uma série de picos.
Mas não se desespere. A eletrônica analógica está mais relacionada com a natureza que a digital.
Você pode construir uma senóide com amplificadores operacionais e diodos. A precisão chega normalmente a 1%. E tem mais. Alterando apenas o valor de um potenciômetro, eu já fiz a frequência variar mais de 1000 vezes. Mas para isso foi necessário aceitar uma distorção maior. A menos que fosse incluído um circuito de correção de off set.
A outra opção é fazer um contador em anel e os valores acessam a memória não volátil. Nos 8 bits de saída coloque um conversor digital analógico. Escolha o simples. O tal da malha R-2R. O filtro na saída deste conversor seria bem simples. Mas em todos os casos de solução com uso de eletrônica digital, você teria que implementar um filtro analógico. Se sua senóide tiver frequência variável, então este filtro também teria.
Bom.
Boa sorte.
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