Preview only show first 10 pages with watermark. For full document please download

20061213 - 2228

Relatório de projetos de maquinas, do mini-torno CNC 2006

   EMBED


Share

Transcript

UNIVERSIDADE DE SÃO PAULO – ESCOLA POLITÉCNICA DEPARTAMENTO DE ENGENHARIA MECATRÔNICA PMR2450 – Projeto de Máquinas Mini-Torno CNC "Professores"Gilberto F. Martha de Souza " ": " " " "Julio C. Adamowski " " "Tarcisio Hess Coelho " São Paulo 12 de dezembro de 2006 Índice 1 Introdução 6 2 Metodologia de Projeto 7 2.1 Divisão da Equipe 7 2.1.1 Gerente Geral 7 2.1.2 Gerente de Produção 7 2.1.3 Projeto 7 2.1.4 Construção 7 2.1.5 Ensaio 8 2.1.6 Programação 8 2.1.7 Documentação 9 2.2 Cronograma 10 2.3 Datas Importantes 11 3 Descrição do projeto e dos Requisitos Principais 12 4 Projeto da Máquina – Soluções Propostas 13 4.1 Estrutura 16 4.1.1 Alternativa I (Escolhida) 16 4.1.2 Alternativa 2 16 4.1.3 Alternativa 3 17 4.2 Mancais / rolamento / eixo 18 4.2.1 Alternativa 1 (Escolhida) 18 4.2.2 Alternativa 2 19 4.2.3 Alternativa 3 20 4.3 Polias / Correia 21 4.4 Montagem das guias / localização do porta-ferramenta 22 4.4.1 Alternativa 1 (Escolhida) 22 4.4.2 Alternativa 2 22 5 Escolha da Solução 24 5.1 Critérios de escolha das Estruturas 24 5.1.1 Simplicidade 24 5.1.2 Quantidade de peças 24 5.1.3 Facilidade de construção 24 5.1.4 Maior rigidez. 24 5.2 Matriz de decisão das Estruturas 24 5.3 Critérios para escolha dos Mancais 25 5.3.1 Simplicidade 25 5.3.2 Distância entre os rolamentos 25 5.4 Matriz de decisão dos Mancais 25 5.5 Critérios para escolha da Montagem das Guias 25 5.5.1 Simplicidade 25 5.5.2 Rigidez 25 5.5.3 Volume de Trabalho 26 5.6 Matriz de decisão da Montagem das Guias 26 6 Modelagem e Verificação 27 6.1 Análise de Vibrações 27 6.1.1 Análise da vibração na guia de 300 mm (Caso 1) 27 6.1.2 Análise da vibração na guia de 300 mm (Caso 2) 31 6.1.3 Análise da vibração (flexão) na guia linear de 600mm: 33 6.1.4 Análise da vibração (torção) na guia linear de 600mm: 36 6.1.5 Cálculo da freqüência de excitação: 39 6.2 Cálculo das Forças de Usinagem 40 6.2.1 Cálculos 40 6.2.2 Gráficos 42 7 Projeto Elétrico 44 7.1 Modelagem do Sistema 45 7.2 Programação – Software 45 7.3 Algoritmo de Bresenham 46 7.4 Código G 46 7.5 Software 46 7.5.1 Módulos de Programação 46 7.5.2 Interface Gráfica 47 8 Construção 52 9 Testes 54 9.1 O Ensaio 54 9.1.1 Movimentação nos eixos X e Z: 54 9.1.2 Usinagem (Verificação do conjunto) 54 9.2 Resultados 55 9.2.1 Movimentação 55 9.2.2 Usinagem 56 10 Discussões e Conclusões 58 11 Bibliografia 59 Anexo A (Desenhos das peças e de Conjunto) 60 Anexo B (Lista de peças do Mini-Torno CNC) 61 Anexo C (Código Dinamic C) 63 Anexo D (Códigos de Usinagem) 64 Índice de Figuras Fig. 4.1 Esboço de solução 1 (Hugo) 13 Fig. 4.2 Esboço de solução 2 (Vitor) 13 Fig. 4.3 Esboço de solução 3 (Diogo) 14 Fig. 4.4 Estrutura Alternativa I 16 Fig. 4.5 Estrutura Alternativa 2 16 Fig. 4.6 – Estrutura Alternativa 3 17 Fig. 4.7 – Detalhes das polias e correia sincronizadora 21 Fig. 4.8 – Alternativa 1 para fixação das guias. 22 Fig. 4.9 – Alternativa 2 para fixação das guias. 22 Fig. 6.1 – Modelo simplificado da vibração da guia maior, porta- ferramenta 28 Fig. 6.2 - Modelo simplificado da vibração da guia maior, lado do atuador 32 Fig. 6.3 - Guia linear de 600mm 33 Fig. 6.4 – Eixo da guia linear e Modelo adotado para o eixo da guia 33 Fig. 6.5 – Guias lineares e fixação do porta-ferramenta 33 Fig. 6.6 – Modelo massa-mola correspondente 34 Fig. 6.7 – Modelo para análise usando T. de Castigliano 34 Fig. 6.8 – Momento fletor no eixo da guia linear 34 Fig. 6.9 – Posicionamento das guias para análise de vibração por torção 36 Fig. 6.10 –Esquema de aplicação de forças no modelo 37 Fig. 6.11 – Esquema para cálculo de momento de inércia Jt 38 Fig. 7.1 – Diagrama de conexões elétricas 44 Fig. 7.2 - Janela "Splash" (Splash Screen) 47 Fig. 7.3 – Modo Manual 48 Fig. 7.4 - Janela Modo Automático 50 Introdução Somos uma equipe de 15 pessoas com o objetivo de projetar e construir um Mini-torno CNC. Concordamos em dividir a equipe em sub-equipes, cada divisão com uma atividade especifica. Cada um dos integrantes de cada divisão foi responsável por alguma parte do processo, foi peça-chave e teve de cumprir com sua responsabilidade. Apesar dessa divisão, todos os integrantes tiveram conhecimento e participar de todo o processo, ajudando seus colegas, mesmo estando em outra divisão. Nossa equipe: Bruno Luis Senon de Carvalho 4940910 Caio Cesar Fattori 3732180 Daniela Hofer dos Santos 4943097 Diogo Cao Pires 4941904 Emmanuel Freire de Siqueira 4944171 Hugo Ferreira Lopes 4939706 Leonardo Monteiro Mazzariol 4939690 Marcel Scarpim de Oliveira 4943292 Renan Kenzo Toishikawa Uratani 4939842 Renato Seiji Tavares 4941821 Ricardo Akio Kikkawa 4957613 Ricardo Yves da Cunha 4957589 Sérgio Rafael Del Giovannino Júnior 4940368 Tupã Negreiros 4943329 Vitor Neves Hartmann 4939686 Metodologia de Projeto Primeiramente a equipe elegeu um Gerente. O gerente analisou o projeto e verificou a importância e prioridade das diferentes divisões e etapas do projeto. Depois analisou os integrantes e decidiu onde cada um deveria atuar. 1 Divisão da Equipe 1 Gerente Geral Responsável pelo planejamento, pela divisão da equipe, representa a equipe perante os professores. "Integrante: "Tupã Negreiros " 2 Gerente de Produção Responsável por monitorar os integrantes quanto a prazos, métodos, etc. "Integrante: "Bruno Luis Senon de Carvalho " 3 Projeto Projetar a estrutura da máquina de acordo com as especificações e o material fornecido pelo departamento. Elaborar o desenho de conjunto e os desenhos de fabricação no Solidworks, analisar as tensões na estrutura e as freqüências naturais da estrutura completa e de todas as partes. Calcular as tensões devido ao corte, obter as velocidades máximas dos motores. "Integrantes "Ricardo Akio Kikkawa " " "Hugo Ferreira Lopes " " "Daniela Hofer dos Santos " " "Sérgio Rafael Del Giovannino " " "Júnior " 4 Construção Construir todas as peças, com o auxilio dos técnicos da oficina. Obter as peças necessárias com o departamento e as que não forem fornecidas, comprá-las em lojas. Montar todo o equipamento. Fazer os ajustes necessários vindos da equipe de Ensaio. "Integrantes "Marcel Scarpim de Oliveira " " "Emmanuel Freire de Siqueira " " "Diogo Cao Pires " 5 Ensaio Testar todas as movimentações da máquina. Idealizar e fazer ensaios para verificar a velocidade, precisão, acurácia e repetitibilidade dos movimentos e na usinagem de peças. Determinar possíveis ajustes e passar para equipes de Programação e Construção. "Integrantes "Renan Kenzo Toishikawa Uratani " " "Bruno Luis Senon de Carvalho " 6 Programação Definir as linguagens de programação de acordo com as conhecidas pelos integrantes. Escrever interface para Windows para comunicação serial com um computador externo para envio de programa e movimentação manual. Escrever código para a movimentação manual e automática, interpolação linear e rosca, interpretação do código G, isso, conforme foi pedido pelo professor, no microcontrolador da máquina. Elaborar o esquema de ligação e fazer as ligações dos fios. Interpretar as funções das placas controladoras dos motores para devida programação. Ajustar possíveis erros de movimentação vindos da equipe de Ensaio. "Integrante: "Caio Cesar Fattori " " "Vitor Neves Hartmann " " "Renato Seiji Tavares " " "Ricardo Yves da Cunha " " "Tupã Negreiros " 7 Documentação Editar o relatório final, não redigi-lo, isso cabe a cada integrante da equipe. Essa divisão é responsável por cobrar os outros integrantes quanto a redação no devido tempo do relatório. "Integrante: "Leonardo Monteiro Mazzariol " 2 Cronograma O cronograma foi desenvolvido primeiro a partir da divisão da equipe, segundo pelo próprio calendário exigido pelos professores da disciplina. Houve alterações do cronograma, devido a atrasos da própria equipe e também devido a alterações do calendário pelos professores. O Cronograma mostra basicamente quando as sub-equipes estarão trabalhando. A equipe de Documentação não é representada no cronograma pois seu trabalho deve ser feito durante todo o curso do projeto. Agosto "22"33"33" "9 "0 "1 " " " " " " " " " " " " " " " " " Setembro "11 " "Azul: Construção " "Verde: Programação " "Vermelho: Ensaio " 3 Datas Importantes 22/08 Estudo de possíveis soluções para a máquina em projeto 29/08 Seleção da "melhor" solução, lay-out da solução escolhida, diagrama de blocos. 12/09 Desenho de conjunto e esquema elétrico. 22/09 Detalhamento da estrutura mecânica, sistema de movimentação, fixação da peça, fixação da ferramenta. 03/10 Desenho de conjunto, desenhos de fabricação, esquemas elétricos detalhados, estrutura de software. 10/10 Entrega dos desenhos de conjunto e fabricação. 17/10 Software de acionamento dos motores, interpretação do código CN, interpolação, interface com usuário. 27/10 Demonstração do acionamento de motores com curva de aceleração, interpolação linear. 07/11 Verificação preliminar dos protótipos e verificação da interface com usuário sistema. 17/11 Verificação preliminar dos protótipos. 28/11 Apresentação do trabalho e das atividades dos grupos, discussão sobre o funcionamento da máquina. 05/12 Data limite para a apresentação dos protótipos e entrega do relatório final do projeto. Descrição do projeto e dos Requisitos Principais A proposta é a construção de um mini-torno CNC, com 2 eixos movidos por guias lineares que são acionadas através de motores de passo, além de um outro motor AC, para rotação da castanha. Um encoder óptico também será utilizado, para controle de posição. Outros materiais serão disponibilizados pelo departamento, e o projeto mecânico será desenvolvido com essa limitação de materiais, o que de certa forma, facilita para a equipe, que não tem experiência com projetos do tipo. O torno deve apresentar um controle manual e automático (curvas de aceleração dos motores) e interpretar um programa de usinagem (em linguagem G). O controlador utilizado será o "Jack Rabbit" e terá que fazer o acionamento dos motores, a leitura dos sensores, bem como o controle de trajetória. Uma interface com o usuário também é necessária, para escolha do modo de operação (manual ou automático) quanto para entrada dos códigos em G. A comunicação serial com um computador também se faz necessária, tanto para envio dos programas em G, quanto para monitoração de posição. No final do projeto, o torno deve ser capaz de usinar um cilindro, um cone, e fazer uma rosca. Isso testa as interpolações lineares em cada eixo e as interpolações com os dois eixos, no caso da rosca. Obviamente o nosso projeto não terá a mesma precisão de uma máquina profissional. Devido ao passo dos motores e da precisão da guia, a precisão, na melhor das hipóteses, seria da ordem de centésimos de milímetros (0.01mm ou 10-5m). Porém a expectativa da equipe é que a máquina tenha precisão da ordem de décimos de milímetros (0.1mm ou 10-4m). Projeto da Máquina – Soluções Propostas Com o enunciado do projeto em mãos, a equipe começou a pensar no esboço das estruturas possíveis do torno, e numa reunião preliminar, alguns esboços foram apresentados, para a escolha das alternativas de solução, que depois foram apresentadas em sala. Três dos esboços estão a seguir, da forma como foram apresentadas à equipe. " " Fig. 4.1 Esboço de solução 1 (Hugo) " " Fig. 4.2 Esboço de solução 2 (Vitor) " " Fig. 4.3 Esboço de solução 3 (Diogo) Partindo-se dos esboços acima que constituem uma primeira análise e discussão do problema proposto, bem como da lista de materiais que seriam cedidos pelos professores (em anexo) e das dimensões das peças presentes no próprio enunciado do projeto (rolamentos, placa universal de três castanhas e guias), foram feitos os desenhos de todas as peças que compõe o torno, aprimorando-os ao longo do tempo. Os cálculos que justifiquem a escolha de dimensões e a escolha da melhor alternativa para alguma determinada função ou seleção de elementos padronizados (como rolamentos, correias, parafusos e polias) serão apresentados depois. Por enquanto, apenas as alternativas de construção serão exploradas. Para facilitar a realização do desenho de conjunto, criou-se alguns desenhos de subconjuntos, relacionados a partes de mesma função (elementos da estrutura, por exemplo) ou partes que compõe uma mesma peça, mas que haviam sido desenhadas em separado (partes das guias, por exemplo). A maior preocupação da equipe talvez seja em relação à vibração, o que prejudicaria em demasia a usinagem. Portanto resolveu-se adotar alguns objetivos em relação aos projetos: Minimizar o tamanho da correia que ligaria o motor a castanha e; Minimizar a altura da castanha, de forma a reduzir a altura da massa girante que excitaria a vibração da máquina. Para facilitar a definição das alternativas, o torno será dividido em 4 itens sendo que a união das melhores alternativas de cada um resultará no sistema final que será construído. A alternativa "eleita" será apresentada em primeiro lugar, para posterior comparação com as outras. 1 Estrutura 1 Alternativa I (Escolhida) Fig. 4.4 Estrutura Alternativa I Essa estrutura é feita apenas com os tubos quadrados de 100mm de lado, ligados em I. As principais vantagens são: Estrutura mais simples, ou seja, modelagem e construção serão mais simples; Facilidade de corte e posicionamento das partes; Facilidade de soldagem; Menor número de peças; Maior rigidez e freqüência natural. 2 Alternativa 2 Fig. 4.5 Estrutura Alternativa 2 Na segunda alternativa, pensou-se em utilizar os tubos quadrados de 100 mm (para a barra principal) e os de 80mm (para as demais), sendo que as principais vantagens eram: A diminuição da altura da castanha, o que diminuiria um pouco os problemas decorrentes da massa girando a uma altura muito grande; Também as guias ficariam a uma altura menor. As desvantagens, porém seriam as seguintes: Dificuldade no corte do tubo central para posicionamento dos de 80 mm; Soldagem é um pouco mais complexa; Maior número de peças, devido à necessidade de um tubo adicional para a fixação do motor AC; Menor rigidez / freqüência natural em relação Alternativa 1. 3 Alternativa 3 Fig. 4.6 – Estrutura Alternativa 3 Na ultima estrutura, os tubos de 100 mm (corpo principal) e de 50 mm seriam utilizados, a vantagem é a mesma do anterior, potencializada pela menor altura dos tubos. Porém, novamente as mesmas desvantagens foram encontradas, além do fato de que esta estrutura deve ser ainda menos rígida que as duas anteriores. Os tubos de 50mm só chegaram depois, por isso esta foi a última opção que foi analisada. 2 Mancais / rolamento / eixo Os rolamentos que serão utilizados foram fornecidos pelos professores. Portanto não existe alternativa. Apenas foram feitos os cálculos para garantir que são adequados , sem necessidade de escolher alternativas. Quanto aos mancais para eixo, é sabido que é recomendável que a relação L/D > 3, sendo L a distância entre os centros dos rolamentos e D o diâmetro menor do rolamento. Para os mancais, três alternativas foram consideradas: 1 Alternativa 1 (Escolhida) " " " " " " "Fig. 4.9 " "Fig. 4.7 "Fig. 4.8 " " A primeira alternativa é um cilindro de 92 mm de diâmetro, com alojamento para o rolamento e com um menor diâmetro apenas para encaixe no tubo de 100mm (é o sistema de centralização). Rebaixo para evitar contato do anel interno do rolamento com o mancal (separa as partes móveis das estáticas), furo central para o eixo e três furos dispostos em 120º para os três parafusos de fixação. As vantagens são: Os rolamentos não são embutidos no tubo quadrado; Carga é suportada pelos 3 parafusos e pelo próprio mancal; L = 112 mm e D = 45 mm; L/D = 2,5 (abaixo do recomendável, mas está mais próximo que a Alternativa 3). 2 Alternativa 2 " " " " " "Fig. 4.11 - "Fig. 4.12" "Fig. 4.10 - Montagem dos Mancais "Mancal. "– Mancal." " " "Perfil. " Montagem mancais / rolamentos / eixo / tubo quadrado / placa Mancal A segunda alternativa consiste num cilindro de 92 mm de diâmetro, com alojamento para o rolamento, furo central para o eixo e três furos dispostos em 120º para os três parafusos de fixação. As vantagens são: Mais simples; Rolamento não é embutido no tubo de 100 mm de lado, ficando apenas alojado no mancal, e comprimido entre este tubo e o mancal; L = 112 mm e D = 45mm; L/D = 2,5 (abaixo do recomendável, mas está mais próximo que a Alternativa 3). Os problemas encontrados são: Carga é suportada somente pelos 3 parafusos; Não possui sistema de centralização do mancal, o que geraria problemas na montagem e perda de precisão no funcionamento do torno (o eixo que sustenta a placa e, portanto, a peça, poderia girar descentralizada). Centralização seria feita pelos próprios parafusos, o que não é correto em um projeto de engenharia. 3 Alternativa 3 " " " " " " "Fig. 4.15 – " "Fig. 4.13 - Montagem dos Mancais"Fig. 4.14 – Mancal."Mancal, " " " "Perfil. " A última alternativa consiste num cilindro de 92 mm de diâmetro, com alojamento para o rolamento e com um menor diâmetro na região de fixação do rolamento, para encaixe no tubo de 100mm (é o sistema de centralização). Rebaixo para evitar contato do anel interno do rolamento com o mancal (separa as partes móveis das estáticas), furo central para o eixo e três furos dispostos em 120º para os três parafusos de fixação. As vantagens são: Possui um sistema de centralização; Carga é suportada pelos 3 parafusos e pelo próprio mancal; Evita contato do anel interno do rolamento com o mancal. Por outro lado, as desvantagens são: Geometria mais complexa; Os rolamentos são embutidos no tubo de 100mm de lado, diminuindo a distância entre estes; L = 88 mm e D = 45 mm; L/D = 2 (mais distante do recomendável, menos favorável que Alternativa 1 e 2) 3 Polias / Correia O sistema de transmissão entre o motor AC e o eixo já estava praticamente estabelecido em função dos materiais disponibilizados pelos professores. Isto é, a seleção das polias foi realizada em função daquelas disponibilizadas pelo departamento à equipe. Para efetuar a transmissão entre o motor AC e o eixo da castanha optou- se por utilizar uma correia sincronizadora, mas a correia disponível na oficina, apesar de possuir o passo correto, não apresentava a largura e o comprimento adequado ao projeto em questão. Isto posto, foi preciso comprar uma correia nas dimensões ideais. As polias possuem largura de 22 mm, i.e., 7/8", e a largura da correia da oficina é de 1/2". E o comprimento é de 46", sendo que o torno exige uma correia entre 22,4" e 24,7", dado pelo rasgo de fixação do motor. Portanto foi comprada uma correia de largura 7/8" e de comprimento 23,2", de modelo padrão disponibilizado por fabricantes, dentro da faixa acima, e de passo idêntico ao da correia da oficina. Fig. 4.7 – Detalhes das polias e correia sincronizadora 4 Montagem das guias / localização do porta-ferramenta 1 Alternativa 1 (Escolhida) Fig. 4.8 – Alternativa 1 para fixação das guias. Essa alternativa propõe a fixação da guia menor na maior através do bloco central da guia maior e do bloco central da guia menor. O porta ferramenta fica em um dos suportes da guia menor. As vantagens são: Mais simples; Menor número de peças; Maior rigidez / freqüência natural em relação a Alternativa 2. 2 Alternativa 2 Fig. 4.9 – Alternativa 2 para fixação das guias. Essa alternativa propõe a fixação da guia menor na maior através do bloco central da guia maior, dos suportes da guia menor e de uma chapa de alumínio. O porta ferramenta fica no bloco central da guia menor. As desvantagens são: Mais complexo; Maior número de peças; Utilização de uma placa de alumínio como base diminui a rigidez / freqüência natural; Fixação da guia menor leva a menor rigidez / freqüência natural em relação a Alternativa 1. Escolha da Solução 1 Critérios de escolha das Estruturas 1 Simplicidade A simplicidade do projeto facilita seu desenho, o cálculo de sua resistência e de sua freqüência natural, bem como seu próprio entendimento. 2 Quantidade de peças A quantidade de peças influencia no tempo de construção, e na dificuldade de projetar, fabricar e construir o conjunto. 3 Facilidade de construção A facilidade de construção diz respeito a menor necessidade de soldas e ajustes de precisão pelos técnicos da oficina. A necessidade de maior trabalho no corte da estrutura também influencia negativamente na facilidade. Outro aspecto que é levado em consideração é a facilidade de montagem, como a necessidade de apertar parafusos internos a estrutura. 4 Maior rigidez. Estruturas mais reforçadas e mais pesadas são mais rígidas. Estruturas esbeltas, compridas e estreitas, apresentam menor rigidez. A maior rigidez é importante para evitar problemas com vibração, o que pode prejudicar ou mesmo impedir a usinagem de peças. 2 Matriz de decisão das Estruturas "Quesitos "Pesos "Alternativa 1 "Alternativa "Alternativa " " " " "2 "3 " "Simplicidade "3 "10 "9 "7 " "Quantidade de "2 "9 "8 "7 " "Peças " " " " " "Facilidade de "3 "8 "7 "7 " "Construção " " " " " "Rigidez "4 "8 "6 "5 " "TOTAL "12 "100 "88 "76 " 3 Critérios para escolha dos Mancais 1 Simplicidade Como na matriz anterior, a simplicidade do sistema é importante, pois implica na facilidade de projeto (desenho e cálculos) bem como o entendimento deste. E no caso dos mancais, isso foi muito importante, pois algumas das alternativas envolviam um esquema muito mais complexo que a que foi escolhida. 2 Distância entre os rolamentos No projeto de mancais para eixo, é recomendável que a relação L/D >3. Isso não foi obtido com nenhuma das alternativas, porém, duas chegaram próximas disso, e por isso, foram consideradas melhores. 4 Matriz de decisão dos Mancais "Quesitos "Pesos "Alternativa 1 "Alternativa "Alternativa " " " " "2 "3 " "Simplicidade "2 "10 "8 "6 " "Distância entre "1 "8 "8 "7 " "os rolamentos " " " " " "Total "3 "28 "24 "19 " 5 Critérios para escolha da Montagem das Guias 1 Simplicidade Esse quesito se repete, pois é de grande importância num projeto didático, como foi o caso desse torno CNC. 2 Rigidez Como essa estrutura vai apoiar o porta-ferramenta, é imprescindível que a rigidez dessa estrutura seja estudada. Uma estrutura pouco rígida pode causar problemas na hora da usinagem, provocando vibrações, diminuindo a precisão, entre outras conseqüências. 3 Volume de Trabalho O posicionamento das guias influi diretamente nos limites do volume de trabalho da máquina, e isso influenciou também na escolha da melhor alternativa. 6 Matriz de decisão da Montagem das Guias "Quesitos "Pesos "Alternativa 1 "Alternativa " " " " "2 " "Simplicidade "2 "9 "8 " "Rigidez "3 "8 "7 " "Volume de "1 "8 "8 " "Trabalho " " " " "TOTAL "6 "50 "45 " Modelagem e Verificação 1 Análise de Vibrações A análise da freqüência natural é uma consideração muito importante no projeto de uma máquina CNC. Sabe-se que para qualquer sistema estrutural, têm-se infinitas freqüências naturais e infinitas soluções possíveis para o equilíbrio dinâmico em vibração livre. Sabe-se também que a freqüência de excitação do sistema não deve, de maneira alguma, se aproximar das freqüências naturais, caso contrário o funcionamento na máquina será prejudicado. A freqüência de excitação do sistema é conhecida, pois através da rotação do motor AC pode-se chegar ao seu valor. Deve-se então calcular as freqüências naturais que possivelmente terão os menores valores e verificar se a freqüência de excitação não se aproxima destes valores. Para isso devem-se determinar as regiões da máquina que possuem as menores freqüências naturais, ou melhor, as regiões críticas. Estas regiões estarão, certamente, nas guias lineares. Na guia de 600 mm serão analisadas as vibrações relativas a flexão e a torção. A guia de 300 mm será analisada como uma viga em balanço com uma massa concentrada na extremidade livre. Essa massa pode ser o conjunto ferramenta mais porta ferramenta, ou então o motor de passo (dependendo do lado que a guia for analisada). Os valores referentes à massa (tidas como concentradas) foram obtidos mediante pesagem e se encontram na Lista de Peças (Anexo B). 1 Análise da vibração na guia de 300 mm (Caso 1) Primeiramente iremos analisar a situação em que a guia pode ser considerada uma viga em balanço com a massa do conjunto ferramenta e porta ferramenta concentrada na extremidade livre. Iremos utilizar no modelo uma viga circular de diâmetro igual a 22 mm. Ou seja, a viga terá a mesma secção de um dos eixos da guia (em favor da segurança, serão desprezados os efeitos do fuso e do outro eixo da guia). Em favor da segurança, iremos analisar a situação mais crítica de trabalho, ou seja, a ponta da ferramenta está no centro da placa de fixação da peça. Nesta situação temos que o comprimento da viga no modelo será igual a 0,1m. A situação descrita anteriormente está exemplificada na figura abaixo: Fig. 6.1 – Modelo simplificado da vibração da guia maior, porta- ferramenta Onde: L = 0,1m (distância mais crítica atingida pelo porta-ferramenta); m = 0,84824 kg/m (massa distribuída da viga); M = 1,9 kg (massa concentrada da ferramenta e porta ferramenta); E = 71,7 GPa (modulo de elasticidade do alumínio); (momento de inércia); Para o modelo adotado, tem-se através da resistência dos materiais, a seguinte equação diferencial: ; Onde: força de inércia/unidade de comprimento força de amortecimento/unidade de comprimento força elástica/unidade de comprimento carregamento externo/unidade de comprimento Na análise modal, temos que p(x, t) = 0 e c = 0. Portanto a equação diferencial fica: ; Onde: Para realizar a solução dessa equação diferencial, deve-se utilizar separação de variáveis, ou seja: v(x,t) = Ø(x)T(t) Sendo assim, tem-se: e, Resolvendo a equação diferencial da esquerda, obtém-se: Onde A e B são constantes que podem ser determinadas a partir das condições iniciais. Resolvendo a equação diferencial da direita, obtém-se: Onde: e Ci determinados a partir das condições de contorno. Utilizando = 22,4 ; e λ = βL , temos: Aplicando as condições de contorno, obtemos: 1) v(0,t) = 0 Ø(0) = 0 "C2 + C4 = 0 "(1) " 2) vi(0,t) = 0 Ø'(0) = 0 "C1 + C3 = 0 "(2) " 3)vii(L,t) = 0 Ø''(L) = 0 "-C1sinλ+C2cosλ+C3sinhλ+C4coshλ "(3) " "= 0 " " 4) Assim β3.(-C1cosλ+C2sinλ+C3coshλ+C4sinhλ) = -β3μλ(C1sinλ+C2cosλ+C3sinhλ+C4 coshλ) (4) Resultando em : (μλsinλ-cosλ)C1+(μλcosλ+sinλ)C2+ + (μλsinhλ+coshλ)C3 + + (μλcoshλ+sinhλ)C4=0 Juntando as eq.(1 a 4) obtemos o seguinte sistema: C2 + C4 = 0 C1 + C3 = 0 -C1sinλ+C2cosλ+C3sinhλ+C4coshλ = 0 (μλsinhλ-cosλ)C1+(μλcosλ+sinλ)C2+(μλsinhλ+coshλ)C3+(μλcoshλ+sinhλ)C4=0 Colocando o sistema na forma matricial : Deseja-se encontrar soluções não triviais, portanto deve-se impor detA = 0. Como deseja-se encontrar a menor freqüência natural, deve-se obter a solução que possui o menor valor de λ. Resolvendo numericamente, temos que λ1 = 0,603365. Depois de encontrado o menor valor de λ, pode-se determinar a freqüência natural da seguinte maneira: Dessa forma: f = 180,6 Hz. "Freqüência natural mínima na guia de "180,6 Hz" "300 mm (caso 1): " " 2 Análise da vibração na guia de 300 mm (Caso 2) Agora iremos analisar a situação em que a guia pode ser considerada uma viga em balanço com a massa do motor de passo concentrada na extremidade livre. Iremos utilizar no modelo uma viga circular de diâmetro igual a 22mm. Ou seja, a viga terá a mesma secção de um dos eixos da guia (em favor da segurança, serão desprezados os efeitos do fuso e do outro eixo da guia). Novamente em favor da segurança, iremos analisar a situação mais crítica de trabalho, ou seja, quando a ponta da ferramenta está o mais longe possível do centro da placa de fixação da peça, ou seja, o motor de passo está o mais longe possível do bloco da guia. Nesta situação temos que o comprimento da viga no modelo será igual a 0,23m. A situação descrita anteriormente está exemplificada na figura abaixo: Fig. 6.2 - Modelo simplificado da vibração da guia maior, lado do atuador Onde: L = 0,23m (distância mais crítica atingida pelo motor de passo) m = 0,84824 kg/m (massa distribuída da viga) M = 0,72kg (massa do motor de passo) E = 71,7 GPa (modulo de elasticidade do alumínio) (momento de inércia) = 3,69 Utilizando o mesmo raciocínio utilizado na viga anterior temos que λ1 é aproximadamente 0,93495. Portanto : f = 82Hz. "Freqüência natural mínima na guia de "82 Hz " "300 mm (caso 2): " " 3 Análise da vibração (flexão) na guia linear de 600mm: Para analisar as vibrações, deve-se adotar um modelo para a guia linear de 600 mm, ilustrada na figura abaixo: Fig. 6.3 - Guia linear de 600mm Para modelar a guia, iremos desprezar (em favor da segurança) a influência do fuso e para cada um dos eixos, iremos adotar o seguinte modelo: Fig. 6.4 – Eixo da guia linear e Modelo adotado para o eixo da guia O caso em que a freqüência natural (relativa à flexão) assume o seu valor mais crítico é quando o bloco da guia de 600mm está posicionado no centro. Portanto em favor da segurança iremos analisar este caso. A figura abaixo ilustra a situação: Fig. 6.5 – Guias lineares e fixação do porta-ferramenta Adotando a hipótese de que metade da massa do fuso e dos eixos está concentrada no centro das vigas, obtém-se a seguinte situação: Fig. 6.6 – Modelo massa-mola correspondente Onde m representa a massa do fuso (0,343kg) somada a massa dos eixos (0,475kg cada um) da guia de 600 mm. M representa a massa do bloco da guia de 600 mm (3,4kg), a massa da guia de 300 mm (4,5kg), a massa do motor de passo (0,72kg), a massa da ferramenta e a massa do porta ferramenta (1,9kg). Portanto: M = 10,52kg e m = 1,29kg. Para calcular a constante K iremos utilizar o do teorema de Castigliano. Para isso devemos calcular a energia da viga ao ser solicitada no centro por uma força P: Fig. 6.7 – Modelo para análise usando T. de Castigliano Resolvendo a estrutura hiperestática, obtém-se o seguinte diagrama de momento fletor: Fig. 6.8 – Momento fletor no eixo da guia linear Agora podemos calcular a energia de deformação: Pelo teorema de Castigliano: e, portanto: . Como: e E = 71,7 GPa. Temos: Depois de encontrado o valor de K, pode-se calcular a freqüência natural da seguinte maneira: KT = K + K = 1802952 N/m e assim, f = 63,9 Hz. "Freqüência natural mínima (flexão) na guia "63,9 Hz " "linear de 600mm : " " 4 Análise da vibração (torção) na guia linear de 600 mm: O caso em que a freqüência natural (relativa à torção) assume o seu valor mais crítico é quando o bloco da guia de 600 mm está posicionado no centro e quando a ponta da ferramenta está o mais longe possível do centro da placa de fixação da peça, ou seja, o motor de passo está o mais longe possível do bloco da guia de 300mm. Portanto em favor da segurança iremos analisar este caso. A figura abaixo ilustra a situação: Fig. 6.9 – Posicionamento das guias para análise de vibração por torção Para determinar K(, iremos imaginar que uma força P é aplicada sobre o motor de passo. Assim iremos verificar qual o ângulo ( resultante da torção. A figura abaixo ilustra a situação, note que RA e RB representam as forças que serão aplicadas sobre os eixos da guia linear de 600 mm (os efeitos do fuso da guia de 600 mm não serão considerados em favor da segurança): Fig. 6.10 –Esquema de aplicação de forças no modelo Fazendo-se os cálculos temos que RA= 4,125P e RB = 3,125P Sendo assim: Agora devemos calcular o momento de inércia em relação ao eixo Z. Fig. 6.11 – Esquema para cálculo de momento de inércia Jt JT = JEixo1 + JEixo2 + JGL300+ JPF + JMotor Onde: JEixo1: momento de inércia do eixo1 da guia de 600 mm; JEixo2: momento de inércia do eixo2 da guia de 600 mm; JGL300: momento de inércia do fuso, eixo1 e eixo2 da guia de 300 mm; JPF: momento de inércia do conjunto ferramenta e porta ferramenta; JMotor: momento de inércia mo motor de passo da guia de 300 mm. Considerando que a massa do fuso, eixo1 e eixo2 da guia de 300mm está concentrada a 0,065m do eixo Z: Considerando que a massa do porta ferramenta está concentrada a 0,09m do eixo Z: Considerando que a massa do motor está concentrada a 0,29m do eixo Z: Portanto: JT = 0,08kg.m2 Finalmente: . "Freqüência natural mínima (torção) na guia "30,3 Hz " "linear de 600mm : " " 5 Cálculo da freqüência de excitação: Utilizando a rotação do motor AC como 1720 rpm, sabendo que a polia maior tem diâmetro DM = 107,8 mm e a polia menor tem diâmetro Dm = 77 mm, temos que a freqüência de excitação é: "Freqüência de excitação do "20,4 Hz " "sistema: " " Pode-se perceber que a freqüência de excitação do sistema (20,4Hz) é bem inferior a menor freqüência natural da máquina (30,3Hz). Concluí-se então que mesmo nas piores condições de operação, não ocorrerão problemas de ressonância. 2 Cálculo das Forças de Usinagem 1 Cálculos Foi montada uma tabela com os valores constantes e calculados para o caso do torno CNC, utilizando-se das fórmulas apresentadas a seguir. Velocidade de Corte (Vc): sendo: d - diâmetro da peça (mm) n – rotação (em rpm) e VC – em m/min Força de Corte (Fc): sendo: KS – a pressão especifica de corte, calculada no item anterior, em função do avanço. Potência de Corte (PC): Obtendo, assim, PC em kW, para VC em m/min. Velocidade de Avanço (Vf): sendo: f – avanço (em mm/volta) Velocidade do Motor (Vmotor): O motor tem uma transmissão por correia, portanto, pode-se calcular sua velocidade utilizando as relações dos diâmetros das polias e da própria castanha: Volume de Trabalho (VT): Volume da maior peça que pode ser trabalhada na máquina. Sendo: dm – diâmetro máximo, Lm – comprimento máximo A tabela obtida, com todos os valores pertinentes é apresentada a seguir: Tabela 6.1: Valores dos parâmetros. "Dados constantes " " " "Pc "= "386 "W "Potência de corte " "Cw "= "161,4 " "Constante do PVC " "π "= "3,142 " " " "Dc "= "130 "mm "Diâmetro da castanha " "De "= "108 "mm "Diâmetro da polia do eixo " "Dm "= "78 "mm "Diâmetro da polia do motor " " " " " " " "Parâmetros de entrada " " "D "= "100 "mm "Diâmetro do eixo a ser " " " " " "usinado " "ap "= "3 "mm "Profundidade de corte " "f "= "3 "mm/rot "avanço " " " " " " " "Resultados " " " " "Ks "= "95,6 "N/mm "Pressão específica de corte " "Fc "= "860,4 "N "força de corte " "n "= "85,69 "Hz "Rotação da castanha " "T "= "4,505 "Nm "Torque " "Vc "= "0,449 "m/s "Velocidade de corte " "Vf "= "0,257 "m/s "Velocidade de avanço " "Vcastanha"= "5570 "m/s "Velocidade da castanha " "Vmotor "= "7712 "m/s "Velocidade do motor da " " " " " "castanha " "Vol T "= "294,52 "cm2 "Volume Máximo de Trabalho " " " " " " " " " " " " " "n "= "118,6 "Hz "Rotação do Motor da Castanha" "n "= "7119 "rpm "Rotação do Motor da Castanha" " " " " " " " " " " " " "Vf "= "257,1 "mm/s "Velocidade de Avanço " "Passo "= "5 "mm/volta " "n "= "51,41 "Hz "Rotação do Motor de Passo X " "n "= "3085 "rpm "Rotação do Motor de Passo X " 2 Gráficos Pressão Específica de Corte (KS) KS varia de acordo com as condições de operação, tais como ângulo de posição da ferramenta, seu desgaste, material da peça, entre muitos outros fatores. A AWF (Ausschuss für Wirtschefthiche Fertiging) sugere o uso da constante CW (dependente do material) para o cálculo de KS: Para alguns valores típicos do PVC (material a ser usinado na máquina) tem-se que um valor médio de CW é 161,4447. Dessa forma, pode-se fazer um gráfico com os valores esperados de pressão de corte KS em função de alguns valores de avanço: Gráfico 6.1: Pressão Específica de Corte em função do Avanço. Potência do motor (PM) Dessa forma, foi possível construir um gráfico de torque x rotação para o motor da castanha. Gráfico 6.2: Torque x Rotação do motor da castanha. Projeto Elétrico Fig. 7.1 – Diagrama de conexões elétricas 1 Modelagem do Sistema Um modelo de sistema pode ser escrito como: No caso do torno, essa divisão se dá dessa forma: Usuário - é o próprio operador da máquina; Monitoramento - é feito pelo usuário também; Comando - é um programa de interface com usuário Controlador - é o Jack Rabbit + PAMP (placa de acionamento de motor de passo) + Inversor de Freqüências; Atuador - é o tono que estamos construindo; Sensoriamento - apenas o encoder óptico como sensor de posição; Objeto - a peça a ser usinada. 2 Programação – Software O programa do controlador é feito em C e Assembly (a vantagem deste é que com ele é possível ter um melhor controle do tempo). O encoder óptico será usado apenas para rosca por guarda a posição do início da rosca no eixo. A PAMP recebe 4 tipos de informação referente a cada motor de passo (uma PAMP pode controlar até 2 motores de passo): "Passo "Define se estamos trabalhando em FULL ou HALF STEP, " " "ou seja, se o motor dá 200 ou 400 pulsos por volta " " "(no nosso caso a PAMP já vem jumpeada para HALF STEP," " "ou seja, 400 pulsos por volta) " "Enable "Define se o motor está ativado ou não " "Sentido "Define se é sentido horário ou anti-horário " "Pulso "Dá um pulso no motor a cada borda de subida " O Inversor de Freqüência é um controlador para o motor AC, e o utilizado possui 10 velocidades pré-programadas e as informações que ele recebe são referentes a ENABLE e qual das velocidades a ser usada. No caso essa velocidade é definida pelo usuário e aproximada, pelo Rabbit, para uma rotação pré-programada. O sistema funciona assim: O usuário envia um comando manual ou toda a string de código G do modo automático; O Rabbit calcula os dados e parâmetros de usinagem e envia os dados para PAMP e para o Inversor de freqüências. Durante o corte, o motor de passo usa a curva de PULL IN, por se tratar de baixas rotações (segundo essa curva, para baixas rotações o torque é aproximadamente igual ao torque máximo). E quando em avanço rápido, o motor usa a curva de PULL OUT, que permite atingir maiores rotações quando não há muita carga sendo requerida. 3 Algoritmo de Bresenham O algoritmo de Bresenham utilizado por nosso sistema é o de interpolação linear, que consiste basicamente em: Dada uma malha definida de pontos (resolução de passos do motor de passo), e dois, um sendo a posição atual e outro sendo a posição desejada; O algoritmo deve verificar por meio do ângulo do movimento em relação ao eixo que causa seu menor valor, qual é a tangente do mesmo e se andar na direção do ponto mais próximo da malha oposto ao atual. Ou seja, se em um segmento de reta que liga 2 pontos vizinhos, o nosso código vai avançar na direção do ponto mais próximo destes. 4 Código G O código G básico usado por tornos normalmente tem os comandos de avanço, velocidade do eixo arvore e controladores. No nosso sistema, todo o código G é enviado para a máquina com critério de parada na espera do caractere "?", por ser este pouco utilizado. Após recebido o código, ele é desmembrado em comandos principais e processado dentro de funções relativas a estes. Os comandos principais estão presentes na tabela abaixo: "G00 "Avanço rápido " "G01 "Avanço com velocidade controlada " "G20 "Define medidas em raio (Padrão) " "G21 "Define medidas em diâmetro " "G70 "Define medidas em milímetros " " "(Padrão) " "G71 "Define medidas em polegadas " "G90 "Define coordenadas absolutas " "G91 "Define coordenadas incrementais " " "(Padrão) " "M02 "Finaliza a programação manual " O critério de parada de uma função de comando é o aparecimento de um novo comando, como no caso de se processar um comando G00 até o aparecimento de uma letra G ou M. 7.4.1. G00 É o comando de avanço rápido, utiliza-se de uma função de espera para os passos que foi determinada baseada na curva de pull-out, que permite se alcançar maiores velocidades nos motores de passo. A curva de pull-out é uma curva acelerada a partir da velocidade 0 em pequenas variações de velocidades para se evitar o problema de perda de passos por inércia da carga. As variáveis de movimento do comando G00 são as coordenadas X (na direção radial) e Z (na direção axial) e segue a máscara seguinte: G00 X[num] Z[num]# O formato de [num] depende da unidade de medidas e da presença do caractere "." que se estiver ausente faz com que [num] seja dividido por 10000 (dez mil). O algarismo sustenido ao final da linha indica término de um dos comandos G00, quando a função recebe esse algarismo ela executa o movimento com o último X e Z recebidos. A ausência de uma ou mais variáveis de movimento, faz com que essa assuma valor 0. Exemplo: N30 G00 X-10. # //move o eixo X na direção e sentido do centro em 10 mm N40 Z-50. # //move o eixo Z no sentido de afastamento da castanha N50 X5000 Z50. # //move os dois eixos, sendo o eixo X movimentado 0.5mm 7.4.2. G01 É o comando de avanço controlado, utiliza-se de uma função de espera para os passos que foi determinada baseada na curva de pull-in, que tem uma implementação mais simples uma vez que a aceleração e absoluta, ou seja, o eixo já começa a se mover na velocidade desejada no primeiro passo. Como esse comando é usado durante a usinagem e esse é um processo de baixas velocidades, não há grande variação no torque do motor, pois a baixas velocidades, a curva de pull-in tem um comportamento semelhante ao da curva d pull-out. As variáveis de movimento do comando G01 são as coordenadas X (na direção radial), Z (na direção axial) e F (velocidade de corte) e segue a máscara seguinte: G01 X[num] Z[num] F[num]# O formato de [num] depende da unidade de medidas e da presença do caractere "." que se estiver ausente faz com que [num] seja dividido por 10000 (dez mil). O algarismo sustenido ao final da linha indica término de um dos comandos G01, quando a função recebe esse algarismo ela executa o movimento com o último X, Z e F recebidos. A ausência de uma ou mais variáveis de coordenada, faz com que essa assuma valor 0 e na ausência da variável de velocidade, essa assume o ultimo valor dado a mesma desde o inicio do uso dessa função de comando. Exemplo: N30 G01X-10. F1. # //move o eixo X no sentido do centro à 1 mm/s N40 Z-50. # //move o eixo Z no sentido de afastamento da castanha N50 X5000 Z50. F2500 # //move os dois eixos à 0.25 mm/s 7.4.3. G90/G91 Esses comandos apenas definem o tipo de coordenada de movimento utilizada como absoluta ou incremental. As coordenadas absolutas são em relação ao centro da castanha e as incremenetais são em relação a posição atual. 5 .Software O software é dividido em dois sistemas, um de controle e outro de interface, e cada um utilizou uma plataforma mais adequada para sua programação. O software de controle foi ainda dividido em mais sub- sistemas, como algoritmo de bressenham, timer, interpretação do código G, comunicação serial, controle manual e movimentação de motores de passo. 1 Módulos de Programação 1 Comunicação Serial A comunicação serial se dá através da RS232. O Dinamic C (compilador usado para programar o controlador) já possui uma biblioteca para essa comunicação. O Dinamic C se comunica com a porta serial A do controlador e enquanto está conectado a essa, ele se torna o set de Bios da mesma, ou seja, enquanto não se desligar o modo programador, o controlador fica esperando os comandos do Dinamic C. A comunicação do controlador com a interface com o usuário é feita pela porta serial B que sempre é usada com finalidade de comunicação e não de programação. 2 Timer O timer da máquina foi usado para oferecer maior controle no tempo de espera para a movimentação dos motores. O timer é uma programação feita em assembly que utiliza-se de uma interrupção do controlador, no nosso caso, o timer usado foi o Timer B com interrupções em meio per-clock, ou seja, a cada 135 microssegundos. A função de timer então utilizava um contador que, cada vez que fosse requisitada por uma função, receberia esse contador zerado. Apenas duas funções tinham o controle sobre o timer, uma era um temporizador para a curva de pull-in e outro para a curva de pull-out. 3 Movimentação Manual A movimentação manual é uma comunicação direta e constante com a interface com o usuário. Tem as funcionalidades de movimento nas 4 direções em velocidade controlada e velocidade rápida e controle de velocidade. A função recebe um caractere e verifica se esse é um caractere de lista de funções. Caso não seja ela pega outro caractere. Quando recebe um caractere de movimentação, esta inicia o movimento relativo e só termina essa etapa ao receber um caractere de parada, tornado um controle mais preciso e seguro do movimento do motor. Uma particularidade é que os caracteres de parada de todos os movimentos manuais são os mesmos. Isso foi feito para termos uma maior segurança com relação a perdas temporárias na comunicação com a interface. Os comandos de movimentação manual seguem essa tabela: "'A' "Move o eixo X no sentido do centro em velocidade máxima " "'B' "Move o eixo X no sentido de afastamento do centro em " " "velocidade máxima " "'C' "Move o eixo Z para a direita em velocidade máxima " "'D' "Move o eixo Z para a esquerda em velocidade máxima " "'E' "Move o eixo X no sentido do centro em velocidade controlada" "'F' "Move o eixo X no sentido de afastamento do centro em " " "velocidade controlada " "'G' "Move o eixo Z para a direita em velocidade controlada " "'H' "Move o eixo Z para a esquerda em velocidade máxima " "'I' "Escolhe a velocidade de movimentação controlada da máquina " "'Y' "Altera para o modo automático " "'Z' "Sai do programa " 4 Movimentação de motores de Passo Uma função genérica, que apenas recebe o número da porta do motor desejado e executa a mudança na porta PA referente, muda o set da porta PD para alterar o estado do pino que está conectado com a informação de pulso do motor referente na PAMP e depois retorna ao estado anterior, repetindo as mesmas etapas. 2 Interface Gráfica A interface do torno foi feita em Microsoft Visual Basic 6.0, um programa robusto para criar interfaces gráficas. Ela se comunica com o controlador (Jack Rabbit) pela porta serial. A interface criada possui 3 formulários diferentes, e funciona da seguinte maneira: Ao abri-la, aparece uma tela splash com os nomes dos integrantes da equipe e nomes dos professores. Em seguida, é aberta a tela de modo manual do torno, onde devem ser ajustados os zeros da máquina; poderá ser feito, então, o movimento manual da ferramenta entre outras coisas. Também existe um botão para ir para modo automático do torno, onde é possível a execução de um programa em linguagem G, ou o retorno ao modo manual. Fig. 7.2 - Janela "Splash" (Splash Screen) 1 Detalhamento da Janela Splash. Sua finalidade é exibir o nome dos integrantes da equipe e nome dos professores responsáveis. Ao executar a interface essa janela irá abrir e ao clique do mouse em qualquer local da janela irá fechar a janela de splash e abrir a janela de modo manual. 2 Detalhamento da Janela Manual. É a janela onde é possível controlar manualmente o torno. É necessária para movimentar a ferramenta manualmente. Fig. 7.3 – Modo Manual Botões da janela: Alterar para Modo Automático: alterna para o modo automático. Velocidade de avanço (mm/s): define a velocidade de avanço. Direcionamento: - Eixo X: movimenta o eixo na velocidade de avanço definida. -- Eixo X: movimenta o eixo usando movimentação rápida. + Eixo X: movimenta o eixo na velocidade de avanço definida. ++ Eixo X: movimenta o eixo usando movimentação rápida. - Eixo Z: movimenta o eixo na velocidade de avanço definida. -- Eixo Z: movimenta o eixo usando movimentação rápida. + Eixo Z: movimenta o eixo na velocidade de avanço definida. ++ Eixo Z: movimenta o eixo usando movimentação rápida. 3 Detalhamento da Janela Automático. Consiste na parte do programa onde é possível executar um programa em linguagem G. Botões da janela: Fig. 7.4 - Janela Modo Automático Alternar para Modo Manual: alterna para modo manual. Abrir Arquivo: abre um arquivo contento uma programação em linguagem G na caixa de texto. Salvar Arquivo: salva o arquivo da caixa de texto em algum local do computador. Executar: executa o programa em linguagem G que se encontra na caixa de texto. Vale ressaltar que todo o programa conta com avisos de segurança que impedem o mau funcionamento do torno, como, por exemplo, enviar alguma informação para o torno sem antes ter feito a conexão com a porta serial. Construção As primeiras peças do torno a serem construídas foram: O eixo da castanha; Mancais do eixo da castanha; As duas chapas em formato de "L" (responsáveis pela fixação dos motores de passo a as guias lineares); A chapa em formato de "U" (responsável pela fixação do encoder e a torre da estrutura). Neste momento da construção, a principal dificuldade encontrada foi manter as dimensões e tolerâncias impostas no projeto. Caso essas dimensões e tolerâncias não fossem respeitados, teríamos problemas de interferência ou folga entre o eixo, rolamentos e mancais. No caso dos suportes dos motores de passo, poderíamos encontrar os seguintes problemas: O eixo do motor de passo e o eixo da guia poderiam ficar excêntricos, o motor e os parafusos poderiam não encaixar no suporte. Já no suporte do encoder encontraríamos também o problema dos parafusos e o próprio encoder não encaixarem no mesmo. Para a construção da estrutura do torno, foi realizado o corte de quatro tubos de seção transversal quadrada. Um desses tubos foi utilizado para a construção da "torre", ou melhor, a parte da estrutura atravessada pelo eixo do torno. Neste tubo foi usinado também um furo para a passagem do eixo. A principal dificuldade encontrada nesta etapa foi manter as dimensões e tolerâncias projetadas para o furo. Caso essas dimensões não fossem respeitadas, poderíamos encontrar problemas de funcionamento do eixo. Em seguida, os tubos foram soldados para formar a estrutura do torno. Nesta etapa, o desafio foi conseguir fazer com que a torre fosse soldada perpendicularmente ao resto da estrutura, ou melhor, com ângulo muito próximo de 90 graus (isso foi conseguido utilizando um esquadro). Nesta etapa da construção foi detectado um erro no projeto: A distancia entre os pés do motor AC real, possuíam valor diferente da distância utilizada no projeto. Sendo assim, o motor não poderia mais ser sustentado por apenas um tubo da estrutura. Para solucionar esse percalço, foi usinada mais uma peça em formato de "L" que seria soldada à estrutura e assim permitiria a sustentação do motor. Nesta solução, o motor teve um pequeno deslocamento da sua posição inicial, portanto o eixo teve que ter as suas dimensões alteradas, ou melhor, o seu comprimento foi aumentado em 8 mm. Depois foram realizados furos na estrutura para fixação da guia linear de 600 mm (esses furos precisavam ser concêntricos com os furos da guia, caso contrário a guia não poderia ser unida à estrutura através de parafusos), E também realizados rasgos na estrutura para a fixação do motor (aqui, o cuidado foi manter a distância entre os rasgos igual à distância projetada, caso contrário o motor não encaixaria na estrutura). Neste momento o eixo, os mancais, os rolamentos e a castanha foram montados na torre da estrutura. Foram também usinados os acoplamentos para os motores de passo. Esses acoplamentos foram feitos de aço, portanto são bastante rígidos. Sendo assim, a equipe teve bastante dificuldade para fazer com que esses acoplamentos permitissem uma boa transmissão de movimento entre os motores de passo e a guia. Finalmente, a correia foi colocada entre as polias do eixo e do motor. Logo em seguida o encoder foi ligado ao eixo do torno (ele foi fixado pela chapa em formato de "U"). No final de toda a montagem do torno, foi utilizado um relógio comparador para posicionar a guia e evitar que ela ficasse desalinhada com eixo. Testes 1 O Ensaio A verificação da funcionalidade do torno deverá ser feita a partir de um ensaio controlado, seguindo uma rotina de ações previamente estabelecidas. Estas ações dispostas a seguir: 1 Movimentação nos eixos X e Z:  Mover Eixo X pra posição zero-absoluto, no centro da castanha; Mandar o software mover 200 mm; Medir a distância movida real; Repetir o teste 3 vezes, calcular a média; Ajustar a constante do software; Repetir enquanto for necessário; Após o ajuste final, repetir o teste 10 vezes; Calcular média e desvio padrão dos 10 valores; Plotar um gráfico das medidas e desvio padrão. Disponibilizados no item "Resultados". Idem para o Eixo Z, movendo 150 mm. 2 Usinagem (Verificação do conjunto) Usinar as seguintes peças, em ordem de importância, usinar todas quanto possível: 1. Cilindro (diâmetro: 50 mm, altura: 150 mm), em coordenadas absolutas; 2. Cilindro (mesmo tamanho), em coordenadas incrementais; 3. Cone (diâmetro da base: 50 mm, altura: 150 mm), em coordenadas absolutas; 4. Cilindro (mesmo tamanho), com rosca (passo X mm, profundidade X mm), em coordenadas absolutas; 5. Cone (mesmo tamanho), com rosca (mesmo tamanho), em coordenadas absolutas; Após cada usinagem, fazer as medidas de altura e de 3 medidas de diâmetro, no caso do cilindro, em 3 pontos diferentes, ou 1 medida de diâmetro, no caso do cone, na base do mesmo. Anotar todos os valores e guardar as amostras, devidamente nomeadas. Anotar todas as medidas de cada amostra para dispô-las em "Resultados". Os códigos G utilizados para tais usinagens estão dispostos no anexo III. 2 Resultados 1 Movimentação Eixo X Tabela 9.1 – Medição da movimentação real do torno. Eixo X. "Valor "1 " "Altura " " "Experimental/Teóric" " "o " " "Diâmetro (1ª " " "medição) " " "Diâmetro (2ª " " "medição) " " "Diâmetro (3ª " " "medição) " " "Média " " "Desvio padrão " " "Experimental/Teóric" " "o " " 1 Cilindro (d: 50 mm, h: 150 mm) – Coord. Inc. Tabela 9.4 – Medições do cilindro – coordenadas incrementais. " "Valores em mm " "Altura " " "Experimental/Teóric" " "o " " "Diâmetro (1ª " " "medição) " " "Diâmetro (2ª " " "medição) " " "Diâmetro (3ª " " "medição) " " "Média " " "Desvio padrão " " "Experimental/Teóric" " "o " " 2 Cone (d. da base: 50 mm, H: 150 mm) – Coord. Abs. Tabela 9.5 – Medições do cone – coordenadas absolutas. " "Valores em mm " "Altura " " "Diâmetro da base " " 3 Cilindro (d: 50 mm, h: 150 mm), com rosca (passo X mm, profundidade X mm) – Coord. Abs. Tabela 9.6 – Medições do cilindro com rosca – coordenadas incrementais. " "Valores em mm " "Altura " " "Experimental/Teóric" " "o " " "Diâmetro (1ª " " "medição) " " "Diâmetro (2ª " " "medição) " " "Diâmetro (3ª " " "medição) " " "Média " " "Desvio padrão " " "Experimental/Teóric" " "o " " 4 Cone (d. da base: 50 mm, H: 150 mm), com rosca (passo X mm, profundidade X mm) – Coord. Abs. Tabela 9.7 – Medições do cone com rosca – coordenadas absolutas. " "Valores em mm " "Altura " " "Diâmetro da base " " Discussões e Conclusões - Importância de lidar com o número de integrantes da equipe. Suas habilidades e disponibilidades. Aproveitar ao máximo o potencial de cada um. - Lidar com os prazos. - Complexidade da tarefa. - O qto se aproximou de um projeto real. - E, finalmente, o quanto isso foi importante para nossa formação acadêmica. - Ainda não estou inspirado.... Esse trabalho foi importante para a equipe, pois apresentou aos integrantes a construção real de um projeto criado por eles próprios, passando por todas as etapas, desde sua concepção até o seu ensaio. Teve, também, de aprender a lidar com prazos e cronogramas, bem como com o trabalho em uma equipe grande, de 15 integrantes; com suas habilidades, de forma a aproveitar ao máximo o potencial de cada um, colocando-os em divisões que permitiam e disponibilidades, com relação não só a horários livres, mas quanto ao calendário de provas e trabalhos do semestre. Finalmente, o mais importante para a nossa formação acadêmica, a equipe pode sentir a responsabilidade de um projeto com tal complexidade. O projeto foi didático, de certa forma foi feito para cometermos erros e assim aprender com eles. Bibliografia [1] GERE, J.. Mecânica dos Materiais. 5ª Ed. São Paulo: Thomson Learning, 2003. [2] NORTON, Robert L. Projeto de Máquinas: Uma Abordagem Integrada. 2ª ed. Bookman, 2003. [3] NSK®: Rolamentos e movimentação linear. Disponível em: www.nsk.com.br acessado dia 29/11/2006 [4] SKF®: Rolamentos e movimentação linear. Disponível em: www.skf.com.br acessado dia 29/11/2006 [5] Notas de aula da Disciplina PMR 2450. Anexo A (Desenhos das peças e de Conjunto) As folhas referentes aos desenhos das peças e de conjunto dispõem de numeração própria. Para simplificar a consulta, a seguir está apresentado uma listagem do conteúdo de cada folha: Tabela A.1 – Índice de Desenhos de Conjunto (Plotagens) "Folha "Conteúdo " "1 "Desenho de Conjunto (Isométrica) " "2 "Desenho de Conjunto – Detalhes " "3 "Desenho de Subconjuntos (Estrutura/ Sist. De Trasmissão/ Sist." " "Fixação da Peça/ Sist. Fixação da Ferramenta) " "4 "Desenho de Montagem (explodida) " Tabela A.2 – Índice de desenhos de fabricação das peças "Folha "Nº "Denominação " "5 "1 "Base Central da estrutura " "6 "2 "Cabeçote motor " "7 "3 "Base transversal (Cabeçote motor) " "8 "4 "Base transversal (lado oposto ao " " " "cabeçote) " "9 "5 "Mancal (lado da placa de 3 " " " "castanhas) " "10 "6 "Mancal (lado do encoder) " "11 "8 "Eixo " "12 "15 "Acoplamento do motor de passo " "13 "16 "Suporte do motor de passo " "14 "17 "Suporte do porta-ferramenta " "15 "18 "Porta-ferramenta " "16 "19 "Calço para suporte de motor de " " " "passo " "17 "20 "Chaveta (polia movida) " "18 "22 "Chaveta (polia motora) " Anexo B (Lista de peças do Mini-Torno CNC) "Lista de peças do Mini-torno " " " "Número"Denominação "Quanti"Material e Dimensões " " " "dade " " "1 "Base central da estrutura "1 "aço, tubo quadrado 100 x " " " " "100 x 480, esp. 3mm " "2 "Cabeçote motor "1 "aço, tubo quadrado 100 x " " " " "100 x 190, esp. 3mm " "3 "Base transversal (cabeçote motor) "1 "aço, tubo quadrado 100 x " " " " "100 x 570, esp. 3mm " "4 "Base transversal (lado contrário ao "1 "aço, tubo quadrado 100 x " " "cabeçote motor) " "100 x 570, esp. 3mm " "5 "Mancal (lado da placa de 3 castanhas) "1 "aço, Ø92 x 20 " "6 "Mancal (lado do encoder) "1 "aço, Ø92 x 20 " "7 "Rolamento "2 "NSK6909 " "8 "Eixo "1 "aço, Ø49 x 258 " "9 "Placa universal de três castanhas "1 "aço, - " "10 "Motor AC "1 "- " "11 "Guia longitudinal "1 "alumínio, 600mm " "12 "Guia transversal "1 "alumínio, 300mm " "13 "Motor de passo "2 "NMB - 23LM " "14 "Encoder "1 "- " "15 "Acoplamento do motor de passo "2 "aço, Ø20 x 20 " "16 "Suporte do motor de passo "2 "aço, chapa 145 x 130 x " " " " "esp. 3mm " "17 "Suporte do porta-ferramenta "1 "aço, chapa 130 x 72 x esp." " " " "10mm " "18 "Porta-ferramenta "1 "aço, bloco 72 x 50 x 50 " "19 "Calço para chapa de fixação do motor de "2 "alumínio, bloco 130 x 20 x" " "passo " "10 " "20 "Chaveta (polia movida) "1 "aço, 10 x 10 x 36 " "21 "Polia movida 36L "1 "aço, 36L " "22 "Chaveta (polia motora) "1 "aço, 5 x 5 x 18 " "23 "Polia motora "1 "aço, 26L " "24 "Correia dentada "1 "borracha, 7/8" x 600mm " "25 "Suporte do motor AC "1 "aço, chapa 180 x 130 x " " " " "esp. 2,5mm " "26 "Suporte do encoder "1 "aço, chapa 260 x 92 x esp." " " " "2,5mm " "27 "Parafuso para fixação dos mancais "6 "M4 x 30 " "28 "Porca para fixação dos mancais "6 "M4 " "29 "Parafuso para ferramenta "3 "M8 x 40 " "30 "Parafuso para fixação do motor AC "4 "M6 x 16 " "31 "Porca para fixação do motor AC "4 "M6 " "32 "Parafuso para fixação do porta-ferramenta "1 "M16 x 80 " " "no suporte " " " "33 "Porca para fixação do porta-ferramenta no "1 "M16 " " "suporte " " " "34 "Parafuso para fixação do motor de passo no"8 "M5 x 13 " " "suporte " " " "35 "Porca para fixação do motor de passo no "8 "M5 " " "suporte " " " "36 "Parafuso para o acoplamento do motor de "2 "M3 x 8 " " "passo na guia (lado motor) " " " "37 "Parafuso para o acoplamento do motor de "2 "M3 x 6 " " "passo na guia (lado guia) " " " "38 "Parafuso para fixação da guia maior no "2 "M8 x 50 (embutido) " " "tubo quadrado " " " "39 "Porca para fixação da guia maior no tubo "2 "M8 " " "quadrado " " " "40 "Parafuso para fixação do suporte do motor "4 "M8 x 70 " " "de passo e do calço na guia " " " "41 "Porca para fixação do suporte do motor de "4 "M8 " " "passo e do calço na guia " " " "42 "Parafuso para fixação de uma guia na outra"4 "M6 x 95 (embutido) " "43 "Porca para fixação de uma guia na outra "4 "M6 " "44 "Parafuso para fixação do suporte do "2 "M8 x 65 " " "porta-ferramenta na guia menor " " " "45 "Porca para fixação do suporte do "2 "M8 " " "porta-ferramenta na guia menor " " " "46 "Parafuso para fixação do porta-ferramenta "2 "M4 x 10 " " "no suporte " " " "47 "Porca para fixação do porta-ferramenta no "2 "M4 " " "suporte " " " "48 "Parafuso para o acoplamento do encoder no "1 "M3 x 10 " " "eixo " " " "49 "Parafuso para fixação do encoder no "4 "M3 x 10 " " "suporte " " " Anexo C (Código Dinamic C) Janela Principal: Trabalha apenas com set e reset de portas e variáveis que serão usadas durante o programa, alem de estabelecer a comunicação serial com a interface e chamar a função de controle manual. main(){ char aux[20]; k1 = 80; // k = 400/5 pulsos/mm k2 = 80; k3 = 80; k4 = 80; k5 = 7150; //k = 7150 pulsos/s t[0] = 101; //tabela de tempos de espera para a curva de pull- out t[1] = 42; t[2] = 32; t[3] = 27; t[4] = 24; t[5] = 22; t[6] = 20; t[7] = 19; t[8] = 18; t[9] = 17; t[10] = 16; t[11] = 15; t[12] = 14; t[13] = 13; t[14] = 12; t[15] = 11; t[16] = 10; t[17] = 9; t[18] = 8; t[19] = 7; t[20] = 6; t[21] = 5; t[22] = 4; coordenadas = INCREMENTAL; //set de padrões de variáveis de coordenadas medidas = MILIMETROS; tipoX = RAIO; WrPortI(SPCR, &SPCRShadow, 0x84); //seta todas as portas PA como saida //Seta as Portas PD6 e PD7 como output para controlar o multiplexador WrPortI(PDFR, &PDFRShadow, 0x3f); WrPortI(PDDCR, &PDDCRShadow, 0x3f); WrPortI(PDDDR, &PDDDRShadow, 0xc0); //Fim do set //Zera todos os pinos, caso estejam em 1 WrPortI(PADR, &PADRShadow, 0x00); BitWrPortI(PDDR, &PDDRShadow, 1, 6); BitWrPortI(PDDR, &PDDRShadow, 0, 6); WrPortI(PADR, &PADRShadow, 0x24); //da ENABLE nos dois motores de passo BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); count = 0; // seta o vetor de interrupção interna B para a função timerb_isr SetVectIntern(0x0B, timerb_isr); WrPortI(TBCR, &TBCRShadow, 0x01); //seta o clock do timer B para perclk/2 WrPortI(TBL1R, NULL, 0x00); // inicializa a interrupção WrPortI(TBM1R, NULL, 0x00); WrPortI(TBCSR, &TBCSRShadow, 0x03); //ativa o timer x = z = 0; sair = NAO; serBopen(9600); //seta e inicia a comunicação com a porrta serial B serBparity(PARAM_EPARITY); serBdatabits(PARAM_8BIT); sair = NAO; //variável de controle de estado de saída while(sair == NAO){ manual(); } WrPortI(TBCSR, &TBCSRShadow, 0x00); //finaliza todos os sets serBclose(); WrPortI(PADR, &PADRShadow, 0x00); BitWrPortI(PDDR, &PDDRShadow, 1, 6); BitWrPortI(PDDR, &PDDRShadow, 0, 6); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); }// fim do main Algoritmo de bressenham: //recebe o número de passos que deve se mover em cada motor void movG00(long xr, long zr){ long k; //variável de contagem de passos double e, l; // a variável e refere-se a distância dos pontos a reta e a l é a tangente dela int sentx, sentz; //variáveis que definem o sentido de movimento dos eixos sentx = sentz = 1; if(xr >= 0){ BitWrPortI(PADR, &PADRShadow, 0, 0); //gira eixo x no sentido horário BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); } else{ sentx = -1; xr = -xr; BitWrPortI(PADR, &PADRShadow, 1, 0); //gira eixo x no sentido anti-horário BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); } if(zr >= 0){ BitWrPortI(PADR, &PADRShadow, 1, 3); //gira eixo z no sentido horário BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); } else{ sentz = -1; zr = -zr; BitWrPortI(PADR, &PADRShadow, 0, 3); //gira eixo z no sentido anti-horário BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); } if(xr >= zr){ l = (double)(zr)/xr; e = l - .5; k = 0; while(k < xr){ if(e > 0){ e = e - 1; movPasso(4); z = z + (double)(sentz)/k2; } k++; e = e + l; movPasso(1); x = x + (double)(sentx)/k1; if(k < xr/2) espera1(k); else espera1(xr-k); } } else{ l = (double)(xr)/zr; e = l - .5; k = 0; while(k < zr){ if(e > 0){ e = e - 1; movPasso(1); x = x + (double)(sentx)/k1; } k = k + 1; e = e + l; movPasso(4); z = z + (double)(sentz)/k2; if(k < zr/2) espera1(k); else espera1(zr-k); } } } //recebe o número de passos em cada eixo e o tempo de espera para cada movimento do eixo principal void movG01(long xr, long zr, long ti){ int k, tl; double e, l; int sentx, sentz; sentx = sentz = 1; if(xr >= 0){ BitWrPortI(PADR, &PADRShadow, 0, 0); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); } else{ sentx = -1; xr = -xr; BitWrPortI(PADR, &PADRShadow, 1, 0); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); } if(zr >= 0){ BitWrPortI(PADR, &PADRShadow, 1, 3); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); } else{ sentz = -1; zr = -zr; BitWrPortI(PADR, &PADRShadow, 0, 3); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); } if(xr >= zr){ l = (double)(zr)/xr; tl = (int)(ti/xr); e = l - .5; k = 0; while(k < xr){ if(e > 0){ e = e - 1; movPasso(4); z = z + (double)(sentz)/k4; } k++; e = e + l; movPasso(1); x = x + (double)(sentx)/k3; espera2(tl); } } else{ l = (double)(xr)/zr; tl = (int)(ti/zr); e = l - .5; k = 0; while(k < zr){ if(e > 0){ e = e - 1; movPasso(1); x = x + (double)(sentx)/k3; } k = k + 1; e = e + l; movPasso(4); z = z + (double)(sentz)/k4; espera2(tl); } } } Timer: //implementa a curva de pull-out recebendo a velocidade atual do motor void espera1(long i){ int j; if(i >= TMAX){ //verifica se a velocidade está em aceleração/desaceleração count = 0; while(count < TMIN); } else{ j = (int)(i); count = 0; while(count < t[j]); } } //implementa a curva de pull-in recebendo o número de interrupções que a função deve esperar void espera2(int ti){ count = 0; while(count < ti); } //função que incrementa o contador entrando na interrupção #asm timerb_isr:: push af ; save registers push hl ld hl, (count) inc hl ; increment counter ld (count), hl ld a, 00h ioi ld (TBL1R), a ; set up next B1 match (at timer=0000h) ioi ld (TBM1R), a ; NOTE: you _need_ to reload the match ; register after every interrupt! done: ioi ld a, (TBCSR) ; load B1, B2 interrupt flags (clears flag) pop hl ; restore registers pop af ipres ; restore interrupts ret ; return #endasm Interpretação do Código void codigoG(char linha[MAX]){ int i, n; n = strlen(linha); i = 0; while(i < n){ if(linha[i] == 'G' "" linha[i] == 'g'){ i++; if(linha[i] == ' '){ //G00 i++; i = G00(linha, i); } else{ if(linha[i] == '0'){ i++; if(linha[i] == ' '){ //G00 i++; i = G00(linha, i); } else{ if(linha[i] == '0'){ //G00 i++; i = G00(linha, i); } else{ if(linha[i] == '1'){ //G01 i++; i = G01(linha, i); } else i++; } } } else{ if(linha[i] == '1'){ //G01 i++; i = G01(linha, i); } else{ if(linha[i] == '2'){ i++; if(linha[i] == '0'){ //G20 i++; tipoX = DIAMETRO; } else{ if(linha[i] == '1'){ //G21 i++; tipoX = RAIO; } else i++; } } else{ if(linha[i] == '7'){ i++; if(linha[i] == '0'){ //G70 i++; medidas=POLEGADAS; } else{ if(linha[i] == '1'){ //G71 i++; medidas = MILIMETROS; } else i++; } } else{ if(linha[i] == '9'){ i++; if(linha[i] == '0'){ //G90 i++; coordenadas = ABSOLUTA; } else{ if(linha[i] == '1'){ //G91 i++; coordenadas = INCREMENTAL; } else i++; } } else i++; } } } } } } //Fim do G else{ if(linha[i] == 'N' "" linha[i] == 'n'){ i++; i = N(linha, i); } //Fim do N else{ if(linha[i] == '/'){ i++; i = inibeBloco(linha, i); } else{ if(linha[i] == ';'){ i++; i = comentario(linha, i); } else{ if(linha[i] == 'M' "" linha[i] == 'm'){ i++; if(linha[i] == '0'){ i++; if(linha[i] == '2'){ //M02 i++; sair = SIM; } else i++; } } else i++; } } } } }} int comentario(char linha[MAX], int i){ int k; for(k = 0; linha[i+k] != '#'; k++); return i+k; } int G00(char linha[MAX], int i){ int k, j; double xr, zr, xr2, zr2; char aux[MAX]; int xi, zi; long xr3, zr3; k = 0; xi = zi = NAO; while(linha[i+k] != 'G' && linha[i+k] != 'g' && linha[i+k] != 'M' && linha[i+k] != 'm' && sair == NAO && linha[i+k] != '?'){ //verifica o aparecimento de um novo comando if(linha[i+k] == 'N'){ k++; k = N(linha, i+k) - i; } else{ if(linha[i+k] == 'X' "" linha[i+k] == 'x'){ k++; j = 0; zeraString(aux); while(linha[i+k+j] != '.' && linha[i+k+j] != ' ' && linha[i+k+j] != '#'){ aux[j] = linha[i+k+j]; j++; } k = k+j; if(linha[i+k] == '.') xr = atof(aux); else xr = atof(aux)/10000; if(medidas == POLEGADAS) xr = 2.54*xr; if(tipoX == DIAMETRO) xr = xr/2; xi = SIM; } else{ if(linha[i+k] == 'Z' "" linha[i+k] == 'z'){ k++; j = 0; zeraString(aux); while(linha[i+k+j] != '.' && linha[i+k+j] != ' ' && linha[i+k+j] != '#'){ aux[j] = linha[i+k+j]; j++; } k = k+j; if(linha[i+k] == '.') zr = atof(aux); else zr = atof(aux)/10000; if(medidas == POLEGADAS) zr = 2.54*zr; zi = SIM; } else{ if(linha[i+k] == '#'){ if(xi == SIM) xr2 = xr; else xr2 = 0; if(zi == SIM) zr2 = zr; else zr2 = 0; if(coordenadas == ABSOLUTA){ xr2 = xr2 - x; zr2 = zr2 - z; } xr3 = (long)(k3*xr2); zr3 = (long)(k4*zr2); movG00(xr3, zr3); //envia o commando para interpolação xr = zr = 0; k++; xi = zi = NAO; } else k++; } } } } return i+k; } int G01(char linha[MAX], int i){ int k, j; long fr3; double xr, zr, fr, xr2, zr2, fr2; char aux[MAX]; int xi, zi, fi; long xr3, zr3; k = 0; fr = 0; xi = zi = fi = NAO; while(linha[i+k] != 'G' && linha[i+k] != 'g' && linha[i+k] != 'M' && linha[i+k] != 'm' && sair == NAO && linha[i+k] != '?'){ if(linha[i+k] == 'N'){ k++; k = N(linha, i+k) - i; } else{ if(linha[i+k] == 'X' "" linha[i+k] == 'x'){ k++; j = 0; zeraString(aux); while(linha[i+k+j] != '.' && linha[i+k+j] != ' ' && linha[i+k+j] != '#'){ aux[j] = linha[i+k+j]; j++; } k = k+j; if(linha[i+k] == '.') xr = atof(aux); else xr = atof(aux)/10000; if(medidas == POLEGADAS) xr = 2.54*xr; if(tipoX == DIAMETRO) xr = xr/2; xi = SIM; } else{ if(linha[i+k] == 'Z' "" linha[i+k] == 'z'){ k++; j = 0; zeraString(aux); while(linha[i+k+j] != '.' && linha[i+k+j] != ' ' && linha[i+k+j] != '#'){ aux[j] = linha[i+k+j]; j++; } k = k+j; if(linha[i+k] == '.') zr = atof(aux); else zr = atof(aux)/10000; if(medidas == POLEGADAS) zr = 2.54*zr; zi = SIM; } else{ if(linha[i+k] == 'F' "" linha[i+k] == 'f'){ k++; j = 0; zeraString(aux); while(linha[i+k+j] != '.' && linha[i+k+j] != ' ' && linha[i+k+j] != '#'){ aux[j] = linha[i+k+j]; j++; } k = k+j; if(linha[i+k] == '.') fr = atof(aux); else fr = atof(aux)/10000; if(medidas == POLEGADAS) fr = 2.54*fr; fi = SIM; } else{ if(linha[i+k] == '#'){ if(xi == SIM) xr2 = xr; else xr2 = 0; if(zi == SIM) zr2 = zr; else zr2 = 0; if(coordenadas == ABSOLUTA){ xr2 = xr2 - x; zr2 = zr2 - z; } if(fi == SIM) fr2 = sqrt(xr2*xr2+zr2*zr2)/fr; xr3 = (int)(k3*xr2); zr3 = (int)(k4*zr2); fr3 = (long)(k5*fr2); movG01(xr3, zr3, fr3); xr = zr = 0; k++; xi = zi = NAO; } else k++; } } } } } return i+k; } int inibeBloco(char linha[MAX], int i){ int k; for(k = 0; linha[i+k] != '#'; k++) return i+k; } int N(char linha[MAX], int i){ int k; char aux[MAX]; for(k = 0; linha[i+k] != ' ' && linha[i+k] != '#'; k++) aux[k] = linha[i]; bloco = atol(linha); return i+k; } Comunicação Serial: //Apenas zera uma string para evitar que um caractere usada em uma string anterior atrapalhe na leitura dos caracteres da string atual void zeraString(char linha[MAX]){ int i; for(i=0; i < MAX; i++) linha[i] = 0; } void recebeString(char linha[MAX]){ int c; int i; i = 0; c = 0; while (c != '?' && i < MAX) { // Sai com o caracter ? c = -1; while ((c = serBgetc()) == -1); linha[i] = c; i++; } } Controle Manual: void manual(){ char c, aux[MAX]; long k; int ti; double v; ti = 100; while(sair == NAO){ k=0; c = serBgetc(); if(c == 'A'){ BitWrPortI(PADR, &PADRShadow, 1, 0); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); while(c != 'P'){ // Move motor x em sentido positivo em VMAX movPasso(1); espera1(k); k = k+1; c = serBgetc(); } x = x + (double)(k)/k1; } if(c == 'B'){ BitWrPortI(PADR, &PADRShadow, 0, 0); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); while(c != 'P'){ //Move motor x em sentido negativo em VMAX movPasso(1); espera1(k); k = k+1; c = serBgetc(); } x = x - (double)(k)/k1; } if(c == 'C'){ BitWrPortI(PADR, &PADRShadow, 1, 3); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); while(c != 'P'){ //Move motor z em sentido positivo em VMAX movPasso(4); espera1(k); k = k+1; c = serBgetc(); } z = z + (double)(k)/k2; } if(c == 'D'){ BitWrPortI(PADR, &PADRShadow, 0, 3); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); while(c != 'P'){ //Move motor z em sentido negativo em VMAX movPasso(4); espera1(k); k = k+1; c = serBgetc(); } z = z - (double)(k)/k2; } if(c == 'E'){ BitWrPortI(PADR, &PADRShadow, 1, 0); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); while(c != 'P'){ // Move motor x em sentido positivo em V movPasso(1); espera2(ti); k = k + 1; c = serBgetc(); } x = x + (double)(k)/k3; } if(c == 'F'){ BitWrPortI(PADR, &PADRShadow, 0, 0); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); while(c != 'P'){ //Move motor x em sentido negativo em V movPasso(1); espera2(ti); k = k + 1; c = serBgetc(); } x = x - (double)(k)/k3; } if(c == 'G'){ BitWrPortI(PADR, &PADRShadow, 1, 3); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); while(c != 'P'){ //Move motor z em sentido positivo em V movPasso(4); espera2(ti); k = k + 1; c = serBgetc(); } z = z + (double)(k)/k4; } if(c == 'H'){ BitWrPortI(PADR, &PADRShadow, 0, 3); BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); while(c != 'P'){ //Move motor z em sentido negativo em V movPasso(4); espera2(ti); k = k + 1; c = serBgetc(); } z = z - (double)(k)/k4; } if(c == 'I'){ recebeString(aux); v = atof(aux); ti = (int)(k5/(400*v)); } if(c == 'Y') // modo automático automatico(); if(c == 'Z') sair = SIM; } } Movimentação de Motores de Passo: void movPasso(int motor){ BitWrPortI(PADR, &PADRShadow, 1, motor); //envia um pulso para o motor BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); BitWrPortI(PADR, &PADRShadow, 0, motor); //volta a zero BitWrPortI(PDDR, &PDDRShadow, 1, 7); BitWrPortI(PDDR, &PDDRShadow, 0, 7); } Controle Automático: (apenas uma função auxiliar) void automatico(){ char linha[MAX]; while(sair == NAO){ recebeString(linha); codigoG(linha); } } Anexo D (Códigos de Usinagem) Código G de usinagem