Sou iniciante no meio da eletrônica e ainda não sei muito sobre arduino. Estou desenvolvendo um projeto da faculdade no qual preciso gerar 4 ondas quadradas simultaneamente, em frequências que poderiam variar em tempo de execução de 0 a 200 Hz. Essa variação na frequência de cada uma das 4 ondas ocorreria conforme o giro de um potenciometro associado a ela, totalizando 4 potenciometros. 

Essa implementação com a função tone() seria possível, porém só consigo fazer uma onda por vez, usando o meu arduino uno. Pensei em soluções utilizando bibliotecas de timer, porém estou com dificuldades para implementar um código que me permite variar a frequência da onda durante o loop do arduino.

Alguém ai sabe alguma maneira de resolver o meu problema??

Desde já agradeço

Exibições: 862

Responder esta

Respostas a este tópico

Boa noite G2PJ,

deixa ver se entendi.

Vc precisa gerar 4 ondas quadradas em frequencias distintas, em 4 ports com ajustes independentes e 

que podem der ajustadas de 0 a 200 Hz.

Correto?

Qual a precisão das frequências em %?

RV

Exatamente. Cada frequência tem que ser ajustável durante a execução do loop.

Qual a precisão das frequências em %?

Desde que eu consiga sincronizar as ondas deixando todos os potenciômetros mais ou menos na mesma angulação, não tem necessidade de muitaaaa precisão.

Voce quis dizer, que ao ajustar todas as frequencias iguais, elas tenham o inicio ao mesmo tempo.

Certo?

O que talvez aconteça é uma diferença de alguns microsegundos no inicio e no fim de

cada uma em relações às outras.

RV

Acredito que poucos microsegundos não fariam tanta diferença. Minha dúvida é como gerar essas ondas simultaneamente

A função tone() seria uma boa solução, caso fosse possível usá-la em mais de uma saída simultaneamente. Pelo que eu li na documentação, só é possível gerar uma onda pora vez atraves dela

G2PJ, 

experimente escrever um código usando a função micros().

Leia o valor do pot,com analogRead(), depois  usandoa função map(), converta para tempos

equivalentes às frequencias desejadas.

Repita o procedimento para cada pot.

Tente fazer, e depois conte a dificuldade que teve.

Assim poderemos ajuda-lo melhor.

RV

olá Giuliano, boa tarde.

      A implementação deste Sistema é relativamente simples, com uma técnica também simples.

      Isto é possível uma vez que sua frequência máxima é de 200 Hz, e desde que as demais tarefas executadas não tenham impacto severo nas temporizações. É preciso ficar atento a esse ponto: outras tarefas executadas (seja no “foreground” ou no “background”), se forem muito pesadas (consumidoras de tempo), poderão impactar nos resultados.

      Mas veja: conhecendo-se a técnica adequada, é possível conseguir ótimos resultados, mesmo que se tenha no Sistema outras tarefas pesadas. Neste caso me refiro à técnica de implementação destas outras tarefas. Infelizmente estas técnicas não são ensinadas por aí afora, apesar de serem extremamente simples. Parece que a pessoas pensam assim: “vamos sentar e programar, e se possível vamos copiar algum exemplo por aí”. E assim as pessoas não se atentam em aprender as técnicas adequadas, que podem ser facilmente aprendidas (e infelizmente, 99.9% das bibliotecas do Arduino espalhadas mundo afora, sofrem do mesmo problema).

 

      Como não conheço o restante do seu Sistema, vou ter que considerar que as demais tarefas executadas nele, são simples e “leves”, ou então que podem até ser complexas mas foram implementadas usando técnicas adequadas que não impactam na performance do Sistema. Uma vez considerado isso, pode-se usar a implementação que estou postando aqui para seu Sistema, gerando “nsinais de onda quadrada.

 

      Como o Hardware é simples, e contém apenas o Arduino4 Potenciômetros, montei também em protoboard, a fim de verificar o funcionamento. Mas também implementei no Proteus (pois é útil para pessoas que querem testar sem precisar montar), e o resultado foi o mesmo, funcionando exatamente como esperado (sempre que digo isto nos tópicos aqui no LDG, quero dizer: funcionou exatamente conforme o planejado).

 

      O Hardware pode ser visto na figura a seguir:

(clique na figura para “zoom”)

 

 

      Na simulação, observar que conectei junto a cada Potenciômetro, um Voltímetro, a fim de conferir a tensão correspondente. Já nas saídas de sinal, conectei em cada uma um Frequencímetro, a fim de verificar qual a Frequência do sinal gerado. Nas saídas de sinal, um Osciloscópio também permite ver as ondas geradas.

 

      Um ponto muito importante: notar que junto a cada Potenciômetro, há um Capacitor (no caso 220 kpF ou 220 nF). Este Capacitor tem duas utilidades: junto ao próprio Potenciômetro funciona como um Filtro Passa-Baixas (embora não seja muito eficiente, já que a impedância vista pelo Capacitor varia conforme a posição do Potenciômetro), mas o mais importante é que diminui drasticamente o efeito da “Injeção de Carga” que ocorre quando chaveamos o canal do Conversor AD do Arduino. Então ele é bastante importante. Recomendo fortemente que o Capacitor seja incluído no Sistema. O valor de 220 kpF é um valor adequado para esta aplicação, mas pode ser aumentado sem problemas, até cerca de 1uF. Importante: para estes Capacitores, usar tipo Cerâmico. Os de Tântalo também servem, mas são bem mais caros. E nem pense em Eletrolítico de Alumínio: sem chance!!!

 

      Para o “toggle” dos sinais, o código lê o Nível Lógico atual nas saídas. Então cuidado com as cargas que conectará às saídas de sinais, pois se estas cargas tiverem impedância extremamente baixa a ponto de corromperem o Nível Lógico nas saídas, o código não conseguirá ler corretamente os níveis e o “toggle” não funcionará. Claro, se vc chegar a este ponto, é porque suas cargas estão forçando corrente excessiva nas saídas, o que poderá danificá-las (neste caso a forma correta de se fazer isso, é utilizando-se Drivers a Transistores ou então Drivers Integrados).

 

 

      O resultado da simulação pode ser visto na figura a seguir, onde os Potenciômetros foram ajustados para 200 Hz, 100 Hz, 50 Hz, e 24 Hz.  A leitura dos Frequencímetros não é tão fácil, pois os dígitos ficam muito “colados” uns aos outros (no “print” dei um “zoom” na tela pra ajudar na leitura). Mas no Osciloscópio também pode-se ver os Sinais e conferir as frequências através da escala de tempo:

 (clique na figura para “zoom”)

 

      Na figura a seguir, os Potenciômetros2” e “3” foram ajustados para 50 Hz, e assim pode-se conferir o Sincronismo de Fase dos sinais gerados (canais "azul" e "vermelho" no Osciloscópio):

(clique na figura para “zoom”)

 

 

      Já na próxima figura, os Potenciômetros3” e “4” foram ajustados para 24 Hz, permitindo-se também verificar o Sincronismo de Fase (canais "vermelho" e "verde" no Osciloscópio):

(clique na figura para “zoom”)

 

 

      Observar que como as Frequências são valores inteiros, isto facilita muito o ajuste do Potenciômetro na prática,  quando se quer obter Frequências iguais em sinais distintos.

 

 

      O código para o Arduino, e os arquivos para Simulação no Proteus, estão disponíveis neste link do LDG:

       Link:   Gerar_4_Quad_01.zip

 

       No código, vc pode facilmente mudar a quantidade de Sinais, ou a Frequência máxima (levar em consideração os pontos que mencionei no início deste texto). Claro, os pinos para os Potenciômetros e saída dos sinais também são facilmente configuráveis. Tudo bem no início do código, e este se ajustará automaticamente às definições.

      Espero que a implementação ajude. Caso tenha alguma dúvida, não deixe de perguntar.

 

      Abrçs,

      Elcids

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço