Controlar frequencia de uma senoide

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor MOR_AL » 06 Set 2010 16:08

Guri escreveu:oi moral e dj, muito obrigado pela atenção de vocês.

Então moral se eu entendi você esta sugerindo em seu diagrama elétrico utilizar um PLL é isso mesmo, tendo o pic como controlador do laço? ....

Não é um PLL não.
O circuito funcionaria da seguinte maneira.
CI1 (comparador), C1, R3, R2 e Q1 formam um gerador de onda quadrada na saída do comparador e um gerador de onda triangualr sobre C1.
A onda quadrada é limitada em amplitude por meio de R1, D1 e o zener. Isso condiciona o sinal na entrada do pic para tensões dentro da especificação do PIC. O PIC vai ler essa frequência e comparar com a desejada por você. A frequência desejada pode ser setada por um circuito com chaves e LCD para auxiliar na setagem da frequência.
O fet Q1, que pode ser também um CI mosfet do tipo 40xx, atua como um resistor variável, controlado por uma tensão contínua. Com isso você pode alterar a frequência da onda quadrada e triangular. R3 limita o valor máximo da resistência, que corresponde ao valor mínimo da frequência, e R2 limita o valor mínimo da resistência, que limita a maior frequência. O fet altera o valor da resistência de realimentação para o oscilador oscilar entre 1kHz e 2kHz.
O PIC lê a frequência de oscilação (na entrada que tem R1) e compara com a frequência desejada. Se a frequência de oscilação for maior que a desejada, então ela deve ser reduzida, diminuindo a tensão no fet, que aumenta o resistor equivalente de realimentação. O contrário também é verdadeiro.
A tensão no fet tem que ser contínua (em pequenos intervalos de tempo, tipo alguns segundos) para uma determinada frequência. Alterações da frequência devido a variações de temperatura ou outras, são compensadas pela alteração dessa tensão. Note que é um circuito realimentado negativamente, então as correções serão automáticas.
A senóide é obtida através da saída de CI2, que é um deformador da onda triangular para onda senoidal. Já fiz algo parecido (acrescentei mais dois diodos e um resistor no ramo de realimentação de CI2) e obtive distorção menor que 1% na senóide.
Eu pensei em colocar um PWM, fornecido pelo PIC, na entrada de R8, mas teria problema de nível de sinal alternado na saída do filtro, formado por R8 e C2. Então um circuito R-2R teria que estar entre a saída do PIC e a entrada do capacitor C2. R8 seria a resistência equivalente ao circuito R-2R. Com isso, você elimina o jitter formado por uma má filtragem em uma solução com sinal PWM.
O sinal no capacitor C2 seria condicionado via CI3, para a entrada do fet.
Como você precisaria de 101 valores de frequências ((2000 - 1000) / 10 +1), então você precisaria de, no mínimo, 101 valores de tensão para ajustar a frequência. Como, dentro de dois valores consecutivos de frequência, precisaria existir outros valores para o ajuste fino da frequência, sugiro usar um CDA de 10 bits, que possui 1024 valores. Isso permite que entre cada dois valores de frequências consecutivas, existam 9 valores intermediários, para ajuste fino.
Para maior precisão, ainda, você poderia fazer:
1 - Ler mais de um ciclo da onda quadrada (N ciclos) e dividir pelo número de ciclos lidos (N). Aí você terá a média, que fornecerá maior precisão.
2 - Introduzir uma chave que alterasse o valor de R3 (ou R2). Com isso você teria esses 1024 valores de tensão em uma faixa reduzida de frequências, o que equivale a aumentar (multiplicar) os 1024 valores do CDA.

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
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor renatokodaira » 06 Set 2010 16:36

So que o Professor atirou no que viu e acertou no que nao viu ! hehehee

Duvido que a intenção dele foi essa... Duvido mesmo.


Concordo com vc Guest. Senao ele teria pedido passos de 1Hz e nao de 10Hz e um range bem maior do que 1kHz a 2kHz. Eu pediria um gerador de audio (20Hz a 20kHz em passos de 1Hz) ou mesmo de funçoes (seno, triangulo, dente de serra, pois batsa trocar a tabela com as amplitudes).
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Guri » 06 Set 2010 16:56

Caramba Renato, você deu uma aula didática, vou mostrar isso para o professor e se funcionar o mérito será seu, inclusive na ROTINA.

Se eu entendi então eu não preciso dar espaço de tempo entre os 256 valores da tabela para controlar a frequencia final e sim devo fazer essa matemática (65536 (esse é o valor máximo do ACUMULADOR, certo?)/ 2000 (esse valor é o valor da frequencia, certo?)) o resultante desta conta eu pego o 8MSB e puxo um valor da tabela de 256 posições e em seguida somo o valor do incremento do ACUMULADOR que no caso é 2000 ao resultado que no caso é 2000 também e no próximo loop será 4000 + os 2000 da frequencia, certo?...

Interessante esse método se eu entedi corretamente e me corrija se houver erro na interpretação por favor! Eu não preciso então ler os 256 pontos da tabela para gerar a senoide e sim ler alguns pontos desta tabela, assim consigo manter a senoide e com um tempo de interrupão fixo porém variando a frequencia da mesma, estou admirado!

Agora com base no que você me ensinou me sugiu uma cuiosidade, se eu aumentar o ACUMULADOR para 32 bits eu conseguiria uma resolução melhor da frequencia, utilizando o mesmo teorema?

Olha eu sou iniciante e estou facinado com esse método, numca imaginei que isso fosse possível, se calcularmos uma divisão comum utilizando um dos timers do pic por exemplo, numca conseguiriamos chegar a valores precisos, ou seja valores quebrados. Bom para tudo se tem uma técnica, não é mesmo.

Vou ajustar minha rotina agora mesmo e posto aquí o resultado da pesquisa, acho importante que todos aprendam isso.
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Mensagempor renatokodaira » 06 Set 2010 17:36

Tem uma interpretaçao sua que estah incorreta:

A frequencia do sinal de saida eh determinada pela formula:

Freqout = (valor do incremento x frequencia de incremento do acumulador) / (2 ^ numero de bits do acumulador)

Por exemplo:

Freqout = (2000 x 32768) / (2^16) = 1000Hz

Freqout = (4000 x 32768) / (65536) = 2000Hz

Freqout = (10000 x 32768) / (65536) = 5000Hz

Freqout = (2500 x 32768) / (65536) = 1250 Hz e assim vai

Sobre aumentar os bits do acumulador, sim, se voce aumenta-los vai aumentar a resoluçao, mas tem um preço a pagar: voce vai precisar de um clock muitissimo grande para o incremento do acumulador. Os chips DDS dedicados tem resoluçao na casa de 0,001Hz pra voce ter ideia, mas funcionam a clocks altissimos (na casa das centenas de MHz). Os instrumentos geradores arbitrarios de forma de onda sao baseados neles e sao carissimos. Mas no seu projeto nao faz sentido aumentar para 24 bits ou 32 bits, porque voce vai precisar de muito processamento e clock muito altos.

A formula da resoluçao eh:

Resoluçao = freq incremento / (2 ^ numero bits do acumulador)
No meu exemplo:

Resoluçao = 32768 / (2^16) = 0,5Hz

Eu acho que os numeros e bits que eu passei sao bem adequados ao seu projeto (na verdade extrapolam as especificaçoes requeridas pelo seu professor).

Outros detalhes:

A precisao da frequencia de saida depende da precisao do clock de incremento do acumulador.

A distorçao harmonica do sinal de saida, vai depender da precisao da sua rede R-2R (use resistores de precisao 1%) e do filtro passa baixas e um pouco do numero de pontos da tabela que forem usados por um ciclo do sinal de saida. Perceba que se voce quiser uma frequencia de saida muito proxima de 30kHz, nao mais do que 2 pontos da tabela serao usados e sem um filtro PB o sinal nao vai parecer muito com uma senoide.


Eu estou pra montar um gerador de onda arbitrario com o CI AD9833 que eh um DDS com acumulador de fase de 28bits, que possibilita gerar sinais de 0 a 12MHz com resoluçao de 0,1Hz @25MHz (ou 0,004Hz com clock de 1MHz) e tabela de 10 bits (1024 pontos).
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Djalma Toledo Rodrigues » 09 Set 2010 12:07

É inutil cogitar em alta tecnologia

Vc tem que atender o solicitado pelo Professor

O que eu disse, e repito, é que a Tabela basta um quarto do Ciclo
isto é de Zero a 90°

A Senóide existe em Função do Seno, da Trigonometria.

O Valor do Seno varia de 0 a 1 no primeiro quadrante
De 1 a 0 no segundo quadrante
Volta a se repetir no 3° e 4° quadrante, agora com Valor x -1 que é a maneira "elegante" de ser dizer com Sinal trocado

Exemplo: Uma Tabela resumida ao 1° Quadrante com intervalo de 10° é seria o suficiente para marcação de ângulos de 10° em 10° em todo o Circulo:

0
0.1736
0.3420
0.5
0.6443
0.7880
0.8660
0.9397
0.9848
1


Para o 2° Quadrante é só ler em sentido inverso, isto é, de 1 para 0

Para 3° Quadrante volta a ler de 0 a 1 com Sinal negativo
Para 4º Quadrante de 1 a 0 com Sinal negativo

Vamos conferir ?
Sen 0.9848 pode ser ~80° ou ~100 °

Sen -09848 pode ser ~260° ou ~280°

(Depois coloco fig. com a plotagem desses pontos)

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor barboza » 09 Set 2010 18:32

DJ

A teoria esta certa e é válida, mas na prática, nem sempre vale a pena controlar a fase em função do tamanho da tabela.

Uma tabela com 256 bytes x outra com 1/4, 64 bytes, você gasta os 192 bytes inserindo codigo para controlar a fase, polaridade, ...., sem contar o desempenho que pode ficar a desejar.

Na prática, usa-se tabelas completas, por questões de desempenho e facil controle.



Guri.

Dê uma olhada no link que postei no inicio. Lá tem muita, mas muita teoria e pratica, inclusive com codigos sobre o assunto.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor Djalma Toledo Rodrigues » 09 Set 2010 19:29

barboza escreveu:DJ
A teoria esta certa e é válida, mas na prática, nem sempre vale a pena controlar a fase em função do tamanho da tabela..

Não me referi a controlar a Fase

Mesmo como coloquei antes:
"Vc tem que atender o solicitado pelo Professor"

Isto é: PIC , e R 2R como DAC

Fiz a Tabela do Seno para demonstrar que a Tabela da Senóide pode ser reduzida a 1/4

Tenho por principio ajudar, explicar mas, não fazer por outrem.

Cabe a ele fazer a Tabela da Senóide,
o Circuito, o Soft , etc

As Fórmulas ja foram colocadas

-------------------
"Uma caminhada de 1 000 léguas começa com o primeiro passo." (*)

E não cogitando o quanto será dificil, ou penosa, a caminhada.

(*) Ditado Chinês

----
DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor barboza » 09 Set 2010 21:54

Isso ai DJ

Concordo com genero, numero e grau (oi seria angulo?)...
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor Guri » 15 Set 2010 19:24

Eu estou aquí novamente para agradecer a todos os colegas pela grande contribuição na resolução do meu trabalho.

Bom eu consegui entender o sistema DDS achei muito interessante, porém o que eu acabei por utilizar foi o sistema que o PROEX indicou.

Ou seja fiz uma amostra das frequencias que desejei ou seja de 10 em 10 hz, fiz uma amostragem com resolução até maior do que o professor pediu, ficou assim: Frequencia de amostragem 44.100hz, Resolução da senoide 16bits, 1 canal mono (no caso eu fiz 10 amostras com a frequencia desejada: 1khz, 1,10khz até 2khz)

O resultado foi um arquivo .wav com extenção de 88.200 pontos. Bom o arquivo ficou enorme, mas conforme a explicação do Dr. PROEX, eu não preciso reproduzir a tabela inteira bem porque a mesma trata-se de uma repetição contínua, então eu peguei apenas um ciclo completo da senoide e deletei o resto e ficou com um tamanho final de: 712 bytes.

Confesso que achei que não iria funcionar, mas para minha surpresa ao reproduzir a tabela (inicio até o final do ciclo) consegui a senoide purinha e com uma resolução de 16bits (no osciloscópio pareceu super lizinha) bom só fiquei reproduzindo essa senoide indefinidadmente e acada alteração de de frequencia o MCU pegava outra amostra com a frequencia já definida no sampler (lógico que eu mantive a mesma taxa de sampling original ou seja 44.100hz).

Olha eu ganhei muitos elogios (o objetivo do professor era que ouve-se engenhosidade na tarefa) eu só tenho a agradecer a todos e em especial meu amigo PROEX.
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Anterior

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x