Ler Frequencia no Pic

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Ler Frequencia no Pic

Mensagempor geraldomelo » 18 Jun 2007 03:40

Pessoal , peguei um projeto aqui , onde o pessoal vai usar um transmissor e o receptor de aeromodelo para controlar a posição dos motores ( servos , mas são motores bem mais fortes adaptados) ,e é ai que eu entro , tenho que fazer a controladora que recebe o sinal do receptor , e posiciona o motor ( com redução) e realimentação de um potenciometro de 5K .
Bom ,ai que vem , como eu faço para ler o sinal que vem do receptor ? esse sianl consiste em um trem de pulsos de 50 hz e oque varia é o seu duty variando entre 900 us e 2100 us .. Então eu tenho que ler apenas a parte alta do pulso , e saber qual a duração dessa parte alta (ativa) entre 900us e 2100 .... Como eu faço isso hein pessoal ...

obs : vou usar o pic12F675 , de preferencia com o oscilador interno , não gostaria de usar cristal ... não tenho muito espaço

Abraços

Geraldo .
geraldomelo
Byte
 
Mensagens: 267
Registrado em: 14 Out 2006 16:53
Localização: Ribeirão preto - SP

Mensagempor guest2003 » 18 Jun 2007 08:27

Se precisar de precisão não vai dar pra ir de interno não... (2%)

Deixa o timer 0 contando e faz polling na porta... ou liga numa Int... ai pega o valor do timer...

Se for apenas 1 motor, liga na Int... seta pra int na borda de subida... subiu, pega o valor do timer... sera pra borda de descida... e assim vai...

Existem diversas formas de fazer, mas depende muito da disponibilidade do seu micro, ou seja, se ele vai estar fazendo muitas outras coisas, qual a precisao da medida vc quer, etc etc etc...

Pode escolher um micro que tem Gate no timer 0... (este pino habilita a contagem de tempo do timer... ai ja sai a leitura direto)

[]'s
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor geraldomelo » 18 Jun 2007 16:19

Ola Guest , é apenas 1 motor sim .. A precisão de 2% acho que é toleravel , mas para melhorar , posso colocar um cristal , mas precisava achar cristal de 20mhz , mas bem pequenos , pois não tenho muito espaço .. O pic não vai fazer muita coisa não , ele vai ler essa borda alta , e vai ler também a posição do eixxo do potenciometro ( AD) , e ai ele posiciona o motor na posição correspondente ao tamanho do pulso lido ( pulso esse que tem uma frequencia de 50 hz) ... basicamente é isso .. 1000 us , a posição é a do inicio do potenciometro (AD= 0 ou perto disso) , assim vai , até a leitura for 2000us .. ai posiciona o motor e potenciometro para o final do curso (AD=1024 ou perto disso )

é basicamente isso que o micro vai fazer ... na verdade nao é muito complicado não ..é que aqui na minha cabeça ainda tá meio "nublado" heheheh

Vou acionar o motor com dois fets , e o pic como já disse , é o 12f675 ...

qqr luz já me ajuda ...

abraços

Geraldo
geraldomelo
Byte
 
Mensagens: 267
Registrado em: 14 Out 2006 16:53
Localização: Ribeirão preto - SP

Mensagempor fabim » 18 Jun 2007 16:43

neste caso quanto maior a frequencia do cristal maior a margem de erro,
Ja fiz algo parecido mas fis assim.
usando o TIMER1.
uso a interrupção na borda de subida do GP2 ou na pior das ipoteses qualquer pino utilizando o onpio reset.
quando acontecer a interrupção.
zera timer1
e fica observando se ainda é hum. quando zero le o timer1 e pronto.. com 4 mhz.. da pra contar 16ms com uma precisão boa.

fabim
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor geraldomelo » 18 Jun 2007 18:14

Fabim , não entendi muito bem isso :

" com 4 mhz.. da pra contar 16ms com uma precisão boa."

quando o meu sinal sobe , ele dura de 900us até 2100us , é isso que eu tenho que contar , não é ms ..

"qqr outro pino usando onpio" tbm não entendi ... vou lá para o datasheet do pic ... heheh


abraços

Geraldo
geraldomelo
Byte
 
Mensagens: 267
Registrado em: 14 Out 2006 16:53
Localização: Ribeirão preto - SP

Mensagempor Orcino » 18 Jun 2007 20:07

Geraldo no PICBASIC tem uma função PULSIN que faz exatamente o que vc quer, dê uma olhada.

Orcino
Orcino
Bit
 
Mensagens: 19
Registrado em: 06 Dez 2006 22:07

Mensagempor fabim » 19 Jun 2007 07:59

o timer 1 conta até 65535 sem zerar.
O clock do cristal é de 4MHZ
1 / 4 000 000 = t1/f * 65535 = 0,01638375 S.

O on pio, é uma interrupção que os 12F tem.. Ele tem para todos os pinos, basicamente funciona como o RB4..7 16F628.
Ele memoriza o ultimo estado.
Mais pode usar tambem a interrupção na borda de subida do GP2.

abraços fabim
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor eliandrostz » 19 Jun 2007 08:01

Geraldo, use a interrupção por mudança de estado, que acontece em ambas as bordas, tanto na de subida quanto na de descida. Então quando acontecer a borda de subida, na rotina de interrupção vc liga o timer1 para iniciar a contagem, que contara um pulso a cada 250ns se vc utilizar cristal de 4Mhz, quando acontecer a borda de descida na interrupção vc lê o timer1 e zera para proxima borda de subida. teoricamente o timer vai variar de 3600 pulsos para 900us a 8400pulsos para 2100us. Bom 3600 será sua referencia de zero, sempre subtraia esse valor do valor lido pelo timer1 na interrupção. exemplo:

100% = 8400-3600 = 4800 // 4800/4.6875 = 1024(duty da saida)

50% = 6000-3600 = 2400 // 2400/4.6875 = 512

0% = 3600-3600 = 0 // 0/4.6875 = 0

Eliandro
O conhecimento vem e vai, a sabedoria permanece...
eliandrostz
Nibble
 
Mensagens: 71
Registrado em: 16 Out 2006 13:51

Mensagempor geraldomelo » 22 Jun 2007 04:25

Pessoal , vou ver se entendi ...

Fabim , acho que agora entende , vc quis dizer que com o clock interno de 4MHZ , ai vai para 1mhz (Fosc/4) . então o timer1 é incrementado a cada 1us , e se o timer1 conta até 65535 então fica 0,000001s x 65535 = 0,065535s ..

isso que eu não estou entendendo , de onde vem o 0,01638375 S. ?

Agora , Eliandro , também não entendi de onde vem esse divisor de 4.6875 ??.. outra coisa , o timer no caso do Osc a 4mhz , vai incrementar em 1us , e acho que não a 250ns , pois o timer incrementa na taxa de Fosc/4 ... acabei de ver no datasheet

por favor , me corrijam se eu estiver errado , estou ficando doido já ... hehehe ..

abraços

Geraldo .
geraldomelo
Byte
 
Mensagens: 267
Registrado em: 14 Out 2006 16:53
Localização: Ribeirão preto - SP

Mensagempor eliandrostz » 22 Jun 2007 07:37

Desculpe Geraldo, vc tem razão, tanto eu quanto o fabim cometemos o mesmo erro, não dividimos a Fosc por quatro, mas a idéia continua a mesma, só divida todos o valores que passei por 4. Esse divisor que vc perguntou se obtém dividindo o range (máx - min) por 1024. Agora vai ficar assim:

min = 900 pulsos para 900 us
max = 2100 pulsos para 2100 us
divisor = (2100-900)/1024 = 1.1718
O conhecimento vem e vai, a sabedoria permanece...
eliandrostz
Nibble
 
Mensagens: 71
Registrado em: 16 Out 2006 13:51


Voltar para PIC

Quem está online

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

x