Rede de Instrumentaç˜ao e Atuaç˜ao para Manipulador IRB6

Transcrição

Rede de Instrumentaç˜ao e Atuaç˜ao para Manipulador IRB6
Universidade Federal de Minas Gerais
Curso de Graduação em Engenharia de Controle e Automação
Projeto de Fim de Curso II
Rede de Instrumentação e Atuação
para Manipulador IRB6
Thiago Bolivar Reis de Pinho
Orientador: Guilherme Augusto Silva Pereira
Supervisor: Bruno Vilhena Adorno
Janeiro de 2013
Monografia
Rede de Instrumentação e Atuação para Manipulador IRB6
Monografia submetida à banca examinadora para avaliação curricular da disciplina PFCII, para obtenção do grau de Engenheiro de Controle e Automação.
Belo Horizonte, Janeiro de 2013
Agradecimentos
Primeiramente, gostaria de agradecer aos meus pais, Alexandre e Shirleine, que estiveram comigo desde os primeiros passos da minha vida e até
hoje continuam ao meu lado, compartilhando momentos de alegrias e tristezas, conquistas e decepções, saúde e doença. Minha pessoa, meu caráter,
minha educação e minha maturidade são fruto de seus ensinamentos, conselhos e exemplos. A vocês serei eternamente grato e prometo continuar crescendo, evoluindo, buscando caminhos mais difı́ceis, voos mais altos, nunca
deixando de lado o caráter, dignidade, justiça e responsabilidade que com
vocês aprendi. Agradeço também à Thaı́ssa, minha irmã querida, pelo carinho, dedicação, força e amor que compartilhamos em 19 anos de amizade.
Agradeço também a minha maravilhosa famı́lia, que me criou, acolheu, deu
forças e bênçãos durante toda minha vida. Em especial, agradeço ao meu
avô Adalberto pelo companheirismo, conversas, brincadeiras, mesadinhas e
caronas de sempre. À minha avó Helena, pelos mimos, carinhos, amor incondicional, grandes histórias e ensinamentos de vida. Há, e claro, pelos
deliciosos almoços aos domingos!
Aos meus amigos, ou melhor, aos meus Brothers que estão comigo a nada
menos que 14 anos, obrigado por TUDO! Falar de nossa amizade, nossas
histórias, casos, viagens, diversões e da importância de vocês na minha vida
gastaria pelo menos umas ”trocentas”monografias. Uma para cada um de
vocês! Vocês estão no meu coração e certamente na minha vida para sempre!
Deixo um grande abraço a todos os amigos que fiz na faculdade. Os
melhores anos da minha vida compartilhei com vocês! Aos amigos da automação agradeço por compartilhar tantos cálculos, cervejas, trabalhos, festas, relatórios e calouradas! Além de tudo, foi em meio a tantas histórias
com vocês que conheci minha querida namorada Larissa, com compartilhei
momentos maravilhosos e que sempre me deu apoio, carinho e forças para
conquistar minhas vitórias!
Aos professores do curso de Engenharia de Controle e Automação da
UFMG, muito obrigado pelos ensinamentos, lições e conhecimentos. Vocês
fizeram parte da construção de um profissional que carregará com orgulho o
1
nome da Universidade Federal de Minas Gerais. Espero, enquanto profissional e pessoa, honrar com os conhecimentos e ensinamentos que com vocês
aprendi.
Ao professor Guilherme deixo um agradecimento especial pela oportunidade e confiança que me foi dada para desenvolver este projeto. Obrigado
pelo suporte, disponibilidade, cobrança e apoio de sempre. A todos os amigos
do CORO, agradeço pelo companheirismo e experiências que trocamos neste
último ano. Compartilhamos várias horas de programação, estudos, soldas e
cafés. Vocês ajudaram a tornar as horas de trabalho mais fáceis e divertidas.
Duas pessoas foram especialmente importantes no desenvolvimento deste
projeto. Aos meus ”mestres”Jullierme e Marcelo deixo um agradecimento
mais que especial pelos ensinamentos, conhecimentos e amizade de vocês.
Vocês me ajudaram a tornar este projeto possı́vel. Muito obrigado por tudo!
2
Resumo
Este trabalho descreve o desenvolvimento de uma rede de instrumentação
e atuação para um manipulador robótico modelo IRB6 do fabricante ASEA
pertencente ao Laboratório de Robótica, Soldagem e Simulação (LRSS) da
UFMG. Este manipulador fabricado em 1977 já participou de diversos projetos acadêmicos onde substituiu-se o hardware e software deste robô. Após
tantos projetos se fez necessário propor uma nova arquitetura de acionamento
e controle do robô e desenvolver uma rede de atuação e instrumentação que
permitisse acionar os motores e fazer leitura de dados dos sensores do IRB6.
Visando aproveitar a parte da estrutura de hardware existente, foi proposta
uma arquitetura baseada em microcontroladores PIC 18F2550 da Microchip
para gerar sinais de controle para os drivers de acionamento dos servomotores do IRB6. Estes microcontroladores ligados em uma rede que utiliza o
protocolo Modbus para se comunicar e receber mensagens de um computador através de uma porta serial. Esta nova arquitetura servirá de base para
novos projetos acadêmicos, pois é uma rede de código aberto que possibilita modificações e desenvolvimento de novas funcionalidades. Além disso, a
rede corrige uma série de problemas e limitações decorrentes da utilização de
softwares proprietários não adequados para realizar o controle de manipuladores robóticos. Testes mostraram que a rede de instrumentação e atuação
é capaz de acionar os motores do IRB6 e mostraram uma melhora nos sinais de controle quando comparados com os que eram gerados por softwares
utilizados anteriormente. Contudo, uma limitação de hardware dos microcontroladores utilizados possivelmente foi a causa de problemas na criação
de sinais de controle com frequências mais elevadas. Mesmo assim, a rede
apresentou várias melhorias em relação ao sistema de controle anterior e abre
várias possibilidades de modificação e desenvolvimento de novos projetos de
pesquisa.
Palavras chave: Rede de Instrumentação e Atuação, IRB6, Modbus, Manipulador Robótico.
Sumário
Agradecimentos
1
Resumo
3
1 Introdução
9
1.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Estrutura da Monografia . . . . . . . . . . . . . . . . . . . . . 10
2 Revisão Bibliográfica
2.1 Manipuladores Robóticos . . . . . . . . . . . . . . . . . . . .
2.2 Microcontroladores . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Interrupções . . . . . . . . . . . . . . . . . . . . . . .
2.2.2 Temporizadores . . . . . . . . . . . . . . . . . . . . .
2.2.3 Protocolos de comunicação de microcontroladores . .
2.3 Protocolo Modbus . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Modbus RTU . . . . . . . . . . . . . . . . . . . . . .
2.3.2 Camada de Dados - Modbus . . . . . . . . . . . . . .
2.3.3 Estrutura da Mensagem Modbus . . . . . . . . . . .
2.3.4 Diagrama de Estados e Funcionamento do Nó Mestre
2.3.5 Diagrama de Estados Funcionamento do Nó Escravo
3 Descrição do Histórico e Arquitetura do Manipulador
3.1 Histórico do manipulador ASEA IRB6 do LRSS - UFMG
3.2 Descrição dos componentes de hardware . . . . . . . . .
3.2.1 Atuadores . . . . . . . . . . . . . . . . . . . . . .
3.2.2 Sensores . . . . . . . . . . . . . . . . . . . . . . .
3.2.3 Driver de acionamento dos servo motores . . . . .
3.3 escrição dos Softwares Utilizados . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
13
13
14
14
15
16
16
16
18
19
.
.
.
.
.
.
21
21
22
23
23
24
25
4 Projeto da rede de instrumentação e atuação
4.1 Geração dos sinais STEP e DIRECTION . . . . . . . . . . . .
4.2 Configuração dos Temporizadores . . . . . . . . . . . . . . . .
4.3 Gerando os sinais STEP e DIRECTION . . . . . . . . . . . .
4.4 Resultados dos testes realizados para o sinal STEP . . . . . .
4.5 Modbus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1 Protocolo Modbus e a Rede de Instrumentação e Atuação
do IRB6. . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 Estrutura fı́sica da rede de instrumentação e atuação e testes
de funcionamento da rede Modbus. . . . . . . . . . . . . . . .
28
29
29
33
39
44
44
47
4.7
4.8
Testes de funcionamento e desempenho do IRB6 utilizando o
MACH3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.1 Operando o IRB6 através do MACH3 . . . . . . . . . .
4.7.2 Analise dos sinais de controle gerados pelo MACH3 . .
Controlando o robô a partir da rede de instrumentação e atuação
do IRB6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Conclusões e Sugestões para Trabalhos Futuros
5
50
50
52
56
62
Lista de Figuras
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Modelo 3D do Robô IRB6 do fabricante ASEA. (Em: http://diegouqz.blogspot.com.br/2008/08/irb6-asea-1973.html. Acesso em:
dezembro de 2012). . . . . . . . . . . . . . . . . . . . . . . . . 11
Juntas do manipulador ASEA IRB6 [ASEA Robotics, 1986]
[10]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Mensagens UNICAST [9] . . . . . . . . . . . . . . . . . . . . . 17
Estrutura de dados do Protocolo Modbus utilizando comunicação serial [9]. . . . . . . . . . . . . . . . . . . . . . . . . . 17
Estrutura de dados do Protocolo Modbus [9]. . . . . . . . . . . 18
Estrutura de dados do Protocolo Modbus utilizando comunicação serial [9]. . . . . . . . . . . . . . . . . . . . . . . . . . 18
Diagrama de estados que representa o funcionamento do nó
mestre na rede Modbus [9]. . . . . . . . . . . . . . . . . . . . . 18
Diagrama de estados que representa o funcionamento do nó
escravo na rede Modbus [9]. . . . . . . . . . . . . . . . . . . . 19
Estrutura de Hardware do Manipulador Robótico IRB 6 proposto no projeto de mestrado do aluno Marcelo Bonfim. . . . . 22
Motores do Robô IRB6: (a) Modelo sem freio. (b) Modelo
com freio. Fonte: Vasconcelos [12] (2003, p.4). . . . . . . . . . 23
Encoder utilizado no Retrofitting do ASEA IRB6. Fonte:
Lima II [8] (2005, p.47). . . . . . . . . . . . . . . . . . . . . . 24
Terminais do Geckodrive G320. Fonte: G320 Brush Servo
Drive [6] (2010, p.7). . . . . . . . . . . . . . . . . . . . . . . . 25
Especificações técnicas do Geckodrive modelo G320. [DECKODRIVE INC., 2010, p. 7]. . . . . . . . . . . . . . . . . . . 26
Nova Arquitetura de Hardware e software proposta. . . . . . . 28
Código da função ”gera pulsos”em C. . . . . . . . . . . . . . . 37
Sub-rotina executada à cada interrupção gerada pelos timers
0 e 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Sinal de 2kHz observado em um osciloscópio. . . . . . . . . . . 39
Configuração manual dos registradores para gerar sinal de
50kHz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Resultado do teste realizado configurando manualmente os registradores para gerar um sinal de 50kHz. . . . . . . . . . . . 43
Exemplo de mensagens para solicitar a criação de 10000 pulsos
com frequência 30kHz para a junta 1. . . . . . . . . . . . . . . 45
Exemplo de mensagens para solicitar a criação de 30000 pulsos
com frequência 70kHz para a junta 1. . . . . . . . . . . . . . . 46
6
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Função principal do programa. Aguarda que os valores de
pulsos e frequência sejam recebidos pela Modbus e em seguida
chama a rotina gera pulsos. . . . . . . . . . . . . . . . . . . .
Imagem da rede de instrumentação e atuação do IRB6 montada.
Interface do programa Docklight, utilizado para realizar testes
na rede Modbus através da porta serial. . . . . . . . . . . . .
Trecho do sinal gerado para frequência de 3,5kHz. . . . . . . .
Trecho do sinal gerado para frequência de 7kHz. . . . . . . . .
Trecho do sinal gerado para frequência de 13kHz. . . . . . . .
Código G gerado pelo Matlab para comandar o IRB6 realizar
uma solda de 100mm em linha reta. . . . . . . . . . . . . . .
Interface de operação do software MACH3. . . . . . . . . . . .
Trecho do sinal STEP gerado para a junta 1, no teste realizado
com o MACH3. . . . . . . . . . . . . . . . . . . . . . . . . . .
Ampliação da escala da figura 30, para um sinal gerado com
o feed rate de 216000. . . . . . . . . . . . . . . . . . . . . . . .
Trecho do sinal gerado com feed rate de 432000. . . . . . . . .
Trecho do sinal gerado com feed rate de 864000. . . . . . . . .
Trecho do sinal gerado com feed rate de 1728000. . . . . . . .
Frequência observada no osciloscópio de um sinal de 3590Hz
gerado a partir da rede de instrumentação e atuação do IRB6.
Frequência observada no osciloscópio de um sinal de 6966Hz
gerado a partir da rede de instrumentação e atuação do IRB6.
Frequência observada no osciloscópio de um sinal de 12990Hz
gerado a partir da rede de instrumentação e atuação do IRB6.
Frequência observada no osciloscópio de um sinal de 21225Hz
gerado a partir da rede de instrumentação e atuação do IRB6.
Manipulador ASEA IRB6 do Laboratório de Robótica, Soldagem e Simulação da UFMG. . . . . . . . . . . . . . . . . . . .
7
47
48
49
50
51
52
53
54
55
56
57
58
58
59
59
60
60
61
Lista de Tabelas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Caracterı́sticas principais dos temporizadores implementados
no PIC 18F2550. . . . . . . . . . . . . . . . . . . . . . . . . .
Tabela que relaciona os PRESCALERs disponı́veis para o Timer0 e as respectivas frequências mı́nima e máxima para o
sinal STEP com cada um. . . . . . . . . . . . . . . . . . . . .
Frequências do sinal STEP que podem ser geradas com o prescaler 1:1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Frequências do sinal STEP que podem ser geradas com o prescaler 1:2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Frequências do sinal STEP que podem ser geradas com o prescaler 1:4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Frequências do sinal STEP que podem ser geradas com o prescaler 1:8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Frequências do sinal STEP que podem ser geradas com o prescaler 1:16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Frequências do sinal STEP que podem ser geradas com o prescaler 1:32. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Relação entre número de pulsos e movimento de junta do IRB6
para as juntas 1, 2 e 3. . . . . . . . . . . . . . . . . . . . . . .
Relação entre número de pulsos e movimento de junta do IRB6
para as juntas 4 e 5. . . . . . . . . . . . . . . . . . . . . . . .
Correspondência entre o PRESCALER e a velocidade angular
mı́nima das juntas 1, 2 e 3. . . . . . . . . . . . . . . . . . . . .
Correspondência entre o PRESCALER e a velocidade angular
mı́nima das juntas 4 e 5. . . . . . . . . . . . . . . . . . . . . .
Resultado dos testes realizados para a função gera pulsos. . . .
Variação de Frequências entre pulsos analisadas com osciloscópio
para 4 valores de feed rate diferentes. . . . . . . . . . . . . . .
8
14
30
30
31
31
32
32
33
34
35
35
36
40
55
1
1.1
Introdução
Motivação
O laboratório de Robótica, Soldagem e Simulação (LRSS) da Universidade
Federal de Minas Gerais possui um manipulador robótico da marca ASEA
modelo IRB6, do ano de 1977. Este robô não possui mais o hardware original com o qual foi fabricado, pois já passou por vários processos de retrofitting. Foram trocados os motores e encoders do robô, além de uma revisão
completa da parte mecânica (rolamento, eixos etc...). O IRB6 possui cinco
servo-motores e o acionamento de cada um destes é realizado por um driver
de acionamento (da marca Geckodrive modelo G320). Estes drivers permitem o controle da posição e velocidade angular dos servo-motores do robô. Os
comandos para movimento das juntas são executados na linguagem de CNC
(código G) por meio de um software proprietário, MACH3, que não permite modificações em seu código ou interface. Outro problema da utilização
do software MACH3 é que ele foi desenvolvido especificamente para operar
máquinas de usinagem, portanto foram necessárias algumas adaptações para
ser possı́vel operar o manipulador.
Neste projeto desenvolveu-se uma rede de comunicação e instrumentação
entre um computador e os drivers de acionamento das juntas do IRB6, tornando a operação do robô mais fácil e eliminando o uso de softwares proprietários. A rede de instrumentação é composta de cinco microcontroladores
que são responsáveis por receber comandos de um computador, através de
uma porta serial, e gerar os sinais de controle que são enviados a cada driver de acionamento dos motores do robô. Outra vantagem da utilização da
rede de instrumentação é permitir a modificação do seu código fonte, por se
tratar de um programa de código aberto e de propriedade da Universidade
Federal de Minas Gerais, possibilitando a inclusão de novas funcionalidades,
substituição de sensores entre outras coisas.
1.2
Objetivos
A rede de instrumentação e atuação do manipulador robótico modelo ASEA
IRB6 tem como objetivo eliminar o uso de softwares proprietários Além disso,
com a nova rede de instrumentação e atuação é possı́vel incluir novas funcionalidades (como a inclusão/substituição de novos sensores e atuadores) e
futuros aprimoramentos, uma vez que se trata de uma arquitetura de código
aberto. Outra caracterı́stica desta rede é a facilidade de controle do manipulador através de diferentes computadores e sistemas operacionais, uma vez os
comandos enviados à rede de atuação são feitos através de uma porta serial
9
ou através de um conversor USB/serial (antes realizado através de uma porta
paralela e a necessidade de instalação do software MACH3).
1.3
Estrutura da Monografia
Esta monografia esta dividida em cinco capı́tulos, como se segue:
CAPÍTULO 1 - Introdução: Descrição do escopo do projeto de Desenvolvimento de uma Rede de Instrumentação e atuação para um Manipulador
Robótico. Apresentação da motivação, objetivos e etapas do projeto.
CAPÍTULO 2 - Revisão de Literatura: Revisão bibliográfica dos conhecimentos estudados e aplicados no contexto deste trabalho.
CAPÍTULO 3 - Descrição do Histórico e Arquitetura do Manipulador: Descrição da arquitetura e do funcionamento de hardware e software
do manipulador, antes do projeto da rede de instrumentação e atuação do
manipulador IRB6.
CAPÍTULO 4 - Implementação e Resultados: Descrição do desenvolvimento do projeto da rede de instrumentação e atuação do manipulador
robótico e apresentação dos resultados dos testes de operação do manipulador
robótico. Análise de desempenho e validação das funcionalidades implementadas.
CAPÍTULO 5 - Conclusões e Sugestões para Trabalhos Futuros:
Análise dos resultados dos testes, considerações finais do trabalho e propostas de trabalhos futuros.
10
2
Revisão Bibliográfica
Neste capı́tulo serão abordados os conceitos mais importantes que foram
utilizados como base para a compreensão e desenvolvimento do projeto da
rede de instrumentação e atuação do robô ASEA IRB6.
2.1
Manipuladores Robóticos
A norma ISO (International Organization for Standardization) 10218, [ISO
10218, 1992] [1] define um manipulador robótico com sendo ”uma máquina
manipuladora com vários graus de liberdade controlada automaticamente, reprogramável, multifuncional, que pode ter base fixa ou móvel para utilização
em aplicações de automação industrial”.
Um manipulador robótico é composto de uma estrutura mecânica (eixos, engrenagens, elos, etc), motores elétricos, sensores, controlador, fonte de
alimentação e uma interface para comunicação com um computador. Cada
articulação do robô é conhecida como ”junta”e representa um grau de liberdade. Cada junta é movimentada por meio de um motor elétrico (também
pode ser feito através de acionamento hidráulico) e possuem sensores que
informam ao controlador sua posição e velocidade. Na figura 1 estão representadas as juntas do manipulador ASEA IRB6 e seus respectivos atuadores.
Figura 1: Modelo 3D do Robô IRB6 do fabricante ASEA. (Em: http://diegouqz.blogspot.com.br/2008/08/irb6-asea-1973.html. Acesso em: dezembro de
2012).
11
Figura 2: Juntas do manipulador ASEA IRB6 [ASEA Robotics, 1986] [10].
A função do manipulador robótico é operar uma ferramenta (porta-eletrodo
para solda, ferramenta de corte para usinagem, garra para movimentação de
peças, e diversas outras aplicações), seguindo uma rotina pré-programada
com precisão, eficiência e repetibilidade.
O manipulador robótico utilizado neste trabalho é o IRB6, lançado no
mercado em 1974 pela empresa suı́ça ASEA (hoje faz parte da ABB Group).
Este foi o primeiro robô industrial totalmente elétrico produzido no mundo
já que até então, o acionamento de manipuladores robóticos era feito por
sistemas hidráulicos. Além disso, também foi o primeiro robô a ser controlado por um microprocessador, o Intel 8008. Ele possui capacidade de
carga de 6 kg e foi utilizado na indústria em diversas aplicações, como soldagem, manipulação e transporte de material, usinagem entre outros. O IRB6
foi produzido até 1991, sendo vendidos aproximadamente 7000 unidades no
mundo todo. Na figura 2 está representado um modelo gráfico do IRB6.
Para realizar o controle e operação do manipulador robótico é necessário
obter um modelo matemático que nos permita manipular a ferramenta no
espaço tridimensional independente do número de juntas e dimensões dos
eixos. Para isto utiliza-se o estudo da cinemática do robô, a partir dos
métodos matemáticos de ”Cinemática Direta”e ”Cinemática Inversa”[Craig,
J. J., 1989] [5]. Neste trabalho não será abordado o estudo da cinemática de
manipuladores, uma vez que este será um trabalho posterior.
A rede de instrumentação para o robô ASEA IRB6 desenvolvida neste
trabalho é baseada em microcontroladores, que serão descritos na próxima
12
seção.
2.2
Microcontroladores
Microcontroladores ou MCU (MicroController Unit) são pequenos computadores que contém um processador, memória RAM, portas periféricas de entrada/saı́da, conversores analógicos digitais, temporizadores, uma EEPROM
para armazenamento de memória permanente, entre outros componentes,
tudo isto contido em apenas um chip. Estes pequenos computadores são destinados ao uso em aplicações embarcadas, como aparelhos de som, máquinas
de lavar, esteiras industriais, controles remotos, brinquedos e às mais diversas aplicações. Geralmente os microcontroladores são utilizados em conjunto
com relés, solenoides, LEDs, pequenos painéis de LCD, sensores de temperatura, humidade, luminosidade e etc.
Neste projeto foram utilizados cinco microcontroladores PIC fabricados
pela Microchip [Microchip Tecnology Inc, 2004] [7] modelo 18F2550. Microcontroladores necessitam de um programa a ser gravado em sua EEPROM
para executarem suas tarefas. Compiladores de programas para microcontroladores aceitam diferentes linguagens de programação. As linguagens C,
Pascal e Assembly são as mais utilizados. O programador deve gerar seu programa em um ambiente de programação adequado (IDE), compilar o código
gerado e obter um arquivo do tipo ”.hex”que será gravado com um gravador
especı́fico, ou através de um bootloader utilizando um cabo USB.
2.2.1
Interrupções
Um importante recurso dos microcontroladores são as interrupções. Vários
outros recursos do microcontrolador utilizam desta ferramenta para determinar quais ações devem ser tomadas quando ocorre algum evento especı́fico
durante sua execução. Quando uma interrupção é sinalizada, o processador
interrompe a sequencia de processamento de instruções que estava sendo executada e chama uma rotina chamada ISP (Interrupt Service Routine) e em
seguida, retoma o processamento anterior. Interrupções podem ser geradas
quando ocorre o estouro (overflow ) de um timer, um botão é pressionado,
dados são recebidos através de um canal de comunicação e outros mais. Este
é possivelmente o mais importante recurso dos MCUs. Interrupções são especialmente usadas em aplicações onde o consumo de energia é crı́tico. Nestes
casos o MCU passa grande parte do tempo em estado de baixo consumo,
reduzindo a sua frequência de trabalho (clock ) e desativando grande parte de
seus recursos (como conversores A/D, temporizadores, comunicação e etc...).
Quando um evento externo ocorre e o processador necessita ”acordar”uma
13
interrupção é gerada e o microcontrolador passa para um estado ativo, onde
seus recursos são reativados até que sua tarefa seja realizada, voltando ao
estado ocioso.
2.2.2
Temporizadores
Os temporizadores são utilizados basicamente para marcar/contar tempo.
Um microcontrolador geralmente possui vários temporizadores. O modelo
18F2550 da Microchip utilizado possui 4 timers. O timer necessita de uma
fonte de clock para contar o tempo, que pode ser uma fonte de clock externa
ou a própria frequência de clock do processador. Para sua utilização deve-se
definir um PRESCALER e um POSTSCALER (multiplicadores e divisores
de clock ) para definir a base de tempo. Quando o timer é habilitado, a
cada unidade da base de tempo decorrida um registrador é incrementado em
uma unidade. Este registrador pode ser de 8 ou 16 bits. Quando ocorre um
estouro do contador (overflow ) uma interrupção é sinalizada ao processador
do MCU que irá invocar uma ISP que foi definida pelo programador. A tabela
1 mostra as principais caracterı́sticas dos temporizadores implementados no
PIC 18F2550.
Temporizador
Timer0
Timer1
Timer2
Timer3
PIC 18F2550
Prescaler
1, 2, 4, 8, 16, 32, 64, 128 ou 256
1, 2, 4 ou 8
1, 4 ou 16
1, 2, 4 e 8
Postscaler
não possui
não possui
1, 2, 4, 8 ou 16
não possui
Contador
8 ou 16 bits
16 bits
8 bits
8 ou 16 bits
Tabela 1: Caracterı́sticas principais dos temporizadores implementados no
PIC 18F2550.
2.2.3
Protocolos de comunicação de microcontroladores
Microcontroladores podem se comunicar através de alguns protocolos de comunicação e meios fı́sicos. O microprocessador 18F2550 da Microchip implementa dois tipos de comunicação: o I2C e serial (UART). Contudo, em
[Arruda, 2009] [2] desenvolveu-se uma implementação do protocolo Modbus,
que foi utilizado como base para fazer a comunicação entre os PICs na rede
de instrumentação e atuação. No capı́tulo a seguir está descrito o protocolo
MODBUS, escolhido para fazer a comunicação da rede de instrumentação e
atuação do robô IRB6.
14
2.3
Protocolo Modbus
Modbus é um protocolo de comunicação de dados desenvolvido em 1979 pela
fabricante de equipamentos industriais Modicon. Ele foi criado originalmente
para ser utilizado em aplicações industriais para fazer a comunicação entre
dispositivos inteligentes e Controladores Lógicos Programáveis (CLPs). A
Schneider Electric (atual proprietária da Modicon) criou em 2004 a Modbus
Organization, que detém os direitos sobre o protocolo, que por sua vez é livre
de taxas de licenciamento. Por se tratar de um protocolo simples, de baixo
custo e implementado sob diversos meios fı́sicos, o Modbus é aplicado para
diversos tipos de aplicações.
O protocolo Modbus possui diferentes implementações de acordo com o
meio fı́sico utilizado, que pode ser via porta serial, Ethernet ou redes Wireless.
Algumas das versões mais utilizadas são:
• Modbus RTU - Este é utilizado para comunicação serial. É a versão
mais utilizada do protocolo Modbus. Utiliza um modelo binário e compacto para representação dos dados. O RTU envia dados seguidos de
um mecanismo de detecção de integridade de dados chamado CRC (Cyclic Redundancy Check ). As mensagens precisam ser enviadas continuamente, sem interrupções, e são separadas por pausas na transmissão.
• Modbus ASCII - Esta versão é utilizada também em comunicação serial,
porém utiliza caracteres ASCII para representar os dados. As mensagens são separadas por dois pontos (”:”) e o mecanismo de detecção de
erros é o LRC (longitudinal redundancy check ).
• Modbus TCP/IP or Modbus TCP - Versão do protocolo Modbus utilizado para comunicação sob redes TCP/IP. Não implementa mecanismos de detecção de erros, uma vez que as camadas mais baixas de
comunicação já implementam métodos para garantir a integridade de
dados.
• Modbus Plus (Modbus+, MB+ or MBP) - Modbus implementada sob
rede Fieldbus. Esta versão permanece sob propriedade da Schneider
Electric e requer um co-processador dedicado para gerenciar uma rede
de token rotation. Para conectar a rede ao computador é necessário
utilizar um barramento ISA (SA85), PCI ou PCMCIA.
No projeto da rede de instrumentação e atuação do manipulador ASEA
IRB6, foram utilizados microcontroladores PIC 18F2550. Estes microcontroladores não possuem uma implementação do protocolo Modbus por padrão.
Estes microprocessadores oferecem apenas suporte a comunicação I2C e UART
15
(serial). Contudo, o protocolo Modbus RTU foi desenvolvido para o PIC
18F2550 no projeto ”Rede de Instrumentação para Controle Embarcado”[Arruda,
2009] [2], onde foi criado uma rede de instrumentação utilizada para atuação
e controle de veı́culos autônomos, e posteriormente aplicado no projeto do
carro autônomo desenvolvido no CORO.
Para o projeto da rede de instrumentação e atuação do IRB6 utilizou-se
como base a rede já implementada em [Arruda, 2009] [2]. Na seção 4.5 desta
monografia será descrito a utilização do protocolo Modbus neste projeto a as
modificações necessárias para seu funcionamento. À seguir será descrita uma
breve revisão do protocolo Modbus RTU e suas principais caracterı́sticas.
2.3.1
Modbus RTU
O Modbus RTU é um protocolo do tipo Mestre-Escravo. Este sistema
possui um nó mestre que envia comandos explı́citos para os nós escravos, o
qual processa a mensagem e envia uma resposta. Geralmente os nós escravos
não enviam respostas expontaneamente e nem mesmo se comunicam com
outros escravos.
2.3.2
Camada de Dados - Modbus
O protocolo Modbus RTU é do tipo mestre-escravo. Neste formato, apenas
um nó mestre é ligado à rede e vários nós escravos, em um máximo de 247
nós (2 Bytes são utilizados para endereçar nós escravos, porém o endereço
0, e os endereços entre 248 e 255 são reservados pelo protocolo). A comunicação sempre é inicializada pelo mestre, portanto um nó escravo jamais
irá transmitir dado sem ser requisitado. O mestre pode enviar dois tipos de
mensagens, uma mensagem UNICAST (para um único escravo) ou BROADCAST (para todos os escravos). No caso das mensagens do tipo UNICAST
o mestre aguarda receber uma resposta do escravo para o qual a mensagem
foi endereçada, como representado na figura 3. Já no caso de mensagens do
tipo BROADCAST, ver figura 4, nenhuma resposta é enviada pelos escravos
e o endereço ”0”é reservado para mensagens desta natureza.
2.3.3
Estrutura da Mensagem Modbus
A camada de aplicação Modbus define uma simples estrutura de dados PDU
(Protocol Data Unit), independente da camada de comunicação, mostrada
na figura 5. Contudo, a utilização de determinadas camadas de comunicação
no protocolo pode inserir alguns campos extras nesta estrutura de dados. No
caso da versão RTU, os campos adicionais Address e CRC são necessários,
ver figura 6.
16
Figura 3: Mensagens UNICAST [9]
.
Figura 4: Estrutura de dados do Protocolo Modbus utilizando comunicação
serial [9].
O campo Address possui 2 bytes e guarda o endereço do nó escravo ao qual
a mensagem será endereçada pelo mestre.
O campo Function possui 2 bytes e armazena um código de função ao qual
indicará ao escravo qual tarefa a ser executada.
O campo Data possui 4 bytes e contém informações adicionais, caso necessário, para a execução da tarefa solicitada pelo nó mestre, segundo o
campo Function.
O campo CRC possui 4 bytes e é destinado ao cálculo de checksum, para
garantir a integridade de dados da mensagem.
17
Figura 5: Estrutura de dados do Protocolo Modbus [9].
Figura 6: Estrutura de dados do Protocolo Modbus utilizando comunicação
serial [9].
2.3.4
Diagrama de Estados e Funcionamento do Nó Mestre
A figura 7 mostra um diagrama explicando o comportamento do nó Mestre
na rede Modbus.
Figura 7: Diagrama de estados que representa o funcionamento do nó mestre
na rede Modbus [9].
1. Caso uma mensagem do tipo broadcast seja enviada, o nó mestre
aguarda um tempo pré-determinado para que todos os nós escravos
recebam a mensagem e executem sua requisição. Após este tempo, o
nó mestre volta ao estado ”ocioso”, até tomar nova ação.
18
2. No caso onde uma mensagem do tipo unicast seja enviada a um nó
escravo, o nó mestre aguarda por uma resposta do escravo. Nesta
situação três situações podem ocorrer:
(a) O escravo recebe a mensagem, e envia uma resposta, confirmando
o recebimento e a execução da tarefa solicitada. Neste caso o nó
mestre volta ao estado ocioso.
(b) O escravo recebe a mensagem, porém envia uma resposta sinalizando erro. Neste caso, pode ter ocorrido erro de checksum incorreto ou algum dado enviado está inconsistente com a função
solicitada. De acordo com a resposta enviada pelo nó escravo é
possı́vel identificar o erro ocorrido.
(c) Nenhum escravo respondeu à mensagem enviada. Neste caso pode
ter ocorrido interrupção no meio fı́sico, erro de software do nó escravo ou endereço de escravo inexistente. Após passar um tempo
pré-determinado o nó mestre identifica um ”timeout”, e em seguida retorna para o estado ocioso.
2.3.5
Diagrama de Estados Funcionamento do Nó Escravo
A Figura 8 mostra um diagrama explicando o comportamento do nó Escravo
na rede Modbus.
Figura 8: Diagrama de estados que representa o funcionamento do nó escravo
na rede Modbus [9].
19
Os nós escravos permanecem na maior parte do tempo no estado ocioso.
Eles somente saem deste estado caso uma mensagem do mestre seja enviada
para rede. Neste caso, podem acontecer as seguintes situações:
1. A mensagem recebida está consistente (dados condizentes e checksum
correto). Nesta situação o nó escravo irá executar a tarefa solicitada
e retornar uma mensagem ao mestre confirmando o recebimento da
solicitação e por fim, retorna ao estado ocioso.
2. A mensagem recebida está com dados inconsistentes ou ocorreu um erro
durante o processamento da requisição. Nesta situação uma mensagem
contendo uma informação de erro é preparada e enviada de volta ao nó
mestre e em seguida retorna ao estado ocioso.
3. A mensagem recebida está com checksum incorreto, ou a mensagem
está endereçada a outro nó escravo. Nesta situação o escravo apenas
retorna ao estado ocioso.
Neste capı́tulo foi feito uma revisão dos principais conceitos que foram
utilizados no desenvolvimento da Rede de Instrumentação e Atuação do robô
ASEA IRB6. No capı́tulo 4 iremos ver a aplicação destes conceitos no desenvolvimento do projeto. Porém, antes se deve analisar o contexto em que
o projeto está sendo desenvolvido. No capı́tulo 3 será descrito o histórico do
manipulador que estamos utilizando neste projeto, seus atuais componentes
de hardware e software, como são realizados os comandos de movimentação
das juntas e as deficiências deste sistema.
20
3
Descrição do Histórico e Arquitetura do
Manipulador
Antes de explicar sobre o projeto desenvolvido é necessário descrever o histórico
do robô ASEA IRB6 que está sendo utilizado neste projeto. Por ser um robô
com mais de três décadas de funcionamento e que já participou de diversos
projetos e trabalhos cientı́ficos, nosso robô tem algumas peculiaridades que
precisamos destacar.
3.1
Histórico do manipulador ASEA IRB6 do LRSS UFMG
Em 1998 o DEMEC/UFMG recebeu uma doação de um manipulador ASEA
IRB6 pela Fachhochshule de Ulm na Alemanha. Este robô, objeto de trabalho deste projeto, foi incorporado ao projeto ”Retrofitting do Robo Manipulador ASEA IRB6 S2”, [Bracarense, 1999] [4]. Este artigo teve como
objetivo descrever os procedimentos e análises para o retrofitting do ASEA
IRB6, criando uma plataforma de controle de código aberto que serviria de
estudos para os alunos de engenharia da UFMG.
No ano de 2001, Vasconcelos (2003) [12] iniciou o projeto de retrofitting deste robô. Após realizada uma análise detalhada de seus componentes,
constatou-se que sua estrutura mecânica estava em ótimo estado, porém os
componentes eletrônicos analógicos do sistema de controle estavam defasados
e necessitavam de manutenção. Optou-se pela substituição destes componentes por uma nova estrutura de controle baseada em eletrônica digital. Tanto
os sensores e os atuadores foram trocados por novos modelos, que estão até
a data deste trabalho em operação no manipulador.
Em 2005, Eduardo José Lima II [8] desenvolveu um trabalho ”Soldagem
Robotizada com Eletrodo Revestido”. Este trabalho visava o desenvolvimento de um processo de soldagem com eletrodo revestido utilizando um
manipulador robótico que permitisse ao programador um controle total sob
a variação de parâmetros e movimentos. Para isto era necessário um robô
industrial com arquitetura aberta e flexibilidade de programação que permitisse o desenvolvimento de algoritmos para geração de trajetórias. Por fim,
desenvolveu-se a modelagem cinemática do IRB6 e geração de trajetórias em
um programa do Matlab.
BOMFIM, M. H. S. (2012) [3] define um novo conceito para manutenção de manipuladores robóticos, como alternativa ao Retrofitting, chamado Overhauling. Seu trabalho desenvolveu uma cabine universal de acionamento de robôs com interface de comunicação com um computador. Neste
21
conceito, todos os componentes elétricos e eletrônicos do robô (motores, sensores, drives de acionamentos, etc...) são trocados por novos, mantendo apenas sua estrutura mecânica. Com isto é possı́vel criar uma cabine universal
que possa ser aplicado em qualquer manipulador robótico fazendo pequenas
ou nenhuma modificação. A estrutura de hardware proposta em seu trabalho
para o sistema de controle do manipulador é mostrada na figura 9.
Figura 9: Estrutura de Hardware do Manipulador Robótico IRB 6 proposto
no projeto de mestrado do aluno Marcelo Bonfim.
Com a aplicação do conceito de Overhauling é possı́vel garantir que robô
irá funcionar por um longo perı́odo, sem correr o risco dos componentes
reaproveitados virem a falhar em curto prazo. Segundo [Bomfim, 2012] [3],
a troca destes componentes eleva de maneira pouco significativa o custo da
reforma, em relação ao tradicional processo de Retrofiting, e seu benefı́cio
muitas vezes é compensatório, principalmente em casos onde não existem
um histórico de reformas e manutenção do robô.
3.2
Descrição dos componentes de hardware
Após todos estes trabalhos desenvolvidos com o IRB6, o hardware e software
originais foram substituı́dos. A seguir serão descritos os componentes de
hardware e software do robô até o momento anterior ao desenvolvimento
deste projeto.
22
3.2.1
Atuadores
Para operar as juntas do robô foram utilizados dois tipos de motores, mostrados na figura 3.2. Ambos os modelos são motores de corrente contı́nua
e trabalham com tensão nominal de 35V (volts) e corrente nominal de 6,5A
(amperes). A diferença é que os atuadores das juntas 2 e 3, ver figura 10,
possuem freios e são acionados por um sinal de tensão de 24V (volts) e corrente nominal de 0,37A (amperes). Os freios são normalmente ativos, ou seja,
ficam bloqueados até que se aplique a tensão nominal. Esta escolha se deve
ao fato de em caso de falta de energia elétrica os motores irão ficar travados
por motivo de segurança.
Figura 10: Motores do Robô IRB6: (a) Modelo sem freio. (b) Modelo com
freio. Fonte: Vasconcelos [12] (2003, p.4).
3.2.2
Sensores
O hardware original do IRB6 utilizava resolvers e tacômetros para determinar
a posição e velocidade das juntas, respectivamente. Ambos os sensores foram
substituı́dos por encoders de 8192 pulsos por revolução, modelo igual ao
mostrado na figura 11, onde o número de pulsos representa a posição e a
frequência destes pulsos a velocidade de giro da junta.
Além de tacômetros e resolvers o robô original utilizava chaves de sincronismo (sync switchs) para obter a posição absoluta das juntas. Contudo, com o passar do tempo estas chaves foram removidas do manipulador.
Quando este projeto foi desenvolvido, para que o manipulador ficasse na
posição ZERO, era necessário ajustar o manipulador manualmente, observando algumas marcações realizadas com fitas adesivas. Com esta limitação
ficou impossibilitado o desenvolvimento de algumas estratégias no projeto
que serão abordadas posteriormente.
23
Figura 11: Encoder utilizado no Retrofitting do ASEA IRB6. Fonte: Lima
II [8] (2005, p.47).
3.2.3
Driver de acionamento dos servo motores
O IRB 6 possui cinco juntas e, portanto, cinco servo-motores e cinco encoders.
Para fazer o acionamento de cada um destes motores foi utilizado um driver
da marca Geckodrive modelo G320. Cada um dos cinco drivers G320 recebe
sinais de controle do computador através de uma porta paralela.
O Geckodrive G320 possui um borne com entradas e saı́das onde se deve
conectar:
TERMINAL 1 Power Ground: cabo negativo da fonte de alimentação;
TERMINAL 2 Power (+): cabo positivo da fonte de alimentação . A
tensão deve ser um valor entre +18VDC e +80VDC;
TERMINAL 3 Armature (-): cabo negativo da armadura do motor;
TERMINAL 4 Armature (+): cabo positivo da armadura do motor;
TERMINAL 5 ERR/RES: Pino de ERRO e RESET;
TERMINAL 6 Encoder Ground: alimentação negativa do encoder;
TERMINAL 7 Encoder +5VDC: alimentação positiva do encoder;
TERMINAL 8 Channel A: canal A do encoder;
TERMINAL 9 Channel B: canal B do encoder;
TERMINAL 10 Direction: sinal de controle DIRECTION;
TERMINAL 11 Step: sinal de controle STEP;
TERMINAL 12 S/D Common: Conecte em +5VDC.
O G320 só opera em malha fechada, logo, precisa de um encoder para fechar
24
a malha de controle. Os sinais de entrada STEP e DIRECTION são responsáveis por comandar o acionamento dos motores. Para cada pulso de 5V
na entrada STEP o motor irá dar um ”passo”. O tamanho do passo depende
da resolução do encoder e da redução mecânica na junta do robô. Logo, controlando o número e a frequência dos pulsos na entrada STEP, determina-se
respectivamente o ângulo e velocidade angular de movimentação de uma
junta do motor. A entrada DIRECTION é uma entrada binária (0V ou 5V)
que determina o sentido de giro do servo-motor. Na figura 12 está representado um modelo do Geckodrive G320.
Figura 12: Terminais do Geckodrive G320. Fonte: G320 Brush Servo Drive
[6] (2010, p.7).
O Geckodrive G320 possui ainda um controlador PID, que pode ser ajustado através de trimpots localizados no lado oposto ao borne de conectores.
O ajuste incorreto do PID pode resultar na oscilação na tensão de armadura do servo-motor, causando uma vibração da junta do motor e um ruı́do
caracterı́stico.
As especificações técnicas do G320 poder ser verificadas na figura 13.
3.3
escrição dos Softwares Utilizados
Com a substituição do hardware no robô, também houve a necessidade de
alterar seus softwares de controle. Os cálculos de cinemática, assim como as
estratégias para determinação de trajetórias do manipulador estão implementados em um programa do Matlab. Desenvolvido em José Lima II, Eduardo
25
Figura 13: Especificações técnicas do Geckodrive modelo G320. [DECKODRIVE INC., 2010, p. 7].
(2005) [8] este programa foi adaptado para gerar a trajetória do robô em
formato de comando de máquina (código G). Este código G é carregado em
outro software chamado MACH3 que foi desenvolvido para operar máquinas
de usinagem CNC e adaptado para operar o IRB6. Através da porta paralela
do computador o MACH3 gera os sinais de STEP e DIRECTION para cada
um dos drivers de acionamento dos servomotores do IRB6, fazendo assim o
controle de sua trajetória.
Decorrente deste sistema de controle pode-se identificar algumas deficiências
e inconvenientes. A falta de integração entre o Matlab e o MACH3 é um
exemplo. Toda vez que é necessário executar uma tarefa com o manipulador, executa-se o script do Matlab para calcular a trajetória, em seguida
copiava-se os comandos em código G para o MACH3 para então operar o
robô. Operações simples como girar uma determinada junta em um certo
ângulo já é bastante trabalhoso. Outro inconveniente seria a utilização de
dois softwares proprietários, com altos valores agregados de licença. Além
destes fatores, o MACH3 foi desenvolvido para ser utilizado em máquinas
de comando numérico. Neste tipo de aplicação, o controle de velocidade individual das juntas é negligenciado, pois só se faz necessário o controle da
velocidade da ferramenta em si. Este controle da ferramenta é calculado
através de um parâmetro chamado ”Feed Rate”que limita o movimento das
juntas de maneira que a ferramenta não ultrapasse a velocidade estipulada.
Esta estratégia não funciona corretamente, uma vez que o MACH3 não possui
26
informações sobre as dimensões, graus de liberdade e localização das juntas.
Outro fator a ser observado é que este software não possui código aberto,
portanto não é possı́vel corrigir alguns problemas e limitações modificando
seu código, o que é indesejado para um robô de pesquisa da Universidade
Federal de Minas Gerais.
Como solução deste problema propôs-se a criação de uma rede de instrumentação e atuação de código aberto, utilizando microprocessadores PIC
para a geração dos sinais de controle dos drivers dos motores, eliminando-se
assim a utilização do software MACH3 e simplificando a operação do robô.
Além disto, é possı́vel integrar o Matlab com a rede de instrumentação e
atuação, uma vez que o Matlab consegue enviar mensagens através da porta
serial. Posteriormente seria possı́vel até mesmo eliminar o uso do Matlab,
desenvolvendo-se uma aplicação dedicada que implementasse os cálculos de
cinemática do IRB6 e realizasse a comunicação serial.
No capı́tulo seguinte, descreve-se o desenvolvimento do projeto da rede
de instrumentação e atuação do IRB6, os testes realizados e uma análise dos
resultados obtidos.
27
4
Projeto da rede de instrumentação e atuação
Para desenvolver a rede de instrumentação e atuação foi necessário criar uma
nova interface para realizar a comunicação entre o computador e o manipulador robótico, eliminando a utilização do software MACH3 e seus inconvenientes. Assim, idealizou-se uma rede, composta por cinco microcontroladores
com a função de gerar os sinais de controle que são enviados ao Geckodrive
G320. Estes microcontroladores devem se comunicar através de algum protocolo de comunicação e receber requisições do computador para a criação
dos sinais STEP e DIRECTION através de portas de saı́da digital. O Geckodrive G320 possui uma restrição em relação ao sinal de entrada STEP, que
não deve ultrapassar a frequência de 250kHz.
Observando as restrições e exigências da rede, decidiu-se por utilizar microcontroladores Microchip PIC 18F2550. Para realizar a comunicação da
rede, utilizou-se do protocolo Modbus via porta serial desenvolvido em [Arruda, 2009] [2].
Na nova arquitetura de acionamento do robô proposta os cálculos de cinemática direta serão implementados em um computador dedicado. Este
calcula a trajetória do movimento do robô e cria as mensagens do protocolo Modbus endereçados para os microcontroladores através de uma porta
serial. Após receber mensagens com solicitação do computador, os microcontroladores enviam sinais de controle para os drives G320, através das saı́das
digitais. O diagrama mostrado na figura 14 descreve o funcionamento da
nova arquitetura proposta para acionamento do IRB6.
Figura 14: Nova Arquitetura de Hardware e software proposta.
Esta nova arquitetura utiliza um software de código aberto que pode
ser modificado de acordo com a necessidade da aplicação do manipulador
robótico. Isto é desejável, uma vez que o robô é utilizado para pesquisa na
28
Universidade Federal de Minas Gerais e outras melhorias e novas funcionalidades podem ser feitas em projetos futuros. Além disso, não é mais necessária
a utilização de um software proprietário para acionamento do manipulador.
4.1
Geração dos sinais STEP e DIRECTION
O primeiro passo de desenvolvimento do projeto foi o desenvolvimento de
um programa para geração dos sinais STEP e DIRECTION utilizando o
PIC 18F2550.
O sinal STEP é composto por vários pulsos de onda quadrada de largura
fixa e amplitude de 5 Volts. Cada pulso fará com que o servo motor movimente a junta do robô em um pulso do encoder. A frequência com que estes
pulsos são enviados para o driver de acionamento representa a velocidade angular de movimentação da junta. O sinal DIRECTION determina o sentido
de giro do motor e pode receber dois tipos de sinal, 0 ou 5 Volts.
Para gerar os sinais de controle são necessárias duas informações: o
número de pulsos e a frequência com que serão gerados. A largura dos
pulsos foi definida como um valor fixo, por simplificação, uma vez que este
parâmetro não tem influência no funcionamento do driver G320. A frequência
máxima de operação do driver é de 250kHz.
Dois temporizadores do microcontrolador foram utilizados para gerar o
sinal STEP, os temporizadores (timers) 0 e 1. O timer0 foi utilizado para determinar a transição do subida do sinal (transição de 0V para 5V), enquanto
o timer1 determinava a transição de descida (de 5V para 0V).
4.2
Configuração dos Temporizadores
Para simplificar a arquitetura do projeto, escolheu-se por utilizar o clock
do processador do PIC como referência para os temporizadores, ao invés de
utilizar uma fonte de clock externa. Nesta situação, divide-se o clock do
processador por 4 e obtém-se o valor do clock do timer. O PIC 18F2550
está configurado para trabalhar em 48MHz, portanto o clock de referência
do timer é 12MHz.
O timer0 foi definido para contar o intervalo de tempo entre cada pulso
STEP. O próximo passo foi definir um PRESCALER (divisor de clock ) para
o temporizador. A tabela 2 mostra todos os valores de prescaler disponı́veis
para o timer0, e os respectivos valores de frequência mı́nima e máxima que são
possı́veis gerar com cada um. A frequência mı́nima foi obtida multiplicando
o perı́odo por 65536, número máximo de pulsos de clock que os registradores
de 16 bits do temporizador conseguem contar, antes de chamar uma Interrupt
Routine Service.
29
PRESCALER
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
Timer0
Clock do Timer (Hz)
12000000
6000000
3000000
1500000
750000
375000
187500
93750
46875
Perı́odo (s)
8,33E-08
1,67E-07
3,33E-07
6,67E-07
1,33E-06
2,67E-06
5,33E-06
1,07E-05
2,13E-05
Freq Min (Hz)
183,11
91,55
45,78
22,89
11,44
5,72
2,86
1,43
0,72
Tabela 2: Tabela que relaciona os PRESCALERs disponı́veis para o Timer0
e as respectivas frequências mı́nima e máxima para o sinal STEP com cada
um.
Analisando as informações da tabela 2, pode-se descartar as configurações
que utilizam os prescalers 1:64, 1:128 e 1:256, uma vez que com estes não é
possı́vel gerar sinais com a frequência máxima desejada de 250kHz.
Para decidir qual PRESCALER será utilizado, além de observar as frequências
mı́nimas e máximas possı́veis para o sinal STEP, deve-se observar que o
perı́odo do clock do timer determina quais as frequências do sinal STEP
podem ser geradas. Isto se deve ao fato de que só será possı́vel gerar sinais
STEP tais que seu perı́odo seja múltiplo do perı́odo do clock do timer. As
possı́veis frequências do sinal STEP geradas por cada prescaler em função do
número de unidades de clock do timer0 está mostrado nas tabelas 3 até 8.
Clock do Timer (Hz)
Unidades de Clock
1
2
3
4
5
6
7
8
9
10
20
Prescaler 1:1
12000000
Perı́odo Fundamental (s)
Sinal Gerado (Hz)
Unidades de Clock
12000000
30
6000000
40
4000000
50
3000000
100
2400000
500
2000000
1000
1714285,714
5000
1500000
10000
1333333,333
30000
1200000
50000
600000
65535
8,33E-08
Sinal Gerado (Hz)
400000
300000
240000
120000
24000
12000
2400
1200
400
240
183,1082628
Tabela 3: Frequências do sinal STEP que podem ser geradas com o prescaler
1:1.
Analisando as tabelas 3 até 8 verifica-se que quanto menor o prescaler
utilizado melhor a resolução da frequência gerada para o sinal STEP. Em
30
Clock do Timer (Hz)
Unidades de Clock
1
2
3
4
5
6
7
8
9
10
20
Prescaler 1:2
6000000
Perı́odo Fundamental (s)
Sinal Gerado (Hz)
Unidades de Clock
6000000
30
3000000
40
2000000
50
1500000
100
1200000
500
1000000
1000
857142,8571
5000
750000
10000
666666,6667
30000
600000
50000
300000
65535
1,67E-07
Sinal Gerado (Hz)
200000
150000
120000
60000
12000
6000
1200
600
200
120
91,55413138
Tabela 4: Frequências do sinal STEP que podem ser geradas com o prescaler
1:2.
Clock do Timer (Hz)
Unidades de Clock
1
2
3
4
5
6
7
8
9
10
20
Prescaler 1:4
3000000
Perı́odo Fundamental (s)
Sinal Gerado (Hz)
Unidades de Clock
3000000
30
1500000
40
1000000
50
750000
100
600000
500
500000
1000
428571,4286
5000
375000
10000
333333,3333
30000
300000
50000
150000
65535
3,33E-07
Sinal Gerado (Hz)
100000
75000
60000
30000
6000
3000
600
300
100
60
45,77706569
Tabela 5: Frequências do sinal STEP que podem ser geradas com o prescaler
1:4.
contrapartida, quando maior o prescaler, maior o valor da frequência mı́nima
que é possı́vel de ser gerado. Logo, temos uma relação de compromisso que
precisa ser avaliada para fazer a melhor escolha do prescaler para a rede de
instrumentação e atuação do IRB6.
Para fazer esta escolha, foram necessárias outras informações. A escolha da frequência mı́nima do sistema determina a menor velocidade angular
mı́nima com que as juntas do manipulador irão girar. Além da frequência
mı́nima dos sinais STEP, mais dois fatores influenciam na velocidade angular das juntas: a redução mecânica das engrenagens do manipulador e a
resolução do encoder de cada junta.
Cada junta do IRB6 possui reduções mecânicas, através de engrenagens e
para reduzir o esforço realizado pelos motores elétricos. As engrenagens das
juntas 1, 2 e 3 são de 158:1, ou seja, eleva o torque do motor em 158 vezes
e reduz sua velocidade na mesma proporção. Isto faz com que cada volta
31
Clock do Timer (Hz)
Unidades de Clock
1
2
3
4
5
6
7
8
9
10
20
Prescaler 1:8
1500000
Perı́odo Fundamental (s)
Sinal Gerado (Hz)
Unidades de Clock
1500000
30
750000
40
500000
50
375000
100
300000
500
250000
1000
214285,7143
5000
187500
10000
166666,6667
30000
150000
50000
75000
65535
6,67E-07
Sinal Gerado (Hz)
50000
37500
30000
15000
3000
1500
300
150
50
30
22,88853285
Tabela 6: Frequências do sinal STEP que podem ser geradas com o prescaler
1:8.
Clock do Timer (Hz)
Unidades de Clock
1
2
3
4
5
6
7
8
9
10
20
Prescaler 1:16
750000
Perı́odo Fundamental (s)
Sinal Gerado (Hz)
Unidades de Clock
750000
30
375000
40
250000
50
187500
100
150000
500
125000
1000
107142,8571
5000
93750
10000
83333,33333
30000
75000
50000
37500
65535
1,33E-06
Sinal Gerado (Hz)
25000
18750
15000
7500
1500
750
150
75
25
15
11,44426642
Tabela 7: Frequências do sinal STEP que podem ser geradas com o prescaler
1:16.
completa do motor represente um giro de 2, 278 ◦ na junta do manipulador.
As juntas 4 e 5 possuem redução mecânica de 128:1, logo cada giro do motor
representa para estas juntas um giro de 2, 8125 ◦ .
Os encoders utilizados, descritos na seção 3.2, são de 8192 pulsos por
revolução. Portanto, são necessários 8192 pulsos para que o motor de cada
junta gire 360 ◦ , ou para que as juntas 1, 2 e 3 girem 2, 278 ◦ ou para que as
juntas 4 e 5 girem em 2, 8125 ◦ . As tabela 9 e 10 mostram algumas relações
entre número de pulsos e giro das juntas.
Após obter a correspondência entre o número de pulsos do sinal STEP
e o movimento da junta, é possı́vel enfim definir o valor do PRESCALER
utilizado para o timer0. As tabelas 11 e 12, mostram uma correspondência
entre frequência mı́nima gerada por cada prescaler e a velocidade angular
correspondente, separada por juntas.
Com esta análise pode-se observar que mesmo para o PRESCALER 1:1 a
32
Clock do Timer (Hz)
Unidades de Clock
1
2
3
4
5
6
7
8
9
10
20
Prescaler 1:32
375000
Perı́odo Fundamental (s)
Sinal Gerado (Hz)
Unidades de Clock
375000
30
187500
40
125000
50
93750
100
75000
500
62500
1000
53571,42857
5000
46875
10000
41666,66667
30000
37500
50000
18750
65535
2,67E-06
Sinal Gerado (Hz)
12500
9375
7500
3750
750
375
75
37,5
12,5
7,5
5,722133211
Tabela 8: Frequências do sinal STEP que podem ser geradas com o prescaler
1:32.
velocidade mı́nima é bastante baixa e não se torna um fator decisivo para a
escolha do PRESCALER. Entretanto, utilizar o PERSCALER 1:1 sobrecarrega mais o processador do microcontrolador, uma vez que os registradores
que fazem a contagem de tempo do timer0 serão incrementados com maior
frequência. Além disso, o PRESCALER 1:1 faz poderia gerar frequências de
até 12MHz, muito acima do máximo permitido para o sinal STEP. Portanto,
o PRESCALER escolhido foi 1:4 para a rede de instrumentação e atuação
do IRB6.
Com a configuração do timer0 definida, é possı́vel definir quando se deve
iniciar o pulso para o sinal STEP, fazendo a transição de 0 Volts para 5 Volts.
Porém, ainda é necessário definir o momento em que o pulso termina. Com
isto, iremos utilizar o timer1 para fazer esta função. Segundo a especificação
do GECKODRIVE G320, mostrado na figura 12, o valor mı́nimo da largura
do pulso é de 3,5 µs. Portanto este foi o valor ajustado para o timer1 contar
e em seguida mudar a saı́da digital de 5 Volts para 0 Volts. Por simplificação
não será descrito a configuração do timer1, que poderá ser analisada no código
do programa no anexo 1.
Na próxima seção, descreve-se o processo de geração dos sinais STEP
e DIRECTION através da função ”gera pulsos”. Primeiro será feita uma
descrição da função e ao final uma análise de desempenho medida com um
osciloscópio.
4.3
Gerando os sinais STEP e DIRECTION
Para criar os sinais de controle do driver de acionamento dos motores do
IRB6, criou-se uma função chamada ”gera pulsos”. Esta função necessita
de dois parâmetros: ”pulsos”e ”freq”. O primeiro é uma variável do tipo
33
Juntas 1, 2 e
Redução Mecanica
Resuloção Encoder
Pulsos
Dist.
100
1000
3596
10000
35954
107862
161792
323584
647168
3
1:158
8192/rev.
Percorrida ( ◦ )
0,0278
0,2781
1,0002
2,7813
10,0001
30,0002
45
90
180
Tabela 9: Relação entre número de pulsos e movimento de junta do IRB6
para as juntas 1, 2 e 3.
LONG INT (inteiro de 32 bits) onde é informado o número de pulsos que
será gerado. A direção não precisa ser informada separadamente. Ela está
contida na informação de pulsos. Um valor positivo de pulsos determina que
a saı́da DIRECTION seja 5V. Um valor negativo determina que a saı́da seja
0V. A variável ”freq”, também do tipo LONG INT, determina a frequência
com que os pulsos serão gerados. A partir do valor desta variável determinase os valores que devem ser carregados nos registradores do timer0 para
que o sinal seja gerado com a frequência correta. Para explicar os cálculos
realizados, segue um exemplo para a geração de 15000 pulsos com a frequência
de 2000Hz. Na figura 15 observa-se o código em C da função gera pulsos.
Exemplo: Gerar 15000 pulsos com a frequência de 2000Hz.
1. Verifica se a variável ”pulsos”é positiva, ou negativa. Caso seja um
valor positivo o sinal DIRECTION, enviado através da porta B1 será
5V, ao contrário será 0V.Com isto, define-se a direção de giro da junta
do IRB6;
2. O número de pulsos, no caso 15000, é armazenado em uma variável
global chamada ”steps left”. Esta variável irá contar quantos pulsos
do motor ainda faltam ser gerados pelo temporizador. Quando for
analisado o funcionamento dos temporizadores esta variável voltará a
ser citada, e explicar-se-á como ela é utilizada pelo programa;
34
Juntas 4 e 5
Redução Mecanica
1:128
Resuloção Encoder
8192/rev.
Pulsos
Dist. Percorrida ( ◦ )
100
0,0343
1000
0,3433
2913
1,0001
10000
3,4332
29127
10
87382
30,0002
131072
45
262144
90
524288
180
Tabela 10: Relação entre número de pulsos e movimento de junta do IRB6
para as juntas 4 e 5.
PRESCALER
1:1
1:2
1:4
1:8
1:16
1:32
Juntas 1, 2 e 3
Frequencia Mı́nima (Hz) Velocidade Angular ( ◦ /s)
183,11
0,0509
91,55
0,0255
45,78
0,0127
22,89
0,0064
11,44
0,0032
5,72
0,0016
Tabela 11: Correspondência entre o PRESCALER e a velocidade angular
mı́nima das juntas 1, 2 e 3.
3. Calcula-se o perı́odo em microssegundos:
t=
1000000
= 500
2000
(1)
4. Calcula-se quantas unidades do clock do timer0 são necessários para
gerar o sinal de 3kHz;
clk count =
500
= 1500
0, 33333
(2)
5. O valor encontrado é subtraı́do de 65536, para encontrar-se qual deve
ser o valor inicial do timer0 ;
35
PRESCALER
1:1
1:2
1:4
1:8
1:16
1:32
Juntas 4 e 5
Frequencia Mı́nima (Hz)
183,11
91,55
45,78
22,89
11,44
5,72
Velocidade Angular ( ◦ /s)
0,0629
0,0314
0,0157
0,0079
0,0039
0,002
Tabela 12: Correspondência entre o PRESCALER e a velocidade angular
mı́nima das juntas 4 e 5.
T imer0 T imerstamp = 65535 − 1500 = 64035
(3)
6. Este valor é dividido é carregado em dois registradores do timer0, o
TMR0H e o TMR0L. Estes são os registradores incrementais que
fazem a contagem de tempo para do timer0. No TMR0H é carregado
os 8 bits mais significativos (upper bits), e no TMR0L os 8 bits menos
significativos (lower bits);
7. O próximo passo é ativar a porta de saı́da digital B1 do PIC, definindo
a saı́da DIRECTION;
8. Por fim, habilita-se o timer0 ;
A partir deste ponto, todo o processo de criação dos pulsos é de responsabilidade dos temporizadores 0 e 1 do PIC 18F2550. A seguir, descreve-se
o funcionamento dos temporizadores no processo final, onde efetivamente é
construı́do o sinal STEP.
Assim que ocorrer um overflow do timer0 o microcontrolador irá gerar uma interrupção de alta prioridade (high interrupt service routine), chamando a rotina ”timer isr ”. Nesta rotina, o microcontrolador irá verificar
qual timer gerou o overflow à partir de registradores especı́ficos dos timers
0 e 1. Na figura 16 está descrito o código da sub-rotina executada para as
interrupções geradas pelos temporizadores 0 e 1.
Os registradores TMR0IF e TMR1IF são os responsáveis por indicar
qual timer gerou a interrupção. Quando ocorre o overflow do contador de um
dos timers, o registrador correspondente recebe o valor 1 e o processador é
informado que uma interrupção de alta prioridade foi gerada. Neste momento
a rotina ”timer isr ”é executada e verifica qual dos registradores é igual a 1
para saber o que deve executar. Continuando a execução do código para o
exemplo da geração do sinal STEP com 15000 pulsos e frequência de 2kHz,
os passos seguintes são:
36
Figura 15: Código da função ”gera pulsos”em C.
9. Assim que o timer0 gera sua primeira interrupção, a rotina timer isr é
executada pela primeira vez. O registrador TMR0IF neste momento é
igual a 1, portanto o primeiro bloco ”if”é executado;
10. Neste bloco os registradores TMR0L e TMR0H são carregados com os
valores que foram calculados na função ”gera pulsos”, para a frequência
desejada, que no caso deste exemplo é de 2kHz;
11. Para que o timer0 possa gerar uma nova interrupção deve-se configurar
o registrador TMR0IE igual a 1 e o TMR0IF igual a 0;
12. Enfim, ativa-se a porta de saı́da digital B1 em 5V, dando inı́cio ao
primeiro pulso STEP;
13. Neste momento, o timer1 é habilitado. Seus registradores são configurados para esperar aproximadamente 4µs e então uma interrupção será
gerada, chamando novamente a função ”timer isr ”, porém desta vez
será executado o próximo bloco ”if”;
37
Figura 16: Sub-rotina executada à cada interrupção gerada pelos timers 0 e
1.
14. No segundo bloco ”if”, que representa uma interrupção gerada pelo
timer1, a porta digital B1 é desabilitada, voltando para 0V, o que
representa o fim do primeiro pulso STEP;
15. A interrupção do timer1 é reabilitada, assim como foi feito no passo
11 para o timer0, porém com os registradores correspondentes com o
timer1 : TMR1IE e TMR1IF;
16. O timer1 é desabilitado, atribuindo ao registrador TMR1ON igual a
0. Isto é feito pois só deve-se contar os 4µs novamente após começar o
próximo pulso;
17. Em seguida, a variável global ”steps left”que armazena o número de
pulsos que faltam ser gerados é decrementada em uma unidade;
18. Por fim, verifica se a variável ”steps left”é igual a zero. Caso verdade,
38
significa que todos os pulsos foram gerados, então o timer0 é desabilitado e este é o fim do sinal STEP. Caso steps left seja diferente de
zero, então mais pulsos precisam ser gerados e nada é feito, até que
uma nova interrupção seja gerada pelo timer0 , voltando o processo ao
passo 9.
Com estes 18 passos descreveu-se todo o processo de geração dos sinais
STEP e DIRECTION, que são responsáveis por controlar o Geckodrive G320.
Este por sua vez, fará o acionamento dos motores do IRB6, movimentando as
juntas do manipulador de acordo com os sinais gerados. A figura 17 mostra
uma aquisição realizada com um osciloscópio do sinal utilizado no exemplo
anterior para geração de um sinal STEP de 2kHz.
Figura 17: Sinal de 2kHz observado em um osciloscópio.
Na seção a seguir, serão apresentados resultados com os testes realizados
para diferentes frequências de pulsos e em seguida é feita uma análise destes
resultados.
4.4
Resultados dos testes realizados para o sinal STEP
Foram realizados alguns testes para verificar se os sinais STEP e DIRECTION estão sendo criados corretamente. Gerou-se vários sinais STEP com
frequências a partir de 100Hz até 250kHz. Para simplificar a visualização
dos dados, a tabela 13 mostra as frequências que foram solicitadas através
39
da função ”gera pulsos”e as frequências reais medidas com um osciloscópio.
No anexo II é possı́vel observar todas as aquisições realizadas.
Sinais STEP
Frequência Solicitada (Hz) Frequência Observada (Hz)
100
100
1000
1000
2000
2000
5000
5000
10000
9615
25000
22220
50000
43100
100000
75760
150000
103100
250000
102100
Tabela 13: Resultado dos testes realizados para a função gera pulsos.
Percebe-se através dos resultados dos testes que para sinais STEP de
frequências abaixo de 5kHz, a frequência do sinal gerado foi idêntica. À partir
deste valor, pode-se observar uma diferença na ordem de 4% para a frequência
de 10kHz. A medida que aumenta o valor da frequência solicitada, o erro
aumenta bastante. O cálculo do valor inicial dos registradores TMR0L e
TMR0H pode ser validado a partir dos resultados observados para frequências
inferiores a 5kHz.
Tentou-se então alterar as configurações do timer0 a fim de encontrar
o problema para frequências superiores a 5kHz, onde a diferença entre a
frequência solicitada para o pulso e a frequência observada no osciloscópio
aumentou rapidamente. Testes foram realizados com PRESCALER maiores
(1:8, 1:16 e 1:32) e PRESCALERS menores (1:1 e 1:2). Em todos os testes
as frequências observadas para estes valores foram praticamente iguais às
observadas nos testes com PRESCALER 1:4. Tentou-se também carregar
manualmente os registradores, a fim de verificar possı́veis erros de cálculo pela
função ”gera pulso”. Por exemplo, analisemos a frequência de 50kHz. Vamos
refazer os cálculos realizados pela função para determinação dos valores que
serão carregados nos registradores TMR0H e TMR0L. Repetindo os passos
do 3 ao 6, temos:
3. Calcula-se o perı́odo em microssegundos:
t=
1000000
= 20
50000
40
(4)
4. Calcula-se quantas unidades do clock do timer0 são necessários para
gerar o sinal de 50kHz;
clk count =
20
= 60
0, 33333
(5)
5. O valor encontrado é subtraı́do de 65536, para encontrar-se qual deve
ser o valor inicial do timer0 ;
T imer0 T imerstamp = 65535 − 60 = 65475
(6)
6. Logo, os valores a serem carregados nos registradores TMR0L e TMR0H
são:
T M R0H = 255
(7)
T M R0L = 195
(8)
Observou-se que a frequência do sinal gerado é exatamente 43,1 kHz, o
mesmo valor encontrado em testes anteriores quando a função ”gera pulsos”foi
utilizada para gerar o sinal de 50kHz. Isto comprova que a diferença entre
o valor desejado e observado não foi causada por erro nos cálculos dos registradores pela função gera pulsos, e sim por outro(s) motivo(s). Na figura 18,
observa-se o código utilizado para o teste com os registradores configurados
manualmente e na figura 19 é apresentado o resultado encontrado para o
teste realizado com os valores indicados.
Como uma solução não foi encontrada, supõe-se que o problema seja
causado por um ”gargalo”de processamento do PIC utilizado. Entre uma interrupção e outra gerada pelo timer0 na determinação da frequência do sinal,
são realizadas várias operações, como mudança de estado de registradores,
somas e produtos booleanos, subtrações de números inteiros, deslocamento
de bits, e comparações (operações ”if”). Com tudo isto, é provável que o processador não consiga realizar todas as operações à medida que o perı́odo entre
dois pulsos diminui, e então é observada uma frequência inferior à frequência
solicitada na função ”gera pulsos”. É possı́vel que a utilização de outro microprocessador, com maior capacidade de processamento possa solucionar o
problema. Porém, não houve tempo hábil para a realização de testes com
outro microprocessador para confirmar esta teoria.
Na próxima seção descreve-se o funcionamento da rede MODBUS, que
foi implementada no projeto final do curso de Engenharia de Controle e
Automação da UFMG do aluno Thiago Arruda Amadeu [2]. Descreve-se
também pequenas alterações que foram realizadas para que a o protocolo
fosse utilizado na rede de instrumentação e atuação do IRB6, assim como a
sua integração com o programa principal do microcontrolador.
41
Figura 18: Configuração manual dos registradores para gerar sinal de 50kHz.
42
Figura 19: Resultado do teste realizado configurando manualmente os registradores para gerar um sinal de 50kHz.
43
4.5
Modbus
Em [Arruda, 2009] [2], desenvolveu-se uma rede baseada no protocolo Modbus para fazer a comunicação entre microcontroladores PIC 18F2550 e, mais
tarde, foi aplicada para realizar a atuação e controle do veı́culo autônomo
no CORO. Este protocolo foi utilizado para fazer a comunicação entre os
microcontroladores da rede de instrumentação e atuação do IRB6. A seguir
descreve-se a integração deste protocolo com o programa principal que gera
os sinais de controle do IRB6 e seu funcionamento no projeto final.
4.5.1
Protocolo Modbus e a Rede de Instrumentação e Atuação
do IRB6.
A rede de instrumentação e atuação do IRB6 é constituı́da por cinco microcontroladores PIC modelo 18F2550. Estes microcontroladores são responsáveis por gerar os sinais STEP e DIRECTION para controle dos drivers
de acionamento dos motores do manipulador. Estes microcontroladores necessitam receber uma solicitação, enviada a partir de um computador, com
as informações da quantidade de pulsos e frequência que cada um deve gerar. Logo, para controlar o IRB6 é necessário gerar pulsos com a frequência
adequada simultaneamente para todas as juntas do IRB6.
Neste projeto cada microprocessador é um nó escravo da rede Modbus que
aguarda mensagens com informações sobre o número de pulsos e a frequência
com estes pulsos devem ser gerados para cada junta. Cada microcontrolador
recebe um endereço de 1 a 5 que corresponde à respectiva junta do manipulador.
Na seção 2.3.3 é descrito o formato da mensagem enviada pelo nó mestre
no protocolo Modbus. O primeiro byte refere-se ao endereço do nó escravo ao
qual a mensagem está sendo enviada. O segundo byte refere-se à função que
o mestre está solicitando ao escravo. Os dois bytes seguintes contem dados
complementares, caso sejam necessários para a função que foi solicitada. Por
fim, dois bytes com tratamento de erro através do algoritmo CRC-16bits.
Os cálculos para cálculo do CRC podem ser encontrados em [11] e não serão
abordados neste trabalho.
Para que o nó mestre possa enviar as informações com o número de pulsos
e a frequência para um nó escravo, é necessário que duas mensagens sejam
enviadas. Definiu-se, portanto, que seriam criadas duas funções, uma para
cada informação. A função ”10”seria usada para enviar o número de pulsos
a serem gerados e a função ”20”seria usada para enviar a frequência do sinal.
Contudo, em uma única mensagem Modbus, são enviados 1 byte de endereço,
1 byte com o número da função, 2 bytes de dados e 2 bytes de CRC-16.
44
Portanto em uma única mensagem, só é possı́vel no campo ”dados”valores
de 0 a 65535. Como a frequência do sinal pode variar entre 45Hz e 250000Hz,
utilizou-se então de um artifı́cio para evitar que fosse necessário enviar duas
mensagens para representar o valor de frequência. A frequência informada
deveria ser dividida por 10. Então, uma mensagem com a função ”20”e o
valor ”10000”no campo dados estaria solicitando que fosse gerado um sinal
de frequência 100000Hz. Para mensagens da função ”10”esta estratégia não
foi utilizada, sendo portanto enviado um número entre 0 e 65535 com o
número exato de pulsos que serão gerados. Nas figuras 20 e 21 são mostradas
exemplos de mensagens enviadas do nó mestre para nós escravos da rede.
Exemplo 01: mensagens para criar um sinal de 10000 pulsos com frequência
de 30kHz para a junta 01.
O campo Address Field irá conter o número da junta a ser movimentada.
O campo Function Code deverá conter 10 para a mensagem de pulsos e 20
para mensagem de frequência. No campo Data deve-se informar o número
de pulsos (para função 10) e o número de frequência dividida por 10 (para
função 20) em hexadecimal. Logo, o número 10000 representado em hexadecimal é 27 10 e o número 3000 representado em hexadecimal é 0B B8, que
significa uma frequência de 30kHz.
Figura 20: Exemplo de mensagens para solicitar a criação de 10000 pulsos
com frequência 30kHz para a junta 1.
Exemplo 02: mensagens para criar um sinal de 30000 pulsos com frequência
de 70kHz para a junta 04.
Analogamente ao exemplo anterior, agora o campo Address Field irá conter o valor 04. O campo Function Code irá conter 10 para a mensagem de
pulsos e 20 para mensagem de frequência. O campo Data terá um valor 30000
para a função de pulsos (em hexadecimal 75 30) e 7000 para frequência de
45
70kHz (em hexadecimal 1B 58).
Figura 21: Exemplo de mensagens para solicitar a criação de 30000 pulsos
com frequência 70kHz para a junta 1.
Um nó escravo, ao receber uma mensagem deve primeiramente chegar
se a mensagem é para ele. Caso afirmativo, ele deve verificar o código da
função e o valor do campo data. Em seguida, ele testa se o código do CRC
está correto, para garantir que a mensagem recebida está correta. Se tudo
estiver certo ele executa a tarefa correspondente à função enviada e envia
uma resposta ao mestre.
No caso da rede de instrumentação e atuação do IRB6, as duas mensagens
são necessárias para que os sinais STEP E DIRECTION sejam gerados.
Ao receber uma mensagem o nó escravo responde ao mestre uma cópia da
mensagem recebida, porém só deve executar a rotina ”gera pulsos”quando
as duas mensagens chegarem. Se uma das informações estiver faltando, é impossı́vel gerar os sinais de controle. Portanto, na rotina principal do programa
do PIC ”main”, um criou-se um loop infinito que testa a todo o momento se
as mensagens de ”frequência”e ”pulsos”chegaram. A função ”gera pulsos”só
será chamada caso as duas mensagens tenham sido recebidas, independente
da ordem de chegada. Para isto, assim que o microcontrolador identifica que
uma mensagem com valor de pulsos ou frequência endereçada a ele chegou,
ele armazena aquela informação em variáveis globais criadas para esta finalidade. Estas variáveis (”pulsos”e ”freq”) são inicializadas com o valor 0. No
momento em que ambas as variáveis armazenem valores diferentes de zero, a
rotina ”gera pulsos”é invocada e os sinais STEP e DIRECTION correspondentes são criados e em seguida são atribuı́das às variáveis globais ”pulsos”e
”freq”o valor 0 novamente. Na figura 22 é mostrada a rotina principal do
programa (”main”) onde está o loop infinito que verifica se os valores de
pulsos e frequência são diferentes de 0.
46
Figura 22: Função principal do programa. Aguarda que os valores de pulsos e frequência sejam recebidos pela Modbus e em seguida chama a rotina
gera pulsos.
Na próxima seção, é mostrado a estrutura fı́sica da rede de instrumentação
e atuação do IRB6, seus componentes e o resultado de testes de funcionamento da rede.
4.6
Estrutura fı́sica da rede de instrumentação e atuação
e testes de funcionamento da rede Modbus.
Uma vez concluı́do o projeto de software da rede e implementadas as principais funcionalidades da rede, iniciou-se a montagem da parte fı́sica da rede.
Até então, apenas uma placa protótipo com o microcontrolador havia sido
montada para desenvolvimento da rotina ”gera pulsos”e a realização de testes
gerais da rotina principal. Concluı́da a implementação da rede, era necessário
testar seu funcionamento correto. As cinco placas definitivas com os circuitos eletrônicos e interfaces fı́sicas do microcontrolador foram montadas, assim
como quatro cabos RJ-11 para fazer as interconexões da rede Modbus. Além
disso, um cabo conversor USB/RS-485 foi utilizado para criar uma interface
serial de comunicação com o computador. Na figura 23 é possı́vel observar a
rede montada com todos os seus componentes.
Para testar a rede, utilizou-se a versão de testes do software Docklight
47
Figura 23: Imagem da rede de instrumentação e atuação do IRB6 montada.
V1.9. Com ele é possı́vel enviar e receber mensagens através da porta serial
do computador. Configura-se nele informações da porta de comunicação utilizada, velocidade da porta, entre outras informações. As mensagens que serão
enviadas devem ser pré-configuradas. Ao iniciar a comunicação é possı́vel enviar as mensagens cadastradas e observar as respostas recebidas.
Realizou-se então um teste para verificar se a rede está funcionando corretamente. Foram pré-configuradas 10 mensagens no software Docklight. Para
cada microcontrolador criou-se uma mensagem com a função ”pulsos”e outra mensagem para a função ”frequência”. As mensagens criadas para os
microcontroladores correspondentes às juntas 1, 2 e 3 estavam corretas. A
mensagem para o microcontrolador da junta 4 estava com o CRC incorreto.
Por fim, desconectou-se o microcontrolador da junta 5. Em seguida, todas
as mensagens foram enviadas. A figura 24 mostra a interface do software
Docklight V1.9 com as mensagens enviadas e as respostas lidas na porta
serial.
Como esperado, os microcontroladores das juntas 1, 2 e 3 enviaram mensagens de resposta confirmando o recebimento e a corretude das mensagens
enviadas. O microcontrolador da junta 4 enviou uma resposta com o a função
”81”que corresponde à CRC incorreto. O microcontrolador da junta 5 não
respondeu à mensagem, pois estava desconectado da rede.
Observando o comportamento dos microcontroladores, verificou-se ao receber a primeira mensagem com o número de pulsos, os microcontroladores
48
Figura 24: Interface do programa Docklight, utilizado para realizar testes na
rede Modbus através da porta serial.
das juntas 1, 2 e 3 enviaram respostas de recebimento da mensagem, porém
não executaram a rotina ”gera pulsos”. Apenas ao receber a segunda mensagem com o valor da frequência do sinal que a rotina foi executada.
Em seguida, analisou-se com um osciloscópio a forma de onda gerada pelo
microcontrolador. Foi enviado mensagens na rede Modbus para criação de
três sinais com as seguintes caracterı́sticas: a) 20000 pulsos com frequência
de 3,5kHz; b) 20000 pulsos com a frequência de 7kHz; c) 20000 pulsos com
a frequência de 13kHz. Os resultados observados no osciloscópio mostraram
que os sinais gerados possuı́am valores de frequência condizentes com os
solicitados. As figuras 25 até 27 mostram os resultados obtidos para cada
um dos testes realizados.
Com estes testes provou-se o funcionamento correto da rede Modbus juntamente com a geração dos sinais STEP e DIRECTION da rede de instrumentação e atuação do IRB6.
Na próxima seção será realizada uma análise do funcionamento do IRB6
com o antigo sistema de acionamento, que utiliza o MACH3. Então será
possı́vel comparar seu desempenho com a rede desenvolvida neste trabalho.
49
Figura 25: Trecho do sinal gerado para frequência de 3,5kHz.
4.7
Testes de funcionamento e desempenho do IRB6
utilizando o MACH3.
Antes de analisar o funcionamento da rede de instrumentação e atuação do
IRB6 apresentam-se os resultados de testes realizados no robô utilizando
o software MACH3. Realizou-se uma operação normal do manipulador e
avaliou-se a facilidade de operação, as vantagens e desvantagens da utilização
do software e a qualidade dos sinais de controle STEP e DIRECTION gerados.
4.7.1
Operando o IRB6 através do MACH3
Para demonstrar a operação do manipulador com o MACH3, realizou-se uma
simples tarefa: simular uma soldagem em linha reta de 100 mm. Para realizar esta tarefa, o MACH3 necessita de comandos de cálculo numérico, código
G, que descrevam os movimentos do manipulador. Para gerar este código G
utilizou-se um script de Matlab com a implementação dos cálculos de cinemática do IRB6 [Lima II, Eduardo, 2005] [8]. Neste script deve-se informar
as coordenadas cartesianas (X, Y e Z) dos pontos inicial e final da garra no
espaço e em quantos segmentos o movimento será dividido. Os pontos inicial
e final utilizados foram: (-50, 600, 750) e (50, 600, 750), respectivamente.
Para este problema, decidiu-se por dividir o movimento em 10 segmentos de
10 mm cada. Para cada segmento foi descrito a quantidade de pulsos do sinal
50
Figura 26: Trecho do sinal gerado para frequência de 7kHz.
STEP (podendo ser positivo ou negativo de acordo com o sentido que cada
junta deve girar) que deve ser gerado para cada junta. Além da quantidade
de pulsos para cada junta, o código gera também um valor de feed rate (taxa
de avanço da garra), que o MACH3 utiliza para calcular a frequência com
que serão gerados os pulsos. Os parâmetros X, Y, Z, A, B e F representam
respectivamente os pulsos gerados para as juntas 1, 2, 3, 4, 5 e o feed rate.
Estes dados são salvos em um arquivo de texto no formato ”txt”que será
carregado no MACH3. Na figura 28 pode-se visualizar o código G gerado
para realizar este movimento.
A interface do programa MACH3 está representada na figura 29. Através
da interface é possı́vel acompanhar a execução do código. Como este software
foi desenvolvido para operar uma máquina de comando numérico, existe um
diagrama na parte inferior onde seria mostrada a movimentação da ferramenta. A imagem mostrada neste painel não tem nenhum significado relativo ao movimento do IRB6, uma vez que o MACH3 não possui quaisquer
informações relativas às dimensões e posições das juntas do manipulador.
Após carregar o código G basta clicar no botão ”Cycle Start”e o MACH3
cuida de realizar o acionamento do robô. Através de uma porta paralela
do computador são gerados os sinais STEP e DIRECTION que vão para os
cinco drivers G320. Apesar de não ser especı́fico para operar um manipulador
robótico, o MACH3 consegue fazer com que o manipulador execute a tarefa
programada, porém de maneira pouco prática. A falta de integração entre o
51
Figura 27: Trecho do sinal gerado para frequência de 13kHz.
Matlab e o MACH3 dificulta o processo de acionamento do robô.
Outro ponto a ser observado é que não é possı́vel saber qual a taxa de
velocidade angular das juntas separadamente, ou a velocidade resultante da
ferramenta do manipulador, visto que o controle da frequência dos pulsos
é realizado através do parâmetro feed rate. Este parâmetro é utilizado em
máquinas de usinagem para definir a velocidade relativa entre o objeto e a
ferramenta de corte.
A seguir, será feito uma análise do sinal de controle gerado pelo MACH3
através da porta paralela do computador.
4.7.2
Analise dos sinais de controle gerados pelo MACH3
Executando o programa em código G com o MACH3, observou-se através do
osciloscópio, o sinal gerado para a junta 1 com feed rate de aproximadamente
a 216000. Um trecho do sinal observado está mostrado na figura 30. Neste
trecho, pode verificar que os pulsos gerados não possuem uma amplitude
constante, apresentando uma oscilação no sinal. Contudo, esta oscilação não
representa qualquer impacto no funcionamento do driver G320, uma vez que
a amplitude do sinal não é um parâmetro levado em consideração pelo driver.
Dando um zoom neste sinal pode-se verificar a frequência do sinal gerado.
Na figura 31, observa-se a mesma aquisição da figura 30, porém em uma escala
maior.
52
Figura 28: Código G gerado pelo Matlab para comandar o IRB6 realizar
uma solda de 100mm em linha reta.
Observou-se que havia diferença na largura dos pulsos gerados, fato que
também não deveria afetar o funcionamento do driver G320. Porém, um
outro fator que foi notado é que o perı́odo entre pulsos consecutivos variou.
Esta variação poderia representar um comportamento indesejado no movimento do manipulador. Supondo que o robô seja utilizado para realizar uma
solda a laser muito fina, possivelmente seria possı́vel perceber imperfeições
na solda, comprometendo sua qualidade e precisão. Decidiu-se, portanto,
avaliar a qualidade do sinal para diferentes frequências.
Para fazer esta análise, aumentou-se o feed rate e em seguida analisou-se o
sinal produzido para a junta 1. À cada teste o feed rate foi dobrado. Com isto
esperou-se que a frequência do sinal gerado fosse igualmente dobrada. Nas
figuras 32 até 34 estão representadas as frequências observadas para outros
3 valores de feed rate. Pode-se observar que à medida que se aumenta o feed
rate a distorção da frequência do sinal piora. Em alguns momentos, como é
possı́vel observar na figura 33, dois pulsos são enviados praticamente juntos.
Vale lembrar que segundo as especificações do Geckodrive G320, figura 13,
a distância mı́nima entre dois pulsos é de 0,5µs. Não se pode garantir que
este perı́odo será respeitado sempre. A tabela 14 mostra alguns valores de
frequências entre pulsos adjacentes, medidos com o osciloscópio, nas medições
mostradas nas figuras 31 até 34.
Este comportamento inesperado para o sinal STEP pode ser consequência
da não utilização de um sistema operacional de tempo real. O sistema operacional utilizado pelo computador em que está sendo utilizado o MACH3
é um Windows XP. Desta forma, não se pode garantir que o kernel do sis53
Figura 29: Interface de operação do software MACH3.
tema operacional irá conseguir gerar pulsos através da porta paralela com
uma frequência constante, principalmente para valores mais elevados. Outra
caracterı́stica notada é que o kernel não consegue gerar sinais com frequência
superior a 25kHz. Mesmo aumentando o feed rate, a frequência se mantém
limitada a este valor.
Trabalhando com frequências de no máximo 25kHz, o MACH3 rodando
no Windows XP consegue gerar pulsos com apenas um décimo do limite que
o Geckodrive G320 suporta para a função STEP. Com isto, observou-se na
prática que a velocidade de trabalho do robô ficou muito lenta.
A fim de comparar o desempenho da rede de instrumentação e atuação do
IRB6 com o MACH3 no papel de gerar os pulsos de STEP e DIRECTION,
gerou-se a partir da rede de instrumentação e atuação sinais de pulsos com
o valor médio das frequências geradas pelo MACH3, contidas na tabela 14.
Desta forma é possı́vel comparar os sinais semelhantes. As figuras 35 até 38
mostram os resultados dos testes realizados com a rede de instrumentação e
atuação desenvolvida neste projeto.
Os testes realizados com as frequências de 3590Hz, 6966Hz e 12990Hz
54
Figura 30: Trecho do sinal STEP gerado para a junta 1, no teste realizado
com o MACH3.
Feed Rate
216000
432000
864000
1728000
Frequencias de Pulsos Medidos para a Junta 1
Medição 1 (Hz) Medição 2 (Hz) Média (Hz) Desvio Médio
3846
3333
3590
171
6579
7353
6966
258
13160
12820
12990
113
26320
16130
21225
3397
Tabela 14: Variação de Frequências entre pulsos analisadas com osciloscópio
para 4 valores de feed rate diferentes.
apresentaram erro menor que 5%. Já para a frequência de 21225Hz a diferença foi bem maior, alcançado aproximadamente 10%. Apesar de uma
pequena diferença entre a frequência desejada e a observada, notou-se que
não há variação de frequências geradas entre pulsos consecutivos. A rede
mostrou grande repetibilidade do sinal gerado. A largura de pulso se manteve fixa em 4µs e não houve oscilação na amplitude do sinal.
Mesmo não conseguindo ter reproduzido pulsos com frequências acima de
8kHz com baixo erro, o microcontrolador mostrou desempenho mais satisfatório na tarefa de geração de pulsos que o computador utilizando o MACH3
com o sistema operacional Windows XP.
Na seção a seguir, serão apresentados os testes finais onde se utilizou a
rede de instrumentação e atuação para acionar as juntas do IRB6.
55
Figura 31: Ampliação da escala da figura 30, para um sinal gerado com o
feed rate de 216000.
4.8
Controlando o robô a partir da rede de instrumentação e atuação do IRB6.
Como teste final, realizou-se o acionamento das juntas do IRB6 a fim de
verificar sua operabilidade. A figura 39 mostra o IRB6 do Laboratório de
Robótica, Soldagem e Simulação (LRSS) da UFMG.
Utilizou-se o Docklight V1.9 para criar mensagens através da porta serial
solicitando a geração de sinais com diferentes quantidades de pulsos e diferentes frequências para cada uma das juntas. Ao serem enviadas a rede de
instrumentação os sinais de controle STEP e DIRECTION foram gerados e
enviados ao Geckodrive G320. Estes por sua vez acionaram os motores do
IRB6 e acionaram as juntas correspondentes.
Por falta de instrumentação no robô no momento do teste, não foi possı́vel
se ter medições precisas da posição das juntas do IRB6. Para verificar o
funcionamento da rede utilizou-se de fitas coladas no robô que indicavam a
posição de descanso do robô. Através dos cálculos apresentados nas tabelas
9 e 10, foi possı́vel calcular a quantidade de pulsos necessários para mover
as juntas em valores que pudessem ser avaliados visualmente. Por exemplo,
a junta 1 foi movimentada de −45 ◦ a +45 ◦ . A junta 4 foi movimentada de
−90 ◦ a +90 ◦ .
A partir de uma análise visual do funcionamento da rede de instrumentação e atuação verificou-se que o acionamento dos motores o robô foram
efetuados de maneira satisfatória. Aparentemente os comandos apresentaram
56
Figura 32: Trecho do sinal gerado com feed rate de 432000.
repetibilidade.
No próximo capı́tulo é feito uma análise final do projeto, comentando os
resultados obtidos, os sucessos e insucessos do projeto e também sugestões
de testes e trabalhos futuros.
57
Figura 33: Trecho do sinal gerado com feed rate de 864000.
Figura 34: Trecho do sinal gerado com feed rate de 1728000.
58
Figura 35: Frequência observada no osciloscópio de um sinal de 3590Hz gerado a partir da rede de instrumentação e atuação do IRB6.
Figura 36: Frequência observada no osciloscópio de um sinal de 6966Hz gerado a partir da rede de instrumentação e atuação do IRB6.
59
Figura 37: Frequência observada no osciloscópio de um sinal de 12990Hz
gerado a partir da rede de instrumentação e atuação do IRB6.
Figura 38: Frequência observada no osciloscópio de um sinal de 21225Hz
gerado a partir da rede de instrumentação e atuação do IRB6.
60
Figura 39: Manipulador ASEA IRB6 do Laboratório de Robótica, Soldagem
e Simulação da UFMG.
61
5
Conclusões e Sugestões para Trabalhos Futuros
Neste trabalho desenvolveu-se uma rede de instrumentação e atuação para o
manipulador robótico ASEA modelo IRB6, fabricado no ano de 1977. Este
manipulador participou de inúmeros projetos acadêmicos e cientı́ficos e todo
seu sistema de acionamento e controle foi substituı́do em trabalhos anteriores.
Os atuadores e sensores foram trocados e os softwares utilizados para seu acionamento eram diferentes do original. Após tantos trabalhos e modificações
por tantos alunos e pesquisadores, o robô apresentava alguns problemas em
sua operação. Dois softwares de diferentes desenvolvedores e que não interagiam entre si eram necessários para realizar seu acionamento. Um realizava
os cálculos para geração de trajetórias e outro realizava o acionamento dos
motores elétricos.
Este trabalho teve, portanto, o objetivo de propor uma rede de instrumentação e atuação para melhorar e facilitar a operação do robô. Tentou-se
com esta nova arquitetura de acionamento do IRB6 corrigir os problemas e inconvenientes apresentados pela arquitetura anterior. Estes problemas foram
apontados neste trabalho e boa parte deles foi solucionada ou amenizada.
Obteve-se sucesso na criação da rede e, com isto, na eliminação de um dos
softwares proprietários utilizados até então, o MACH3. A rede envia sinais
de controle para cada driver de acionamento dos motores individualmente.
Todos os motores podem ser acionados simultaneamente e trabalhar com
velocidades diferentes.
Contudo, a rede apresentou um comportamento indesejado quando se
tentou gerar sinais de controle com frequências superiores a 10kHz. Para
solicitações enviadas a rede para gerar sinais com frequências superiores a
este valor, observa-se uma grande diferença no sinal que foi gerado. Para
frequência de 25kHz observou-se um erro próximo de 10%, chegando a até
25% em para frequência de 100kHz. Percebeu-se também que os sinais gerados nunca ultrapassavam a faixa de 100kHz, que se mostrou o limite do
sistema. Várias tentativas para corrigir este problema foram testados, porém
não conseguiu-se melhorar os resultados obtidos. Tentou-se avaliar uma
possı́vel causa para o problema. Supõe-se que uma limitação de processamento do PIC possa estar gerando este problema. Quando se aumenta a
frequência do sinal STEP a ser gerado, o microprocessador tem que realizar
muitas operações em um curto espaço de tempo. Provavelmente, este tempo
não é suficiente para que todos os cálculos e operações sejam realizados pelo
microprocessador e com isto ocorre um atraso na criação dos pulsos. Apesar da limitação na geração dos pulsos, conseguiu-se gerar sinais com uma
62
frequência fixa, sem variação no perı́odo entre dois pulsos consecutivos, como
ocorria no controle anterior realizado pelo MACH3.
A utilização do protocolo Modbus implementado em [Arruda, 2009] [2]
facilitou bastante o desenvolvimento da rede. Pequenas modificações foram
necessárias para integrar o protocolo ao programa que gerava os sinais STEP
e DIRECTION. Após realizar a integração entre o Modbus e o programa
principal, a rede funcionou como deveria, exceto pelos atrasos apresentados
na geração de pulsos para frequências mais elevadas.
Alguns testes realizados de operação do robô a partir da rede de instrumentação e atuação desenvolvida foram realizados. Nestes testes a rede
mostrou-se capaz de movimentar as juntas do IRB6 de maneira satisfatória.
Todas as juntas responderam aos comandos enviados, mostrando alta repetibilidade na operação. Nos testes, nenhuma mensagem enviada pelo computador à rede foi perdida e o protocolo Modbus funcionou muito bem. A
falta de chaves de fim de curso, chaves de sincronismo e resolvers dificultou
a realização de testes mais elaborados para confirmar a precisão correta do
número de pulsos gerados. Estes testes comprovariam a capacidade da rede
em enviar completamente os pulsos solicitados. Como a diferença entre gerar algumas unidades de pulso a mais ou a menos é imperceptı́vel a olho nu,
fica difı́cil afirmar que os pulsos foram completamente gerados, apesar da
corretude do algoritmo criado para gerenciar os pulsos gerados.
Um teste que poderia ter sido realizado seria a modificação do script
do Matlab onde está implementado a cinemática do IRB6, desenvolvido em
[Lima II, 2004] [8], para calcular uma trajetória para o IRB6 e enviar as
mensagens Modbus de controle através da porta serial do computador. Infelizmente, não houve tempo hábil para realizar esta modificação até a data
de escritura da monografia.
Como trabalhos futuros, sugere-se substituir os microcontroladores utilizados por outros com maior capacidade de processamento e observar se há
alguma melhoria no atraso de geração dos sinais de controle. Além disso, é
necessário instalar instrumentação para fazer controle de fim de curso e estratégias de cálculo de posição absoluta das juntas. É importante mencionar
que pequenas modificações no software do microcontrador atual poderiam
ser realizadas para que ele fosse capaz de ler os dados adicionais de sensores
a serem instalados.
Outra sugestão de trabalho futuro é o desenvolvimento de um software
único que faça o planejamento de trajetórias do IRB6 através de cálculos
de sua cinemática e envie mensagens através da Modbus para a rede de
instrumentação e atuação do IRB6. O ideal é que se desenvolva um software
de código aberto para esta aplicação que possa ser utilizada em diversos
projetos e trabalhos acadêmicos pela UFMG.
63
Referências
[1] ISO 10218. Manipulating industrial robots - safety. 1992.
[2] T. A. Arruda. Rede de instrumentação para aplicação em controle embarcado. 2009.
[3] M. H. S. Bomfim. Overhauling of a asea robot ir6 with open architecture. 2012 IEEE 11th International Conference on Trust, Security and
Privacy in Computing and Communications, pages 482–489, 2012.
[4] A. Q. Bracarense. Soldagem robotizada com eletrodo revestido. 1999.
[5] J. J. Craig. Introduction to Robotics Mechanics and Control. AddisonWesley, 1989.
[6] GECKODRIVE INC. G320 brush servo drive – rev 07. 2010.
[7] Microchip Technology Inc.
2004.
Pic18f2455/2550/4455/4550 data sheet.
[8] Torres G. C. F. Castro C. A. Bracarense A. Q. Henriques R. V. B.
Lima II, E. J. and W. F. Lages. Sensoring for retrofitting of an industrial robot. Proceedingos of the 11th IFAC Symposium on Information
Control Problems in Manufacturing., 2004.
[9] Modbus-IDA.org. Modbus over serial line specification and implementation guide v1.02. pages 4–10, 2006.
[10] ASEA Robotics. Irb6 service manual. 1986.
[11] Continental Control Systems. How to compute the modbus rtu message
crc. 2012.
[12] Torres G. C. F. Bracarense A. Q. Vasconcelos, D. C. M. and R. V. B.
Henriques. Retrofitting do robô asea irb6. In Anais do 2oCOBEF,
Uberlândia - MG. ABCM., 2003.
64

Documentos relacionados