AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA

Propaganda
UNIVERSIDADE FEDERAL FLUMINENSE
CENTRO TECNOLÓGICO – ESCOLA DE ENGENHARIA
ENGENHARIA MECÂNICA
MARCELO TORRES DE QUEIROZ
AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA
FRESADORA CNC
NITERÓI
2007
MARCELO TORRES DE QUEIROZ
AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA
FRESADORA CNC
Dissertação apresentada ao Curso de Pós-Graduação em
Engenharia Mecânica da Universidade Federal
Fluminense, como requisito parcial para a obtenção do
Grau de Mestre. Área de Concentração: Automação e
Controle
Orientador: Prof. DOMINGOS DE FARIAS BRITO DAVID, D. Sc.
Niterói
2007
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
2
À minha família e à minha namorada Luciana que sempre me apoiaram em todos os
momentos.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
3
AGRADECIMENTOS
Ao professor Domingos David – meu orientador pelo
desafio do trabalho.
Ao Allan Delfino – amigo e aluno do curso de
engenharia
elétrica
da
Universidade
Federal
Fluminense, pelo apoio na construção dos circuitos
elétricos e no desenvolvimento da programação.
Aos
professores
Bruno
Pedrosa,
José
Andres
Santisteban e John Reed – pelo incentivo e experiência
compartilhada.
Aos amigos Elkin Velandia e Rodrigo Carneiro – pela
paciência e conselhos.
A todos os funcionários do Laboratório de Tecnologia
Mecânica da Universidade Federal Fluminense - pela
usinagem dos componentes da mesa xy.
Aos professores da UFF – que colaboraram direta e
indiretamente.
Ao CNPq - pelo investimento ao desenvolvimento
intelectual brasileiro.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
4
SUMÁRIO
1
2
Introdução........................................................................................................................... 8
1.1
Motivação ................................................................................................................. 10
1.2
Trabalhos relacionados ............................................................................................. 10
1.3
Proposta e objetivo do trabalho ................................................................................ 10
1.4
Estrutura do texto ..................................................................................................... 11
Cenário ............................................................................................................................. 12
2.1
Estruturas Gerais ...................................................................................................... 12
2.1.1
3
Mecânica........................................................................................................... 12
2.1.1.1
Componentes Fundidos ................................................................................ 14
2.1.1.2
Fusos............................................................................................................. 14
2.1.1.3
Guias lineares ............................................................................................... 14
2.1.1.4
Motores......................................................................................................... 15
2.1.1.5
Polias e correias ............................................................................................ 16
2.1.1.6
Encoder......................................................................................................... 17
2.1.2
Eletroeletrônica................................................................................................. 17
2.1.3
Interface ............................................................................................................ 19
2.1.4
Programas (Softwares)...................................................................................... 19
Estrutura de Controle........................................................................................................20
3.1
Controle em malha fechada ......................................................................................20
3.1.1
Planta ................................................................................................................ 21
3.1.1.1
Fuso .............................................................................................................. 22
3.1.1.2
Motor de corrente contínua .......................................................................... 25
3.1.1.3
Modelo da planta .......................................................................................... 29
3.1.2
Compensador em realimentação.......................................................................34
3.1.3
Compensador em série...................................................................................... 37
3.1.3.1
Controladores Industriais.............................................................................. 38
3.1.3.1.1
Controlador liga-desliga (ON-OFF) ....................................................... 38
3.1.3.1.2
Controlador proporcional ....................................................................... 39
3.1.3.1.3
Controlador integral................................................................................ 39
3.1.3.1.4
Controlador proporcional-integral..........................................................40
3.1.3.1.5
Controlador proporcional-derivativo......................................................40
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
3.1.3.1.6
3.1.4
Controlador proporcional-integral-derivativo ........................................ 41
Atuador ............................................................................................................. 42
3.1.4.1
PWM............................................................................................................. 42
3.1.4.2
Placa de acionamento do motor....................................................................44
3.2
4
5
Classificação de sistemas ......................................................................................... 46
Implementação da automação ..........................................................................................50
4.1
Projeto de controle via computador (DOS) .............................................................. 50
4.1.1
Estrutura de montagem..................................................................................... 51
4.1.2
Estrutura do programa ...................................................................................... 53
4.1.2.1
Temporizador da placa mãe (Timer) ............................................................ 55
4.1.2.2
Interrupções .................................................................................................. 55
4.1.2.3
Programa principal ....................................................................................... 56
4.1.3
Modelo.............................................................................................................. 57
4.1.3.1
Experimental................................................................................................. 57
4.1.3.2
Simulado....................................................................................................... 60
4.1.3.3
Testes experimentais .................................................................................... 62
4.2
Projeto de controle via microcontrolador ................................................................. 67
4.2.1
Estrutura de montagem..................................................................................... 67
4.2.2
Estrutura dos programas ................................................................................... 69
4.2.2.1
Programa de controle.................................................................................... 69
4.2.2.2
Programa de interface................................................................................... 71
4.2.3
Modelo.............................................................................................................. 74
4.2.3.1
Experimental................................................................................................. 74
4.2.3.2
Simulado....................................................................................................... 76
4.2.4
Resultados encontrados .................................................................................... 77
5
Conclusão e sugestões para trabalhos futuros .................................................................. 90
6
Referências Bibliográficas................................................................................................ 92
7
Apêndice........................................................................................................................... 94
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
6
RESUMO
Aplicações em controle e automação vêm sendo objeto de estudos, tanto na
universidade, como na indústria, tendo-se como metas a diminuição dos custos de produção, o
aumento da precisão dos processos fabris e a monitoração de variáveis críticas, dentre outras.
Este trabalho teve por objetivo estudar e implementar um dispositivo automatizado
seguindo a tendência do chamado controle numérico computadorizado (CNC), destinado à
área de fabricação mecânica, que demanda conhecimentos em mecânica de precisão,
eletrônica, técnicas de informática e teoria de controle de sistemas dinâmicos.
Palavras-chave: Automação Industrial, Mesa de Coordenadas XY, Microcontrolador,
Fresadora, Encoder Incremental.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
7
ABSTRACT
Applications on control and automation have been studied both in Academic and
industrial areas, aiming the reduction of production costs, the increase of manufacturing
process accuracy and the surveillance of critical variables.
The main purpose of this work was the study and implementation of an automated
device, following the concepts of CNC machines, applied to the branch of mechanic
manufacturing areas, which demands fine mechanics, electronic, computer techniques and
dynamic systems control theory.
Keywords: Industry Automation, XY Table, Microcontroller, Milling Machine,
Incremental Encoder,
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
1
8
Introdução
Aplicações em controle e automação vêm sendo objeto de estudos tanto na área
universitária quanto na industrial. Podem-se destacar como exemplos a otimização de custos
de produção, monitoração de variáveis críticas e aumento da velocidade de produção.
As pesquisas no setor de automação exigem elevado grau de interdisciplinaridade
envolvendo as áreas de mecânica de precisão, elétrica, eletrônica e computação. O domínio
das técnicas de controle digital é um facilitador, em especial para o engenheiro mecânico
atuar na área de automação industrial.
Existem variadas técnicas de automação de sistemas, dentre elas pode-se destacar a
CNC (Computer Numeric Control ou Controle Numérico Computadorizado). Esta utiliza um
tipo de controlador numérico empregado nos centros de usinagem permitindo controle de
vários eixos através de uma lista pré-determinada de instruções formada por letras e números
(código G). Tais procedimentos envolvem comandos de movimentação, posicionamento,
velocidade, freqüências de rotação, entre outros.
O advento das máquinas CNC transformou radicalmente o setor industrial, uma vez
que facilitou todo processo de fabricação tornando-o mais rápido e com menos erros,
aumentando a margem de lucro nas indústrias.
Existem diversos tipos de processos de fabricação que podem ser automatizados,
podem-se destacar: Eletro erosão, fresadora, furadeira, jato d’água, oxicorte e torno.
A fresadora é uma máquina derivada do torno mecânico cujo desenvolvimento ocorreu
a partir de certas dificuldades em se conseguir executar determinados tipos de usinagem, tais
como desbaste de metal e cortes de peças [1]. Em resumo, a fresadora é a máquina cuja
ferramenta, denominada fresa, apresenta um movimento de rotação que tem como objetivo
arrancar material da peça de trabalho em forma de cavaco, a fim de obter uma peça final com
dimensões, forma geométrica e acabamento superficial desejados.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
9
Existem diferentes configurações de fresadoras, as mais comuns são: vertical,
horizontal, e horizontal de coluna móvel. Este projeto tem como base uma fresadora do tipo
vertical que pode ser observada na Figura 1.1.
Figura 1.1 :Representação de uma fresadora, com o eixo z parcialmente montado.
A fresa é um sólido de revolução que possui vários dentes cortantes que trabalham de
forma intermitente, o que facilita o resfriamento dos mesmos durante o tempo em que não
arrancam o material. As fresas podem ser de diversos tipos, cada qual aplicada a uma
determinada tarefa.
Figura 1.2: Diferentes tipos de fresas
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
1.1
10
Motivação
No ano de 2000, foi concebida a estrutura de uma fresadora, além disso, um sensor de
posição angular foi construído com sucesso no ano de 2002.
Na seqüência, este trabalho teve como principal motivação dar continuidade ao
desenvolvimento de um equipamento de fácil manuseio e manutenção, que possa ser alvo de
estudos relacionados à automação industrial, utilizando microcontroladores e técnicas de
controle digital, tanto dentro do curso de graduação quanto no nível de pós-graduação em
engenharia mecânica.
1.2
Trabalhos relacionados
Como já mencionado e devido ao fato da Universidade Federal Fluminense não
possuir uma máquina de controle numérico foi iniciado um estudo, no ano de 2000, visando o
desenvolvimento de uma máquina fresadora CNC (Computer Numerical Control).
O primeiro passo foi o estudo e a fabricação de parte da mesa de coordenadas com
dois graus de liberdade [2]. Num segundo momento foi realizado um trabalho envolvendo o
terceiro grau de liberdade da mesa [3]. Em seguida foi feito um estudo dos sensores
necessários para a máquina, através do projeto de um encoder incremental [4]. Finalmente foi
apresentado um servo-motor de corrente contínua, cujos movimentos de rotação foram
monitorados pelo encoder incremental [5].
1.3
Proposta e objetivo do trabalho
O objetivo deste trabalho é apresentar duas diferentes abordagens de automação. A
primeira é controlar um eixo da mesa de coordenadas com o auxílio exclusivo de um
computador. A segunda é controlar dois eixos da mesa de coordenadas utilizando um
microcontrolador modelo AVR do fabricante Atmel. Vale ressaltar que o terceiro grau de
liberdade, eixo Z da mesa, não foi incluído neste projeto.
Nas abordagens citadas, implementaram-se controladores de posicionamento na
função de referência do tipo degrau e controladores de posicionamento na função de
referência do tipo rampa até uma posição definida. Através de programas de simulações
validaram-se modelos matemáticos que possibilitaram comparações com o sistema de
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
11
controle utilizado no processo real.
1.4
Estrutura do texto
A dissertação está organizada de acordo com a estrutura que segue:
O Capítulo 2 explica o cenário em que se insere o desenvolvimento do trabalho,
mostrando de forma superficial os principais componentes utilizados na montagem, tanto da
estrutura mecânica quanto da eletro-eletrônica.
No Capítulo 3 foi dada uma nova visão da estrutura do trabalho com base na teoria
clássica de sistemas lineares, tendo como relevância uma abordagem mais aprofundada de
certos componentes.
Os resultados experimentais do trabalho são mostrados no Capítulo 4, onde se podem
comparar resultados.
O Capítulo 5 propõe trabalhos futuros e apresenta as conclusões.
No Apêndice são apresentados os códigos fontes referentes à automação via
computador e via microcontrolador, além dos detalhes da placa de acionamento do motor de
corrente contínua que foi fabricada exclusivamente para o trabalho.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
2
12
Cenário
Este capítulo tem por objetivo ambientar o leitor no cenário para o desenvolvimento
de máquinas CNC, mais especificamente dos componentes que formam a mesa de
coordenadas xy e suas principais funções. Esta abordagem segue padrões visuais, para que se
possam distinguir os diferentes elementos que compõem o projeto.
2.1
Estruturas Gerais
Para um entendimento inicial das disposições dos elementos que compõem o projeto
da mesa xy, foram organizadas quatro estruturas:
•
Mecânica
•
Eletroeletrônica
•
Interface
•
Programas
2.1.1 Mecânica
A estrutura mecânica é composta por diversos elementos, os principais estão em
destaque na Tabela 2.1.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
13
Tabela 2.1: Principais componentes da estrutura mecânica
Peças
Quantidade
Componentes
Fundidos
Guias Lineares
04
Fusos de esferas
02
Motores CC
02
Polias
02
Correias
02
Encoders
02
Rolamentos
04
03
A Figura 2.1 mostra os componentes da mesa xy que apresenta as seguintes
características:
Tampo da
mesa
X
Y
Motor
Sela
Encoder
Base
Fuso de
esferas
Figura 2.1: Foto da mesa xy
Guia
linear
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
14
Na mesa foi adotado um sistema de coordenadas de referências, mostrado na Figura
2.1, onde o eixo x está disposto em paralelo ao maior comprimento da base, e o eixo y está
disposto perpendicular ao mesmo. Vale ressaltar que o ponto de origem desse sistema de
coordenadas é flutuante, pois é um dado que pode ser modificado no programa de
implementação do controle da mesa xy.
2.1.1.1 Componentes Fundidos
Os componentes fundidos citados na Tabela 2.1 referem-se a três diferentes peças:
base, sela e o tampo da mesa que são mostrados na Figura 2.1 e foram fundidas e usinadas
pela empresa THIESSEN Fundições. Os fundidos foram montados na Universidade Federal
Fluminense em conjunto com diversos outros itens: fusos de esferas, patins, motores e
encoders.
2.1.1.2 Fusos
Transformam velocidade angular em linear. Os fusos utilizados foram fabricados e
doados pela NSK para a Universidade Federal Fluminense. Na Figura 2.2 tem-se, em
destaque, um fuso de esferas. Cada grau de liberdade utiliza um desses fusos.
As esferas que circulam dentro dele servem para reduzir o atrito entre o eixo e a porca
do fuso.
Figura 2.2: Corte de um fuso de esferas recirculantes [6], ao lado o desenho da porca do fuso utilizado na mesa.
2.1.1.3 Guias lineares
Trabalham em conjunto com o fuso de esferas impedindo que a parte linear do
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
15
deslocamento faça movimentos de rotação ao redor do fuso. Também possuem esferas que
circulam entre o trilho e o patim. O peso de todo conjunto é distribuído entre os fusos e as
guias lineares. Normalmente se utilizam dois pares de guias lineares para cada par de fusos de
esferas.
Figura 2.3: Desenho em corte de um patim de uma guia linera [6]
2.1.1.4 Motores
Trata-se de servo motores de corrente contínua de 1.2 HP de potência nominal, e de 90
volts de tensão nominal; eles possuem um rotor com ímãs permanentes e são controlados pela
corrente de armadura.
Através dos motores geramos o torque necessário para a movimentação dos eixos sem
fim e com ele todo o conjunto móvel.
A Figura 2.4 mostra um dos motores utilizados.
Figura 2.4: Foto de um dos motores
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
16
2.1.1.5 Polias e correias
As polias e a correia trabalham em conjunto, transferindo potência de um eixo para
outro. No caso da mesa xy, o conjunto transfere potência do motor para o eixo sem fim, como
podemos observar na Figura 2.5.
Figura 2.5: Foto da redução motor - fuso
A equação (2.1) rege o princípio de transferência dessa potência.
Como a velocidade tangencial na maior distância radial das polias é igual e os seus
raios são diferentes, existe uma variação na velocidade angular entre as polias e,
conseqüentemente, uma variação de torque entre elas. A polia menor possui grande
velocidade angular, mas baixo torque. A polia maior possui grande torque, mas baixa
velocidade angular.
•
Pot mec = τ × θ
Onde:
Potmec = Potência Mecânica
τ
•
= Torque
θ = Velocidade Angular
(2.1)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
17
As correias utilizadas são trapezoidais do tipo fracionárias, que solucionam os
problemas de sistemas de transmissão com espaço reduzido e necessidade de grandes raios de
curvatura. Proporcionam pequeno arco de contato com a polia e a redução dos diâmetros,
eliminando também a necessidade de pré-tensão.
2.1.1.6 Encoder
O encoder é um dispositivo capaz de medir o deslocamento angular de um eixo ou
fuso, funcionando como um transdutor que converte rotação em pulsos elétricos. Abaixo se
tem a imagem do modelo tridimensional desenvolvido especialmente para a mesa xy [4].
Figura 2.6: Imagens do modelo tridimensional de um dos encoders.
Foram projetados dois encoders para a mesa xy um para cada grau de liberdade.
2.1.2 Eletroeletrônica
O conjunto eletroeletrônico é dado por diferentes componentes:
•
Placas de potência;
•
Placas de tratamento de sinais do encoder;
•
Placas de acionamento dos motores;
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
•
Cabos, estabilizadores e conectores;
•
Computador PC;
•
Microcontrolador AVR.
18
Os componentes da Figura 2.7 e Figura 2.8, localizados próximos à estrutura
mecânica, se comunicam por diversos cabos do tipo flat, blindado e conectores.
Figura 2.7: Foto de parte do conjuntos eletro eletrônico
Figura 2.8: Cabo de transição e uma placa para um encoder
Na Figura 2.8, a foto da esquerda mostra um cabo que possui uma entrada para um
encoder, uma conexão com a porta paralela e um conector por onde saem os sinais gerados
por essa porta paralela, esse cabo é utilizado na montagem para o controle da mesa em um
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
19
grau de liberdade apenas pelo PC. Na foto da direita tem-se a placa utilizada por um encoder
incremental.
Vale ressaltar que as placas de circuito impresso foram fabricadas na própria
universidade, através de elementos corrosivos, com exceção da placa onde se localiza o
microcontrolador que foi uma doação do Laboratório de Controle e Automação do
Departamento de Elétrica da Coordenadoria do Programa de Pós Graduação em Engenharia
(COPPE), da Universidade Federal do Rio de Janeiro.
2.1.3 Interface
Para realizarmos um controle do tipo digital, é muito importante utilizarmos uma
interface adequada. Os principais elementos que compõem a interface homem máquina do
projeto são:
•
Monitor de vídeo
•
Mouse
•
Teclado
•
Joystick do tipo manche
2.1.4 Programas (Softwares)
•
Turbo C++ Versão 3.0
•
Borland C++ Builder 6.0
•
Codevision V1.24.0
•
DOS 6.22
•
MatLab Versão 6.5
•
Windows 2000 com acesso a porta serial.
No caso do Borland C++ Builder 6.0, é necessária a instalação de um programa para
habilitar a utilização das instruções de programação do joystick, e para o caso do Windows
2000, para se ter acesso direto à porta serial, é necessário instalar o programa UserPort, esse
aplicativo pode ser facilmente encontrado na internet [7].
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
3
20
Estrutura de Controle
Este capítulo tem por finalidade abordar o projeto da mesa xy segundo a teoria de
controle clássico para sistemas lineares.
3.1
Controle em malha fechada
A Figura 3.1 representa uma estrutura de controle em malha fechada [8].
Tem-se que r(t) corresponde à entrada de referência, u(t) é a entrada da planta, e y(t) é
a saída a ser controlada.
Planta é o sistema que se deseja controlar, considerado invariante. A maneira de
controlar o sistema se dá configurando os parâmetros de um controlador.
O controlador, em um sistema de malha fechada, recebe tanto a informação da saída
da planta y(t) quanto da entrada de referência r(t). Em função dos valores de y(t), r(t) e dos
parâmetros do controlador é determinado o valor da entrada u(t) da planta.
Figura 3.1: Estrutura de controle em malha fechada
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
21
Para um melhor entendimento do controlador, pode-se reestruturar a malha de
controle, incluindo detalhes que antes estavam ocultos no controlador.
Figura 3.2: Estrutura com detalhes internos do controlador
Pode-se dividir o controlador basicamente em três elementos:
•
Compensador em série
•
Atuador
•
Compensador em realimentação
Cada qual possui características distintas e tem papel fundamental para a configuração
de um controlador.
Seguindo essa linha de raciocínio podem-se fazer comparações entre termos gerais da
teoria com os elementos que compõem a mesa xy. Além disso, são abordados conceitos na
área de controle.
3.1.1 Planta
É o sistema a ser controlado, constituído por dispositivos mecânicos e elétricos
podendo ser parte de um equipamento ou apenas um conjunto de componentes de um
equipamento que funcione de maneira integrada, com o objetivo de realizar determinada
operação [9].
A fim de um melhor entendimento da planta que será utilizada neste trabalho,
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
22
seguem as descrições dos seus principais componentes.
3.1.1.1 Fuso
O início do conceito da planta está no estudo do eixo de esferas circulantes (sem fim).
Basicamente transforma-se movimento de rotação de um servo motor elétrico em um
movimento linear da mesa.
Considerando um fuso convencional (de atrito), a relação entre o torque aplicado e a
força axial depende do sentido de rotação [10].
TD =
F ⋅ dm ⎛⎜ l + π ⋅ f ⋅ dm ⎞⎟
2 ⎜⎝ π ⋅ dm − f ⋅ l ⎟⎠
(3.1)
TE =
F ⋅ dm ⎛⎜ π ⋅ f ⋅ dm − l ⎞⎟
2 ⎜⎝ f ⋅ l − π ⋅ dm ⎟⎠
(3.2)
Onde:
TE = Torque no sentido oposto de F (regra da mão direita)
TD = Torque no sentido de F (regra da mão direita)
F = Carga suportada pelo eixo
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
23
dm = diâmetro médio
f = coeficiente de atrito da rosca
l = passo do fuso
No caso do fuso de esferas, o coeficiente de atrito f é muito pequeno podendo assim
reduzir as duas equações (3.1) e (3.2) a:
T =
F ⋅l
2 ⋅π
(3.3)
Figura 3.3: Eficiência mecânica de um fuso de atrito comparado com o de esferas recirculantes [11].
Sabe-se que:
∑F = m⋅a
Onde
m = massa deslocada pelo fuso
a = aceleração linear da massa
Desenvolvendo a equação (3.4) tem-se:
(3.4)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
••
24
(3.5)
F = m⋅ x
Onde
x = deslocamento linear da massa
Substituindo a equação (3.5) na equação (3.3) tem-se que:
••
m ⋅ x⋅ l
T =
2 ⋅π
(3.6)
Entretanto:
x=
θ ⋅l
(3.7)
2π
Onde
θ = deslocamento angular do fuso
Como l e π são constantes, pode-se derivar a equação (3.7):
••
••
x=
θl
(3.8)
2π
Aplicando-se a equação (3.8) na (3.6):
••
m
TL =
θl
2π
l
(3.9)
2π
Onde TL é o torque necessário para movimentar a massa.
⎛ l
TL = m⎜⎜
⎝ 2π
2
⎞ ••
⎟ θ
⎟
⎠
Devem-se ainda considerar as inércias do fuso e da polia.
A equação (3.10) deve ser reescrita da seguinte forma:
(3.10)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
⎡
2⎤
⎛ l ⎞ ⎥ ••
⎢
TL = ⎢ J fuso + J polia + m⎜⎜ ⎟⎟ ⎥ θ
⎝ 2π ⎠ ⎥
⎢
⎣
⎦
25
(3.11)
3.1.1.2 Motor de corrente contínua
Para entender o funcionamento de um motor de corrente contínua é necessário
conhecimento dos conceitos de campo elétrico e força magnética.
Uma carga elétrica cria um campo elétrico, quer esteja em repouso quer esteja em
movimento [12]. Entretanto, somente estando em movimento a carga cria campo magnético.
Um campo magnético pode ser gerado por:
a)
Um imã permanente - os elétrons giram sobre si mesmos e circulam nos
átomos de ferro que constituem o imã.
b)
Um eletroímã - os elétrons se movimentam através das bobinas enroladas sobre
um núcleo ferro magnético.
Além disso, uma partícula com uma carga positiva +q, movendo-se com velocidade
v, através de um campo magnético B, sofre uma força defletora magnética FB, segundo a
equação (3.12).
FB = qv × B
Onde:
FB = Força magnética
q = carga do elétron
v = velocidade da carga elétrica
B = campo magnético
(3.12)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
26
Figura 3.4: Representação de uma partícula sofrendo a ação de uma força magnético
Sabe-se que a carga transferida (dq) pela corrente (i) durante um intervalo de tempo
(dt) é dada pela equação (3.13).
dq = idt
(3.13)
Considerando um fio de comprimento L, os elétrons nesta seção do fio, irão deslocarse por um plano perpendicular ao mesmo num intervalo de tempo igual a L / v ,
transportando uma carga dada pela equação:
q = i( L / v)
(3.14)
Substituindo a equação (3.14), na equação (3.12) tem-se que:
FB = iLB
(3.15)
Caso o campo magnético não seja perpendicular ao fio, a força magnética é dada por:
FB = iL × B
Onde
L
(3.16)
é um vetor dirigido ao longo do segmento de fio no sentido da corrente.
O princípio de funcionamento de um motor de corrente contínua é um campo
magnético exercendo uma força sobre um emaranhado de fios que transportam corrente
(enrolamento de armadura ou induzido) fazendo girar o eixo do motor.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
27
Figura 3.5: Bobina retangular transportando uma corrente i num campo magnético uniforme. Um torque age
para alinhar o vetor normal n com a direção do campo.
Considerando a bobina na posição em que o vetor unitário n, normal ao seu plano,
faz um ângulo θ com a direção do campo. O sentido de n é determinado pela regra da mão
direita. A força resultante é a soma vetorial das forças que atuam sobre cada um dos quatro
lados da espira. No lado 2, o vetor L da equação (3.16) aponta no sentido da corrente e tem
módulo igual a b. O ângulo entre L e B para este lado é igual a 90° - θ. Assim o modo da
força que atua sobre o lado 2 vale:
F 2 = ibBsen (90° − θ ) = ibB cos(θ )
(3.17)
Pode-se mostrar que a força F4, que atua sobre o lado 4 tem o mesmo módulo que
F2, mas aponta no sentido oposto. Assim sendo, as forças F2 e F4, tomadas em conjunto, não
podem ocasionar qualquer movimento da espira, pois não só a resultante dela é igual a zero,
como também é nula a resultante dos seus torques, visto terem elas a mesma linha de ação.
Para os lados 1 e 3, as forças F1 e F3, têm módulos iguais a iaB e sentidos opostos,
não podendo ocasionar o movimento do centro de massa da espira. Contudo, estas duas forças
não possuem a mesma linha de ação e assim elas fazem a espira girar em torno do eixo, pois
existe um torque resultante dado por:
τ ´= iabBsen θ
(3.18)
Este torque atua sobre cada espira da bobina. Como existem N espiras, o torque total
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
28
é igual a:
τ = NiabBsen θ = ( NiA )Bsenθ
(3.19)
Onde A é a área da bobina. As grandezas entre parênteses estão assim agrupadas,
pois todas elas constituem propriedades da bobina: seu número de espiras, sua área e a
corrente que a percorre.
Figura 3.6: Representação simplificada do funcionamento de uma espira de um motor de corrente contínua
A Figura 3.6 representa o funcionamento de uma espira de um motor de corrente
contínua onde duas forças magnéticas se combinam para exercer um torque sobre uma bobina
de corrente, tendendo a girá-la em torno do eixo central.
O motor de corrente contínua é constituído basicamente por três partes:
1. Rotor
2. Estator
3. Escovas
O rotor ou armadora é a parte girante, montada sobre o eixo da máquina, construído
de um material ferromagnético envolto em um enrolamento chamado de enrolamento de
armadura, este enrolamento suporta uma alta corrente no anel comutador.
O estator ou campo é a parte estática da máquina, montada em volta do rotor, de
forma que o mesmo possa girar internamente, também constituído de material ferromagnético
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
29
envolto em um enrolamento de baixa potência chamado de enrolamento de campo, que tem a
função apenas de produzir um campo magnético fixo para interagir com o campo da
armadura.
As escovas servem para a condução de energia para o rotor.
3.1.1.3 Modelo da planta
A Figura 3.7 mostra a planta do projeto mesa xy. O motor de corrente contínua
controlado pela armadura aciona a polia menor, que através de uma correia aciona a polia
maior. A polia maior está montada no fuso de esferas que, ao girar, converte o deslocamento
angular do eixo em deslocamento linear. Pode-se utilizar como saída do sistema tanto a
rotação θ quanto o deslocamento linear x .
Figura 3.7: Esquema representativo da planta da mesa xy
Nessa etapa do estudo foi utilizada a análise angular.
Temos como dados do problema:
ei = Tensão atuante na armadura do motor
L = Indutância do motor
R = Resistência elétrica do motor
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
30
θm = Deslocamento angular do eixo do motor
Jm = Momento de inércia do eixo do motor
T = Conjugado desenvolvido pelo motor
TL = Conjugado desenvolvido sobre o eixo principal
b = Coeficiente de viscosidade do sistema
JL = Momento de inércia do conjunto: polia maior, eixo e carga
x = Deslocamento linear da mesa
θ = Deslocamento angular do fuso de esferas
Definindo a corrente na armadura do motor tem-se:
L
dia
dθ m
+ Ria + | K b
dt
= ei
(3.20)
dt
Aplicando a transformada de Laplace na equação (3.20) tem-se:
(Ls + R )I a (s ) + K b sΘ m (s ) = Ei (s )
(3.21)
Onde Kb é a constante da força contra eletromotriz.
Além disso,
••
∑Torques = J m θ m
(3.22)
O somatório dos torque atuantes é dado pela equação (3.23).
∑ Torques = T
m
−T
(3.23)
Aplicando a equação (3.23) na equação (3.22) tem-se que:
••
J m θ m + T = Tm
(3.24)
Tm = Kia
(3.25)
Substituindo a equação (3.25) na equação (3.24) tem-se que:
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
••
J m θ m + T = Kia
31
(3.26)
Sabe-se também que:
T=
θ
T
θm L
(3.27)
θ
θm
(3.28)
n=
•
T
••
= bθ + J
L
θ
L
(3.29)
Substituindo as equações (3.28) e (3.29) na equação (3.27) tem-se:
•
••
T = n(bθ + J L θ )
(3.30)
Substituindo a equação (3.30) na (3.26) tem-se:
••
Jm θ
m
+ nJ
••
L
•
θ + nb θ = Ki a
(3.31)
Derivando e arrumando a equação (3.28):
••
••
θm =
θ
(3.32)
n
Aplicando a equação (3.32) na (3.31):
••
Jm
Ou seja:
θ
n
••
•
+ nJ L θ + nbθ = Kia
(3.33)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
••
••
•
J m θ + n 2 J L θ + n 2 b θ = nKi
(J
m
(3.34)
a
+ n J L )θ + n bθ = nKia
2
••
•
2
32
(3.35)
Onde K é a constante de torque do motor e ia é a corrente na armadura.
Aplicando a transformada de Laplace à equação (3.35) tem-se:
(J
)
( )
+ n 2 J L s 2 Θ( s)+ n 2b sΘ( s) = nKI a ( s)
m
(J
( s) =
Ia
m
)
s 2 + n 2 J L s 2 + n 2bs Θ( s)
(3.36)
(3.37)
nK
Substituindo a equação (3.37) na equação (3.21):
(Ls + R ) (J
m
)
s 2 + n 2 J L s 2 + n 2bs Θ( s )
nK
+ K b sΘ m ( s ) = Ei ( s)
(3.38)
Aplicando a transformada de Laplace na equação (3.32):
Θ m ( s) =
Θ( s )
(3.39)
n
Combinando as equações (3.39) e (3.38):
(Ls + R ) (J
m
)
s 2 + n 2 J L s 2 + n 2bs Θ( s)
nK
[(Ls + R )(J
m
)
+ Kb s
]
Θ( s )
n
= Ei ( s )
+ n 2 J L s 2 + n 2b + KK b s Θ( s) = nKEi ( s)
(3.40)
(3.41)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
Θ(s)
Ei ( s)
=
[
nK
(
)
s (Ls + R ) J m + n J L s + n b + KKb
Θ(s)
Ei ( s)
=
2
2
]
N
33
(3.42)
(3.43)
A´s + B´s + C´s
3
2
Ou seja, a equação (3.43) é uma equação de terceira ordem.
⎛ L⎞
Como, em geral, a constante de tempo elétrica ⎜⎜ ⎟⎟ é menor do que as constantes de
⎝ R⎠
tempo mecânicas, esta função pode ser aproximada para uma outra de segunda ordem. Isto
será verificado experimentalmente.
Logo, a equação (3.42) pode ser representada como:
Θ(s)
Ei (s)
=
(J
nK
m
)
(
)
(3.44)
R + n J L R s + n b + KKb s
2
2
2
Ou seja:
Θ( s)
Ei ( s)
=
C
(3.45)
As + Bs
2
Onde:
A = ( J m R + n 2 J L R)
B = n 2b + KK b
C = nK
K
= Constante de torque
Kb
R
= Constante de força contra-eletromotriz
= Resistência elétrica do motor
(3.46)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
Jm
= Momento de inércia do rotor
JL
= Momento de inércia da carga acionada
n
34
= relação entre diâmetros
3.1.2 Compensador em realimentação
Para que aconteça a realimentação do sistema, é necessário o uso de um encoder
incremental. Ele realimenta o sistema com pulsos de interrupção, que ao serem avaliados pelo
processador permitem obter a distância percorrida pela mesa e a sua direção, ou seja, o
encoder é um transdutor que converte um movimento angular ou linear em uma série de
pulsos digitais elétricos.
O encoder incremental do tipo angular consiste em um disco, que apresenta janelas
transparentes e opacas, fixado em um eixo cuja extremidade está conectada ao eixo de estudo.
Num dos lados do disco é colocado um fotoreceptor e do outro lado um diodo emissor de luz.
Quando o disco gira, as janelas ora interrompem ora permitem a passagem de luz gerando
pulsos.
Figura 3.8: Representação de um encoder incremental do tipo angular [13].
A estrutura do encoder utilizado neste trabalho é simples. Trata-se de três pares de
emissores e receptores infravermelhos, onde o feixe de luz gerado pelo diodo emissor pode
ser bloqueado por uma máscara opaca, localizada entre o emissor e o receptor. As
características da máscara usada definem a resolução do equipamento que, nesse caso,
corresponde a um do tipo incremental com nove graus de resolução. Os três pares
receptor/emissor geram em suas saídas, três canais distintos: dois canais (A e B) defasados
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
35
90º entre si, onde se obtém informações de direção e posição em relação ao ponto de partida.
O encoder também fornece o 3º canal (C), de um pulso por volta, entretanto esse canal não
está sendo utilizado neste trabalho.
Figura 3.9: Seção do disco utilizado para a leitura do encoder incremental com nove graus de resolução.
Para uma leitura digital dos sinais gerados pelo encoder é necessário uma forma de
onda quadrada com amplitude de 5 volts, entretanto os sinais que saem do encoder não
possuem tais características. Para a digitalização dos sinais utilizou-se a placa mostrada na
Figura 3.10.
Figura 3.10: Placa de tratamento de sinais do encoder e alguns dos sinais de saída da placa.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
36
Na Figura 3.11 pode-se observar o esquema da montagem da placa de tratamento dos
sinais do encoder.
Figura 3.11: Desenho esquemático da placa de tratamento de sinais do encoder.
Onde:
U1, U2 = LM358, amplificador operacional
U3 = 4093, portas NAND Schmitt Trigger
U4 = 4077, portas XNOR
R1, R2, R3, R4, R5, R6, R14, R15, R16 = resistores de 10 kΩ
R11, R12, R13 = resistores de 470 Ω
R10 = 100 Ω
R9, R7 = 1 kΩ
R8 = 1 MΩ
O amplificador operacional é usado como um comparador de tensão no circuito.
Quando a saída do sensor de infravermelho ultrapassa 2,5V, marca determinada pelo divisor
de tensão formado pelos resistores R2 e R3, a saída do LM358 vai ao nível baixo de tensão,
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
37
que é entregue a entrada do CI 4093 onde o sinal adquire a forma de onda quadrada, graças à
função Schmitt Trigger de suas portas. Nesse momento se tem a leitura dos três sinais A, B e
C por qualquer entrada digital. Porém, para garantir a correta leitura e interpretação dos sinais
adicionando uma maior eficácia ao software, foi desenvolvido um quarto canal (D), onde temse em sua saída, um sinal baixo (0 volt) de duração dt, que indica que uma mudança de estado
nos canais A e B ocorreu e que, em tal momento, deve ser realizada a leitura desses canais.
Com isso pode-se, com apenas um pino de interrupção (canal D), gerenciar os três canais do
encoder. Para gerar D, colocou-se A e B nas entradas de uma porta XNOR do CI 4077
gerando um sinal O. Tal sinal foi dividido em duas partes. Uma foi direcionada a uma entrada
de outra porta XNOR do mesmo CI, enquanto a outra sofreu um pequeno retardo gerando um
sinal O’. Na saída dessa porta lógica tem-se o canal D.
Figura 3.12: Disposições dos canais utilizados
3.1.3 Compensador em série
Existem diversos tipos de compensadores em série, sendo enfoque deste trabalho os
controladores industriais proporcionais, derivativos e integrativos.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
38
3.1.3.1 Controladores Industriais
Pode-se classificar os controladores industriais basicamente da seguinte forma [9]:
•
Controlador Liga-Desliga (ON-OFF);
•
Controlador Proporcional (P);
•
Controlador Integral (I);
•
Controlador Proporcional-Integral (PI);
•
Controlador Proporcional-Derivativo (PD);
•
Controlador Proporcional-Integrativo-Derivativo (PID);
A maioria dos controladores utiliza eletricidade ou fluidos sobre pressão como fontes
de potência. Assim, os controladores podem ter suas funções de transferência implementadas
através de circuitos eletrônicos, circuitos hidráulicos e pneumáticos. Entretanto, é cada vez
mais comum a utilização de controladores digitais em conjunto com conversores eletrohidráulicos ou eletro-pneumáticos caso sejam necessários [9].
3.1.3.1.1 Controlador liga-desliga (ON-OFF)
Nesse sistema de controle, o elemento de atuação possui apenas duas posições fixas,
ou seja, o dispositivo fornece apenas dois valores na saída. A grande utilização deste tipo de
controlador pode ser justificada pela simplicidade da sua construção e pelo seu baixo custo.
O controlador Liga-Desliga pode ser equacionado da seguinte forma: seja u(t) o sinal
de saída do controlador e e(t) o sinal de erro. O sinal de saída u(t) permanece no valor
máximo ou mínimo, dependendo se o valor do erro é positivo ou negativo, de tal forma que:
⎧U para e(t ) > 0
u (t ) = ⎨ 1
⎩U 2 para e(t ) < 0
(3.47)
Onde U1 e U2 são constantes. O valor mínimo de U2 é em geral igual a zero ou -U1.
Tais controladores são, em geral, implementados através de dispositivos elétricos,
principalmente válvulas solenóides.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
39
3.1.3.1.2 Controlador proporcional
O valor de saída do controlador é modificado a uma taxa de variação proporcional ao
sinal de erro atuante, de forma que o controlador proporcional é regido pela equação (3.48).
u (t ) = K p e(t )
(3.48)
Onde Kp é o ganho proporcional.
Ou, na forma da transformada de Laplace,
U ( s)
= Kp
E ( s)
(3.49)
3.1.3.1.3 Controlador integral
A derivada temporal do valor de saída do controlador é modificada a uma taxa de
variação proporcional ao sinal de erro atuante, ou seja:
du (t )
= K i e(t )
dt
(3.50)
Integrando a equação (3.50) tem-se:
u (t ) =
t
∫ K e(t )dt
0
i
(3.51)
Sabendo que Ki é uma constante, pode-se simplificar a equação (3.51).
t
u (t ) = K i ∫ e(t )dt
0
Onde Ki é o ganho integral do sistema.
Ou, na forma da transformada de Laplace,
(3.52)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
K
U (s)
= i
E ( s)
s
40
(3.53)
3.1.3.1.4 Controlador proporcional-integral
O controlador proporcional integral é uma combinação dos controladores proporcional
e integral, sendo regido pela equação (3.54):
u (t ) = K p e(t ) +
Kp
Ti
t
∫ e(t )dt
0
⎛
1 ⎞
U (s)
⎟⎟
= K p ⎜⎜1 +
E (s)
T
s
i ⎠
⎝
(3.54)
(3.55)
A função de transferência é dada pela equação (3.55), que pode ser simplificada da
seguinte forma:
t
u (t ) = K p e(t ) + K i ∫ e(t )dt
(3.56)
K
U (s)
= Kp + i
E (s)
s
(3.57)
0
Onde Ki = Kp / Ti
3.1.3.1.5 Controlador proporcional-derivativo
O controlador proporcional derivativo é uma combinação dos controladores
proporcional e derivativo, sendo regido pela equação (3.58):
u (t ) = K p e(t ) + K p Td
de(t )
dt
(3.58)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
41
A função de transferência é dada pela equação (3.59):
U (s)
= K p (1 + Td s )
E (s)
(3.59)
U ( s)
= K p + Kd s
E (s)
(3.60)
Onde Kd = Kp x Td
3.1.3.1.6 Controlador proporcional-integral-derivativo
Utiliza-se a ação combinada dos três controladores com o objetivo de obter o que há
de melhor em cada um deles. A equação (3.61) que rege o controlador PID é apresentada
abaixo:
u (t ) = K p e(t ) +
Kp
Ti
t
∫ e(t )dt + K pTd
0
de(t )
dt
⎞
⎛
1
U (s)
= K p ⎜⎜1 +
+ Td s ⎟⎟
E (s)
⎠
⎝ Ti s
(3.61)
(3.62)
A função de transferência do controlador PID é representada pela equação (3.62) que
pode ser transformada nas equações (3.63) e (3.64).
t
u (t ) = K p e(t ) + K i ∫ e(t )dt + K d
0
K
U (s)
= K p + i + Kd s
E (s)
s
de(t )
dt
(3.63)
(3.64)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
42
3.1.4 Atuador
O atuador, neste caso o acionamento eletrônico, fornece a tensão elétrica ao motor.
O mesmo é constituído por um conjunto de quatro IGBT’s (Insulated Gate Bipolar
Transistor), controlados com um padrão de chaveamento do tipo PWM (ver seção 3.1.4.1),
numa configuração denominada de ponte H, a qual pode ser governada por um
microcomtrolador ou um microcomputador via uma interface de disparo (driver).
Os IGBT’s utilizados no projeto são capazes de fornecer até 600 volts e 23 amperes.
3.1.4.1 PWM
PWM é a abreviação de Modulação de Largura de Pulso ou Pulse Width Modulation.
Através do PWM pode-se variar o valor da transferência de potência entregue a uma carga
sem as perdas ocorridas normalmente devido à queda de tensão por recursos resistivos. Esse
método de disparo é utilizado para controle de velocidade de motores de corrente contínua.
Um exemplo simples para o entendimento do funcionamento de um PWM está
mostrado na Figura 3.13. Quando o interruptor está aberto, a potência aplicada é nula. No
instante em que a chave é fechada, a potência transferida é máxima.
Caso a chave seja fechada e aberta rapidamente, pode-se, dependendo do tempo que
essa chave estiver aberta ou fechada, definir a potência transferida para a carga. Neste caso
0% de PWM corresponde a 0% de potência aplicada à carga, e 100% de PWM corresponde a
100% de potência aplicada à mesma.
Figura 3.13: Funcionamento básico de um tipo de PWM
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
43
Figura 3.14: Gráfico tensão versus tempo do PWM mostrado na Figura 3.13
Onde T é o período do PWM e t é a variável que controla o sistema. O valor de T é
fixo e o valor de t pode variar, dependendo da quantidade de energia que se deseja entregar ao
sistema.
No projeto mesa xy utiliza-se um PWM diferente do anterior. A tensão varia entre a
máxima tensão negativa e a máxima positiva, em uma dada freqüência pré programada,
Figura 3.15. Esse PWM é conhecido como anti-fase ou Locked anti-phase. Considerando t1 o
tempo que as chaves estão abertas em uma disposição, e t2 o tempo que as chaves estão
abertas na disposição contrária à primeira. Se t1 for menor que t2 o motor gira num sentido,
caso esse tempo se inverta, ou seja, t1 for maior que t2, o motor gira no sentido contrário.
A forma de deixar o motor parado é fazer t1 = t2, para uma dada freqüência. Vale
ressaltar que o motor não entra em curto, pois t1 não é igual a t2 no mesmo intervalo de
tempo, isso significa que eles intercalam o período de ligação.
A vantagem de utilizar-se o PWM do tipo anti-fase, se comparado ao tipo clássico é
que existe a possibilidade de inversão dos eixos do motor com grande facilidade e, assim a
programação do mesmo se torna menos complexa.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
44
Figura 3.15: Diagrama de funcionamento do PWM anti-fase
Figura 3.16: Gráfico tensão versus tempo do PWM mostrado na Figura 3.15
Pela Figura 3.16 pode-se constatar que existe um desequilíbrio no tempo de abertura
entre t1 e t2. Isso significa que existe uma tensão média efetiva que estará no campo positivo
de tensão.
3.1.4.2 Placa de acionamento do motor
Para uma melhor compreensão será explicado o funcionamento de apenas um dos
graus de liberdade, pois o outro é uma réplica do primeiro. Esta seção dará uma visão geral do
funcionamento da placa de acionamento do motor, o desenho geral da placa encontra-se no
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
45
capítulo dos Anexos.
Na placa de acionamento do motor, utilizam-se dois modelos diferentes de drivers,
SKHI20OP e o SKHI20OPA da Semikron, estas placas servem de proteção para os IGBTs,
que são os transistores de alta potência. O SKHI20OP saiu de circulação e atualmente só se
comercializa o SKHI20OPA. Eles possuem características semelhantes, a única diferença,
explicada pela assistência técnica da Semikron, é que o SKHI20OPA precisou de dois
resistores de 27 ohms e dois jumpers soldados nele.
Vcc
M1
A
B
Driver 1
C
D
Driver2
Figura 3.17: : Esquema resumido da atuação das placas SKHI20OP/A (driver 1 e 2)
Cada driver aciona meia ponte H, necessitando de três alimentações, sendo duas de 25
volts e outra de 15 volts.
Figura 3.18: Esquema representativo das fontes de alimentação de 25 volts
Calcularam-se os valores de R1 e R2 da Figura 3.18 utilizando a fórmula contida na
Figura 3.19 disponibilizada no manual do fabricante do componente LM317.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
46
Figura 3.19: Calculando os valores paras as resistências
Os quatro pulsos que chegam do PC passam através de quatro acopladores óticos do
tipo 4N25, para depois atingirem a parte de potência da placa de acionamento do motor. Essa
é uma forma de proteção do circuito de controle de um eventual acidente.
3.2
Classificação de sistemas
Podem-se classificar os sistemas de acordo com o seu desempenho em regime estático.
Esta associação visa estimar os erros comparando a saída com a entrada de um sistema
no caso da entrada em função degrau e no caso da entrada em função rampa.
Seja o seguinte valor em malha aberta [9].
G ( s) = K
(Ta s + 1)(Tb s + 1) K (Tm s + 1)
s N (T1 s + 1)(T2 s + 1) K (T p s + 1)
(3.65)
O valor de N da equação (3.65) determina a classificação do sistema da seguinte
forma:
Sistema Tipo 0 → N = 0
Sistema Tipo 1 → N = 1
Sistema Tipo 2 → N = 2
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
47
Figura 3.20: Sistema em malha fechada.
A função de transferência do sistema pode ser escrita da seguinte forma:
G ( s) = K
(Ta s + 1)
(3.66)
s N (T1 s + 1)
E a função do erro do sistema pode ser escrita assim:
E ( s)
R( s)
= 1−
C ( s)
R( s)
=
1
1 + G ( s)
(3.67)
O erro estático de sistema pode ser calculado segundo a equação (3.68).
eSS = lim e(t ) = lim sE ( s) = lim s
t →∞
t →∞
t →∞
1
R( s )
1 + G( s)
(3.68)
Constante de erro de posição estático Kp. Para uma entrada a degrau R(s) = 1/s, o erro
estático ess pode ser calculado como:
eSS = lim s
t →∞
1
1
1
=
1 + G( s) s 1 + G (0)
(3.69)
A constante de erro estático de posição é definida como:
K P = lim G ( s ) = G (0)
t →∞
eSS =
1
1 + KP
A equação (3.71) define o erro estático.
Para um sistema do tipo (N = 0):
(3.70)
(3.71)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
K P = lim K
s→∞
(Ta s + 1)(Tb s + 1) K (Tm s + 1)
=K
s 0 (T1 s + 1)(T2 s + 1) K (T p s + 1)
48
(3.72)
Para um sistema do tipo 1 ou maior (N ≥ 1):
K P = lim K
s→∞
(Ta s + 1)(Tb s + 1) K (Tm s + 1)
=∞
s N (T1 s + 1)(T2 s + 1) K (T p s + 1)
(3.73)
A Tabela 3.1 indica um resumo referente as tipos de sistemas e os erros para uma
entrada em degrau.
Tabela 3.1: Erro estático para entrada em degrau
eSS =
Sistema do Tipo 0
Sistema Tipo 1 ou
1
1 + KP
eSS = 0
maior
No caso de entrada em rampa tem-se que a constante de erro de velocidade estática é
denominado Kv, e a entrada é do tipo R ( s ) =
1
s2
, pode-se assim calcular o erro estático
como:
ess = lim
s →0
1
1
1 + G(s) s 2
= lim
s →0
1
sG ( s )
(3.74)
A equação (3.75) define a constante de erro de velocidade estático Kv.
K v = lim sG ( s )
s →0
Assim ess pode ser definido como:
ess =
1
Kv
(3.75)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
49
Nos sistemas do tipo 0:
K P = lim sK
s→0
(Ta s + 1)(Tb s + 1) K (Tm s + 1)
=0
s 0 (T1 s + 1)(T2 s + 1) K (T p s + 1)
Nos sistemas do tipo 1:
K P = lim sK
s →0
(Ta s + 1)(Tb s + 1)K(Tm s + 1)
=K
s1 (T1 s + 1)(T2 s + 1)K(T p s + 1)
Nos sistemas do tipo 2 ou maiores:
K P = lim sK
s →0
(Ta s + 1)(Tb s + 1)K(Tm s + 1)
=∞
s N (T1 s + 1)(T2 s + 1)K(T p s + 1)
A Tabela 3.2 indica um resumo referente os diversos tipos de sistemas e os erros para
uma entrada em degrau.
Tabela 3.2: Erro estático para entrada em degrau
Sistema do Tipo 0
eSS = ∞
Sistema do Tipo 1
eSS =
Sistema Tipo 2 ou
maior
1
K
eSS = 0
O estudo dos erros comparados ao sistema serve como referência da grandeza do erro
que se tem de um sistema de controle com realimentação.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
4
50
Implementação da automação
A partir deste capítulo, será apresentada toda a parte experimental do projeto de
automação da mesa xy. Essa montagem foi um trabalho gradual que envolveu um alto grau de
aprendizagem e tempo de pesquisa.
Foram feitas duas abordagens diferenciadas a respeito da implementação:
•
Projeto de controle via computador (DOS)
•
Projeto de controle via microcontrolador (AVR)
Cada projeto possui características específicas que serão abordadas nas seções a
seguir.
4.1
Projeto de controle via computador (DOS)
O primeiro passo no aprendizado foi o estudo de programação em linguagem C
utilizando o computador como núcleo de programação. Para tal, utilizaram-se conceitos
relacionados à interrupção e mudança na programação da BIOS (Basic Input/Output System).
A estrutura do processamento é feita exclusivamente utilizando um computador
simples do tipo PC, mais especificamente um Pentium 3, 400 megahertz.
Para se ter uma dedicação exclusiva dos recursos computacionais existentes, foi
necessário utilizar como sistema operacional um ambiente do tipo DOS 6.22 e o compilador
Turbo C++ versão 3.0.
Nesse estudo foi realizado o controle de apenas um dos graus de liberdade da mesa xy.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
51
4.1.1 Estrutura de montagem
A Figura 4.1 representa um diagrama de blocos da montagem do sistema geral de
funcionamento da automação do grau x da mesa de coordenadas. Têm-se quatro fontes de
alimentação de tensão alternada de 127 volts. A primeira é utilizada para a fonte de
alimentação da placa do encoder, a segunda é responsável pela alimentação do computador
PC, a terceira alimenta a fonte da placa de acionamento do motor e a última alimenta a fonte
do motor.
O PC recebe sinais digitais provenientes da placa eletrônica do encoder, esses sinais
são utilizados como realimentação do sistema. Do PC são gerados os sinais de controle em
PWM, são quatro ao todo, ou seja, um para cada IGBT da placa de acionamento do motor.
Tanto a leitura do encoder quanto a saída de sinais são feitas utilizando a porta paralela.
A placa de acionamento do motor trabalha com quatro tensões contínuas de 25 volts e
uma de 15 volts recebidas através das fontes de alimentação da placa de controle. Essas
tensões são utilizadas para o perfeito funcionamento das placas SKHI20opA.
Pode-se observar também a entrada de uma tensão contínua de 86 volts que é utilizada
para gerar a potência necessária para o acionamento do motor.
A modulação PWM controla os IGBTs para fornecer a potência necessária que
movimenta os motores.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
Figura 4.1: Estrutura de blocos do projeto DOS
52
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
53
4.1.2 Estrutura do programa
A tela do programa sendo executado é ilustrada na Figura 4.2. O programa nos oferece
as seguintes possibilidades:
•
Ligar - liga o PWM (50%). Tecla de atalho: L;
•
Teste - grava pontos de 10 em 10 ms. Tecla de atalho: T;
•
Velocidade - segue uma rampa como entrada. É necessário entrar com uma
posição e uma velocidade desejada. Tecla de atalho: V;
•
Salvar Arq. - salva os pontos gravados em arquivo de extensão txt. Tecla de
atalho: B;
•
Parar - retorna o PWM para 50% (parada). Tecla de atalho: P;
•
Posicionar - controle de posição. É necessário entrar com a posição desejada.
Tecla de atalho: C;
•
Zerar - zera os valores mostrados na tela, também reposiciona a origem do eixo
de coordenas. Tecla de atalho: Z;
•
Cima - incrementa 2% de PWM quando a tecla seta para cima for pressionada.
•
PageUp - incrementa 10% de PWM quando a tecla PageUp for pressionada.
•
Cima - decrementa 2% de PWM quando a tecla seta para baixo for pressionada.
•
PageDown - decrementa 10% de PWM quando a tecla PageDown for
pressionada.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
54
Figura 4.2: Tela exibida na execução do programa em DOS
Além das opções de controle do programa, o programa disponibiliza em tela:
•
Deslocamento em rotações do eixo do encoder;
•
Distância percorrida pela mesa;
•
Quantidade de pontos que foram gravados durante um teste;
•
Barra variável, referente ao PWM;
•
Hora do sistema;
•
Direito de criar um nome para o arquivo gravado.
Para o desenvolvimento do programa, foram cumpridas certas exigências de projeto:
•
Estar sempre realizando um controle do tipo Pulse Width Modulation (PWM) na
saída da porta paralela
•
O PWM deve ser gerado a uma freqüência fixa pré-determinada, no caso foi
calculado o valor de 360 hertz.
•
Quando o canal D do encoder solicitar a leitura, esta deve ser realizada com
prioridade, a fim de evitar um erro na contagem dos pulsos;
•
De o programa principal realizar o controle em malha fechada, modificando o
valor do ciclo de trabalho do PWM, automaticamente.
Para realizar tais tarefas, utilizaram-se interrupções e um temporizador da placa mãe.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
55
4.1.2.1 Temporizador da placa mãe (Timer)
As funções de temporização e contagem, usadas freqüentemente em processos de
automação e de interfaces, podem ser fornecidas pela placa mãe do PC. O CI (circuito
integrado) que desempenha tal função é o 8253 da Intel (ou similar), através de três canais,
usando um clock de aproximadamente 1,19318 MHz, ou seja, uma contagem a cada 838,1 ηs.
Desses três canais disponíveis, usou-se o canal 0 que é responsável pela temporização do
sistema. Porém, a BIOS inicializa o contador 0 para operar em modo 3, com a contagem de
65535, ou seja, está programado como gerador de onda quadrada, com um divisor da
freqüência do clock de 65535, gerando uma interrupção a cada 54,936 ms. Deve-se então
reprogramar o 8253 para trabalhar em modo 2, que gera um pulso baixo ao final da contagem,
e carregar o contador com um valor de 10. Assim tem-se interrupção a cada 8,381 μs
aproximadamente, que é a unidade de tempo (UNIT_TIMER). Essa programação do modo é
realizada através da escrita da palavra 034h no Registrador de Controle do Modo (endereço
043h). Após isso, deve-se carregar o divisor de freqüência (igual a 10) no endereço 040h.
outportb(0x43,0x34); /* palavra de controle para operação em modo 2 */
outportb(0x40,10);
/* envio do byte menos significativo do divisor
*/
outportb(0x40,0);
/* envio do byte mais significativo do divisor
*/
4.1.2.2 Interrupções
Após a reprogramação do CI 8253 [14] para gerar a unidade de tempo UNIT_TIMER,
o valor da freqüência a ser usada no PWM é configurada. Divide-se o período da onda em 255
níveis (1 byte), com a finalidade de uma melhor resolução de controle, e também visando
facilitar a migração para um processamento microcontrolado. Tais modificações podem ser
feitas apenas mudando o conteúdo da constante PERIODO que corresponde ao período da
onda.
A rotina de interrupção temporizada 1Ch verifica o estado lógico atual (alto ou baixo)
do PWM. Caso ela alcance o número de UNIT_TIMERs determinado pelo ciclo de trabalho,
ela continua incrementando um contador. Caso contrário, ela muda o estado atual da onda,
zera o contador e recomeça a contagem, a cada nova interrupção, do tempo decorrido da parte
complementar do ciclo ativo. Ao término da contagem, o PWM vai para o nível alto, o
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
56
contador é zerado e um novo ciclo se repete. A mudança do estado ou nível lógico se refere
aos pinos da porta paralela que, quando reinicializados, oferecem essa opção na ponte H de
IGBTs.
Para uma rotação em sentido horário os pinos 2 e 4 (bits 0 e 2 do endereço 378h) são
ligados e para o sentido inverso, os pinos 3 e 5 (bits 1 e 3 do mesmo endereço) são ligados. O
nível lógico 0 é quando são zerados todos os pinos.
Além da interrupção temporizada 1Ch, outra interrupção alterada é a IRQ7, localizada
no pino 10 da porta paralela e no bit 6 do endereço 379h. Essa interrupção de hardware tem
uma maior prioridade sobre a 1Ch e é usada como entrada do canal D do encoder, que indica
o momento de leitura dos outros canais que estão localizados nos pinos 12, 13 e 15 (bits 3, 4 e
5, respectivamente, do endereço 379h). As leituras são feitas através do comando inportb, e a
saída através de outportb. O fato do canal D estar em uma interrupção de maior prioridade do
que a do timer constitui uma situação favorável para que não ocorram perdas nas leituras dos
canais do encoder.
Todo conteúdo original dos registradores é armazenado para que possa ser restaurado
ao término do programa, o mesmo acontece nos timers através de um comando chamado EOI
(fim de interrupção).
O trecho abaixo foi retirado do programa desenvolvido para o trabalho.
outportb(0x20,0x20); /* envio do comando EOI */
A linha de código com o redirecionamento da IRQ7:
disable(); /* desabilita interrupções de hardware */
rotina_velha = getvect(0x0F); /* guarda manipulador antigo da IRQ7 */
setvect(0x0F,Interrupção_IRQ7); /* instala a rotina do usuário para a IRQ7 */
outportb(0x21,inportb(0x21) & 07F); /* habilita IRQ7 */
enable(); /* habilita as interrupções de hardware */
4.1.2.3 Programa principal
O programa principal roda no que se denomina loop, ou seja um ciclo de programa
que se repete, realizando o controle de malha fechada com os dados obtidos do encoder
(posição) e atualizando o valor do ciclo de trabalho do PWM.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
57
4.1.3 Modelo
Existem diferentes formas de obtenção do modelo do sistema que se deseja trabalhar.
Neste trabalho foi utilizado um modelo experimental. Isto se justifica pela dificuldade em se
modelar não linearidades tais como o atrito dos fusos.
4.1.3.1 Experimental
Para sistemas de primeira ordem a resposta a um degrau unitário é mostrada na Figura
4.3 que representa uma curva exponencial.
Pode-se observar que 3T é o tempo necessário para a curva alcançar 95% do seu valor
final.
Figura 4.3: Curva exponencial de resposta de uma entrada em degrau unitário
Seguindo essa analogia foi calculado um modelo experimental para o sistema.
Esses dados serão utilizados para a construção da função de transferência do modelo
mostrado na Figura 4.4, além das seguintes informações:
Vmáx = velocidade máxima do teste
PWMv = PWM utilizado no teste
Aplicou-se um degrau de 100% de PWM (tensão máxima de trabalho) sobre o sistema,
foi traçado um gráfico com a curva de resposta.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
58
Figura 4.4: Função de transferência, entrada PWM e saída velocidade linear
O gráfico da Figura 4.5 foi obtido com a captação de pontos do deslocamento da mesa
na direção x, esses pontos foram gerados pelo programa de controle via DOS e gravados em
um arquivo com extensão txt. Com esses pontos foi feita uma média ponto a ponto referente
ao tempo decorrido entre eles.
Imprimindo os pontos num gráfico e determinando uma curva que representa a média
móvel de seis pontos consecutivos, gerou-se a curva aproximada da velocidade linear em
relação ao tempo decorrido da mesa, pois o encoder disponibiliza apenas deslocamento linear.
A Figura 4.5 ilustra a resposta em velocidade do eixo x.
Figura 4.5: Gráfico da velocidade linear do “eixo x” em função do tempo
0,95 × 167,5 ≅ 159
(4.1)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
59
3T = 0,32
T = 0,32 / 3
T = 0,106
G (s) =
k=
k
T .s + 1
(4.2)
(4.3)
167,5
= 1,675
100
(4.4)
1,675
0,106.s + 1
(4.5)
G(s) =
1,675
0,106
G (s) =
0,107.s + 1
0,106
G ( s) =
15,9
s + 9,5
(4.6)
(4.7)
Como:
•
G(s) =
X ( s)
PWM ( s )
(4.8)
Desenvolvendo-se à equação (4.8) tem-se:
G(s) =
sX ( s )
PWM ( s )
Substituindo a equação (4.9) na equação (4.7) tem-se que:
(4.9)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
60
sX ( s )
15,9
=
PWM ( s ) s + 9,5
(4.10)
X ( s)
15,9
=
PWM ( s ) s ( s + 9,5)
(4.11)
A equação (4.11) representa o modelo da planta do sistema.
4.1.3.2 Simulado
Esta seção indica a forma de se montar um modelo utilizando o Matlab, pois em outras
seções (4.2.4) são disponibilizadas comparações entre o modelo controlado (real) e o
matemático controlado via Matlab.
Utilizando o programa Matlab, mais precisamente o Simulink, simulou-se o controle
da mesa em um grau de liberdade, para entrada em degrau, que é representada pelo bloco
denominado referência.
No bloco “PID” estão contidas informações do controle PID. O bloco “Volts para
PWM”, representado por uma função descontínua, é apenas uma pequena correção de valores.
A descontinuidade de PWM em função da tensão atende os seguintes pré-requisitos:
1. Tensão máxima da mesa (86 volts) é convertida em 100% PWM.
2. Tensões entre 0 e 10,3 Volts são convertidas em 12% de PWM.
3. Tensões entre 0 e -10,3 Volts são convertidas em -12% de PWM.
4. Tensão mínima da mesa (-86 volts) é convertida em -100% PWM.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
61
Figura 4.6: Modelo aproximado do sistema para entrada em degrau unitário.
Figura 4.7: Informações contidas no bloco “PID”
Apesar de incluído um bloco para um controlador PID discreto, Figura 4.7, obteve-se
ótimos resultados apenas utilizando o controlador analógico, mas caso seja necessário, basta
trocar a posição do interruptor manual que o PID discreto passa a fazer parte do sistema e o
PID analógico deixa de ser utilizado.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
62
Figura 4.8: Informações contidas no bloco “Modelo”.
Uma forma de representação em blocos no Simulink do modelo da planta da mesa é
apresentada na Figura 4.8. Nela podem-se visualizar os parâmetros do modelo.
4.1.3.3 Testes experimentais
Os testes realizados durante o trabalho via DOS utilizaram a freqüência de 360 hertz e
são apresentados nesta seção.
Inicialmente foi feito um teste de linearidade entre a saída de PWM do computador em
comparação com a tensão aplicada na entrada do motor, utilizando um multímetro.
Para facilitar a leitura de tensão foi utilizada uma montagem contendo uma lâmpada
incandescente de 60 Watts (127 volts) ligada em paralelo ao atuador do sistema
desconectando-se o motor do mesmo.
Variou-se, através do programa, a percentagem de PWM aplicada sobre o atuador e a
resposta desse atuador, em volts, foi registrada a cada 10% de PWM. O gráfico da Figura 4.9
indica esses resultados.
Diferente do modelo simplificado do sistema mostrado na Figura 4.6, onde o PWM
varia de -100% a 100%, a estrutura do programa (DOS) utiliza uma escala que varia de 0% a
100% de PWM. Quando a percentagem de PWM está na faixa de 0% significa que o ciclo de
trabalho está todo em uma das direções, ou seja, indica máxima energia que o motor fornece
para um dos lados. Quando o PWM está na faixa de 100% indica máxima energia na direção
oposta. Com isso tem-se a comprovação da linearidade entre o valor dado de PWM e o valor
de saída em volts.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
63
Figura 4.9: Comparação entre Tensão e PWM
Após o teste de linearidade foram feitos mais três testes referentes ao torque máximo
suportado pelos motores (x e y), utilizando também a configuração de controle via DOS. Os
motores foram desacoplados do sistema e colocados sobre uma bancada para que pudessem
ser feitas as medições dos torques.
Os três testes realizados foram:
1 - Teste de tração utilizando a polia menor (motor retirado do eixo x)
2 - Teste de tração utilizando a polia maior (motor retirado do eixo x)
3 - Teste de tração utilizando a polia maior (motor retirado do eixo y)
Para a realização dos testes 1, 2 e 3, utilizaram-se os seguintes equipamentos:
•
Recipiente de plástico com capacidade igual a 15 litros e massa total igual a
305 g.
•
Chapas de aço de massa 54g cada, num total de 150 placas.
•
Polia menor de raio efetivo igual a 27 mm.
•
Polia maior de raio efetivo igual a 70 mm.
Na Figura 4.10 tem-se a representação do experimento onde a figura da esquerda
mostra a polia de alumínio utilizada nos testes 2 e 3 e a figura da direita mostra a polia de aço
carbono utilizada no teste 1, ambas as polias são acopladas diretamente no eixo do motor.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
64
Figura 4.10: Representação do teste feito nos motores
Em ambos os testes foram verificados os valores mínimos de levantamento do
recipiente para um determinado valor de PWM, até que o mesmo conseguisse obter um
movimento vertical contínuo e lento.
Tabela 4.1: Dados necessários para os testes
Dados:
Características
Raio da polia menor
26 mm
Raio da polia maior
70 mm
Gravidade
9,81 m/s2
Massa do recipiente
350 g
Massa da placa
54 g
Na Tabela 4.2 pode-se observar que o recipiente, mesmo vazio, só conseguiu ser
levantado com 52% de PWM. Vale ressaltar que como foi utilizado o PWM do tipo anti-fase
o valor de 50% de PWM equivale a 0% de carga no sistema, e 100% corresponde à carga
máxima no sistema. Para determinar o torque aplicado utilizou-se a equação (4.12).
Torque = mtotal × g × rpolia
(4.12)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
65
No teste 1 não foi possível verificar o torque máximo aplicado ao motor devido ao fato
de não existirem mais placas disponíveis. Assim foi necessário dar prosseguimento segundo o
teste 2, ou seja utilizando uma polia maior.
Tabela 4.2: Teste 1
PWM (%)
Número de placas
Número de recipientes
Massa total (g)
Torque (N.m)
50
51
52
53
54
55
60
70
80
90
100
0
0
3
8
15
22
52
110
150
-
0
0
1
1
1
1
1
1
1
-
0
0
467
737
1115
1493
3113
6245
8405
-
0,00
0,00
0,12
0,19
0,28
0,38
0,79
1,59
2,14
-
No teste 2 o motor começou a perder rendimento e sua temperatura aumentou
consideravelmente. O teste foi refeito depois de transcorridos 30 minutos, e com o motor
resfriado, verificou-se que o mesmo voltou a melhorar seu rendimento. Essa diferença no
rendimento se deve ao fato de que, ao esquentar, o motor começa a variar suas propriedades,
tais como indutância e resistência, mudando, com isso, suas características.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
66
3,0
Torque (N.m)
2,5
2,0
1,5
1,0
Motor normal
0,5
Motor superaquecido
0,0
50
60
70
80
90
100
PWM (%)
Figura 4.11: Comparativo entre o motor trabalhando superaquecido e em temperatura normal
Na Figura 4.12 estão apresentados os três testes. Como resultado pode-se concluir que
os dois motores têm características semelhantes e que o torque máximo atingido pelo motor
não passou de 2,8 N.m e que aparentemente o motor está saturando neste valor, não sendo
conveniente trabalhar nesta faixa.
Figura 4.12: Teste de torque máximo dos motores
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
4.2
67
Projeto de controle via microcontrolador
A segunda parte da implementação diz respeito ao controle da mesa xy utilizando um
microcontrolador modelo AVR ATMega 16. A escolha desse microcontrolador se deu por
diversos fatores, dentre os quais pode-se destacar:
9 Possui quatro canais de PWM distintos – facilita a implantação de PWM sem a
necessidade de configurar interrupções.
9 Facilidade de gravação
9 Possibilidade de trabalhar com freqüências mais elevadas, a escolhida para o projeto é
de 1000 Hertz.
4.2.1 Estrutura de montagem
A estrutura de montagem do controle através do microcontrolador é bastante
semelhante à estrutura de montagem do controle através do computador. A diferença está na
montagem do comando principal, o gerador de freqüências passa a ser o microcontrolador. O
mesmo recebe os pulsos provenientes do encoder e realiza os cálculos necessários para o
controle do sistema. A placa onde está conectado o microcontrolador é uma placa de
desenvolvimento que disponibiliza os canais do AVR para entrada ou saída de dados,
disponibiliza os sinais de PWM e também a porta para gravação.
O computador tem papel secundário. Através do PC o microcontrolador pode ser
gravado e é através dele que acontece a interface com o homem.
A porta paralela nessa estrutura de montagem serve apenas para gravação do
microcontrolador, que utiliza a porta serial para comunicação com o PC.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
Figura 4.13: Estrutura de blocos da montagem microcontrolada
68
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
69
4.2.2 Estrutura dos programas
Foi necessário desenvolver dois programas que são compatíveis entre si.
O primeiro denominado programa de controle ou principal é responsável pela ação do
microcontrolador na realimentação do sistema de controle. O segundo programa é responsável
pela interface do programa do microcontrolador.
4.2.2.1 Programa de controle
O programa de controle ou principal é previamente gerado utilizando o programa
Codevision, que é um gravador da própria AVR, utilizando um ambiente Windows.
A maneira mais fácil de configurar o microcontrolador, dentro do Codevision, é
utilizar um ícone denominado Codewizard. Com ele todas as configurações do
microcontrolador são selecionadas apenas utilizando o mouse e qualquer porta, PWM ou
timer, torna-se disponível para a programação ao término desta operação. Essas linhas são
escritas e comentadas automaticamente.
Abaixo temos a seqüência de figuras de uma configuração do Codewizard.
Os temporizadores (timer) são utilizados para controle e para execução do PWM. As
interrupções externas (External IRQ) são utilizadas para receber os pulsos de interrupção dos
encoders.
Ao final da operação os arquivos necessários para a programação são gerados e salvos.
No apêndice está disponibilizado todo o código do programa necessário para o
funcionamento do microcontrolador para o projeto de automação da mesa xy. Esse programa
está configurado para o controle de dois graus de liberdade simultâneos, se necessário.
Em anexo disponibiliza-se todo código utilizado no projeto de automação.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
Figura 4.14: Configurando o CHIP e as interrupções externas
Figura 4.15: Configurações dos temporizadores e da porta serial
70
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
71
Figura 4.16: Momento de geração dos arquivos
Figura 4.17: Pergunta de confirmação da utilização da OC1A e OC1B como PWM (saída)
4.2.2.2 Programa de interface
O programa de interface é gerado utilizando o programa Borland C++ Builder 6.0, ele
foi desenvolvido de maneira a interagir com o programa de controle, recebendo dados de
leitura dos encoders e enviando bits de ações para execução do microcontrolador.
A Figura 4.18 mostra como o C++ Builder apresenta a tela para arrumação do
programa, na Figura 4.19 pode-se observar o programa em execução.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
72
Figura 4.18: Desenvolvimento do programa no C++ Builder
O programa gerado no Borland só pode ser executado caso o programa feito no
Codevision esteja instalado e funcionando dentro do microcontrolador,
Figura 4.19: Tela de execução do programa de interface
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
73
Na Figura 4.20 foi separado o programa em nove subconjuntos:
Subconjuntos:
1. Onde o programa deve ser iniciado. A porta escolhida deve ser a porta onde está
configurada a porta serial, pois ela pode variar dependendo do computador.
2. Mostra o gráfico deslocamento em função do tempo no eixo x.
3. Mostra o gráfico deslocamento em função do tempo no eixo y.
4. Mostra o gráfico x em função do y, como se estivesse escrevendo sobre o tampo da
mesa.
5. Define os valores de Kp, Kd e Ki dos dois graus de liberdade.
6. O subconjunto 6 trabalha em paralelo com as informações fornecidas pelo subconjunto
8. É uma tela onde se pode observar a seqüência de pontos escolhidos para controle
seqüencial. Essa seqüência pode ser formatada utilizando os botões “Apagar Tudo” ou
“Apagar Último”, e o controle funciona quando ativamos o botão “Iniciar”.
7. Mostra a atual contagem, em milímetros de leitura dos encoders. Além disso, torna o
ponto atual como origem do sistema e limpa as telas gráficas (2, 3 e 4).
8. Configura os valores desejados para o controle, bem como a velocidade. A partir do
botão “Gravar” um conjunto de pontos é enviado para o subconjunto 8. Caso o botão
“Posição” seja acionado, ocorre controle de posição com entrada em degrau e caso o
botão “Velocidade” seja acionado um controle de posição com entrada em rampa com
uma posição final pré determinada passa a interagir com o sistema, e a massa se
desloca para o ponto previamente digitado.
9. Habilita a captura de pontos. Muito útil para gerar gráficos mais sofisticados.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
74
Figura 4.20: Tela de execuções mapeada
4.2.3 Modelo
Assim como no caso do controle via DOS, pode-se determinar um modelo
experimental e um simulado ou virtual.
Além da determinação do modelo referente ao eixo x foi determinado um modelo
referente ao eixo y do projeto.
4.2.3.1 Experimental
O gráfico da Figura 4.21 foi gerado com a captação de pontos do deslocamento da
mesa na direção x. Foi feita uma média ponto a ponto referente ao tempo decorrido entre eles.
Imprimindo os pontos num gráfico e determinando uma curva que representa a média
móvel de seis pontos consecutivos, pode-se gerar uma curva aproximada da velocidade linear
em relação ao tempo decorrido da mesa.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
75
Figura 4.21: Modelo utilizando microcontrolador no eixo x
Seguindo o mesmo procedimento da seção 4.1.3.1 pode-se determinar o valor da
função de transferência experimental do AVR na direção do eixo x.
18.7
X ( s)
= 2
PWM ( s ) s + 10s
(4.13)
Comparado-se as equações (4.11) e (4.13), pode-se observar que existe uma diferença
entre os valores encontrados, apesar de terem sido obtidos através do mesmo grau de
liberdade. Essa diferença se deve ao enferrujamento do fuso, pois os experimentos que
originaram tais equações foram realizados em datas diferentes, não havendo uma manutenção
adequada do fuso durante esse intervalo de tempo.
Um segundo teste foi realizado, mas com o eixo de coordenadas y, e teve como função
de transferência a seguinte equação:
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
Y ( s)
PWM ( s )
=
76
20
(4.14)
s + 11s
2
Seguindo o mesmo procedimento da seção 4.1.3.1, pode-se constatar uma pequena
variação nos valores obtidos, entre as equações (4.13) e (4.14). Essa variação se dá
principalmente pela diferença de carregamento transportado nos eixos coordenados.
No gráfico da Figura 4.22 pode-se verificar essa constatação. Para uma mesma entrada
em PWM, os eixos apresentaram uma inclinação das curvas de deslocamento diferenciadas.
180
Deslocamento (mm)
160
140
120
100
80
60
40
Y
20
X
0
0
0,2
0,4
0,6
0,8
1
1,2
1,4
1,6
Tempo (s)
Figura 4.22: Deslocamento x Tempo de uma entrada em degrau de máxima tensão, simultaneamente nos eixos x
ey
4.2.3.2 Simulado
Devido ao fato do programa desenvolvido para o microcontrolador executar dois
diferentes tipos de controle, um deles com entrada em degrau unitário e o outro com entrada
em rampa até um determinado ponto, foi necessário, além do modelo apresentado na seção
4.1.3.2, o modelo mostrado na Figura 4.23.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
77
Figura 4.23: Modelo aproximado do sistema para entrada em rampa com posição final pré-determinada.
4.2.4 Resultados encontrados
Os testes apresentados a seguir foram realizados utilizando o controle através do
microcontrolador.
Foram
feitos
experimentos
com
controladores
proporcionais,
proporcionais
derivativos, tanto em um grau de liberdade isolado quanto com os dois eixos de coordenadas
simultaneamente.
A Figura 4.24 apresenta um controle de posição do eixo x com entrada em degrau com
os seguintes parâmetros: Kp = 10, Kd = 1 e Ki = 3. Devido aos parâmetros, a função
apresentou um elevado sobre sinal e um elevado tempo de acomodação do sistema. As linhas
contínuas representam a simulação (Simulink do Matlab) enquanto a linha tracejada
representa os valores obtidos experimentalmente na mesa, com captura de pontos feita pelo
microcontrolador.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
78
Figura 4.24: Controle de posição do eixo x com entrada em degrau com os seguintes parâmetros: Kp = 10,
Kd = 1 Ki = 3.
Figura 4.25: Detalhe ampliado da Figura 4.24.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
79
A Figura 4.26 apresenta um controle de posição do eixo x com entrada em degrau com
os seguintes parâmetros: Kp = 30, Kd = 0 e Ki = 0. Devido aos parâmetros, a função
apresentou características de um controle meramente proporcional. As linhas contínuas
representam a simulação (Simulink do Matlab) enquanto a linha tracejada representa os
valores obtidos experimentalmente na mesa, com captura de pontos feita pelo
microcontrolador.
Figura 4.26: Controle de posição do eixo x com entrada em degrau com os seguintes parâmetros: Kp=30, Kd=0
e Ki=0.
Figura 4.27: Detalhe ampliado do gráfico da Figura 4.26
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
80
A Figura 4.28 apresenta um controle de posição do eixo x com entrada em degrau
utilizando-se os seguintes parâmetros: Kp = 30, Kd = 2 e Ki = 0. Para o controle segundo uma
referência em degrau, essa curva ofereceu os melhores resultados, pois apresentou baixo sobre
sinal com uma resposta bem rápida. As linhas contínuas representam a simulação (Simulink
do Matlab) enquanto a linha tracejada representa os valores obtidos experimentalmente na
mesa, com captura de pontos feita pelo microcontrolador.
Figura 4.28: Controle de posição do eixo x (entrada em degrau) com as seguintes características: Kp = 30,
Kd = 2 Ki = 0
Figura 4.29: Detalhe ampliado da Figura 4.28
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
81
Um outro estudo foi feito utilizando um controle de posição com entrada em degrau
para os dois graus de liberdade ao mesmo tempo utilizando-se os seguintes parâmetros: Kp =
30, Kd = 0 e Ki = 0. A Figura 4.30 apresenta o deslocamento de X em função de Y. Os pontos
(0,0) e (80,80) são os pontos iniciais e finais do controle. Como já foi visto anteriormente, as
equações (4.13) e (4.14) que representam os modelos dos graus de liberdade X e Y são
diferentes. Assim, apenas utilizando o controle de posição com entrada em degrau não é
suficiente para o sistema se deslocar dos pontos (0,0) e (80,80) de forma linear.
Figura 4.30: Comportamento da mesa com controle de posição em um plano, para Kp=30 Kd=Ki=0
Figura 4.31: Curvas separadas por eixo, x e y para um mesmo deslocamento, para Kp=30 Kd=Ki=0
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
82
Para uma análise inicial do controle de posição com a entrada (referência) em rampa
até um ponto definido foram realizados diversos testes representados na Figura 4.32. Todas as
curvas possuem os parâmetros: Kp = 30, Kd = 0 e Ki = 0, entretanto variou-se a inclinação da
curva de referência de entrada. As indicações das velocidades na legenda da figura nada mais
são do que uma aproximação da inclinação da reta tangente da referência de entrada do
controle. Todos os valores da Figura 4.32 foram obtidos de forma experimental.
Deslocamento (mm/s)
120
100
80
60
10 mm/s
20 mm/s
40 mm/s
70 mm/s
100 mm/s
186 mm/s
40
20
0
0
1
2
3
4
5
6
7
8
9
10
11
Tempo (s)
Figura 4.32: Controle de posição com entrada em rampa do eixo x com as seguintes características: Kp = 30,
kd = 0, ki = 0 para diferentes inclinações da rampa de entrada.
A seguir (Figura 4.33) tem-se uma análise de um controle de posição com entrada
(referência) em rampa até um ponto definido de 100 mm com os seguintes parâmetros: Kp =
30, Kd = 0 e Ki = 0, e uma inclinação da curva de entrada em 100 mm/s. Apesar de a curva
ter se comportado de forma a tentar seguir a inclinação pré estabelecida, a mesma apresentou
uma oscilação elevada, com uma certa demora em estabilização do sinal. A linha preta indica
o sinal de entrada (referência), a linha azul representa o teste simulado no Simulink (Matlab) e
a curva em vermelho representa os valores obtidos experimentalmente na coordenada x da
mesa xy.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
83
Figura 4.33: Controle de posição com entrada em rampa do eixo x com as seguintes características: inclinação
da curva (referência)= 100 m/s, Kp = 30, Kd=Ki=0.
Figura 4.34: Detalhe ampliado da região 1 da Figura 4.33
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
84
Figura 4.35: Detalhe ampliado da região 2 da Figura 4.33
No próximo teste (Figura 4.36) tem-se um controle de posição com entrada
(referência) em rampa até um ponto definido de 100 mm com os seguintes parâmetros: Kp =
30, Kd = 2 e Ki = 0, e uma inclinação da curva de entrada em 100 mm/s. A linha vermelha
indica o sinal de entrada (referência), a linha azul representa o teste simulado no Simulink
(Matlab) e a curva tracejada (verde) representa os valores obtidos experimentalmente na
coordenada x da mesa xy.
A curva de resposta da Figura 4.36 foi a que apresentou melhores resultados dentre
todos os testes experimentais realizados.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
85
Figura 4.36: Controle de posição com entrada em rampa do eixo x com as seguintes características: inclinação
da curva (referência)= 100 m/s, Kp = 30, Kd=2 e Ki=0.
Figura 4.37: Detalhe ampliado da região 1 da Figura 4.36.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
Figura 4.38: Detalhe ampliado da região 2 da Figura 4.36.
Figura 4.39: Detalhe ampliado da região 3 da Figura 4.36.
86
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
87
No último teste realizou-se um controle de posição do tipo seqüencial. Os dados foram
inseridos no computador (via teclado) pelo programa de interface (desenvolvido no C++
Builder) e retransmitidos automaticamente para o programa principal ou de controle (ver
seção 4.2.2).
Uma estrutura em forma de “L” foi projetada para simular o terceiro grau de liberdade
da fresadora. Em uma de suas extremidades foi fixada uma caneta, simulando uma fresa, a
outra extremidade dessa estrutura foi fixada na base da mesa (ver Figura 4.40). Os
movimentos de rotação dos motores geram movimentos de translação, tanto do tampo da
mesa, quanto da sela. A soma desses movimentos faz com que o tampo da mesa se
movimente em dois graus de liberdade em relação à ponta da caneta.
Tampo da
mesa
Caneta
X
Y
Sela
Base
Figura 4.40: Configuração da mesa para o experimento de controle sequencial de pontos.
A Figura 4.41 apresenta imagens capturadas do vídeo que foi filmado no teste de
controle seqüencial. A Figura 4.42 é a imagem final do teste do controle seqüencial.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
1
2
3
4
5
6
7
8
9
10
Figura 4.41: Imagens capturadas do vídeo no teste de controle seqüencial.
88
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
Figura 4.42: Imagem final após o controle seqüencial
89
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
5
90
Conclusão e sugestões para trabalhos futuros
Foi atingido, com sucesso, o objetivo do projeto, que foi a montagem e controle da
mesa de coordenadas xy como parte integrante de uma fresadora CNC.
Na área experimental, pôde-se controlar a posição seguindo uma referência em degrau,
e um controle de posição seguindo uma referência do tipo rampa.
O controle de um grau de liberdade foi realizado com auxílio de um computador PC, e
para dois graus de liberdade foi utilizado um microcontrolador modelo AVR ATMega 16.
Comparando-se o computador e o microcontrolador é correto destacar que para o
aluno que está iniciando o estudo de automação é válido o aprofundamento no entendimento
do controle via DOS antes do aprofundamento dos estudos de controle utilzando o
microcontrolador. Entretanto para o aluno que já possui noções de controle e de programação,
sugere-se um estudo mais aprofundado apenas dos controles via microcontrolador.
Na parte de modelagem, viu-se que, mesmo utilizando modelos matemáticos
simplificados, podem-se estimar com alto grau de acurácia as características de saída do
sistema, ou seja, os dados experimentais estão de acordo com os dados teóricos e simulados,
assim torna-se mais fácil estimar parâmetros de controle. O controlador do tipo proporcional
derivativo foi o que apresentou melhores resultados. A parte integrativa, normalmente é mais
utilizada quando se deseja zerar os erros relativos dos sistemas, mas ainda precisa de mais
testes para sua determinação.
Sugestão na área computacional: modificar o programa desenvolvido no Borland C++
tornando-o compatível com a linguagem NC, que utiliza código G. Com isso a mesa xy tornase controlável por qualquer pessoa que possua conhecimentos em programação de máquinas
CNC. Outra sugestão é a implementação de uma entrada no tipo senóide e parabólica na
programação do microcontrolador. A disponibilidade do código fonte do programa do
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
91
microcontrolador e do programa de interface tem o intuito de permitir futuras modificações e
novos trabalhos na área.
Para tornar a mesa uma fresadora de comando numérico serão necessárias algumas
medidas, entre as quais:
9 Reestruturar a montagem da coluna Z, colocando as dimensões reais dos
componentes.
9 Fazer uma verificação mais apurada dos mancais de rolamento.
9 Fazer um estudo mais apurado de especificação de motores, para que eles
tenham potência suficiente para realizarem uma operação de usinagem. Nossos
motores foram adaptados para o projeto, não possuem grandes valores de
torques.
9 Aumentar a resolução do encoder (número de pulsos por volta).
9 Estudar a possibilidade de troca das polias por engrenagens, e das correias
trapezoidas por correias dentadas, para uma melhor transmissão em baixas
velocidades, evitando escorregamento e com isso perda de potência do motor.
Vale ressaltar que o escorregamento não interfere na acurácia do sistema, já
que o encoder encontra-se fixo no eixo de esferas recirculantes e não no eixo
do motor. Essa solução diminui a resolução disponível ao sistema, entretanto
evita falhas devido ao escorregamento.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
6
92
Referências Bibliográficas
[1] Apostila de máquinas fresadoras Senai; Disponível: http://pt.wikipedia.org/wiki/Fresadora
[capturado em 15 fev. 2007].
[2] Alves, Alan Nunes. “Mesa de Coordenadas com Guias Lineares e Fuso de Esferas
para Fresadora CNC”, Projeto Final de Curso, Escola de Engenharia da UFF, 2002.
[3] Gonçalves de Jesus, Alexandre Vasconcellos. “Projeto e Construção de Coluna com
Eixo ‘Z’ para Fresadora CNC”, Projeto Final de Curso, Escola de Engenharia da UFF,
2003.
[4] Queiroz, Marcelo Torres. “Projeto e Controle de um Encoder Incremental”, Projeto
Final do Curso de Engenharia Mecânica, Escola de Engenharia da UFF, 2004.
[5] Delfino, Allan. “Controle, em malha aberta, de um motor de corrente contínua
utilizando circuito de potência”, Relatório final de Iniciaçõa Científica, Escola de
Engenharia UFF, 2004.
[6] Disponível: http://www.thk.com.br/technical/shinseihin_pt.html [capturado em 01 março
2007].
[7] Disponível: http://www.mecatronicafacil.com.br/downloads/Userport.zip, [capturado em
15 fev. 2007].
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
93
[8] Gomes, Afonso “Notas de aula”, UFRJ, 2º. Semestre, 2006.
[9] Ogata, Katsuhiko “Engenharia de Controle Moderno”, 4a Edição, 2005.
[10] Shigley, Joseph “Projeto de Engenharia Mecânica”, Editora Bookman, 7ª Edição,
2005.
[11] Disponível: http://www.nsk.com.br, [capturado em 29 dez. 2006].
[12] Resnick, Robert; Halliday, David “Fundamentos de Física 3 Eletromagnetismo”, 3a
Edição, 1994.
[13] Disponível: http://www.euclidres.com/motionSensors/motionSensors.html, [capturado
em 10 jun. 2007].
[14] Torres, Gabriel. “ Hardware e interfaceamento”, 4a Edição, 2001.
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
7
94
Apêndice
O programa abaixo foi desenvolvido em C++ (programa Turbo C++), para ser executado
no DOS 6,22 como sistema operacional exclusivo.
// Universidade Federal Fluminense
// Mestrado em Engenharia Mecânica
// Aluno: Marcelo Torres de Queiroz
// Ultima atualizacao = 26/12/2006 Versao 9
// Controle de posição com entrada em degrau
// e controle de posição com entrada em rampa (controle de “velocidade)”.
// OBS.: Esse programa foi pouco testado e apresenta algumas falhas que ainda não foram
// resolvidas.
# include <stdio.h>
# include <conio.h>
# include <dos.h>
# include <math.h>
// Definicoes para controlar a INT8 (IRQ0 - tempo)
# define INT8
0X1C
# define TRUE
1
# define FALSE
0
# define CTRL_8253 0x43 // Porta do registro controle da 8253
# define TIMER0
0x40 // Porta do TIMER0
# define T0_MODO2 0x34 // Coloca TIMER0 em modo 2
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
# define T0_MODO3 0x36 // Coloca TIMER0 em modo 3
# define TICK
0.838109651e-6 // 1/(1.193 180 Hz) = 0,838 096 51 us
# define DIVISOR
32
// Divisor
//# define PERIODO_ATU 10e-3 // Atualizaocao dos vetores, nao usado
//# define TAXA_AMOSTRAGEM
// nao usado
# define UNIT_TIMER DIVISOR*TICK // Unid temporz adotada (26,819 088 us)
// atualizacao pode ser: 373 186,5 (inteiro)
# define ATUALIZACAO 373 // Taxa de atualizacao das variaveis em Unit_Timer
// tempo de controle estava 20 alterei para 100 (24/04)
# define TEMPO_CONTROLE 100 // Taxa de atualizacao das vars em Unit_Timer
# define PONTOS
1000 // Quantidade de posicao dos vetores
# define PERIODO 100.0 // Periodo do PWM em Unit_Timer
# define DIED_ZONE 6. // Modulo da Zona Morta
# define nciclo_ref 4 //Conta ciclos pwm para atualizar ref (V3)
# define dt PERIODO*UNIT_TIMER*nciclo_ref //Intervalo de tempo (V3)
// entre atualizacao de ref (V3)
// Definicoes para controlar a interrupcao IRQ7 (Porta Paralela - Encoder)
# define IRQ7
0xf // Posicao no vetor de interrupcoes
# define HAB_8259_IRQ7 0x80 // Bit para habilitar IRQ7 (8259)
# define HAB_8259_INTR 0x21 // Registrador para hab intr (8259)
// Enderecos para a familia PS
# define POS 0x102 // Prog. Option Select register
# define POS_DADO 0x90 // 1001 0000 paralela normal e habilitada
// Interrupcoes
# define INT_TECLADO 0x60
# define SAIDA_P_PARALELA 0x378
# define ESTADO_P_PARALELA 0x379
# define POS_TECLADO_VECT 0x09
# define CRTL_PORTA_PARALELA 0x37A
# define HABILITAR_IRQ7 0x14 // Interrupcao externa ??
# define ON_OFF_INT outportb(0x20,0x20)
// ----------------------------------------// ---- ROTINAS DE INTERRUPCAO ANTIGAS ----// ----------------------------------------void interrupt (*old_int8)(void); // Guardar vet IRQ0 (INT8)
void interrupt (*old_irq7)(void); // Guardar vet IRQ7 (p. paralela)
95
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
void interrupt (*old_tecla)(void); // Guardar vet IRQ1 (teclado)
// ----------------------------------------// ---- DEFINICOES DE VARIAVEIS GLOBAIS----// ----------------------------------------int pos_velho;
int hab_antiga;
int tecla;
int ang=0, ang_ant=0;
int atual, antes, i=0, j=1, ii=1;
int kref=0; // Conta total de ciclos de PWM para atualizar ref (V3)
int pos_linear[PONTOS];
int controlando=0, testando=0, testt=0;
int velocidando=0; // (V3)
int sair=0, acao;
int ciclo_ativo=0, aux;
int tempo_pwm=0, pwm_high=1;
double valor; // (V2)
double veloc; // (V2)
float tempo=0.;
float dist; //(V6)
struct dostime_t t;
// Parametros do Controlador
//float tau = UNIT_TIMER * 40.0;
float tau = UNIT_TIMER * TEMPO_CONTROLE;
// era 20 testamos 40 agora 56
float kp = 30.;
float kd = 0.;
float ki = 0.;
// Variaveis do controlador
unsigned char CONTROLE = 0;
float e_old = 0.0;
float int_erro = 0.0;
float ref= 0.0;
float dx=0.0; //(V3)
96
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
float pos_atual = 0.0;
float pos_final = 0.0;
// -------------------------------------------// ------------ FUNCOES DO TECLADO -----------// -------------------------------------------void zerando(void)
{
// printf("Zerando Variaveis...
\n");
ang=0;
ang_ant=0;
// tempo=0;
ciclo_ativo=50;
controlando=0;
velocidando=0;
testando=0;
pos_atual=0.;
i=0;
gotoxy(10,10);
clreol();
gotoxy(10,11);
clreol();
gotoxy(10,12);
clreol();
gotoxy(40,13);
clreol();
gotoxy(40,14);
clreol();
}
// -------------------------------------------// ------- Estados Proibido: 1+2; 4+8; -------// -------------------------------------------void parar(void)
{
outport (0x378,0);
// utilizando deslizamento
// outport (0x378,2+8);
// utilizando frenagem
}
// -------------------------------------------void ligar(void)
97
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
{
if (pwm_high)
{
outport ( 0x378,(2+4) );
}else
{
outport ( 0x378,(1+8) );
}
}
// -------------------------------------------void fim(void)
{
outport (0x378,0);
sair=1;
}
// --------------------------------------------
// ---------------------------------------------------------// ----- ROTINA DE INTERRUPCAO 0x1C (INT8 - IRQ0) NOVA -----// ---------------------------------------------------------void interrupt intTimer(void)
{
float e,u,zona_morta,ciclo_ativo_float;
float K_d = kd/tau;
float K_i = ki*tau;
tempo++; // simplesmente conta a unidade de tempo estipulada
tempo_pwm++;
//------------------------------------- CONTROLE PWM
if (j==TEMPO_CONTROLE)
{
//=============inicio Controle ==========
if (controlando)
{
pos_atual = ang/9.*0.25;
e = ref - pos_atual;
int_erro +=e;
u =(( (kp + K_d)*e - K_d*e_old ) + K_i*int_erro ) ;
e_old = e;
if((e>-0.25)&&(e<0.25))
ciclo_ativo_float = 50.;
98
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
else
{
ciclo_ativo_float=u*50./(84.5)+50.;
if ((ciclo_ativo_float>50.)&&(ciclo_ativo_float-50.)<DIED_ZONE)
ciclo_ativo_float=50.+DIED_ZONE;
else {
if ((ciclo_ativo_float<50.)&&(-ciclo_ativo_float+50.)<DIED_ZONE) ciclo_ativo_float=50.DIED_ZONE;
}
}
ciclo_ativo=ciclo_ativo_float;
}
if (ciclo_ativo > 100) ciclo_ativo = 100;
if (ciclo_ativo < 0) ciclo_ativo = 0;
// ========= fim controle =================
j = 1;
}
else j++;
//------------------------------------ CAPTURA DE PONTOS
if (testando || controlando || velocidando)
{
if (i<PONTOS)
{
if(ii==ATUALIZACAO)
{
pos_linear[i++]=ang; // guarda a posicao linear.
ii = 1;
}
else ii++;
}
}
//------------------------------------ COMUTA PWM
if (tempo_pwm<PERIODO)
{
if (tempo_pwm*100.<=ciclo_ativo*PERIODO) pwm_high=1;
else pwm_high=0;
}
else
{
// (V3)
99
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
tempo_pwm=0;
kref++;
// Conta o ciclo PWM (V3)
// gotoxy(0,0);
// printf("kref: %d",kref);
}
//------------------------------------- VELOCIDADE
if (velocidando)
//(V3)
{
if (kref>=nciclo_ref)
{
//(V5)
//(V3)
if (fabs(pos_final-ref)>fabs(dx)) //(V6) testa se o proximo ref
{
// nÆo passar de pos_final
ref=ref+dx;
//(V3)
testt=1;
}
else
//(V3)
ref=pos_final;
//(V3)
kref=0;
//(V3)
}
//(V3)
}
//(V3)
//---------------------------------------BLOCO DE AۂO
switch(acao)
{
case 0: parar(); break; // caso 'p' teclado
case 1: ligar(); break; // caso 'l' teclado
case 3: fim(); break; // caso 'q' teclado
}
// atualiza hora... :-|
if ((tempo*UNIT_TIMER)>0.01)
{
t.hsecond++;
tempo=0.;
}
if (t.hsecond==100)
{
t.second++;
t.hsecond=0;
}
if (t.second==60)
{
100
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
t.minute++;
t.second=0;
}
if (t.minute==60)
{
t.hour++;
t.minute=0;
}
/*
if (tempo==65536/DIVISOR)
{
old_int8(); // chama o vetor antigo de int.
tempo=0;
} */
}
// -------------------------------------------// ----- ROTINA DE INTERRUPCAO IRQ1 NOVA -----// -------------------------------------------void interrupt le_tecla (void)
{
tecla=inportb(INT_TECLADO);
// outportb(0x20,0x20);
old_tecla();
}
// -------------------------------------------// ----- ROTINA DE INTERRUPCAO IRQ7 NOVA -----// -------------------------------------------// Ela acontece quando ha um pulso negativo pelo pino 10
// da porta paralela
void interrupt le_contador(void)
{
atual=(inportb(ESTADO_P_PARALELA)&40);
if ( ((atual==40) && (antes==8)) || ((atual==32) && (antes==40)) || ((atual==0) && (antes==32)) ||
((atual==8) && (antes==0)) )
ang+=9;
else
{
if ( ((atual==40) && (antes==32)) || ((atual==32) && (antes==0)) || ((atual==0) && (antes==8)) ||
((atual==8) && (antes==40)) )
ang-=9;
101
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
102
}
antes=atual;
ON_OFF_INT; // habilitar outras ints
}
// --------------------------------------// ----------- CONFIGURA BIOS -----------// --------------------------------------void iniciar_bios(void)
{
// ------- Configura a BIOS para realizar a contagem de cerca de 1us --------
outportb(CTRL_8253,T0_MODO2);
// programa o 8253 em modo 2
outportb( TIMER0, (unsigned char)(DIVISOR & 0x00FF) ); // byte menos sig do divisor...
outportb( TIMER0, (unsigned char)((DIVISOR>>8) & 0x00FF) ); //...seguido do byte mais sig
// Atencao !! O divisor corresponde a constante que multiplica TICK em UNIT_TIMER
old_int8=getvect(INT8);
// Guarda a ref. antiga do vetor de int.
setvect(INT8, intTimer);
// Seta a nova referencia do vetor de int.
/* agora, a rotina de tratamento da interrupcao 0x08 sera chamada a
cada n ticks de 0,8386 micro-segundos, que ao final da sua execucao,
chama a rotina de tratamento da interrupcao de software 0x1C que conta
este intervalo de tempo, incrementando um contador. O programa principal,
que esta ocioso, em loop, periodicamente le este contador e o imprime,
na forma de unidades de tempo e tambem convertido em segundos. */
old_tecla=getvect(POS_TECLADO_VECT); // Instala nossa interrupcao de teclado no vetor
setvect(POS_TECLADO_VECT,le_tecla);
// Programar os Registradores POS
pos_velho=inportb(POS);
outportb(POS,pos_velho||POS_DADO);
// programar para os POS
outportb(CRTL_PORTA_PARALELA,HABILITAR_IRQ7); // habilitar IRQ7 na Paralela
old_irq7=getvect(IRQ7);
// guardar vetor intr. antigo
setvect(IRQ7,le_contador);
// colocar novo vetor
hab_antiga=inportb(HAB_8259_INTR);
// guardar habilitacao antiga
outportb(HAB_8259_INTR,hab_antiga&(~HAB_8259_IRQ7)); // hab IRQ7 na BIOS - Copiado do
Livro
ON_OFF_INT;
// cancelar intr antigas
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
}
// --------------------------------------// ------------ RESTAURA BIOS -----------// ---------------------------------------
void restaura_bios(void)
{
//----------------- RESTAURA IRQ0 ---------------setvect(INT8, old_int8);
// Restaura as configuracoes do vet. int.
outportb(CTRL_8253,T0_MODO2); // programa o 8253 em modo 3
outportb(TIMER0,0x00);
// byte menos sig do divisor...
outportb(TIMER0,0x00);
//...seguido do byte mais sig
//----------------- RESTAURA IRQ7 ---------------setvect(IRQ7,old_irq7);
// restaurar as habilitacoes
outportb(HAB_8259_INTR,hab_antiga);
outportb(POS,pos_velho);
// restaurar vetor de interrupcao
// restaurar os registradores POS
//----------------- RESTAURA IRQ1 ---------------setvect(POS_TECLADO_VECT,old_tecla);
//-----------------------------------------------}
// -------------------------------------------// ------------ Programa Principal -----------// -------------------------------------------void main(void)
{
float temp, aux2, erro;
char *valor_ss, *valor_s, *valor_v, *filename;
// Variaveis referents a criacao e gravacao em arquivo
FILE *stream;
_dos_gettime(&t); // captura o tempo real atual
antes=inportb(ESTADO_P_PARALELA)&40; // Le o estado inicial do encoder
clrscr();
outport(SAIDA_P_PARALELA,0);
zerando();
flushall();
iniciar_bios(); // Configura BIOS
gotoxy(1,13);
textcolor(GREEN);
// Para o motor
103
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
cprintf( "ÉÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍ» \n\r"
"º Ligar
ºLº
"º Teste
ºTº
º\n\r"
º\n\r"
"º Velocidade º V º
"º Salvar Arq.º B º
"º Parar
Cima +1 º\n\r"
º P º PageUp +5 º\n\r"
"º Posicionar º C º
"º Zerar
º\n\r"
Baixo -1 º\n\r"
º Z º PageDown -5 º\n\r"
"ÌÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍͼ \n\r"
"º Sair
º Q º \n\r"
"ÈÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍͼ ");
while (!sair)
{
textcolor(WHITE);
// gotoxy(20,2);
// cprintf("ref: %f ",ref);
gotoxy(20,4);
temp = ang/9.*0.25;
cprintf("Rotacao: %d voltas e %d graus ",(ang/360),ang-(ang/360)*360);
gotoxy(20,6);
cprintf("Percorreu : %.2f mm
",temp);
gotoxy(20,8);
cprintf("Pontos tst : %d
",i);
gotoxy(40,8);
cprintf("Atualizacao a cada %f s ",ATUALIZACAO*UNIT_TIMER);
// imprimir tempo real
textcolor(WHITE);
textbackground(BLUE);
// gotoxy(67,23);
// cprintf(" Hora certa ");
gotoxy(67,24);
cprintf(" %02d:%02d:%02d ", t.hour, t.minute, t.second);
textcolor(WHITE);
textbackground(BLACK);
gotoxy(1,24);
cprintf("Velocidade (+/-): ");
textcolor(RED);
for(aux=1;aux<=ciclo_ativo/5;aux++) cprintf("Û");
textcolor(WHITE);
104
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
for(aux=(ciclo_ativo/5+1);aux<=100/5;aux++) cprintf("Û");
cprintf(" %d%%
",ciclo_ativo);
gotoxy(10,12);
switch(tecla)
{
case 72: // tecla 'para cima'
if (ciclo_ativo<100) ciclo_ativo=ciclo_ativo+1;
while(tecla==72);
break;
case 73:
// tecla 'page up'
if (ciclo_ativo<100) ciclo_ativo=ciclo_ativo+5;
while(tecla==73);
break;
case 80:
// tecla 'para baixo'
if (ciclo_ativo>0) ciclo_ativo=ciclo_ativo-1;
while(tecla==80);
break;
case 81:
// tecla 'page down'
if (ciclo_ativo>0) ciclo_ativo=ciclo_ativo-5;
while(tecla==81);
break;
case 47: // tecla 'v'
if (!velocidando)
// (V3)
{
gotoxy(10,11);
clreol();
gotoxy(10,10);
clreol();
cprintf("Digite a posi‡Æo: ");
gets(valor_ss);
valor = atof(valor_ss); // ser a posi‡Æo final
pos_final=valor;
gotoxy(10,11);
clreol();
cprintf("Digite a velocidade: ");
gets(valor_v);
105
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
veloc = atof(valor_v); // ‚ sempre positivo
if(veloc>160.)
//(V6) Normaliza a velocidade
veloc=160.;
//(V6)
if(veloc<1.)
//(V6)
veloc=1.;
//(V6)
dx=fabs(veloc)*dt; //(V5) toma valor absoluto
dist=fabs(pos_final-pos_atual); //(V6) positivo
if(dist<dx)
//(V6)
dx=dist;
//(V6)
if(pos_final<pos_atual)
dx=-dx;
//
// dx ser negativo
kref=0;
//(V5)
ref=pos_atual+dx;
// gotoxy(10,3);
//(V4)
// printf("ref_i: %f %d dt: %d
",ref,testt,dt); //(V4)
acao=1; // ligar
gotoxy(10,12);
printf("Ligado ");
controlando=1; // Control vel tb usa controlando (V3)
}
else
{
controlando=0; //desliga o controle de posi‡Æo
gotoxy(10,12);
cprintf("
");
}
velocidando=!velocidando; //(V3)
controlando=velocidando;
while (tecla==47); // 'v'
break;
case 44:
// tecla 'z'
zerando();
break;
case 25:
// tecla 'p'
acao=0;
printf("Parar ");
break;
case 38: // tecla 'l'
acao=1;
106
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
printf("Ligado ");
break;
case 46: // tecla 'c'
if (!controlando)
{
gotoxy(10,10);
clreol();
gotoxy(10,12);
clreol();
gotoxy(10,11);
velocidando=0; //V7
clreol(); //V7
cprintf("Digite o valor: ");
gets(valor_s);
valor = atof(valor_s);
//pos_final=temp+valor;
ref = valor;
acao=1;
gotoxy(10,12);
printf("Ligado ");
}
else
{
gotoxy(10,12);
cprintf("
");
}
while (tecla==46); // 'c'
controlando=!controlando;
break;
case 20: // tecla 't'
testando=!testando;
if (testando)
{
gotoxy(10,12);
printf("Testando... ");
acao=1;
}
else
{
gotoxy(10,12);
107
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
printf("
");
}
while (tecla==20); // ????
break;
case 48:
// ????
// tecla 'b'
if (i)
{
gotoxy(40,13);
clreol();
cprintf("Digite o nome do arquivo: ");
flushall();
gets(filename);
strcat(filename,".txt");
stream = fopen(filename, "w+");
gotoxy(40,14);
clreol();
cprintf("%s",filename);
for (aux=0;aux<=i;aux++)
{
fprintf(stream,"%.2f\n",(pos_linear[aux]*0.25)/9.);
}
fclose(stream);
}
gotoxy(40,13);
clreol();
break;
case 16: // tecla 'q'
acao=3; printf("Fim
");
break;
} //switch
} //while not sair
clrscr();
restaura_bios();
_dos_settime(&t); // devolve o tempo atual
} //main
// FIM DO PROGRAMA !!
108
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
109
O programa abaixo foi desenvolvido em C++ (programa CodeVision), e foi testado
utilizando o Windows 2000 como sistema operacional para a gravação de um
microcontrolador.
/*********************************************
This program was produced by the
CodeWizardAVR V1.24.0 Standard
Automatic Program Generator
© Copyright 1998-2003 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:[email protected]
Project : Automação de uma Mesa XY
Version : 1.2
Date
: 08/3/2007
Author : Marcelo Torres de Queiroz e Allan Delfino
Company : Universidade Federal Fluminense
Comments:
Chip type
: ATmega16
Program type
: Application
Clock frequency
: 16,000000 MHz
Memory model
: Small
External SRAM size : 0
Data Stack size
: 256
//*********************************************/
// BIBLIOTECAS
//*********************************************/
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <math.h>
//*********************************************
// CONSTANTES
//*********************************************/
//*********************************************
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
// VARIAVEIS GLOBAIS
//*********************************************/
unsigned char antes_x=0, antes_y=0;
unsigned int ang_x=32768;
unsigned char atual_x=0, atual_y=0;
unsigned int ang_y=32768;
unsigned char cmd;
bit controlando = 0;
bit controle_vx = 0;
bit controle_vy = 0;
unsigned char var_serial = 127;
unsigned char temp_char;
unsigned int ref_int_x = 32768;
unsigned int ref_int_y = 32768;
unsigned int rx_var;
float ref_float_x;
float pos_atual_x;
float e_x=0., e_old_x=0., integ_erro_x=0.;
float u_x;
float kp_x=30.;
float K_d_x, kd_x=0.; //= kd/tau;
float K_i_x, ki_x=0.; //= ki*tau;
int ciclo_ativo_x = 127;
int ZONA_MORTA_x = 25;
float ref_float_y;
float pos_atual_y;
float e_y=0., e_old_y=0., integ_erro_y=0.;
float u_y;
float kp_y=30.;
float K_d_y, kd_y=0.; //= kd/tau;
float K_i_y, ki_y=0.; //= ki*tau;
int ciclo_ativo_y = 127;
int ZONA_MORTA_y = 12;
110
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
unsigned long int cont_time = 0;
float velocidade_abs = 0.;
float velocidade_rel_x = 0.;
float velocidade_rel_y = 0.;
float pos_inicial_x;
float pos_inicial_y;
float pos_final_x = 0.;
float pos_final_y = 0.;
float teta = 0.;
unsigned int ref_time = 0;
//*********************************************
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
//#asm("sei")// Não !!! deu erro na contagem !!!
atual_x = (PINC & 0b00000011);
/*
if (atual_x >=2)
atual_x = 5-atual_x; //converte de gray para binario
if (atual_x==(unsigned char)(fmod((float)(antes_x+1),4.)))
ang_x = ang_x - 9;
else
ang_x = ang_x + 9;
antes_x = atual_x;
*/
if ( ((atual_x==3) && (antes_x==1)) || ((atual_x==2) && (antes_x==3)) || ((atual_x==0) &&
(antes_x==2)) || ((atual_x==1) && (antes_x==0)) )
ang_x = ang_x + 9;
else
{
if ( ((atual_x==3) && (antes_x==2)) || ((atual_x==2) && (antes_x==0)) || ((atual_x==0) &&
(antes_x==1)) || ((atual_x==1) && (antes_x==3)) )
ang_x = ang_x - 9;
}
antes_x = atual_x;
}
//*********************************************
111
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
//#asm("sei")// Não !!! deu erro na contagem!!!
atual_y = (PINC & 0b00001100);
//atual_y = atual_y >> 2;
if ( ((atual_y==12) && (antes_y==4)) || ((atual_y==8) && (antes_y==12)) || ((atual_y==0) &&
(antes_y==8)) || ((atual_y==4) && (antes_y==0)) )
ang_y = ang_y - 9;
else
{
if ( ((atual_y==12) && (antes_y==8)) || ((atual_y==8) && (antes_y==0)) || ((atual_y==0) &&
(antes_y==4)) || ((atual_y==4) && (antes_y==12)) )
ang_y = ang_y + 9;
}
antes_y = atual_y;
/*
if (atual_y >=2)
atual_y = 5-atual_y; //converte de gray para binario
if (atual_y==(unsigned char)(fmod((float)(antes_y+1),4.)))
ang_y = ang_y + 9;
else
ang_y = ang_y - 9;
antes_y = atual_y;
*/
}
//*********************************************
// Timer 0 output compare interrupt service routine
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
// Place your code here
if (controlando)
{
ref_time++;
pos_atual_x = ang_x/36.; //36=9.*0.25;
pos_atual_y = ang_y/36.; //36=9.*0.25;
112
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
if (controle_vx || controle_vy)
cont_time++;
/***********************************/
if (controle_vx)
{
ref_float_x = (0.00268*(float)cont_time*(float)velocidade_rel_x) + pos_inicial_x;
if (((ref_float_x > pos_final_x)&&(velocidade_rel_x>0.)) || // se passou
((ref_float_x < pos_final_x)&&(velocidade_rel_x<0.)))
{
ref_float_x = pos_final_x; // controle puramente posicao
controle_vx = 0;
}
}
else
{
ref_float_x = ref_int_x/36.;
}
/***********************************/
e_x = ref_float_x - pos_atual_x;
integ_erro_x = integ_erro_x + e_x;
u_x =(((kp_x + K_d_x)*e_x - K_d_x*e_old_x ) + K_i_x*integ_erro_x );
e_old_x = e_x;
if((e_x>-0.25)&&(e_x<0.25))
{
ciclo_ativo_x = 127;
}
else
{
ciclo_ativo_x = u_x*127/(84.5)+127;
if ((ciclo_ativo_x>127)&&((ciclo_ativo_x-127)<ZONA_MORTA_x))
ciclo_ativo_x=127+ZONA_MORTA_x;
else
{
if ((ciclo_ativo_x<127)&&(-ciclo_ativo_x+127)<ZONA_MORTA_x)
ciclo_ativo_x=127-ZONA_MORTA_x;
}
}
if (ciclo_ativo_x > 255) ciclo_ativo_x = 255;
if (ciclo_ativo_x < 0) ciclo_ativo_x = 0;
113
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
OCR1AL = 255-(unsigned char)ciclo_ativo_x;
/***********************************/
if (controle_vy)
{
ref_float_y = (0.00268*(float)cont_time*(float)velocidade_rel_y) + pos_inicial_y;
if (((ref_float_y > pos_final_y)&&(velocidade_rel_y>0.)) || // se passou
((ref_float_y < pos_final_y)&&(velocidade_rel_y<0.)))
{
ref_float_y = pos_final_y; // controle puramente posicao
controle_vy = 0;
}
}
else
{
ref_float_y = ref_int_y/36.;
}
/***********************************/
e_y = ref_float_y - pos_atual_y;
integ_erro_y = integ_erro_y + e_y;
u_y =(((kp_y + K_d_y)*e_y - K_d_y*e_old_y ) + K_i_y*integ_erro_y );
e_old_y = e_y;
if((e_y>-0.25)&&(e_y<0.25))
{
ciclo_ativo_y = 127;
}
else
{
ciclo_ativo_y = u_y*127/(84.5)+127;
if ((ciclo_ativo_y>127)&&((ciclo_ativo_y-127)<ZONA_MORTA_y))
ciclo_ativo_y=127+ZONA_MORTA_y;
else
{
if ((ciclo_ativo_y<127)&&(-ciclo_ativo_y+127)<ZONA_MORTA_y)
ciclo_ativo_y=127-ZONA_MORTA_y;
}
}
if (ciclo_ativo_y > 255) ciclo_ativo_y = 255;
114
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
if (ciclo_ativo_y < 0) ciclo_ativo_y = 0;
OCR1BL = (unsigned char)ciclo_ativo_y;
}
}
//*********************************************
void main(void)
{
K_d_x = kd_x/0.00268;
K_i_x = ki_x*0.00268;
K_d_y = kd_y/0.00268;
K_i_y = ki_y*0.00268;
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=Out Func5=Out Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=0 State5=0 State6=T State7=T
PORTD=0x00;
DDRD=0x30;
115
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: CTC top=OCR0
// OC0 output: Disconnected
TCCR0=0x0D;
TCNT0=0x00;
OCR0=0x30;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 250,000 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0xA1;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x80;
OCR1BH=0x00;
OCR1BL=0x80;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
116
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
// INT1: On
// INT1 Mode: Falling Edge
// INT2: Off
GICR|=0xC0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xC0;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 38400
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
cmd = getchar();
switch(cmd)
{
117
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
case 1: //controle automatico
cmd = 0;
ref_time = 0;
var_serial = getchar();
ref_int_x = var_serial;
var_serial = getchar();
ref_int_x = ref_int_x +((unsigned int)var_serial)*256;
var_serial = getchar();
ref_int_y = var_serial;
var_serial = getchar();
ref_int_y = ref_int_y +((unsigned int)var_serial)*256;
controlando = 1;
break;
case 2: // controle manual
controlando = 0;
cmd = 0;
var_serial = getchar();
OCR1BL = var_serial; //PWM x
var_serial = getchar();
OCR1AL = var_serial; //PWM y
break;
case 3: // zerar
controlando=0;
cmd=0;
OCR1AL = 0x80;
OCR1BL = 0x80;
ang_x = 32768;
ang_y = 32768;
break;
case 4: //ler encoder
cmd = 0;
temp_char = (unsigned char)(ref_time & 0x00FF);
putchar(temp_char);
118
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
temp_char = (unsigned char)((ref_time & 0xFF00)>>8);
putchar(temp_char);
temp_char = (unsigned char)(ang_x & 0x00FF);
putchar(temp_char);
temp_char = (unsigned char)((ang_x & 0xFF00)>>8);
putchar(temp_char);
temp_char = (unsigned char)(ang_y & 0x00FF);
putchar(temp_char);
temp_char = (unsigned char)((ang_y & 0xFF00)>>8);
putchar(temp_char);
break;
case 5: // configuração
cmd = 0;
var_serial = getchar();
rx_var = var_serial;
var_serial = getchar();
rx_var = rx_var +((unsigned int)var_serial)*256;
kp_x = rx_var/100.;
var_serial = getchar();
rx_var = var_serial;
var_serial = getchar();
rx_var = rx_var +((unsigned int)var_serial)*256;
kd_x = rx_var/100.;
var_serial = getchar();
rx_var = var_serial;
var_serial = getchar();
rx_var = rx_var +((unsigned int)var_serial)*256;
ki_x = rx_var/100.;
var_serial = getchar();
rx_var = var_serial;
var_serial = getchar();
rx_var = rx_var +((unsigned int)var_serial)*256;
kp_y = rx_var/100.;
119
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
var_serial = getchar();
rx_var = var_serial;
var_serial = getchar();
rx_var = rx_var +((unsigned int)var_serial)*256;
kd_y = rx_var/100.;
var_serial = getchar();
rx_var = var_serial;
var_serial = getchar();
rx_var = rx_var +((unsigned int)var_serial)*256;
ki_y = rx_var/100.;
K_d_x = kd_x/0.00268;
K_i_x = ki_x*0.00268;
K_d_y = kd_y/0.00268;
K_i_y = ki_y*0.00268;
break;
case 6: // controle de velocidade
cmd = 0;
ref_time = 0;
var_serial = getchar();
ref_int_x = var_serial;
var_serial = getchar();
ref_int_x = ref_int_x +((unsigned int)var_serial)*256;
var_serial = getchar();
ref_int_y = var_serial;
var_serial = getchar();
ref_int_y = ref_int_y +((unsigned int)var_serial)*256;
var_serial = getchar();
rx_var = var_serial;
var_serial = getchar();
rx_var = rx_var +((unsigned int)var_serial)*256;
velocidade_abs = rx_var/100.;
pos_inicial_x = ang_x/36.; // pega a posiçao inicial
pos_final_x = ref_int_x/36.; // pega a posiçao final
120
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
pos_inicial_y = ang_y/36.; // pega a posiçao inicial
pos_final_y = ref_int_y/36.; // pega a posiçao final
teta = atan2(fabs(pos_final_y-pos_inicial_y),fabs(pos_final_x-pos_inicial_x));
if (teta<0.) teta=-teta;
velocidade_rel_x = cos(teta)*velocidade_abs;
velocidade_rel_y = sin(teta)*velocidade_abs;
if (pos_inicial_x > pos_final_x)
velocidade_rel_x = -velocidade_rel_x;
if (pos_inicial_y > pos_final_y)
velocidade_rel_y = -velocidade_rel_y;
controlando=1;
if(velocidade_abs == 0){
controle_vx=0;
controle_vy=0;
}else{
controle_vx=1;
controle_vy=1;
}
cont_time = 0;
break;
default:
break;
}
};
}
// Fim do Programa do microcontrolador
//******************************************************************
121
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
122
O programa abaixo foi desenvolvido em C++ (programa C++ Builder), e foi testado
utilizando o Windows 2000 como sistema operacional.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <stdio.h>
#include <math.h>
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "Joystick"
#pragma link "PERFGRAP"
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hCom; //hCom = a COM da porta serial
int controlando = 0;
int tempo=0;
int grafx, grafx2, grafy2, grafy;
int teste_encoder=0;
int c=127, d=127;
int conta_pontos;
bool ativa_transm_pontos = false;
unsigned char posicionado = 1;
unsigned int ref_time=0;
TStringList*XPontos;
TStringList*YPontos;
TStringList*VPontos;
FILE *stream;
char filename[30];
//--------------------------------------------------------------------------//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Form1 = Nossa janela
// FormCreate = executado no inicio, antes de tudo !
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
// apenas cria vetores em memória
XPontos = new TStringList;
YPontos = new TStringList;
VPontos = new TStringList;
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Button1 = Botão de abrir comunicacao serial
// Rotina de Click de Button1
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
// serial variaveis
DCB dcb;
DWORD dwError;
// serial variaveis
BOOL fSuccess;
char *COMs[4] = {"COM1","COM2","COM3","COM4"};
if (Button1->Caption == "Abrir")
{
RadioGroup1->Enabled = false; // desativo "radio"
// crio acesso a porta serial
hCom = CreateFile(COMs[RadioGroup1->ItemIndex],
GENERIC_READ | GENERIC_WRITE,
123
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
0,
/* comm devices must be opened w/exclusive-access */
NULL, /* no security attrs */
OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
0,
/* not overlapped I/O */
NULL /* hTemplate must be NULL for comm devices */
);
// caso der erro
if (hCom == INVALID_HANDLE_VALUE) {
dwError = GetLastError();
ShowMessage(dwError);
// escrever rotina de tratamento de erro de configuracao
// O que fazer caso ocorra um...
}
fSuccess = GetCommState(hCom, &dcb);
// caso consiga pegar as configuracoes da porta...
if (!fSuccess) {
// escreva alguma mensagem se nao conseguir sucesso na captura das
// configuracoes iniciais da COM, feita acima.
//não foi preenchido !
}
/* baud=38400, 8 data bits, no parity, 1 stop bit. */
dcb.BaudRate = 38400;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
fSuccess = SetCommState(hCom, &dcb);
// Seta configuracoes do estado da porta...
if (!fSuccess) {
// escreva alguma mensagem se nao conseguir sucesso no setup das
// configuracoes novas da COM, feita acima.
// não foi preenchido !
124
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
}
Button1->Caption = "Fechar"; // novo texto do Button1
Timer1->Enabled = true; // Ativo Timer 1
/* características das caixas gráficas */
PaintBox1->Canvas->Pen->Width = 1; // espessura da linha
PaintBox2->Canvas->Pen->Width = 1; // espessura da linha
PaintBox3->Canvas->Pen->Width = 1; // espessura da linha
// posicao inicial do ponto
PaintBox3->Canvas->MoveTo(PaintBox3->Width/2,PaintBox3->Height/2);
} else { // caso o botao NAO esteja escrito abrir
CloseHandle(hCom); //fecho porta
Button1->Caption = "Abrir"; // escreve abrir
RadioGroup1->Enabled = true; // habilito "radio"
//(caixas de escolha do nome da COM)
Timer1->Enabled = false; //Desativo Timer1
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Button2 = Botão "Posição"
// Rotina de Click de Button2
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
float a, b;
unsigned char ref;
unsigned short int tx_data;
// Edit1 = Posicao final X
a = StrToFloat(Edit1->Text); // captura o texto e transforma para real;
a = a*36; // transforma para angulo
// Edit2= Posicao final Y
b = StrToFloat(Edit8->Text); // captura o texto e transforma para real;
125
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
b = b*36; // transforma para angulo
// Verifica se o valor nao esta em uma faixa valida
if (((a<-32768) || (a>32767)) && ((b<-32768) || (b>32767)))
MessageDlg("Valor Inválido !",mtWarning,TMsgDlgButtons() << mbOK, 0);
else
{
// se estiver...
if (CheckBox1->Checked) // se "habilitar" (captura) estiver marcado
{
fcloseall(); // fecho arquivos, se abertos, por precaução
sprintf(filename, "%s.txt", Edit10->Text); // pego o nome para o arquivo
stream = fopen( filename, "w+"); // abro o arquivo
Edit10->Enabled = false; // desabilito poder digitar outro nome
}
ativa_transm_pontos = false; // transmissao sequencial de pontos desativada
controlando=1; // vai para o modo "controlando"
// Comando = 1 (controle posição)
TransmitCommChar(hCom,(unsigned char)1);
// idem comentario da linha 247
tx_data = (unsigned short int)(a+32768);
ref = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)ref);
ref = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)ref);
tx_data = (unsigned short int)(b+32768);
ref = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)ref);
ref = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)ref);
}
}
//--------------------------------------------------------------------------//---------------------------------------------------------------------------
126
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
// Button3 = Botão zerar
// Rotina de Click de Button3
//--------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender)
{
// Comando 3: Zera valores
TransmitCommChar(hCom,(unsigned char)3);
// Zera telas gráficas
PaintBox1->Canvas->MoveTo(0,PaintBox1->Height/2);
PaintBox1->Color = clNone;
PaintBox1->Color = clWhite;
PaintBox2->Canvas->MoveTo(0,PaintBox2->Height/2);
PaintBox2->Color = clNone;
PaintBox2->Color = clWhite;
PaintBox3->Canvas->MoveTo(PaintBox3->Width/2,PaintBox3->Height/2);
PaintBox3->Color = clNone;
PaintBox3->Color = clWhite;
tempo=0;
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Button4 = Botão Configurar
// Rotina de Click de Button4
//--------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender)
{
float a;
unsigned char aux;
unsigned short int tx_data;
controlando=0;
ativa_transm_pontos = false; // transmissão sequencial de pontos desativada
// Comando 5: Configurando valores
TransmitCommChar(hCom,(unsigned char)5);
127
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
a = StrToFloat(Edit2->Text); // captura o texto e transforma para real;
a = a*100; // mudo escala para transmissão
// idem comentario linha 247
tx_data = (unsigned short int)a;
aux = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)aux);
aux = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)aux);
a = StrToFloat(Edit3->Text); // captura o texto e transforma para real;
a = a*100;
// idem comentario linha 247
tx_data = (unsigned short int)a;
aux = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)aux);
aux = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)aux);
a = StrToFloat(Edit4->Text); // captura o texto e transforma para real;
a = a*100;
// idem comentario linha 247
tx_data = (unsigned short int)a;
aux = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)aux);
aux = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)aux);
a = StrToFloat(Edit5->Text); // captura o texto e transforma para real;
a = a*100;
// idem comentario linha 247
tx_data = (unsigned short int)a;
aux = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)aux);
aux = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)aux);
a = StrToFloat(Edit6->Text); // captura o texto e transforma para real;
a = a*100;
// idem comentario linha 247
128
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
tx_data = (unsigned short int)a;
aux = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)aux);
aux = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)aux);
a = StrToFloat(Edit7->Text); // captura o texto e transforma para real;
a = a*100;
// idem comentario linha 247
tx_data = (unsigned short int)a;
aux = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)aux);
aux = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)aux);
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Button5 = Botão Limpar
// Rotina de Click de Button5
//--------------------------------------------------------------------------void __fastcall TForm1::Button5Click(TObject *Sender)
{
PaintBox3->Color = clNone;
PaintBox3->Color = clWhite;
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Button6 = Botão Velocidade
// Rotina de Click de Button6
//--------------------------------------------------------------------------void __fastcall TForm1::Button6Click(TObject *Sender)
{
float a, b, v;
unsigned char ref;
unsigned short int tx_data;
a = StrToFloat(Edit1->Text); // captura o texto e transforma para real;
129
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
a = a*36; // transforma para angulo
b = StrToFloat(Edit8->Text); // captura o texto e transforma para real;
b = b*36; // transforma para angulo
v = StrToFloat(Edit9->Text); // captura o texto e transforma para real;
v = v*100; // muda escala para transmissão
// A partir daqui mesmo comentario da linha 360
if (((a<-32768) || (a>32767)) && ((b<-32768) || (b>32767)) && (v<0.))
MessageDlg("Valor Inválido !",mtWarning,TMsgDlgButtons() << mbOK, 0);
else
{
if (CheckBox1->Checked)
{
fcloseall();
sprintf(filename, "%s.txt", Edit10->Text);
stream = fopen( filename, "w+");
Edit10->Enabled = false;
}
controlando=1; // vai para o modo "controlando"
ativa_transm_pontos = false;
TransmitCommChar(hCom,(unsigned char)6); // comando controle velocidade
tx_data = (unsigned short int)(a+32768);
ref = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)ref);
ref = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)ref);
tx_data = (unsigned short int)(b+32768);
ref = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)ref);
ref = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)ref);
130
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
tx_data = (unsigned short int)v;
ref = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)ref);
ref = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)ref);
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Button7 = Botão Gravar
// Rotina de Click de Button7
//--------------------------------------------------------------------------void __fastcall TForm1::Button7Click(TObject *Sender)
{
ativa_transm_pontos = false;
// Vetores com os valores
XPontos->Add(Edit1->Text);
YPontos->Add(Edit8->Text);
VPontos->Add(Edit9->Text);
// adiciona os valores na forma (X;Y;V) na lista na tela
Memo1->Lines->Add("( "+XPontos->Strings[XPontos->Count-1]+" ; "+
YPontos->Strings[YPontos->Count-1]+" ; "+
VPontos->Strings[VPontos->Count-1]+" )");
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Button8 = Botão Iniciar
// Rotina de Click de Button8
//--------------------------------------------------------------------------void __fastcall TForm1::Button8Click(TObject *Sender)
{
// Inicia o controle sequencial
conta_pontos = 0;
controlando = 1;
131
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
posicionado = 1;
CheckBox1->Checked = false;
ativa_transm_pontos = true;
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Button9 = Botão Apagar Tudo
// Rotina de Click de Button9
//--------------------------------------------------------------------------void __fastcall TForm1::Button9Click(TObject *Sender)
{
ativa_transm_pontos = false;
// Limpa lista com os valores dos pontos
Memo1->Clear();
// Limpa os vetores
XPontos->Clear();
YPontos->Clear();
VPontos->Clear();
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Button10 = Botão Apagar Ultimo
// Rotina de Click de Button10
//--------------------------------------------------------------------------void __fastcall TForm1::Button10Click(TObject *Sender)
{
// se tiver pelo menos 1 linha...
if (Memo1->Lines->Count>=1)
{
ativa_transm_pontos = false;
// Apaga Ultimo valor da lista de pontos (X;Y;V)
Memo1->Lines->Delete(Memo1->Lines->Count-1);
// ... e tambem dos vetores.
XPontos->Delete(XPontos->Count-1);
YPontos->Delete(YPontos->Count-1);
VPontos->Delete(VPontos->Count-1);
}
}
132
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// CheckBox1 = Caixa de seleção "habilitar"
// Rotina de Click de Habilitar
//--------------------------------------------------------------------------void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
// se clicado...
if (CheckBox1->Checked)
{
fcloseall(); // fecho todos arquivos abertos
sprintf(filename, "%s.txt", Edit10->Text); // pego o nome do arquivo
stream = fopen( filename, "w+"); // abro um novo arquivo
Edit10->Enabled = false; // desabilito edição de nome de arquivo
Timer1->Interval = 1; // mudo valor de timer1
}
// se não habilitado...
else
{
fcloseall(); // fecho todos os arquivos abertos
Edit10->Enabled = true; // ativo edição de nome de arquivo
Timer1->Interval = 80; // mudo valor de timer1
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Rotina de Timer1
// Realizada a cada valor de tempo, em ms,
// configurado na variavel Timer1->Interval.
//--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
int frente=127, M1=127; // var joystick
int lado=127, M2=127; // var joystick
DWORD BytesLidos = 0; // var de contagem dos bytes recebidos
int LEN_BUFFER = 6; // tamanho do buffer de recepcao dos dados pela serial
unsigned char BufferRecebe[6]; // Para armazenar os dados lidos pela serial
AnsiString tempx, tempy; // var temporarias
133
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
int linha1, linha2; // var auxiliares para escrever nas caixas graficas
float enc_x,enc_y; // var relativas aos encoders
//-----------------------------// ajuste de escala do joystick
frente = 255*(Joystick1->PositionX)/65535;
lado = 255*(Joystick1->PositionY)/65535;
// caso o botao 1 do joystick esteja pressionado...
if (Joystick1->PressedButtons.Contains(joButton1) == true)
{
M1=frente;
M2=lado;
controlando=0;
// desabilitar transmissao sequencial de pontos
ativa_transm_pontos = false;
// limites superiores e inferiores na nova escala do joystick
if (M1 > 255) M1 = 255;
if (M1 < 0) M1 = 0;
if (M2 > 255) M2 = 255;
if (M2< 0) M2= 0;
}
// se nao estiver controlando...
if (controlando==0)
{
// ... transmitimos os valores de PWM.
// Sequencia:
// 1) Comando (nesse caso, valor 2 referente a controle manual)
// 2) PWM motor 1 (eixo X)
// 3) PWM motor 2 (eixo Y)
TransmitCommChar(hCom,(unsigned char)2);
TransmitCommChar(hCom,(unsigned char)M1);
TransmitCommChar(hCom,(unsigned char)M2);
}
// fim joystick
//------------------------------
134
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
// captura os dados do encoder
// Comando = 4 (responder com valores dos encoders e tempo)
TransmitCommChar(hCom,(unsigned char)4);
// Receber os valores do encoder e referencia de tempo
ReadFile( hCom, BufferRecebe, LEN_BUFFER, &BytesLidos, NULL );
// 2 bytes iniciais = referencia de tempo
ref_time = (unsigned int)((unsigned char)BufferRecebe[0]+256*
(unsigned char)BufferRecebe[1]);
// 2 bytes seguintes = enconder X
// Transformando escala 0 a 65535 para
// (-32768 a 32767)*0.25/9º -- resultado em mm.
enc_x = ((float)((unsigned char)BufferRecebe[2]+256*
(unsigned char)BufferRecebe[3])-32768)/36.;
tempx.sprintf("%.2f",enc_x);
Label1->Caption = "X: "+tempx+" mm";
// 2 bytes seguintes = enconder Y
// Transformando escala 0 a 65535 para
// (-32768 a 32767)*0.25/9º -- resultado em mm.
enc_y = ((float)((unsigned char)BufferRecebe[4]+256*
(unsigned char)BufferRecebe[5])-32768)/36.;
tempy.sprintf("%.2f",enc_y);
Label2->Caption = "Y: "+tempy+" mm";
// fim encoder
//-----------------------------// TRANSMISSAO SEQUENCIAL DE PONTOS
// Memo1 = lista de pontos
// se flag ativa_transm_pontos é true (1)
// e ainda tem algo para enviar na lista de pontos
if (ativa_transm_pontos && (conta_pontos<Memo1->Lines->Count))
{
// esta posicionado ? Se sim...
if (posicionado == 1) // se posicionado, manda novo ponto
{
float a, b, v; // var auxiliares
unsigned char ref; // var de referencia
unsigned short int tx_data; // var relativa a informacao transmitida
135
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
// há alguma linha na lista de pontos ? Se sim...
if (Memo1->Lines->Count>0)
{
// captura o texto e transforma para real (X)
a = StrToFloat(XPontos->Strings[conta_pontos]);
a = a*36; // transforma para angulo
// captura o texto e transforma para real (Y)
b = StrToFloat(YPontos->Strings[conta_pontos]);
b = b*36; // transforma para angulo
// captura o texto e transforma para real (V)
v = StrToFloat(VPontos->Strings[conta_pontos]);
v = v*100; // transforma para velocidade
// verifica limites
if (((a<-32768) || (a>32767)) && // para X,
((b<-32768) || (b>32767)) && // para Y,
((v<0.)) || (v>600.))
// e para V
// mensagem de erro
MessageDlg("Redigite !",mtWarning,TMsgDlgButtons() << mbOK, 0);
else // se limites estao ok...
{
controlando=1; // vai para o modo "controlando"
// Comando = 6 (controle velocidade)
TransmitCommChar(hCom,(unsigned char)6);
// transmitindo referencias... (X,Y,V)
// modificando escala: (-32678 a 326767) para (0 a 65535)
tx_data = (unsigned short int)(a+32768);
// como ref é unsigned char, (0 a 255)
// ref recebe a parte mais baixa de tx_data
ref = (unsigned char)tx_data;
// Transmito ref...
TransmitCommChar(hCom,(unsigned char)ref);
// agora, ref recebe a parte mais alta de tx_data deslocada
ref = (unsigned char)(tx_data>>8);
// Transmito ref...
TransmitCommChar(hCom,(unsigned char)ref);
136
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
// transmito variavel a (Y)... idem a X
tx_data = (unsigned short int)(b+32768);
ref = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)ref);
ref = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)ref);
// transmito variavel a (V)... idem a X
tx_data = (unsigned short int)v;
ref = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)ref);
ref = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)ref);
// incremento a variavel de contagem de pontos transmitidos
// essa sequencia de comandos acima é realizada enquanto a
// var conta_pontos é menor que o numero de linhas (pontos)
// da listagem.
conta_pontos++;
}
}
}
// Verificacao de posicionado
// veja se esta posicionado dentro dos valores de erro (resolucao)
// somente mando o proximo ponto da listagem caso esteja posicionado.
if ((fabs(enc_x-StrToFloat(XPontos->Strings[conta_pontos-1])))<0.25 &&
fabs((enc_y-StrToFloat(YPontos->Strings[conta_pontos-1])))<0.25)
posicionado = 1; //se sim, posicionado
else
posicionado = 0; // caso contrario, não
}
else
{
ativa_transm_pontos = false;
}
//fim da transmissao seq de pontos
//-----------------------------// telas gráficas
// comandos de posicionamento e impressão de linhas
137
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
// referentes ao deslocamento dos eixos
if (!CheckBox1->Checked)
{
grafx = PaintBox1->Height-(((int)(BufferRecebe[2]+256*
BufferRecebe[3])-32768)/90+PaintBox1->Height/2);
grafy = PaintBox2->Height-(((int)(BufferRecebe[4]+256*
BufferRecebe[5])-32768)/90+PaintBox2->Height/2);
PaintBox1->Canvas->LineTo(tempo,grafx);
PaintBox2->Canvas->LineTo(tempo,grafy);
tempo=tempo+2;
if (tempo>PaintBox1->Width) {
PaintBox1->Canvas->MoveTo(0,grafx);
PaintBox2->Canvas->MoveTo(0,grafy);
PaintBox1->Color = clNone;
PaintBox1->Color = clWhite;
PaintBox2->Color = clNone;
PaintBox2->Color = clWhite;
tempo=0;
}
grafx2 = PaintBox3->Height-(((int)(BufferRecebe[2]+256*
BufferRecebe[3])-32768)/45+PaintBox3->Height/2);
grafy2 = PaintBox3->Width-(((int)(BufferRecebe[4]+256*
BufferRecebe[5])-32768)/45+PaintBox3->Width/2);
PaintBox3->Canvas->LineTo(grafy2,PaintBox3->Height-grafx2);
}
// fim telas gráficas
//-----------------------------// Verifica se habilitado a gravar em arquivo
if (CheckBox1->Checked && controlando)
{
fprintf(stream,"%.3f\t%.2f\t%.2f\n",0.00268*ref_time,enc_x,enc_y);
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------// Form1 = A nossa janela
// FormClose = Rotina executada quando a fechamos
//--------------------------------------------------------------------------void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
138
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
if (Button1->Caption == "Fechar")
CloseHandle(hCom); //fecho porta
delete XPontos; // deleta algumas variaveis criadas
delete YPontos;
delete VPontos;
fcloseall(); // fecha todos arquivos abertos
}
//--------------------------------------------------------------------------//Para testes...
//--------------------------------------------------------------------------void __fastcall TForm1::PaintBox3MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
float a, b;
unsigned char ref;
unsigned short int tx_data;
if (Shift.Contains(ssShift))
{
a = (Y-(PaintBox3->Height/2))*30;
b = -(X-(PaintBox3->Width/2))*30;
controlando=1;
// Comando 1: Controle posição
TransmitCommChar(hCom,(unsigned char)1);
// Como comentario na linha 247
tx_data = (unsigned short int)(a+32768);
ref = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)ref);
ref = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)ref);
tx_data = (unsigned short int)(b+32768);
ref = (unsigned char)tx_data;
TransmitCommChar(hCom,(unsigned char)ref);
ref = (unsigned char)(tx_data>>8);
TransmitCommChar(hCom,(unsigned char)ref);
}
}
//---------------------------------------------------------------------------
139
UFF - AUTOMAÇÃO DE MESA COORDENADA DESTINADA À MÁQUINA FRESADORA CNC
Figura 7.1: Configuração de montagem da placa de acionamento do motor
140
Download