Diferença de fase

Olá, estou a fazer um pequeno projeto medidor de distância com um laser só que estou com um pequeno problema, preciso de medir a diferença de fase entre dois sinais e não sei como faze-lo.
Alguém pode dar-me uma ajuda?
Eu ja tive a tentar mas não consegui..tentei verificar a passagem por zeros de ambos os sinais mas não consegui.
A frequência máxima do sinal utilizado vai ser 1Khz.
Sou novato no arduino por isso estou um pouco perdido.
Obrigado :slight_smile:

Amigo, não sou nenhum especialista, mas se ta trabalhando a uma frequência alta como 1KHz, o seu programa não pode demorar mais que 1ms para ser executado, logo acredito que o melhor jeito, seria por interrupção. Já pensei em fazer isso, mas teria que tentar para ver se da certo. Os pinos 2 e 3 se não me engano são para interrupção. Usa um para cada sinal e usa a interrupção para ver o sinal quando o estado mudar para LOW e veja a diferença em tempo e depois faz a conversão. Acho que não e tão dificil assim. Se não for usar interrupção, acho que seu código vai ter que ser muito optimizado para econimizar tempo de execução. Funções com comunicação serial, consomem boa parte deste tempo.

Sem código, esquema ou explicação do tipo desses sinais só com extremos poderes de adivinhação...

bubulindo:
Sem código, esquema ou explicação do tipo desses sinais só com extremos poderes de adivinhação...

lol
hehehhehehehe :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

Desde já obrigado pela ajuda.
Pode ser um sinal sinusoidal ou uma onda quadrada, eu apenas quero medir a desfasagem dos dois sinais...
O código que fiz não está grande coisa e não funcionou por isso é que não pus.
Se conseguirem ajudar no código agradecia imenso.

Tens aqui algum sumo.
Procura também circuitos de "zero crossing detection"

Arduino Playground - HomePage

Muito obrigado Hugo...vou dar uma olhada :slight_smile:

talvez ajude:

Obrigado pelas dicas..tenho estado a ver mas não sei se isso me pode ajudar.
A questão é que eu vou receber dois sinais no arduino sejam eles analógicos ou digitais e depois dentro do arduino queria ver a diferença de fase entre os mesmos, isto tem que ser feito de forma automática.
Resumidamente o que tenho que fazer é comparar o sinal de um laser emitido com a sua reflexão e ver a diferença de fase entre os mesmos e através dessa diferença de fase consigo calcular a distância...não sei se fui bem explicito =|
preciso mesmo muito da vossa ajuda, não sou muito bom a programação é a primeira vez que trabalho com um microcontrolador.

E como vai "ler" o reflexo?

A reflexão é feita através de um fotodíodo...
O projeto chama-se Laser Range Finder e a técnica que tenho que utilizar é a diferença de fase.

Enganei-me, a reflexão é num objeto e depois a leitura desse sinal é feita no fotodíodo.

Se o objeto não estiver no ângulo certo, vai refletir pra outro lado que não seja o seu fotodiodo, ou não?

Veja isto:

Sim o laser tem que ter um certo alinhamento com o fotodíodo e essa parte já está feita...leva duas lentes para ter um ângulo maior. O problema é mesmo com os sinais recebidos preciso de medir a diferença de fase entre eles e não sei como.

aqui:

basicamente solta um pulso no laser e espera o fotodiodo sentir o reflexo,
a velocidade da luz é aprox 300 000 m/s, em um clock do arduino(16MHz) é 62,5 ns, ela avança 0,019 m ou 19 cm, sendo ida e volta dá 9,5cm a resolução, se trabalhar bem o código, escrever em assembler pode chegar a uma precisão de 3 a 4 clocks, conseguirá medir em intervalos de 30 a 40cm, (edit: se usar o capture input do timer1? conseguirá a resolução igual ao clock, 9,5cm) até onde a sensibilidade do sensor permitir ou o overflow do timer1 que é 16bits. que dá aprox 6,2km.
se usar C, será pior... se usar o millis medirá em incremetos de 150metros, e com o micros() a resolução minima é 4us, uma resolução de 60 centimetros.
o arduino due se sairá melhor com seu clock de 84MHz.