Microcontrolador LPC2138 - Ajuda e Discussão sobre o Timer

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Microcontrolador LPC2138 - Ajuda e Discussão sobre o Timer

Mensagempor joaojulioluiz » 12 Dez 2011 13:06

Olá pessoal. Sou novato na área de eletrônica e estou engressando na carreira de Sistemas Embarcados agora.

Tenho um projeto que envolve o Microcontrolador Philips LPC2138 com o núcleo ARM7 para meu curso de Engenharia, quero muito a ajuda de pessoas mais experientes e por isso criei o tópico aqui.


O que eu quero exatamente é saber se alguém conhece ou já usou esse Microcontrolador e se usou seu Timer / Contador para captura de um sinal de tempos em tempos para saber o Período, Velocidade e número de voltas, por exemplo, de um motor em rotação ou um cooler.

NaO Tenho onde mais pesquisar!!!

Se alguém tiver esse conhecimento, pouco que seja, eu posso expecificar melhor o que quero aqui.

Obrigado!
"Não sabendo que era impossível, foi lá e fez".
"Vença a si mesmo e terá vencido o seu próprio adversário"
joaojulioluiz
 
Mensagens: 3
Registrado em: 09 Dez 2011 09:52
Localização: Minas Gerais

Mensagempor RobL » 13 Dez 2011 09:38

Como se trata de um periférico como um timer pode usar informação de qualquer fabricante. Só para configurar seu timer para captura é que será o que está no manual do LPC2138.

Sugiro ler artigos sobre captura da Microchip, por exemplo.

Na net tem sim controle de temperatura com ventilador(cooler) usando controle de velocidade por captura.

Basicamente, será configurar o timer para captura e gerar interrupção. Injetar o pulso na porta referente a esse timer.
Por exemplo a cada subida do pulso, o valor do timer é "capturado" em um registro próprio.
Durante a interrupção, armazena-se esse valor capturado em uma variável seta-se um Flag para informar que o primeiro pulso foi lido.
Na próxima subida há um novo valor capturado. No entanto será desviado pelo nosso Flag, para armazenar o novo valor em uma segunda variável. Fazendo a diferença entre as duas tomadas, tem-se o período baseado em quantos "clocks" temos no timer. Basta multiplicar este número de clocks pelo valor de um clock do timer, isto é considerando o prescaler do timer, tem-se o valor em segundos. Daí os demais cálculos, RPM, RPS, Hz, etc.

Normalmente, usa-se um clock para o timer de forma que este não estoure. Há quem use considerando estouros, mas é bem mais complexo.
Não precisa parar o timer ou limpa-lo após a segunda captura. O timer deve ficar rodando sem parar.

Espero que sirva para suas buscas.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor joaojulioluiz » 13 Dez 2011 09:58

Muito Obrigado por responder RobL. Eu tenho procurado algo sobre TIMER DE CAPTURA do lpc2138 e no livro do ARM7 tem esse código, aparentemente básico para o funcionamento:

Código: Selecionar todos
void main(void)
{
   unsigned int vlor;      //variavel usada para guardar o valor de captura.
   VPBDIV = 0x00000001;   //configura PCLK para 20MHz
   PINSELO = 0x00000020;   //configura pino P0.2 como capture canal 10
   TOPR = 0x00004E20;   //carrega prescaler para incrementos a cada 1ms
   TOTCR = 0x00000002;   //reinicia contador e prescaler
   TOCCR = 0x00000005;   //captura na borda de subida
   TOTCR = 0X00000001;   //habilta timer

   VICVectAddr4 = (unsigned) T0isr;   //configura o endereço do vector
   
   VICVectCnt14 = 0x00000024;   //timer
   VICIntEnable = 0x00000010;   //seleciona canal
   
   while(1);
}

_irq T0isr(void)
{
   valor = T0CR0;   //Leitura de captura
   TOIR | = 0x00000001;   //limpa a flag da imterrupção
   VICVectAddr = 0x00000000;   //Escreva 0 para finalisar a interrupção
}



Ainda estou apanhando muito. Não intendi como vou saber QND e OND ele vai capturar pra eu poder adptar esse codigo.

Tenho um motor de passos funcionando que faz andar uma esteira(tipo impressora grafica), um led vai girar constantemente sob a esteira e eu tenho que identificar as voltas que esse led está dando e sua velocidade.
Basicamente, acho que eh isso.

Será que consigo fazer isso? :?
"Não sabendo que era impossível, foi lá e fez".
"Vença a si mesmo e terá vencido o seu próprio adversário"
joaojulioluiz
 
Mensagens: 3
Registrado em: 09 Dez 2011 09:52
Localização: Minas Gerais

Mensagempor joaojulioluiz » 14 Dez 2011 07:38

atraves de pesquisas, vi que o LPC2138 tem o chamado PWM que controla motores, fontes, etc.

ele tem um timer dedicado e parece q ele faz essa comparação de periodos, armazenando valores em um registrador.

talvez eu esteja olhando errado, focando no timer de captura. talvez devesse focar no PWM.

o que vocês acham ? ? ? :?
"Não sabendo que era impossível, foi lá e fez".
"Vença a si mesmo e terá vencido o seu próprio adversário"
joaojulioluiz
 
Mensagens: 3
Registrado em: 09 Dez 2011 09:52
Localização: Minas Gerais

Mensagempor RobL » 14 Dez 2011 10:02

Pois é, primeiro deveria ler sobre captura para qualquer micro e aí vai entender o que diz seu código.



Ainda estou apanhando muito. Não intendi como vou saber QND e OND ele vai capturar pra eu poder adptar esse codigo.


Sem analisar se seu código está correto:

Tá vendo no seu código, quando o pulso subir na porta P0.2, o valor que estiver nesse timer vai ser capturado no registro T0Cxx. Vai gerar uma interrupção e o valor capturado passará para a variável valor.

É necessário capturar 2 pulsos consecutivos, duas piscadas do seu led e subtrair essas variáveis, para ver o tempo.

Nota: Não lhe interessa medir largura do pulso e sim tempo entre dois pulsos consecutivos.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56


Voltar para ARM

Quem está online

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

x