Tratar onda quadrada

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Tratar onda quadrada

Mensagempor wBB » 03 Jan 2017 15:28

Usando um PIC com clock de 8MHz (ou mais, caso precise aumentar...), é possível tratar um sinal de onda quadrada e converter de um sinal do tipo 1 para o tipo 2 indicado na imagem anexa? Se sim, como?
Você não está autorizado a ver ou baixar esse anexo.
wBB
Bit
 
Mensagens: 23
Registrado em: 18 Nov 2016 18:45

Re: Tratar onda quadrada

Mensagempor Red Neck Guy » 03 Jan 2017 16:58

Se o tempo de 500us é sempre fixo, você pode esquecer todas as outras transições e trabalhar apenas com a primeira borda de subida.
Com essa abordagem, bastaria ligar o sinal em um pino com interrupção externa e usar um timer para contar os 500us.
Agora se essa variação que você falou nos 500us é crítica pra ti, dá pra fazer amostrando o pino e definindo um time-out, mas vai ter um jitter na subida.
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: Tratar onda quadrada

Mensagempor wBB » 03 Jan 2017 21:41

Esse tempo de 500us é aproximado, mas não varia muito não... porém, não posso estabelecer esse tempo inicial para ser ignorado ( em torno de 500us, por exemplo), pois o sinal é muito irregular.

A outra opção que você sugeriu é fazendo um pooling no pino que recebe o sinal, suponho? Em princípio vejo como difícil de funcionar também pois poderia gerar erro de leitura caso uma borda ou outra do sinal fosse ignorada no final.

Uma observação: eu perguntei sobre como fazer esse tratamento do sinal por meio de microcontrolador, mas na verdade não é obrigatório que seja dessa forma. Se tiver alguma alternativa...

Obrigado.
wBB
Bit
 
Mensagens: 23
Registrado em: 18 Nov 2016 18:45

Re: Tratar onda quadrada

Mensagempor Maffeis » 04 Jan 2017 08:49

Coloca um capacitor na entrada do pino
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: Tratar onda quadrada

Mensagempor wBB » 04 Jan 2017 09:28

Isso pode gerar um grande erro de detecção do final do tempo do trecho com o trem de pulsos devido à descarga do capacitor após a última borda de descida.
Obrigado!
wBB
Bit
 
Mensagens: 23
Registrado em: 18 Nov 2016 18:45

Re: Tratar onda quadrada

Mensagempor andre_luis » 04 Jan 2017 11:08

Não bastaria detectar a 1a borda de subida após passados pelo menos 100ms, e só decidir pelo final do frame após passados 150us sem receber mais nenhum pulso ?
De qualquer modo, se o tempo do pacote varia, um erro bem alto estaria associado co final da detecção (+-150ms)menos(+-50ms).

A proposito, esse sistema precisa funcionar em tempo real ?
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Tratar onda quadrada

Mensagempor wBB » 04 Jan 2017 11:51

André, o erro ficaria muito alto dessa maneira realmente.
Não, não precisa funcionar em tempo real.

Acho que já encontrei um jeito: vou ler apenas a primeira borda de subida via interrupção externa, desabilitar a interrupção, colocar um delay para ignorar o trem de pulsos, habilitar a interrupção e aguardar a próxima borda de subida, a qual deverá ser o início do próximo trem de pulsos, concluindo assim o ciclo (tenha o tempo total que tiver). Esses passos serão feitos na rotina de interrupção externa.

Obrigado.
wBB
Bit
 
Mensagens: 23
Registrado em: 18 Nov 2016 18:45

Re: Tratar onda quadrada

Mensagempor Red Neck Guy » 04 Jan 2017 12:00

Não precisa desabilitar a interrupção externa.
Você pode utilizar um dos timers para gerar precisamente outra int pra baixar o pino.
Algo

cpp code
void irq_ext(void){

if(!PINO_SAIDA)
CONFIGURA_INT_TIMER();
PINO_SAIDA = 1;
}

void irq_timer(void){

PINO_SAIDA = 0;
}
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: Tratar onda quadrada

Mensagempor MOR_AL » 04 Jan 2017 13:38

Considere que seu sinal possui três etapas, como na figura 1, que vou chamar de pulsante 1, estável 0 e pulsante 2.
Na etapa pulsante 1, estabeleça o valor do maior período em '0'. No seu exemplo seria de 150us. Observe que este tempo é bem menor que em estável 2.
Se o maior período em '0' de pulsante 1 for muito menor que o período em '0' de estável 2, ENTÃO:
Use um mono-estável retrigável, com disparo na transição negativa, recebendo o seu sinal. O período seria um pouco superior ao maior período em '0' de pulsante 1 (e de pulsante 2). Seu mono-estável deve ir para '1' na transição negativa e iniciar o período de tempo do mono-estável na transição positiva.
Seu erro seria idêntico ao período do mono-estável.
Como o período em '0' de pulsante 1 (e pulsante 2) é da ordem de 200us e o período estável 2 é da ordem de 100ms ou 800ms, portanto um mínimo de 500 vezes maior, então o seu erro relativo de tempo seria de 0,2%.
O problema é se no período estável 2 ocorrer um pulso de ruído. Aí você terá que pensar em uma rotina que considere esta possibilidade.
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

Re: Tratar onda quadrada

Mensagempor wBB » 04 Jan 2017 14:58

Obrigado pessoal.
Vou tentar implementar com as dicas de vocês.
wBB
Bit
 
Mensagens: 23
Registrado em: 18 Nov 2016 18:45


Voltar para PIC

Quem está online

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

cron

x