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