Página 1 de 1

Gerar PWM

MensagemEnviado: 25 Set 2010 23:12
por Guri
Olá a todos,


É o seguinte:

Estou com uma dúvida em relação a frequencia ideal para um PWM que estou fazendo via software.

Então eu fiz uma amostragem com as seguintes caracteristicas:

Sample rate = 22.050hz
Resolução do sampled = 16 bits
Mono

Eu estou enviando para um DAC de 8 bits do tipo paralelo r2r e funciona corretamente a reprodução da wave.

Agora eu queria enviar os dados para o PWM, porém qual seria a frequencia que o PWM deveria ser sintonizado?

Obrigado,

Re: Gerar PWM

MensagemEnviado: 26 Set 2010 01:55
por msamsoniuk
a solucao direta seria usar um pwm fixo de 16 bits e, assim, o periodo completo de cada ciclo seria de 65536 clocks. mas multiplicando 22050Hz por 65536 vc teria um total de 1.4GHz de clock no pwm para poder reproduzir 22050 amostras com precisao de 16 bits e isso eh elevado demais.

daih disso partem tres solucoes diferentes.

uma solucao simples seria diminuir o tamanho do contador pwm. assim, para um contador de 8 bits vc precisaria de uns 5MHz, para 9 bits uns 11MHz, para 10 bits uns 22MHz e assim por diante. supondo que vc fosse operar a 22MHz, vc descartaria 6 bits de cada amostra.

a solucao complicada seria usar taxa de amostragem variavel e tamanho do contador pwm variavel. supondo um clock de 22MHz, vc poderia variar o comprimento do contador pwm para cobrir diferentes bandas com diferentes tamanhos de contador, variando de 16 a 8 bits por exemplo.

neste caso, vc teria a seguinte divisao:

16 bits: ateh 344.531 Hz
15 bits: ateh 689.062 Hz
14 bits: ateh 1378.12 Hz
13 bits: ateh 2756.25 Hz
12 bits: ateh 5512.5 Hz
11 bits: ateh 11025 Hz
10 bits: ateh 22050 Hz
9 bits: ateh 44100 Hz
8 bits: ateh 88200 Hz

e uma solucao nao muito complicada nem muito simples seria usar o pwm fixo em 8 bits com 88200Hz de taxa de amostragem e compensar a diferenca atraves de difusao de erro. trata-se de um processo de quantizacao, onde vc parte de uma amostra de 16 bits, trunca para 8 bits e entao armazena o resto da truncagem em um contador de erro, q eh somado a proxima amostra. se o erro acumulado for muito grande, a quantizacao da proxima amostra sera modificada de modo que a media entre sucessivas amostras fica mais proximo ao valor original.

por isso eh interessante usar uma taxa de amostragem maior, mas nao precisa efetivamente trabalhar com um volume maior de dados. ao inves disso, pode usar 22050Hz e quadriplicar as amostras. mesmo usando amostras repetidas, o desvio em funcao do erro acumulado ira fazer as amostras terem valores diferentes.

por exemplo, se vc tem varias amostras com valor 256, a truncagem de 16 para 8 bits vai resultar em 1 sempre e nenhum residuo. mas se vc tiver um valor de, digamos, 384, a truncagem tb sera de 1, porem sobra um residuo de 128. assim no proximo ciclo, digamos que seja de 384 tb, sera somado o valor 384 mais o residuo de 128, o que totaliza 512. soh que nesse caso a truncagem tera valor 2 e o residuo sera zero.

o que vai ocorrer eh que a saida ficara variando entre 1 e 2 continuamente, o que sera efetivamente percebido como um valor 1.5. de certa forma, essa tecnica de difusao de erro equivale ao metodo complicado e efetivamente vai simular uma precisao pwm variavel para diferentes bandas, porem sem complicar o hardware.

Guri escreveu:Olá a todos,

É o seguinte:

Estou com uma dúvida em relação a frequencia ideal para um PWM que estou fazendo via software.

Então eu fiz uma amostragem com as seguintes caracteristicas:

Sample rate = 22.050hz
Resolução do sampled = 16 bits
Mono

Eu estou enviando para um DAC de 8 bits do tipo paralelo r2r e funciona corretamente a reprodução da wave.

Agora eu queria enviar os dados para o PWM, porém qual seria a frequencia que o PWM deveria ser sintonizado?

Obrigado,

MensagemEnviado: 26 Set 2010 11:26
por Djalma Toledo Rodrigues
Uma boa solução, e bem simples, para obter o PWM é o Conversor de 1 Bit

ou Conversor Delta Sigma

Imagem
Diagrama em sua forma mais simples

O Estágio 1 Bit DAC se resume apenas a um RC

O Estagio Difference, o primeiro estagio, deve ser um Subtrator e não
um Comparador como errôneamente se vê por ai.

A Saída do Conversor (Bitstream Out) vai para o µC.


Aumentando o número de Integradores diminui o Ruido da Conversão,
veja a figura:

Imagem
Block Diagram of a Second Order Analogue Delta Sigma Modulator

Vale o mesmo para a Frequência de Clock (Oversampling)

------------
Fonte:http://www.beis.de/Elektronik/DeltaSigma/DeltaSigma.html

DJ

MensagemEnviado: 26 Set 2010 16:12
por msamsoniuk
coincidentemente eu fiz exatamente esse primeiro conversor que vc citou e funcionou muito bem no simulador de circuitos integrados:

http://framework.sourceforge.net/pics/u ... _TE823.pdf

Djalma Toledo Rodrigues escreveu:Uma boa solução, e bem simples, para obter o PWM é o Conversor de 1 Bit

ou Conversor Delta Sigma

Imagem
Diagrama em sua forma mais simples

O Estágio 1 Bit DAC se resume apenas a um RC

O Estagio Difference, o primeiro estagio, deve ser um Subtrator e não
um Comparador como errôneamente se vê por ai.

A Saída do Conversor (Bitstream Out) vai para o µC.


Aumentando o número de Integradores diminui o Ruido da Conversão,
veja a figura:

Imagem
Block Diagram of a Second Order Analogue Delta Sigma Modulator

Vale o mesmo para a Frequência de Clock (Oversampling)

------------
Fonte:http://www.beis.de/Elektronik/DeltaSigma/DeltaSigma.html

DJ

MensagemEnviado: 27 Set 2010 14:52
por Djalma Toledo Rodrigues
É o Circuito esta em Loop

Gera o Pulso com largura proporcional a Tensão de entrada sobre o Contrôle da
Tensão realimetada através do 1 Bit DAC ( Simples RC).

É, em princípio, semelhante ao Controlador PID

DJ