Saudações prezados.

Estou com um problema,que para a comunidade daqui deve ser ridícula.Mas como não consegui resolver sozinho...aqui vai:

Preciso captar um sinal de um transdutor de posição (sinal de referência de um encoder).Esse sinal é bem discreto, no sentido de acontecer quando por milissegundos durante a passagem do sensor num ponto do transdutor.

O que pretendo é evidenciar esse sinal, acionando a porta digital 13  do Arduíno, da seguinte forma:

Passa pelo ponto de referência, liga porta digital 13.

Passa novamente pelo mesmo ponto, desliga a porta digital 13 e assim sucessivamente...

Elaborei um código bem simples mas que funciona de forma inconsistente...tem hora que tem que passar duas vezes pelo mesmo ponto para ligar a porta 13...tem hora que tem que passar mais de uma vez no ponto de referência de desligar a porta 13...enfim, não está funcionando!!!

Alguém pode me ajudar?

Abaixo segue o código que estou usando.

Muito obrigado prezados!!!

Exibições: 918

Responder esta

Respostas a este tópico

Código em anexo.

Anexos

Boa noite RL, 

como vc já anexo o código na forma de um arquivo, sugiro que remova o código 

que colou na área de texto do seu tópico.

RV

Boa tarde.

Eu coloquei o código junto da minha mensagem para facilitar logo de início o meu pedido de ajuda.

Essa prática não é bem vinda?Atrapalha?

Olá.

  Seu codigo está confuso, vc mistura conceitos de digital e de analógico...

  Acho que se vc usar na linha:

var=analogRead(LeituradaPorta);

um

var=digitalRead(LeituradaPorta);

já vai mudar tudo.

O valor lido de forma analógica é qualquer coisa entre 0 e 1023.

Por ex para 0V ele pode ler de 0 a uns 8 tranquilo, não tem como comparar na base do "==". 

Vc pode fazer tb janelas, por ex abaixo de 200 é 0 e acima de 600 é 1.

Mas o uso de if (..==..) para valores analógicos não funciona bem.

Outra dica que melhoraria bem seu codigo seria o uso de interrupções.

Elas leem o pino por hardware, quando acontece o pulso um flag é setado (bit) avisando que precisa ser atendida. responde a pulsos definitivamente muito estreitos.

Boa tarde Eduardo.

Eu estou usando a leitura da porta analógica em virtude do tipo de sinal de referência que vou receber do transdutor, é um sinal bem "estreito" como você de forma correta mencionou.Por isso não estou utilizando a leitura pela porta digital que como você sugeriu.

Em relação ao restante do seu comentário, parece ser uma solução sim!!!Mas não tenho a menor idéia de como fazer....

Você pode me ajudar alterando o meu código?

Mesmo que não der certo....qualquer ajuda é válida.

Muitíssimo obrigado pela atenção!!!!

Então, seu recicínio está invertido.

A leitura analógica é mais lenta que a digital.

Se seu pulso é digital e estreito precisa ser lido como digital.

Mude a linha que sugeri mudar:

var=analogRead(LeituradaPorta); para 

var=digitalRead(LeituradaPorta);

Vide:

https://www.arduino.cc/reference/pt/language/functions/digital-io/d...

Para fazer por interrupção rode o exemplo:

https://www.arduino.cc/reference/tr/language/functions/external-int...

Recomendo ligar seu fio que gera interripção no pino D2, em vez de A0.

O Led está no mesmo pino que vc usa, nem precisa mudar.

Eduardo, então eu também devo mudar o endereço para leitura do sinal para uma porta digital?

Ou posso manter a manter porta A0 e alterar apenas a linha que você sugeriu?

Sim, pode pq as portas analógicas também podem ser lidas de forma digital.

Eduardo, alterei apenas a linha que você recomendou e o funcionamento foi perfeito.

Muito obrigado!!!!

Realizei alguns testes aqui e verifiquei que o nível de tensão necessário porta A0 para alteração da saída D13 é da ordem de 2,4V.

Essa é minha preocupação, a amplitude do sinal necessário.Não sei a amplitude que receberei do transdutor...

Talvez seja da ordem de milivolts..

Entendeu o porquê da minha escolha pela porta analógica?

De qualquer forma, muito obrigado Eduardo!!!!

Me ajudou bastante.

Rubens, se o seu Encoder for mesmo o Heidenhain-LS-703.

O padrão para o sinal analógico é de 1 Volt pico a pico. 

Recomendo que meça esse sinal com um osciloscópio. 

Esse manual tem informações sobre o sinal analógico - pagina 123

https://product.heidenhain.de/JPBC/image/FILEBASE_PUBLIC/517651_10_...

A Diadur não existe mais.

É a própria Heidenhain.

https://www.heidenhain.com.br/pt_BR/empresa/contato/

Bom dia, 

Favor informar que transdutor é esse que esta usando. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço