pg fabio louvatti

22
Desenvolvimento de uma plataforma em tempo real de aquisição de dados em ambiente Linux Fabio Louvatti do Carmo Projeto de Graduação

Upload: fabio-louvatti-do-carmo

Post on 09-Jul-2015

76 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Pg   fabio louvatti

Desenvolvimento de uma plataforma em tempo real de

aquisição de dados em ambiente Linux

Fabio Louvatti do Carmo

Projeto de Graduação

Page 2: Pg   fabio louvatti

Objetivo

● Utilizar o GNU/Linux e um computador

desktop para construir tarefas de tempo

real afim de fazer aquisição de dados

Page 3: Pg   fabio louvatti

Computador desktop

– Computador de propósito geral● A princípio, o seu uso é inadequado para

tempo real.– Memória virtual (MMU), arbitragem em

barramentos, etc..

● Usualmente é usado microcontroladores.– Determinismo garantido, latência previsível.

Page 4: Pg   fabio louvatti

Computador desktop

– Por que usar?● Alta capacidade de realizar operações com

ponto flutuante.

Page 5: Pg   fabio louvatti

GNU/Linux

– Linux padrão não é de tempo real● Latências de interrupções e indeterminismo

no escalonamento de tarefas.

– Por que usar Linux para tempo real?● Comunicação entre tarefas

● Comandos

● Supervisão

● Logs em disco

● Visualização de dados

Page 6: Pg   fabio louvatti

GNU/Linux

– Como fazer Linux em tempo real?●Modificação no kernel.

– Opções: RTLinux, RTAI, Xenomai

Page 7: Pg   fabio louvatti

RTAI

– Real Time Application Interface

– Começou no Dipartimento di Ingegneria

Aerospaziale del Politecnico di Milano

(DIAPM) - Itália, em 1996/97

Page 8: Pg   fabio louvatti

RTAI

– patch (remendo) aplicado ao kernel Linux.

– Camada de abstração de hardware de

tempo real (RTHAL).

– Controle de interrupções.

Page 9: Pg   fabio louvatti

Camada de abstraçãoRTHAL

Page 10: Pg   fabio louvatti

RTAI - Interrupções

Page 11: Pg   fabio louvatti

RTAI - Serviços

– Possui uma API que disponibiliza:● Gerenciamento de processos;

● Gerenciamento de memória;

● Variáveis condicionais (semáforos);

● Mailboxes (caixa de mensagens);

● Temporizadores;

● dentre outros.

Page 12: Pg   fabio louvatti

RTAI - Aplicações

– Suporte a periféricos (drivers):● Porta paralela.

● Porta serial.

– Projetos que suportam o RTAI:● RTNet – protocolo de tempo real para redes.

● COMEDI – Drivers de placas de aquisição de

dados.

● CANBUS

Page 13: Pg   fabio louvatti

RTAI-Lab

– Disponibiliza ferramentas para

desenvolver diagramas de blocos que

são compilados e executados com

RTAI Linux.

– Podem ser desenvolvidos usando:● Matlab/Simulink/Real Time Workshop

● Scilab/Scicos (código livre)

Page 14: Pg   fabio louvatti

Aquisição de dados

– Circuito baseado no microcontrolador

AVR● Atmega48

– Dados enviados pela porta paralela

Page 15: Pg   fabio louvatti
Page 16: Pg   fabio louvatti

#include <avr/io.h>#include <avr/interrupt.h>ISR(INT0_vect){ unsigned char temp; ADCSRA |= _BV(ADSC);/*inicia conversão*/ while(ADCSRA & 0x40);/*aguarda fim da conversão*/ temp = ADCH; PORTB = temp;}int main(void) { /* Inicializa portas*/ PORTB = 0x00; DDRB = 0xff; /* PORTB como saída*/ PRR = ~(_BV(PRADC)); /* Apenas ativa o ADC*/ /* Inicializa ADC*/ ADMUX = _BV(ADLAR); /* AREF como referencia, ADC0 como entrada, ajustedo resultado para esquerda*/ DIDR0 = _BV(ADC0D); /* desabilitar o buffer de entrada digital doADC0*/ ADCSRA = _BV(ADEN) | _BV(ADPS0); /* habilita ADC, pre-escala=2*/ /* Inicializa interrupção externa*/ EICRA = _BV(ISC00) | _BV(ISC01);/* Borda de subida em INT0 gera umainterrupção*/ EIMSK = _BV(INT0); /* habilita interrupção externa*/ sei(); while(1){} return 1;}

Page 17: Pg   fabio louvatti

Diagrama de blocos - Scicos

Page 18: Pg   fabio louvatti

Bloco 'Sensor'

#include <math.h>#include <stdlib.h>#include <scicos_block4.h>#include <sys/io.h>void i_generic_SENS(scicos_block *block,int flag){

int i;double *y;unsigned char temp;double t = get_scicos_time();switch(flag) {

case 4:break;

case 1: /* Atualização da saída do bloco */for (i=0;i<1;i++) {

outb(inb(0x37a)|0x01,0x37a);/* borda de subida*/outb(inb(0x37a)&0xfe,0x37a);/* coloca nível baixo no pino */y = block->outptr[i];temp = inb(0x378);y[0] = 0.019607843*temp;

}break;

case 5:break;

}}

Page 19: Pg   fabio louvatti

QRtaiLab

Page 20: Pg   fabio louvatti

Resultados

Page 21: Pg   fabio louvatti

Conclusão

– Resultados bons apesar das limitações de um

computador desktop e da porta paralela.

– Boa alternativa ao Matlab/Simulink/RTW● Baixo custo

● Código aberto

– Possibilidade de muitos projetos envolvendo o

RTAI Linux.

Page 22: Pg   fabio louvatti

Obrigado!