tópicos especiais em sistemas digitais i projeto braço mecânico lucas eduardo waechter lucas rosa...
Post on 17-Apr-2015
105 Views
Preview:
TRANSCRIPT
Tópicos Especiais em Tópicos Especiais em Sistemas Digitais ISistemas Digitais I
Projeto Braço MecânicoProjeto Braço Mecânico
Lucas Eduardo WaechterLucas Eduardo WaechterLucas Rosa Cruz ReginatoLucas Rosa Cruz Reginato
SumárioSumário
Visão geral do projetoVisão geral do projetoInterface com a Porta ParalelaInterface com a Porta Paralela
Dados do joystick;Dados do joystick; Bloco VHDL;Bloco VHDL;
Interface com a Porta SerialInterface com a Porta Serial Especificação do Braço Mecânico;Especificação do Braço Mecânico; Protocolo de Comunicação;Protocolo de Comunicação; Limitações;Limitações;
Interface com o Sensor TérmicoInterface com o Sensor Térmico Especificação do Sensor Térmico;Especificação do Sensor Térmico; Protocolo I2C;Protocolo I2C;
Visão Geral do ProjetoVisão Geral do Projeto
FPGA
Joystick
Porta
Paralela
Porta Serial(CPLD)
Braço Mecânico
Display
Interface coma paralela
Gerência dasInterfaces
Interface coma serial
Interface c/ sensor térm
ico
SensorTérmico
Interface com a Porta ParalelaInterface com a Porta Paralela
Joystick usado : MegaDrive da SegaJoystick usado : MegaDrive da SegaPor que usar a porta paralela :
• Conector do joystick é do tipo DB9 usado em interfaces seriais.
• Usamos um conector DB25 para adaptar o joystick para o porta paralela.
• Assim é possivel prototipar os dois módulos na mesma plataforma de prototipação visto que esta possui apenas uma interface serial e uma interface paralela.
Interface com a Porta ParalelaInterface com a Porta Paralela
Conector tipo DB25Conector tipo DB25
Para conexãocom o joystick
Para conexãocom a porta
pararela
Interface com a Porta ParalelaInterface com a Porta Paralela
Pinos do Joystick do MegaDrivePinos do Joystick do MegaDrive
169
5
Select 1PowerUpDownGround
Select 2RigthLeftPower
Motivação do uso deste Joystick:
• Cada pino do joystick representa um botão.
• Quando um botão é pressionado é lido o nível lógico ‘1’.
• Caso o botão não é acionado é lido o nivel lógico ‘0’.
• Pino ‘Select’ seleciona se será apertado os botões ‘A’ e ‘B‘ ou ‘C‘ e ‘Start’.Conector Fêmea do joystick
Interface com a Porta ParalelaInterface com a Porta Paralela
Mapeamento dos pinos DB9 para DB25Mapeamento dos pinos DB9 para DB25
169
5 1131425
Porta serial do Joystick Porta paralela da FPGA
Interface com a Porta ParalelaInterface com a Porta Paralela
Pinos do Joystick do MegaDrive usadosPinos do Joystick do MegaDrive usados
Tabela de Mapeamento da porta serial do joystick para a porta paralela do FPGA
Joystick FunctionJoystick Function DB9 PinosDB9 Pinos DB25 PinosDB25 Pinos CoresCores Tipo em relação ao joystickTipo em relação ao joystick
UpUp 11 1212 BrancoBranco InIn
DownDown 22 1515 AzulAzul InIn
LeftLeft 33 1010 CinzaCinza InIn
RigthRigth 44 1111 LaranjaLaranja InIn
PowerPower 55 3 a 93 a 9 VermelhoVermelho InIn
Button1Button1 66 1313 MarronMarron InIn
SelectSelect 77 22 AmareloAmarelo OutOut
GroundGround 88 18 a 1918 a 19 PretoPreto OutOut
Button 2Button 2 99 11 RoxoRoxo InIn
Interface com a Porta ParalelaInterface com a Porta Paralela
Caracteristicas da Porta ParalelaCaracteristicas da Porta Paralela• Quando um pino se encontra no nível lógico ‘1’, este possui 5V de tensão, e um pino em nível lógico ‘0’ possui tensão inferior a 0,5V.
Caracteristicas do JoystickCaracteristicas do Joystick• Para alimentar o pino ‘Power do Joystick’ com os 5V necessários conectamos os pinos 3 a 9 da porta paralela com diodos, para certificar que não ocorresse uma inversão acidental da corrente elétrica.
Código C para leitura da da porta paralelaCódigo C para leitura da da porta paralela• Aplicação desenvolvida em ambiente Linux, compilado com o GNU Compiler, certifica se os pinos foram corretamente conectados.
Interface com a Porta ParalelaInterface com a Porta Paralela
Código C para leitura do Joystick (1)Código C para leitura do Joystick (1)# includes <…>
#define LPT1_DATA 0x378+0#define LPT1_CTRL 0x378+1
void *monitor();pthread_t monitor_id;
int main(int argc, char* argv[]) {/* Chama alguns métodos de inicialização *//* Verifica permissao para trabalhar com a porta desejada */if (ioperm(LPT1_DATA, 3, 1)) {
perror("Cannot obtain access to write on port LPT1"); exit(1);
} pthread_create(&monitor_id, NULL, (void *)monitor, NULL);
pthread_join(monitor_id, NULL);exit(0);
}
Interface com a Porta ParalelaInterface com a Porta Paralela
Código C para leitura do Joystick (2)Código C para leitura do Joystick (2)void *monitor() { /*Porta que estamos trabalhando */
unsigned char data;
while(1) {/*Seta em '1' o sinal select */
write_data(0xFF);data = inb(LPT1_CTRL);
/* Se o pino 10 (esquerda) */ if((data & 0x40) == 0) draw_arrow('L'); else clear_arrow('L');
/* Se o pino 11 (direita) */ if((data & 0x80) == 0) draw_arrow('R'); else clear_arrow('R');
...
refresh(); usleep(1);}
}
Interface com a Porta ParalelaInterface com a Porta Paralela
Bloco VHDL criado para esta tarefaBloco VHDL criado para esta tarefa
Interface coma paralela
Dados recebidos da porta paralela
ACK
Send
Arm
Hand
Base
LR
.
.
.
.
Interface com a Porta ParalelaInterface com a Porta Paralela
Máquina de estados do Bloco VHDLMáquina de estados do Bloco VHDL
Polling Read
Write
Recebendosinais
Decodificaçãodos sinais
Enviando sinaispara o bloco serial
Interface com a Porta SerialInterface com a Porta Serial
Especificação do Braço MecânicoEspecificação do Braço Mecânico
• Criado pela Fischer Technik ( http://www.fischertechnik.de/ ), empresaalemã, na década de 90.
• Basicamente, é um lego.
• Possui 3 motores para comandar o braço mecânico
• Possui sensores que indicam que um determinado comando não pode mais executar, caso contrário o braço mecânico pode se desmontar.
• Possui uma interface ( placa ) que interpreta os movimentos do braço.Esta placa possui um processador 8051 a ser detalhado mais adiante.
Interface com a Porta SerialInterface com a Porta Serial
Figura do Braco MecânicoFigura do Braco Mecânico
Motor que giraa base
Motor que girao braço
Motor que giraa mão
Interface com a Porta SerialInterface com a Porta Serial
Protocolo de comunicação do Braço Mec.Protocolo de comunicação do Braço Mec.
Bits da palavra enviada para o Braço Mec.Bits da palavra enviada para o Braço Mec. ComandoComando FunçãoFunção
88 77 66 55 44 33 22 11
00 00 00 00 00 00 00 11 1L1L Move Base p/ EsquerdaMove Base p/ Esquerda
00 00 00 00 00 00 11 00 1R1R Move Base p/ DireitaMove Base p/ Direita
00 00 00 00 00 11 00 00 2L2L Move Braço p/ BaixoMove Braço p/ Baixo
00 00 00 00 11 00 00 00 2R2R Move Braço p/ CimaMove Braço p/ Cima
00 00 00 11 00 00 00 00 3L3L Abre a mãoAbre a mão
00 00 11 00 00 00 00 00 3R3R Fecha a mãoFecha a mão
00 11 00 00 00 00 00 00 4L4L Acende a LuzAcende a Luz
11 00 00 00 00 00 00 00 4R4R Acende a LuzAcende a Luz
Interface com a Porta SerialInterface com a Porta Serial
Código C++ para controlar o Braço Mec. (1)Código C++ para controlar o Braço Mec. (1)#includes <...>
class Robo{char Motorword; /* Palavra a ser enviada p/ o robo */
char serial[4]; /* O Nome da porta serial aberta */
/* Abre a serial COM"ser" para o envio e recepção de Comandos do Robo*/int abreSerial(int ser) {
const char *com1="COM1",*com2="COM2",*com3="COM3",*com4="COM4"; switch(ser){
case 1: strcpy(serial,com1);
break; case 2:
strcpy(serial,com2); break;
case ....break;
} Fischer_install(); return 1;
}
Interface com a Porta SerialInterface com a Porta Serial
Código C++ para controlar o Braço Mec. (2)Código C++ para controlar o Braço Mec. (2)/* Seta parametros para a porta serial e abre a conexão com a mesma */void Fischer_install(){
....int hCom = CreateFile(serial, /* nome da COM */GENERIC_READ | GENERIC_WRITE, /* acesso de RW */0, /* não usado */NULL, /* não usado */OPEN_EXISTING, /* requerido */0, /* não usado */NULL); /* não usado */....fSuccess = GetCommState(hCom, &dcb);....dcb.BaudRate = 9600; // 9600 Bauddcb.ByteSize = 8; // 8 Bitsdcb.Parity = NOPARITY; // no paritydcb.StopBits = ONESTOPBIT; // 1 stopbit
fSuccess = SetCommState(hCom, &dcb);....motors_off();
}
Interface com a Porta SerialInterface com a Porta Serial
Código C++ para controlar o Braço Mec. (3)Código C++ para controlar o Braço Mec. (3)
/* Define o comando a ser executado */void motor(int num, char dir){
char Result; switch (dir){ case 'L':
Motorword = clearBit(Motorword, (num * 2)); // seta bit em 1Motorword = setBit(Motorword, (num * 2 - 1)); // seta bit em 0break;
case 'R':....break;
case ‘....’:....break;
}Result = input_word(); // escreve o comando para a interface
Motorword = '0x00'; // zera-se o comando para o próximo comando}
// Demais métodos..........
Interface com a Porta SerialInterface com a Porta Serial
Bloco VHDL para decodificação dos comandosBloco VHDL para decodificação dos comandos
BraçoMecânico(Serial)
ACK
Send
Arm
Hand
Base
LR
word
Interface com a Porta SerialInterface com a Porta Serial
Máquina de estados do Blobo VHDLMáquina de estados do Blobo VHDL
Wait Read
Write
Recebendosinais
Decodificaçãodos sinais
Enviando sinaispara a porta serial
Interface com a Porta SerialInterface com a Porta Serial
Bloco VHDL para comunicação com a serialBloco VHDL para comunicação com a serial
InterfaceSerial
tx_data (8 bits)word (8 bits)
Onde :
• tx_data representa os dados a serem enviados para a serial• tx_av indica que existe dado disponível em tx_data
tx_av (1 bit)
Interface com a Porta SerialInterface com a Porta Serial
Máquina de estados do Bloco VHDLMáquina de estados do Bloco VHDL
Read Write
Recebendosinais
Enviandosinais
Interface com a Porta SerialInterface com a Porta Serial
Bloco VHDL completoBloco VHDL completo
BraçoMecânico(Serial)
ACK
Send
Arm
Hand
Base
LR
InterfaceSerial
word (8 bits)tx_data (8 bits)
tx_av (1 bit)
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Digital Temperature Sensor with I2C Interface
• Modelo TMP101 – 2 fios, saída serial
• Não requer nenhum componente externo para funcionamento
• Resolução máxima de 0.0625°C.
• Comunicação pelas interfaces SMBus e I2C™
• Comporta até 8 sensores no mesmo barramento. O TMP101 oferece função SMBus de alerta com até 3 sensores por barramento
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Características:
• Opera entre –55°C a +125°C.
• Saída digital: I2C Serial 2-vias.
• Resolução: 9 a 12-Bits, selecionável.
• Margem de Erro: ±2.0°C em –25°C a +85°C (max) e ±3.0°C de -55°C a +125°C (max)
• Fornecimento: 2.7V a 5.5V.
• TINY SOT23-6 PACKAGE.
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Aplicações:• Monitoração de fontes de energia
• Proteção contra superaquecimento de periféricos em computadores
• Notebooks
• Telefones Celulares
• Controle de baterias
• Máquinas de escritório
• Controles termostáticos
• Monitoramento de ambientes
• Controle de temperatura de componentes eletro-mecânicos
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Esquemático do Sensor Térmico
Interface com o Sensor TérmicoInterface com o Sensor TérmicoCaracterísticas ElétricasCaracterísticas Elétricas
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Características Típicas (1)Características Típicas (1)
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Características Típicas (2)Características Típicas (2)
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Estrutura de registrosEstrutura de registros
PointerRegister
I/O ControlInterface
ThighRegister
TlowRegister
ConfigurationRegister
TemperatureRegister
SCL
SDA
Interface com o Sensor TérmicoInterface com o Sensor Térmico
P7
0
P5
0
P6
0
P4
0
P3
0
P1
Register Bits
P2
0
P0
P1 P0 Register
0011
0101
Temperature Register (r)Configuration Register (rw)Tlow (rw)Thigh (rw)
D7
T11
D5
T9
D6
T10
D4
T8
D3
T7
D1
T5
D2
T6
D0
T4
D7
T3
D5
T1
D6
T2
D4
T0
D3
0
D1
0
D2
0
D0
0
Registradores (1):Registradores (1):
• Pointer Register
• Temperature Register
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Registradores (2):Registradores (2):
D7
Alert
D5
R0
D6
R1
D4
F1
D3
F0
D1
TM
D2
POL
D0
SD
D7
H11
D5
H9
D6
H10
D4
H8
D3
H7
D1
H5
D2
H6
D0
H4
D7
L3
D5
L1
D6
L2
D4
L0
D3
0
D1
0
D2
0
D0
0
D7
L11
D5
L9
D6
L10
D4
L8
D3
L7
D1
L5
D2
L6
D0
L4
D7
H3
D5
H1
D6
H2
D4
H0
D3
0
D1
0
D2
0
D0
0
• Tlow e Thigh RegistersTlow e Thigh Registers
• Configuration RegisterConfiguration Register
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Registrador de Configurações (1)Registrador de Configurações (1)D7
Alert
D5
R0
D6
R1
D4
F1
D3
F0
D1
TM
D2
POL
D0
SD
Shutdown mode
Thermostat mode
Polarity
Fault Queue
Resolution
R1 R0 ResolutionConversion
Time0011
0101
9 bits (0.5)10 bits (0.25)
11 bits (0.125)12 bits (0.0625)
40 ns80 ns
160 ns320 ns
T1 T0Consecutive
Faults0011
0101
1246
SDConsecutive
Faults0011
1246
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Registrador de Configurações (2)Registrador de Configurações (2)• Controle de AlertasControle de Alertas
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Protocolo I2C (1)Protocolo I2C (1)
Introdução:Introdução:O custo de comunicação entre componentes O custo de comunicação entre componentes tem que ser sempre o mínimo possíveltem que ser sempre o mínimo possívelA eficiência geral depende dos componentes e A eficiência geral depende dos componentes e da estrutura de interconexãoda estrutura de interconexãoPara satisfazer essa necessidade, uma conexão Para satisfazer essa necessidade, uma conexão serial é a melhor escolhaserial é a melhor escolhaPor que? Menos fios e menos pinos de conexãoPor que? Menos fios e menos pinos de conexão
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Protocolo I2C (2)Protocolo I2C (2)O I2C comporta ICs NMOS, CMOS, I2L, O I2C comporta ICs NMOS, CMOS, I2L, entre outrosentre outros2 fios (2 wires concept), Serial Data (SDA) 2 fios (2 wires concept), Serial Data (SDA) e Clock Serial (SCL), Carry Information e Clock Serial (SCL), Carry Information entre os ICs conectados ao mesmo entre os ICs conectados ao mesmo barramentobarramentoCada IC tem um endereço único no Cada IC tem um endereço único no barramentobarramento
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Protocolo I2C (3)Protocolo I2C (3)
Cada IC pode operar como transmissor ou Cada IC pode operar como transmissor ou receptor, não importando se é um receptor, não importando se é um keyboard, um LCD, Sensor, Memória ou keyboard, um LCD, Sensor, Memória ou qualquer outra coisaqualquer outra coisa
Conceito de Master/SlaveConceito de Master/Slave
Multi-Masters em um barramentoMulti-Masters em um barramento
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Protocolo I2C (4)Protocolo I2C (4)
SDASCL
LCD Driver
RAM Estática ou EEPROM
Micro computador B
Micro computador A
Sensor Térmico
I2C BUS
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Protocolo I2C (5)Protocolo I2C (5)Transmissor: o I2C que manda dados para o barramentoTransmissor: o I2C que manda dados para o barramentoReceptor: o I2C que recebe dados do barramentoReceptor: o I2C que recebe dados do barramentoMaster: inicia a transmissão, gera o clock e acaba a Master: inicia a transmissão, gera o clock e acaba a transmissãotransmissãoSlave: IC endereçado pelo MasterSlave: IC endereçado pelo MasterMulti-Master: mais que um Master pode tentar controlar o Multi-Master: mais que um Master pode tentar controlar o barramento sem corromper as mensagensbarramento sem corromper as mensagensArbritration: Procedimento que garante que se mais de um Arbritration: Procedimento que garante que se mais de um Master tentar simultaneamente ganhar o controle do Master tentar simultaneamente ganhar o controle do barramento, somente um é permitido o fazer e não barramento, somente um é permitido o fazer e não corromper as mensagens de amboscorromper as mensagens de ambosSincronização: sincroniza clocks de 2 ou mais IcsSincronização: sincroniza clocks de 2 ou mais Ics
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Protocolo I2C (6)Protocolo I2C (6)
1 2 7 8 9
Start End
Ack signal from receiver
Byte complete. Interrupt within receiver
Clock line held low while interrupts are serviced
Ack
Ack from Receiver
Transferência de dados no barramento I2C
SDA
SCLMSB
1 2 3-8 9Ack
Interface com o Sensor TérmicoInterface com o Sensor Térmico
Acoplagem do Sensor a um FPGAAcoplagem do Sensor a um FPGA
Braço Mecânico
FPGA
Pinos
ST
ConclusãoConclusão
• O braço mecânico é incapaz de efetuar uma rotação de 360 graus na base e na mão.
• Possui pouco mobilidade em seu braço, ou seja, não podemos levantar ou baixar demais o braço mecânico.
• Esperamos que este trabalho sirva de incentivo para trabalhos futuros.
• Esperamos ter uma maior mobilidade do braço mecânico.
•Código portável para qualquer placa FPGA.
Limitações e Futuras implementaçõesLimitações e Futuras implementações
top related