Escolar Documentos
Profissional Documentos
Cultura Documentos
Criando Um Motor CC e Medindo Suas Caracteristicas
Criando Um Motor CC e Medindo Suas Caracteristicas
E
M
1
(4)
onde: B
r
= campo remanente do m [T]
G
= permeabilidade do fluxo de retorno [Wb/A]
E
= permeabilidade do espaamento entre os ms e o ncleo central [Wb/A]
M
= permeabilidade do fluxo dentro dos ms [Wb/A]
O valor das permeabilidades magnticas
G
,
E
e
M
so obtidas a partir das
equaes abaixo:
G
=
r
2l b
(5) ;
E
=
r
l
m
b
E
(6) ;
M
=
B
r
l
m
b
H
c
..
d
m
(7)
onde:
0
= permeabilidade do vcuo (4.10
-7
H/m)
r
= permeabilidade relativa do meio
= distncia entre ferros [m]
E
= distncia entre os ms e o ncleo central [m]
7
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
B
r
= campo remanente do m [T]
l = metade do comprimento total do motor [m]
l
m
= comprimento dos ms [m]
b = altura das barras de ferro [m]
H
C
*
= campo coercitivo aparente [kA/m]
d
m
= espesura dos ms [m]
2.2.2. Campo nos ncleos de ferro
Apesar do campo magntico existente nos ncleos de ferro no influenciar
diretamente na fora que o motor ir proporcionar, o seu conhecimento importante para
se calcular a corrente mxima (Imx) nos enrolamentos que ir fazer com que os ncleos
atinjam a saturao magntica. A partir desse ponto, um aumento da corrente no motor
no ser acompanhado por um igual aumento no campo magntico efetivo e,
conseqentemente, no resultar em um aumento da fora do motor.
O campo induzido total nos ncleos de ferro (BT) igual soma da induo devida
aos ms (Bc) com a induo devida ao enrolamento (BI) e pode ser obtido aplicando-se a
Equao 8 abaixo:
8
Figura 7: Visualizao dos campos considerados no modelo do motor. Fonte [6]
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
B
T
=B
C
B
I
=
l
m
a
B
E
w I l
0
4a
(8)
onde: l
m
= comprimento dos ms [m]
B
E
= induo magntica efetiva [T]
a = largura dos ncleos de ferro [m]
w = nmero de espiras no enrolamento
I = corrente no enrolamento [A]
l = metade do comprimento total do motor [m]
0
= permeabilidade do vcuo (4.10
-7
H/m)
= distncia entre os ncleos de ferro [m]
2.3. Modelo mecnico
Mecanicamente, o motor foi modelado como uma massa (cursor) submetida a uma
fora de trao F e a uma fora de atrito, a qual foi considerada proporcional velocidade
de movimentao do cursor (atrito viscoso). Sob essas condies, o movimento do cursor
se resume ao movimento de um sistema massa-amortecedor (Figura 8) e pode ser
representado pela Equao 9.
F
motor
=m
d
2
x
dt
2
B
dx
dt
(9)
9
Figura 8: Diagrama de foras agindo sobre o motor
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Captulo 3
Projeto do motor
As principais caractersticas que influem no dimensionamento do motor estudado
so: a fora que atua nos ms permanentes, o campo efetivo do motor e o campo nos
ncleos de ferro. A Figura 9 esquematiza as principais variveis utilizadas no processo de
dimensionamento do motor.
Para um prottipo inicial do motor, partiu-se de ncleos de ferro com 100 mm (2l)
de comprimento e utilizou-se ms de Neodmio de grau 28 (NdFeB 28). Na Tabela 1
encontram-se todas as dimenses do motor que sero utilizadas na especificao do seu
enrolamento e no clculo de sua fora de trao.
10
Figura 9: Estrutura do motor linear
2l
l
m
a
2a
a
B
E
B
E
E
d
m
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Tabela 1: Dimenses do motor linear
Grandeza Valor
Largura dos ncleos laterais (a) 25 mm
Comprimento total dos ncleos (2l) 100 mm
Altura dos ms e dos ncleos (b) 25 mm
Espao entre ncleos () 14 mm
Comprimento dos ms (l
m
) 25 mm
Espessura dos ms (d
m
) 8 mm
Distncia entre os ms e o ncleo central (
E
) 3 mm
Espessura do enrolamento (d
w
) 6 mm
3.1. Dimensionamento do enrolamento:
Para se dimensionar o enrolamento do motor, deve-se especificar o nmero de
espiras e o tipo de fio de cobre utilizado. Para isso, considerou-se que os fios de cobre
estaro distribudos conforme a Figura 10 e, em seguida, calculou-se a rea ocupada por
uma pequena regio do enrolamento:
Clculo da rea LH:
L=2d
'
H=h2
d
'
2
=d
'
1sen60
o
A=LH=2d
' 2
1sen60
o
Atravs da Figura 10, observa-se que dentro da regio LH passam 4 fios de cobre
(3 inteiros mais 2 metades), assim, possvel estimar o nmero de voltas do enrolamento
11
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
conhecendo-se a rea disponvel e o dimetro do fio de cobre.
No caso do motor projetado, a rea disponvel para o enrolamento de 600 mm
2
(2l *d
w
) e, para o dimetro do fio, utilizou-se a especificao AWG. A Tabela 2 apresenta o
nmero de voltas do enrolamento para diferentes fios, juntamento com as caractersticas
dos mesmos.
Tabela 2: Enrolamento e caractersticas dos fios
AWG Dimetro interno (mm) Dimetro externo (mm)
Corrente mx.
(A)
N de voltas
(w)
18 1,024 1,075 2,5 555
17 1,150 1,207 3,2 440
16 1,290 1,395 3,7 350
15 1,450 1,509 4,8 280
14 1,628 1,692 6,0 225
13 1,829 1,886 7,5 180
12 2,052 2,111 9,5 145
Antes de se fazer a escolha do tipo de fio, necessrio conhecer a fora resultante
que cada enrolamento ir produzir e a corrente I
mx
que ir produzir a saturao dos
ncleos de ferro.
3.2. Clculo do campo efetivo B
E
:
Para o clculo do campo efetivo, utilizou-se a Equao 4 e as propriedades dos
ms de Neodmio apresentadas na Tabela 3.
Tabela 3: Propriedades dos ms
Grandeza Valor
Campo remanente (B
r
) 1,08 T
Campo coercitivo aparente (H
C
*
) 804 kA/m
Resultados dos clculos:
M
=1,05. 10
7
Wb/ A ;
G
=1,68. 10
7
Wb/ A ;
E
=1,96. 10
7
Wb/ A
B
E
=0,50T
12
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
3.3. Clculo da corrente mxima I
mx
:
No clculo da corrente mxima I
mx
utilizou-se a Equao 8 e considerou-se que a
saturao magntica dos ncleos igual a 2,16 T (saturao magntica do ferro),
obtendo-se assim, a equao abaixo:
I
mx
=
3698,8
w
(10)
De acordo com a Equao 10 acima, a corrente mxima no enrolamento depende
do nmero de espiras (w). Assim, a partir da Tabela 2 possvel determinar-se a corrente
mxima para cada enrolamento possvel no motor:
Tabela 4: Corrente mxima (I
mx
) para cada enrolamento
AWG
Corrente mx. suportada
pelo fio (A)
N de
voltas (w)
I
mx
(A)
18 2,5 555 6,7
17 3,2 440 8,4
16 3,7 350 10,6
15 4,8 280 13,2
14 6,0 225 16,4
13 7,5 180 20,6
12 9,5 145 25,5
Pela Tabela 4, percebe-se que a corrente na bobina limitada pela corrente
suportada pelo prprio fio e no corrente que ir provocar a saturao magntica dos
ncleos. Dessa forma, a saturao magntica dos ncleos no representa um empecilho
ao funcionamento do motor.
3.4. Clculo da fora de trao do motor:
Conhecendo-se o nmero de voltas no enrolamento e a corrente de alimentao,
possvel calcular a fora produzida pelo motor a partir da Equao 3. A Tabela 5,
apresenta os valores da fora para os diferentes enrolamentos, utilizando-se uma
corrente de alimentao igual a 3A e 5A:
13
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Tabela 5: Fora de trao resultante
AWG Fora (N) p/ I = 3A Fora (N) p/ I = 5A
18 --- ---
17 8,25 ---
16 6,56 ---
15 5,25 ---
14 4,22 7,03
13 3,38 5,63
12 2,72 4,53
Devido fonte de alimentao ser capaz de fornecer uma corrente mxima de 6A,
optou-se por projetar o motor para funcionar com uma corrente de 3A. Assim, os
enrolamentos que iro resultar na maior fora de trao utilizam os fios AWG 17 e 16.
Finalmente, escolheu-se o fio AWG 16 para se realizar o enrolamento, pois o
mesmo capaz de suportar uma corrente mxima maior que o AWG 17, dando uma
margem de segurana maior para o projeto.
Durante a construo do motor, por razes tcnicas, o enrolamento no pode ser
feito com a mesma configurao apresentada pela Figura 10. Entre cada camada do
enrolamento, teve de ser adicionado uma fina pelcula de papel, o que reduziu o fator de
empacotamento do enrolamento. No final, o enrolamento ficou com 286 espiras,
reduzindo a fora do motor para 5,36N, para uma corrente de 3A.
14
Figura 11: Prottipo do motor linear
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Captulo 4
Bancada de Testes
Aps a construo do motor, procedeu-se a montagem de uma instrumentao
necessria para a realizao dos ensaios no motor, a qual pode ser dividida em 3 partes:
uma primeira parte responsvel pelo controle e comando do motor, uma segunda parte
responsvel pelo acionamento do motor e uma ltima parte encarregada de realizar a
aquisio de dados.
4.1. Controle e Comando
O elemento principal da instrumentao foi construdo a partir do microcontrolador
PIC 18F452, sendo responsvel pela comunicao com todos os demais instrumentos.
Ele o responsvel por requisitar a posio atual do motor para o encoder, enviar um
comando de acionamento do motor para a ponte H e, finalmente, enviar essas
informaes ao usurio.
A comunicao do PIC com o usurio feita atravs da porta serial (RS232),
podendo ser operado atravs de um programa do tipo Hyperterminal. Durante o
funcionamento do motor, por ser necessrio realizar a aquisio em tempo real, o PIC foi
programado para operar com um intervalo de amostragem de 8ms.
4.2. Acionamento
Para o acionamento do motor, optou-se por construir uma ponte H, a qual
receberia os comandos do PIC sob a forma de um sinal PWM por dois diferentes canais,
cada um permitindo que o motor se desloque para uma direo.
O sinal PWM utilizado, possui um perodo de 1ms e possui uma resoluo de
10bits.
4.3. Aquisio
Para a aquisio da posio do motor, foi construdo um encoder linear a partir de
um mouse ps/2. Embora exista a vantagem de se obter diretamente o valor da posio ao
se utilizar o mouse, existe a dificuldade de se programar o protocolo ps/2 no PIC, alm de
existir a limitao do tempo mnimo de aquisio, limitado pela velocidade desse
protocolo (8ms). A leitura do encoder foi feita a partir de uma pista impressa com
resoluo de 0,4mm.
Alm do encoder, um gaussmetro foi utilizado para a medio dos campos
15
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
magnticos do motor.
16
Figura 12: Motor linear com sua instrumentao: (1) Encoder, (2) Ponte H, (3) PIC
(1)
(2)
(3)
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Captulo 5
Mtodos Experimentais
Neste captulo sero discutidos os mtodos empregados para a determinao das
principais caractersticas eltricas, eletromagnticas e mecnicas dos motor.
5.1. Caracterizao eltrica
Utilizando-se da Equao 1, possvel determinar as constantes do modelo
eltrico do motor. Ao se manter o cursor do motor preso, a fora contra-eletromotriz se
reduzir a zero, eliminando-se assim, uma varivel da equao. Semelhantemente,
quando o motor atingir o regime permanente, sua corrente ir se estabilizar e o termo da
indutncia La tambm ir desaparecer. Dessa forma, possvel determinar Ra aplicando-
se uma tenso conhecida no motor e medindo-se a corrente que passa por seus
enrolamentos. O valor de Ra ser dado pela relao entre a tenso e a corrente medidas.
Considerando-se ainda a Equao 1 e mantendo o cursor do motor preso, o valor
da indutncia ser obtido atravs da medio da resposta transiente do circuito. Para
isso, adiciona-se uma resistncia Rs,de valor conhecido, em srie com o motor e mede-se
a queda de tenso sobre a mesma. Com esse dado em mos, pode-se determinar
graficamente a constante de tempo do motor (tempo necessrio para que a tenso caia
a 37% do seu valor inicial) e assim, calcular o valor de La atravs da Equao 11 abaixo:
=
L
a
R
a
R
s
(11)
5.2. Caracterizao eletromagntica
Para a caracterizao eletromagntica do motor, ser utilizado um gaussmetro
para medir os diferentes campos existentes no motor. Os campo magnticos de interesse
para validar o modelo eletromagntico do motor so o campo efetivo (BE) e o campo de
retorno (BG). Para esses dois campos, seus valores sero medidos com o cursor em
diferentes posies e com o motor sob diferentes tenses de alimentao.
Devido a inexistncia de uma instrumentao para medir a fora exercida pelo
motor, o campo efetivo medido diretamente pelo gaussmetro ser utilizado para estimar a
fora produzida pelo motor.
17
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
5.3. Caracterizao mecnica
Partindo-se da equao de movimento do motor (Equao 9), deve-se inicialmente
determinar o coeficiente de atrito viscoso B do sistema. Para isso, deve-se colocar o
motor em movimento de forma que a sua velocidade esteja constante. Assim, elimina-se o
termo da acelerao e pode-se determinar esse coeficiente conhecendo-se a forma que o
motor est produzindo e a sua velocidade (Equao 12).
B=
F
motor
V
(12)
Com o valor do coeficiente de atrito disponvel, pode-se determinar a massa do
motor pois a relao entre a massa e o coeficiente de atrito estabelece a taxa de
decaimento da velocidade do cursor do motor (sistema de primeira ordem). Assim, de
forma semelhante determinao da indutncia, a massa do motor obtida medindo-se
a constante de tempo mecnica do motor (obtida a partir do decaimento da velocidade)
e aplicando-se, em seguida, a Equao 13 abaixo:
=
m
B
(13)
18
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Captulo 6
Resultados
6.1. Propriedades eltricas
Seguindo-se o procedimento definido no captulo anterior, calculou-se Ra a partir de
uma seqncia de medidas para a tenso e a corrente no motor. Em seguida realizou-se
o ajuste linear dos dados, obtendo-se assim o valor de Ra a partir da inclinao da reta de
ajuste (Figura 13).
Ao realizar a regresso linear dos dados, o valor de Ra obtido foi de (1,110,04) ,
utilizando-se um intervalo de confiana igual a 95%.
Da mesma forma que na determinao da resistncia do enrolamento, trs
seqncias de medidas foram tomadas para a determinao de La. A diferena entre elas
est na tenso de alimentao a qual foi submetido o motor (Figura 14). Nestes testes, a
resistncia em srie (RS) utilizada possua um valor de 27,82 .
19
Figura 13: Medidas experimentais para determinar R
a
e reta de ajuste.
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
0
1
2
3
4
5
6
Tenso (V) x Corrente (A)
Experimental
Regressao linear
Corrente (A)
T
e
n
s
o
(
V
)
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
A partir dos dados experimentais obtidos e utilizando-se a Equao 11, o valor da
indutncia do motor obtido foi de (0,2620,090) H.
Durante a medio da fora contra-eletromotriz, percebeu-se que ela no possui a
mesma relao que nos motores rotativos, pois ela apresentava sempre o mesmo valor
de 1,0V independentemente da tenso de alimentao e da velocidade de deslocamento
do motor.
6.2. Propriedades eletromagnticas
Utilizando-se o software de elementos finitos FEMM possvel realizar uma
avaliao qualitativa das linhas de campo magntico, atravs da observao da
densidade de linhas de campo para diferentes posies do cursor do motor (Figura 15).
20
Figura 14: Curvas de decaimento da tenso sobre R
s
, para determinao de L
a.
0.070 0.090 0.110 0.130 0.150
0.00
0.50
1.00
1.50
2.00
2.50
Taxa de decai mento da Tenso
Tempo ( s)
T
e
n
s
o
(
V
)
0.070 0.090 0.110 0.130
0.00
1.00
2.00
3.00
4.00
Taxa de decaimento
Tempo (s)
T
e
n
s
o
(V
)
0.1000.1200.1400.1600.1800.200
0.00
1.00
2.00
3.00
4.00
5.00
Taxa de decaimento
Tempo (s)
T
e
n
s
o
(
V
)
Figura 15: Visualizao das linhas de campo para diferentes posies do cursor
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Pela Figura 15 nota-se que existe uma concentrao muito maior de linhas de
campo na regio dos ms do que no resto dos ncleos, o que valida a hiptese de que o
campo de retorno (BG) tem pouca influncia sobre a fora resultante. Outra observao
relevante a de que existe a mesma densidade de linhas de campo na regio do campo
efetivo para diferentes posies do m, o que justifica a afirmao de que a fora de
trao do motor praticamente constante ao longo de todo o seu curso.
Experimentalmente, isso tambm foi comprovado ao ser realizado uma srie de
medies nessas regies do campo. Para o caso do campo efetivo BE, obteve-se o valor
de 0,40 T para qualquer posio do cursor, e para o campo de retorno BG, obteve-se o
valor de 0,020 T, o que representa apenas 5% do valor do campo efetivo. J o valor do
campo efetivo corresponde a 80% do valor terico calculado (0,50 T).
6.3. Propriedades mecnicas
Inicialmente foi determinado o valor do coeficiente de atrito viscoso do motor. Para
isso o motor foi alimentado de forma que o seu cursor apresentasse um deslocamento em
velocidade constante (Figura 16). Essas condies foram obtidas alimentando-se o motor
com uma tenso de 2,1 V, o que produziu uma fora de 2,54 N. Em seguida, aplicou-se a
Equao 12 utilizando os valores de fora e velocidade conhecidos, o que resultou em um
valor de (7,30,4) Ns/m.
Para o clculo da massa do cursor, o procedimento descrito no captulo 5 no foi
possvel de ser adotado em razo de o cursor parar de se deslocar muito rapidamente e,
como a taxa de amostragem do encoder baixa, no houve pontos suficientes para
21
Figura 16: Curva do motor deslocando-se a uma velocidade constante de 348 mm/s
0.000 0.020 0.040 0.060 0.080 0.100 0.120 0.140 0.160
-10
0
10
20
30
40
50
60
Posio (mm) x Tempo (s)
Experimental
Curva de ajuste
Tempo (s)
P
o
s
i
o
(
m
m
)
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
determinar a constante de tempo mecnica do sistema.
Dessa forma, o problema foi resolvido supondo que a fora de atrito sobre o cursor
era constante e igual obtida anteriormente (2,54N). Isso pode ser considerado pois,
devido ao curso limitado do motor, no h tempo suficiente para que ele acelere e atinja
velocidades altas para provocar uma diferena significativa da fora de atrito.
Sob essa condio, o modelo do motor fica simplificado a apenas uma massa
submetida a uma fora de trao. O valor da massa definido pela relao entre essa
fora resultante e a sua acelerao.
Para a determinao da massa do cursor, realizou-se uma srie de aquisies com
o motor submetido a diferentes tenses (Figura 17). Em seguida, os dados foram
ajustados por uma curva do tipo ax
2
, a partir da qual poderia ser obtido o valor da
acelerao, bastando simplesmente realizar a derivada segunda dessa curva.
A partir dos dados experimentais, foi possvel obter o valor de (0,3280,075) Kg
para a massa do cursor, a qual era estimada em cerca de 0,300 Kg.
22
Figura 17: Dados experimentais para a determinao da massa do cursor
0.000 0.020 0.040 0.060 0.080 0.100 0.120
-10
0
10
20
30
40
50 Posio (mm) x Tempo (s)
Tempo (s)
P
o
s
i
o
(
m
m
)
0.000 0.020 0.040 0.060 0.080 0.100
-10
0
10
20
30
40
50 Posi o (mm) x Tempo (s)
Tempo (s)
P
o
s
i
o
(
m
m
)
0.000 0.010 0.020 0.030 0.040 0.050 0.060 0.070 0.080 0.090
-10
0
10
20
30
40
50 Posio (mm) x Tempo (s)
Tempo (s)
P
o
s
i
o
(
m
m
)
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
6.4. Modelos finais
Com todas as constantes do motor determinadas, possvel escrever as diferentes
equaes que modelam o seu comportamento:
Modelo eltrico:
V =1,1i 0,262
di
dt
(14)
Modelo mecnico: F=1,43i =0,328
d
2
x
dt
2
7,3
dx
dt
(15)
As duas equaes acima ainda podem ser acopladas de forma a obter a relao
entre a posio do cursor e a tenso de entrada. Para isso, basta aplicar a Transformada
de Laplace na Equaes 14 e 15 e as igualar de forma a eliminar a varivel de corrente i.
Aps essa operao, a equao resultante, sob forma de uma funo de transferncia
representada pela Equao 16 abaixo:
P s=
x
V
=
1,43
0,328 s
2
7,3s0,262s1,1
(16)
A funo de transferncia acima importante pois permite que todo o sistema seja
simulado levando-se em conta as suas caractersticas eletromagnticas e mecnicas,
permitindo que a posio seja determinada com base no real sinal de controle do motor (a
tenso entre seus terminais).
23
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Captulo 7
Aplicao
A partir da Equao 16 possvel implementar um controle de posio em malha
fechada para o motor linear. Por se tratar de um sistema super-amortecido, ele estvel
em malha fechada e no precisa de um controlador para seguir o sinal de referncia,
conforme pode ser observado pela Figura 18.
Assim, apenas um controlador proporcional (Kp) suficiente para melhorar os
requisitos de desempenho do sistema controlado, como a reduo do tempo de
estabilizao e a ausncia de overshoot.
24
Figura 18: Resposta em malha fechada do sistema, sem controlador (esquerda) e com
controlador, Kp=6 (direita)
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Captulo 8
Concluses
Neste trabalho, foi projetado um motor linear, baseado no modelo desenvolvido
pela Philips, e sua instrumentao. Em seguida, procedeu-se a sua caracterizao, que
consistiu em ensaios e medies de seus campos magnticos, suas caractersticas
eltricas, sua massa e seu coeficiente de atrito. Ao final dos testes, foi possvel obter um
modelo que poderia ser utilizado para uma aplicao de controle de posio do motor.
Apesar de a instrumentao utilizada ter sido suficiente para demonstrar o
funcionamento do motor e a realizao de alguns testes de caracterizao, ela mostrou-
se bastante limitada para a determinao da constante mecnica do motor. Assim, seria
interessante realizar uma outra srie de testes com o motor utilizando-se uma
instrumentao mais adequada.
Os resultados dos testes foram satisfatrios de forma que foi possvel comprovar a
suposio de que a fora de trao do motor constante por todo o deslocamento do
cursor e a de que o campo de retorno tem pouca influncia no clculo dessa fora.
25
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Referncias Bibliogrficas
1 R.J. Kaye and E. Masada, Comparison of Linear Synchronousand Induction
Motors, Colorado MagLev Project 2004.
2 H2W Technologies Inc., Linear Motors Basics, 2006.
3 R.A.D. Oliveira, Desenho e Construo de um Motor Linear de Induo de Baixa
Velocidade, Universidade Nova de Lisboa, 2000.
4 B.C. Murphy, Design and Construction of a Precision Tubular Linear Motor and
Controller, Texas A&M University, 2003.
5 S. Chevailler, Comparative Study and Selection Criteria of Linear Motors, cole
Polytechnique Fdrale de Lausanne, 2006.
6 L. Honds and K.H. Meyer, A Linear DC Motor with Permanent Magnets, Philips
tech. Rev., 40, 329-337, 1982, No. 11/12, pp. 329-337.
26
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Apndices
Desenhos de fabricao do motor linear:
27
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
28
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
29
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
30
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
31
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
32
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
33
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Listagem do cdigo fonte do microcontrolador PIC:
#include <p18cxxx.h>
#include <timers.h>
#include <usart.h>
#include <stdlib.h>
#include <stdio.h>
#include <pwm.h>
#include <math.h>
#include <delays.h>
#pragma config WDT = OFF
#pragma config OSC = XT // mudar para HS se cristal 20MHz e XT para cristal de 4MHz
// Definio das portas utilizadas pelo ps/2
#define CLK_PS2 PORTDbits.RD0
#define DATA_PS2 PORTDbits.RD1
// Definio dos estados do processo principal
#define MENU_INICIAL 0
#define ESPERA_COMANDO 1
#define OPCAO1 2
#define OPCAO2 3
#define OPCAO3 4
#define OPCAO4 5
#define OPCAO5 6
#define OPCAO6 7
#define TESTANDO 100
#define ENTRADA_DADOS1 200
#define ENTRADA_DADOS2 201
#define ENTRADA_DADOS3 202
#define ENTRADA_DADOS4 203
// Definico dos estados para a mquina de entrada de dados
#define Mw 0
#define Mwn 1
#define Mwnn 2
#define Mwnnn 3
// Definio dos tipos de menu
#define MENU0 0
#define MENU1 1
#define MENU2 2
#define MENU3 3
#define MENU4 4
#define MENU5 5
34
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
#define MENU6 6
#define MENU7 7
#define MENU8 8
#define MENU9 9
// Definio da resoluo do encoder (em pulsos/mm)
#define RESOLUCAO 1.5 // Resoluo para fita de 0,40mm
unsigned int PWM_Duty_cycle, // Duty cicle do PWM (apenas 10bits so usados)
n; // Valor de aquisio atual
char Comando, // Comando recebido pela serial
valor[4]; // Comando recebido pela entrada de dados
unsigned char STT_Comando, // Estado do processo principal
STT_Dados, // Estado para a entrada de dados
Periodo_PWM, // Varivel para o perodo do PWM
SENTIDO, // Sentido de movimentao do motor
ENCODER, // Qual encoder foi escolhido (X ou Y)
DADO, // Posio dentro da matriz de dados
TRACKING, // Modo que indica se o motor move-se sozinho
TEST_ENCODER, // Indica se o encoder est ou no sendo testado
CONTROLE;
float Posicao, // Posio atual do motor
Velocidade, // Velocidade atual do motor
Posicao_desejada, // Posio para a qual o motor deve se mover
kp, // ganho do controlador
Erro_atual, // Erro atual na posio do motor
Erro_anterior, // Erro anterior na posio do motor
Erro_acumulador; // Integral do erro
#pragma udata bank1=0x100
int Dados_posicao[128]; // Matriz das posies - parte1
#pragma udata bank2=0x200
int Dados_posicao2[128]; // Matriz das posioes parte2
// Prottipos das funes usadas na rotina de interrupo.
void high_isr(void);
void low_isr (void);
void Init_ps2 (void);
void Escreve_ps2 (char data);
char Recebe_ps2 (void);
// Funes das mquinas de estado
void MaqComando (void);
void EntradaDados (void);
35
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
// Funes utilizadas pelas mquinas de estado
void DisplayMenuInicial (char menu);
void MotorMalhaAberta (void);
void MoverMotor (void);
void EnviarDados (void);
void Transmite (char DADO_TX);
char Recebe (void);
// Definio dos vetores de interrupo
#pragma code high_vector=0x08
void interrupt_high(void)
{
_asm GOTO high_isr _endasm
}
#pragma code low_vector=0x18
void interrupt_low(void)
{
_asm GOTO low_isr _endasm
}
#pragma code /* retorno seo de cdigo */
/*************************************************************************************
INCIO DA FUNO PRINCIPAL
*************************************************************************************/
void main( void)
{
PORTA = 0x00; TRISA = 0xDB;
PORTB = 0x00; TRISB = 0x0C;
PORTC = 0x00; TRISC = 0xB9;
PORTD = 0x00; TRISD = 0x03; // RD0 e RD1 so usados pelo ps/2
// RD0 = clk
// RD1 = data
PORTE = 0x00; TRISE = 0x00;
/* Inicializao da porta serial com velocidade de 19200 */
OpenUSART(USART_TX_INT_OFF&
USART_RX_INT_OFF&
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,
12 ); // para 9600 usar 25 com cristal de 4MHz
36
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
/*-------------- INICIALIZAO DOS PROCESSOS ------------------------------*/
STT_Comando = MENU_INICIAL;
STT_Dados = Mw;
SENTIDO = 0;
ENCODER = 0;
Periodo_PWM = 249; // Perodo de 250 Hz para cristal de 4 Mhz
PWM_Duty_cycle = 500; // Duty cycle de 2ms
DADO = 0;
TRACKING = 0;
TEST_ENCODER = 0;
n = 0;
Posicao = 0.0;
Erro_atual = 0.0;
Erro_anterior = 0.0;
Erro_acumulador = 0.0;
CONTROLE = 0;
/* Gerenciamento das interrupes */
RCONbits.IPEN = 1; // Habilita a checagem por prioridade de interrupo
INTCONbits.GIEH = 1; // Habilitao das interrupes de alta prioridade
INTCONbits.GIEL = 1; // Habilitao das interrupes de baixa prioridade
INTCON2bits.TMR0IP = 1; // Coloca a interrupo do TIMER0 em alta prioridade
IPR1bits.TMR1IP = 0; // Coloca a interrupo do TIMER1 em baixa prioridade
IPR2bits.TMR3IP = 1; // Coloca a interrupo do TIMER3 em alta prioridade
/* Configurao dos TIMERS */
OpenTimer1( TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_8 &
T1_OSC1EN_OFF);
WriteTimer1(65536-1000);
Delay100TCYx(10);
Init_ps2();
kp=5.0;
/*---------------------- Lao Principal infinito ------------------------------------*/
while (1)
{ }
}
/*************************************************************************************
FIM DA FUNO PRINCIPAL
*************************************************************************************/
//*****************************************************************************
/* ROTINA DE SERVIO DA INTERRUPCO DO TIMER0.
//******************************************************************************
37
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
// Funes das interrupes
#pragma interrupt high_isr
void high_isr (void)
{
// interrupo de alta prioridade
unsigned char status;
signed char mx;
signed char my;
float buffer;
char ack;
if (INTCONbits.TMR0IF) // Se o TIMER0 gerou um pedido de interrupo
{
WriteTimer0(65536-62); // delay de 0.008s (+atrasos);
INTCONbits.TMR0IF = 0;
Escreve_ps2(0xEB); // Pede dados para o encoder
ack = Recebe_ps2(); // ignora ack
status = Recebe_ps2(); // byte de status
mx = Recebe_ps2(); // leitura x
my = Recebe_ps2(); // leitura y
// Coloca em buffer qts mm o motor moveu-se desde a ltima leitura do encoder
//buffer = (ENCODER) ? (float)mx : (float)my;
buffer = (float) my;
buffer = buffer*RESOLUCAO;
// Atualiza a posio e erro
Posicao = Posicao + buffer;
//Erro_anterior = Erro_atual;
//Erro_atual = Posicao_desejada - Posicao;
if (n < 128)
Dados_posicao[DADO] = ((int) (Posicao * 100.0));
else
Dados_posicao2[DADO] = ((int) (Posicao * 100.0));
n++;
DADO++;
/* if (CONTROLE)
{
temp = kp*Erro_atual;
if (temp > 0)
{
SetDCPWM2((int)temp);
SetDCPWM1(0);
38
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
}
else
{
SetDCPWM1((int)temp);
SetDCPWM2(0);
}
}
*/
if (Posicao > 50.0)
{
// ClosePWM2();
// ClosePWM1();
// CloseTimer2();
PORTCbits.RC1 = 0;
PORTCbits.RC2 = 0;
if (!my)
{
CloseTimer0(); // Desabilita o timer0
OpenTimer1( TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_INT
& T1_PS_1_8 & T1_OSC1EN_OFF);
WriteTimer1(65536-25000);
}
}
}
}
#pragma interruptlow low_isr
void low_isr (void)
{
// interrupo de baixa prioridade
float buffer;
char status;
char mx;
char my;
char ack;
if (PIR1bits.TMR1IF) //gerou interrupo do TIMER1
{
WriteTimer1(65536-1000);
PIR1bits.TMR1IF = 0;
if (TEST_ENCODER == 0)
{
teste++;
if (teste > 49) // verificar se o LED pisca a cada 1s
39
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
{
PORTBbits.RB1 = !PORTBbits.RB1;
teste=0;
}
MaqComando();
EntradaDados();
}
else
{
Escreve_ps2(0xEB); // Pede dados para o encoder
ack = Recebe_ps2(); // ignora ack
status = Recebe_ps2(); // byte de status
mx = Recebe_ps2(); // leitura x
my = Recebe_ps2(); // leitura y
buffer = (float)my;
if (buffer)
{
buffer = (buffer*RESOLUCAO);
Posicao= Posicao + buffer;
buffer = buffer *100.0;
fprintf(_H_USART, "buffer: %d Pos: %d", (int)buffer,(int)
(Posicao*100.0));
Transmite (0x0D); Transmite (0x0A);
}
}
}
}
//*******************************************
// Funo para inicializar a comunicao PS/2
//*******************************************
void Init_ps2 (void)
{
TRISD = 0x00;
CLK_PS2 = 1;
DATA_PS2 = 1;
Escreve_ps2(0xFF); // Envia comando de reset
Recebe_ps2(); // Byte1 de ack - ignorado
Recebe_ps2(); // Byte2 de ack - ignorado
Recebe_ps2(); // Byte3 de ack - ignorado
Escreve_ps2(0xE8);
Recebe_ps2();
40
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Escreve_ps2(0x00);
Recebe_ps2();
Escreve_ps2(0xF0); // Envia comando de operao remota
Recebe_ps2(); // Byte1 de ack - ignorado
Delay100TCYx(1); // Delay de 100us
}
//*************************************
// Funo para enviar dados para o PS/2
//*************************************
void Escreve_ps2 (char data)
{
char i;
char paridade = 1;
DATA_PS2 = 1;
CLK_PS2 = 1;
TRISD = 0x03;
Delay100TCYx(3); // Delay de 300us
TRISD = 0x02;
CLK_PS2 = 0;
Delay100TCYx(3); // Delay de 300us
TRISD = 0x00;
DATA_PS2 = 0;
Delay10TCYx(1); // Delay de 10us
/* bit de start enviado */
TRISD = 0x01; // Coloca o clock como entrada e data como sada
/* espera o PS/2 gerar o clock */
while (CLK_PS2)
;
for (i=0; i < 8; i++)
{
if (data & 0x01)
DATA_PS2 = 1;
else
DATA_PS2 = 0;
while (CLK_PS2 == 0)
;
while (CLK_PS2)
41
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
;
paridade = paridade ^ (data & 0x01);
data = data >> 1;
}
/* paridade */
if (paridade)
DATA_PS2 = 1;
else
DATA_PS2 = 0;
while (CLK_PS2 == 0)
;
while (CLK_PS2)
;
/* bit de parada */
DATA_PS2 = 1;
// Delay100TCYx(5); // Delay de 50us
TRISD = 0x03;
while (DATA_PS2)
;
while (CLK_PS2)
;
while ((CLK_PS2 == 0) || (DATA_PS2 == 0))
;
// Termina a transmisso
TRISD = 0x02;
CLK_PS2 = 0;
}
//**********************************
// Funo para receber dados do PS/2
//**********************************
char Recebe_ps2 (void)
{
char data = 0x00;
char bit1 = 0x01;
char i;
TRISD = 0x03;
Delay10TCYx(5); // Delay de 50us
while (CLK_PS2)
42
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
;
Delay1TCY(); // Delay de 1us
Delay1TCY(); // Delay de 1us
Delay1TCY(); // Delay de 1us
Delay1TCY(); // Delay de 1us
Delay1TCY(); // Delay de 1us
// Delay total de 5us
while (CLK_PS2 == 0) // bit de start
;
for (i=0; i < 8; i++) // leitura dos 8bits de dados
{
while (CLK_PS2)
;
if (DATA_PS2)
data = (data | bit1);
while (CLK_PS2 == 0)
;
bit1 = bit1 << 1;
}
while (CLK_PS2) // ignora bit de paridade
;
while (CLK_PS2 == 0)
;
while (CLK_PS2) // ignora bit de stop
;
while (CLK_PS2 == 0)
;
TRISD = 0x02; // termina a transmisso
CLK_PS2 = 0;
return data;
}
//*******************************************
// Funo que transmite caractere pela serial
//*******************************************
void Transmite (char DADO_TX)
{
while (BusyUSART()) {};
putcUSART( DADO_TX );
}
43
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
//****************************************
// Funo que recebe caractere pela serial
//****************************************
char Recebe (void)
{
if ( DataRdyUSART() )
return ReadUSART(); // L caractere na porta serial
else
return 0x00;
}
//************************************************************
// Funo que aciona o motor em malha aberta e faz a aquisicao
//************************************************************
void MotorMalhaAberta (void)
{
CloseTimer1(); // Desabilita o timer do menu
Init_ps2(); // Inicializa o protocolo de comunicao PS/2
// Inicializa os contadores
DADO = 0;
n = 0;
Transmite (0x0D); Transmite (0x0A); Transmite (0x0D); Transmite (0x0A);
putrsUSART ("Posicao (*100.0mm):");
Transmite (0x0D); Transmite (0x0A);
Delay100TCYx(10); //delay para impedir o atraso com o resto dos timers
// Inicializao do TIMER0, responsvel pela leitura do encoder
OpenTimer0( TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_128 );
WriteTimer0( 65536-62 );
if (SENTIDO == 0)
{
PORTCbits.RC1 = 1;
PORTCbits.RC2 = 0;
}
else if (SENTIDO == 1)
{
PORTCbits.RC1 = 0;
PORTCbits.RC2 = 1;
}
}
44
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
//***************************************************
// Funo que movimenta o motor para posio desejada
//***************************************************
void MoverMotor (void)
{
CloseTimer1(); // Desabilita o timer do menu
Init_ps2(); // Inicializa o protocolo de comunicao PS/2
// Inicializa os controles
DADO = 0;
n = 0;
CONTROLE = 1;
// Inicializao do TIMER0, responsvel pela leitura do encoder
OpenTimer0( TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_128 );
WriteTimer0( 65536-780 );
OpenTimer2( TIMER_INT_OFF & T2_PS_1_16 );
OpenPWM2(78);
OpenPWM1(78);
SetDCPWM1(0);
SetDCPWM2(0);
/* if (SENTIDO == 0)
{
OpenPWM2(155); // PWM com perodo de 2,5ms
ClosePWM1();
}
else if (SENTIDO == 1)
{
OpenPWM1(155); // PWM com perodo de 2,5ms
ClosePWM2();
}
*/
}
//***************************************
// Funo que envia os dados da aquisio
//***************************************
void EnviarDados (void)
{
int i = 0;
CloseTimer1(); // Desabilita o timer do menu
DADO = 0;
Transmite (0x0D); Transmite (0x0A); Transmite (0x0D); Transmite (0x0A);
putrsUSART ("Posio(*100mm): Velocidade:(*100mm/s)");
45
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Transmite (0x0D); Transmite (0x0A);
for (i=0; i<= n; i++)
{
if (i == 128) DADO = 0;
if (i > 127) // Acabou o banco de memria 1
fprintf(_H_USART, "%-d", Dados_posicao2[DADO]);
else
fprintf(_H_USART, "%-d", Dados_posicao[DADO]);
Transmite (0x0D); Transmite (0x0A);
DADO++;
}
DADO = 0;
n = 0;
// Reinicializa o TIMER1
OpenTimer1( TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_8 &
T1_OSC1EN_OFF);
WriteTimer1(50000);
}
//*************************************
// Funo para exibio do menu inicial
//*************************************
void DisplayMenuInicial (char menu)
{
if (menu == MENU0) // Menu Inicial
{
putrsUSART ("\n\nMenu:");
Transmite (0x0D); Transmite (0x0A); Transmite (0x0D); Transmite (0x0A);
putrsUSART ("1) Configurar PWM");
Transmite (0x0D); Transmite (0x0A);
putrsUSART ("2) Acionar Motor - malha aberta");
Transmite (0x0D); Transmite (0x0A);
putrsUSART ("3) Desligar Motor");
Transmite (0x0D); Transmite (0x0A);
putrsUSART ("4) Configurar Encoder");
Transmite (0x0D); Transmite (0x0A);
putrsUSART ("5) Selecionar posio de parada (mm * 10)");
Transmite (0x0D); Transmite (0x0A);
putrsUSART ("6) Ler dados da aquisio");
Transmite (0x0D); Transmite (0x0A); Transmite (0x0D); Transmite (0x0A);
putrsUSART ("Opo: ");
}
else if (menu == MENU1) // Configurar PWM
{
46
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Transmite (0x0D); Transmite (0x0A); Transmite (0x0D); Transmite (0x0A);
putrsUSART ("Configurar PWM:");
Transmite (0x0D); Transmite (0x0A); Transmite (0x0D); Transmite (0x0A);
putrsUSART ("1) Mover para esquerda");
Transmite (0x0D); Transmite (0x0A);
putrsUSART ("2) Mover para direita");
Transmite (0x0D); Transmite (0x0A);
putrsUSART ("Opo: ");
}
else if (menu == MENU2) // Configurar Encoder
{
Transmite (0x0D); Transmite (0x0A); Transmite (0x0D); Transmite (0x0A);
putrsUSART ("Configurar Encoder:");
Transmite (0x0D); Transmite (0x0A); Transmite (0x0D); Transmite (0x0A);
putrsUSART ("1) Encoder X");
Transmite (0x0D); Transmite (0x0A);
putrsUSART ("2) Encoder Y");
Transmite (0x0D); Transmite (0x0A);
putrsUSART ("3) Testar Encoder");
Transmite (0x0D); Transmite (0x0A); Transmite (0x0D); Transmite (0x0A);
putrsUSART ("Opo: ");
}
}
//*******************************************************************************************
// M Q U I N A S D E E S T A D O S
//*******************************************************************************************
// Mquina de estado para exibio do menu inicial e opes de comando
void MaqComando (void)
{
if (STT_Comando < 200)
Comando = Recebe();
switch (STT_Comando) {
case (MENU_INICIAL):
DisplayMenuInicial(MENU0);
STT_Comando++;
break;
case (ESPERA_COMANDO):
if (Comando == '1')
{
DisplayMenuInicial(MENU1);
STT_Comando++;
}
else if (Comando == '2')
{
47
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
STT_Comando = OPCAO2;
}
else if (Comando == '3')
{
STT_Comando = OPCAO3;
}
else if (Comando == '4')
{
DisplayMenuInicial(MENU2);
STT_Comando = OPCAO4;
}
else if (Comando == '5')
{
Transmite (0x0D); Transmite (0x0A);
STT_Comando = ENTRADA_DADOS4; // Posio de parada
}
else if (Comando == '6')
{
EnviarDados();
STT_Comando = MENU_INICIAL;
}
break;
case (OPCAO1): // Configurao do PWM
if (Comando == '1')
{
SENTIDO = 0;
STT_Comando = MENU_INICIAL;
}
else if (Comando == '2')
{
SENTIDO = 1;
STT_Comando = MENU_INICIAL;
}
break;
case (OPCAO2): // Acionar motor
STT_Comando = MENU_INICIAL;
MotorMalhaAberta();
break;
case (OPCAO3): // Desligar motor
ClosePWM2();
ClosePWM1();
STT_Comando = MENU_INICIAL;
break;
case (OPCAO4): // Configurao Encoder
if (Comando == '1')
48
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
{
ENCODER = 0;
STT_Comando = MENU_INICIAL;
}
else if (Comando == '2')
{
ENCODER = 1;
STT_Comando = MENU_INICIAL;
}
else if (Comando == '3')
{
Init_ps2();
Transmite (0x0D); Transmite (0x0A);
TEST_ENCODER = 1;
STT_Comando = TESTANDO;
}
break;
}
}
// Mquina de estado para entrada de dados
void EntradaDados(void)
{
Comando = Recebe();
if (STT_Comando > 199) {
if (STT_Comando == ENTRADA_DADOS1) // Perdo do PWM (3 dgitos)
{
switch (STT_Dados) {
case (Mw):
if (Comando == 0) break;
valor[1] = Comando;
STT_Dados = Mwn;
break;
case (Mwn):
if (Comando == 0) break;
valor[2] = Comando;
STT_Dados = Mwnn;
break;
case (Mwnn):
if (Comando == 0) break;
valor[0] = '0';
valor[3] = Comando;
Periodo_PWM = atob(valor);
STT_Dados = Mw;
STT_Comando = MENU_INICIAL;
49
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
break;
} // fim do switch
} // fim do if
if (STT_Comando == ENTRADA_DADOS2) // Duty cycle do PWM (4 dgitos)
{
switch (STT_Dados) {
case (Mw):
if (Comando == 0) break;
valor[0] = Comando;
STT_Dados = Mwn;
break;
case (Mwn):
if (Comando == 0) break;
valor[1] = Comando;
STT_Dados = Mwnn;
break;
case (Mwnn):
if (Comando == 0) break;
valor[2] = Comando;
STT_Dados = Mwnnn;
break;
case (Mwnnn):
if (Comando == 0) break;
valor[3] = Comando;
PWM_Duty_cycle = atoi(valor);
STT_Dados = Mw;
STT_Comando = MENU_INICIAL;
break;
} // fim do switch
} // fim do if
if (STT_Comando == ENTRADA_DADOS3) // Tempo do PWM (4 dgitos)
{
switch (STT_Dados) {
case (Mw):
if (Comando == 0) break;
valor[0] = Comando;
STT_Dados = Mwn;
break;
case (Mwn):
if (Comando == 0) break;
valor[1] = Comando;
STT_Dados = Mwnn;
break;
50
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
case (Mwnn):
if (Comando == 0) break;
valor[2] = Comando;
STT_Dados = Mwnnn;
break;
case (Mwnnn):
if (Comando == 0) break;
valor[3] = Comando;
TEMPO_PWM = atoi(valor);
STT_Dados = Mw;
STT_Comando = MENU_INICIAL;
break;
} // fim switch
} // fim do if
if (STT_Comando == ENTRADA_DADOS4) // Posio de parada (3 dgitos)
{
switch (STT_Dados) {
case (Mw):
if (Comando == 0) break;
valor[1] = Comando;
STT_Dados = Mwn;
break;
case (Mwn):
if (Comando == 0) break;
valor[2] = Comando;
STT_Dados = Mwnn;
break;
case (Mwnn):
if (Comando == 0) break;
valor[0] = '0';
valor[3] = Comando;
//Posicao_desejada = ((float)(atoi(valor))/10.0);
Posicao_desejada = 40.0;
STT_Dados = Mw;
Transmite (0x0D); Transmite (0x0A);
STT_Comando = MENU_INICIAL;
MoverMotor();
break;
} // fim do switch
} // fim do if
} // fim do if geral
}
51
UNIVERSIDADE ESTADUAL DE CAMPINAS
FACULDADE DE ENGENHARIA MECNICA
ENGENHARIA DE CONTROLE E AUTOMAO
Anexo
Circuito da ponte-H utilizada no acionamento do motor.
Fonte: http://robota.das.ufsc.br/mediawiki/index.php/H-bridge-5a.
52