Você está na página 1de 80

UNIVERSIDADE ESTADUAL DE CAMPINAS

FACULDADE DE ENGENHARIA MECNICA


DEPARTAMENTE DE MECNICA COMPUTACIONAL DMC

Desenvolvimento de Kit Didtico para


Ensino de Teoria de Motores de Passo
Autor: Thiago Augusto Bento da Silva Camargo
Orientador: Luiz Otvio Saraiva Ferreira

Curso: Engenharia de Controle e Automao

Trabalho de graduao apresentado comisso de Graduao da Faculdade de Engenharia


Mecnica, como requisito para concluso do curso de graduao em Engenharia de Controle e
Automao.

Campinas, 2007
S.P. Brasil
i

FICHA CATALOGRFICA ELABORADA PELA


BIBLIOTECA DA REA DE ENGENHARIA - BAE - UNICAMP

Freitas, Jos da Silva


p

F884
Ttulo
Freitas Campinas, SP: [s.n.], 2004.

/ Jos da Silva

Orientador:
Dissertao/Tese - Universidade Estadual de
Campinas, Faculdade de Engenharia Mecnica.

1.

2.
3. 4.
I. , . II. Universidade
Estadual de Campinas. Faculdade de Engenharia
Mecnica. III. Ttulo.

Titulo em Ingls:
Palavras-chave em Ingls:
rea de concentrao:
Titulao:
Banca examinadora:
Data da defesa:

ii

UNIVERSIDADE ESTADUAL DE CAMPINAS


FACULDADE DE ENGENHARIA MECNICA
DEPARTAMENTO DE MECNICA COMPUTACIONAL

TRABALHO DE GRADUAO

Desenvolvimento de Kit Didtico para Ensino


de Teoria de Motor de Passo
Autor: Thiago Augusto Bento da Silva Camargo
Orientador: Luiz Otvio Saraiva Ferreira
A Banca Examinadora composta pelos membros abaixo aprovou esta Dissertao:
_______________________________________________________
Prof. Dr. XXXXXXXXXXX
UNIVERSIDADE ESTADUAL DE CAMPINAS
_______________________________________________________
Prof. Dr. XXXXXXXXXXX
UNIVERSIDADE ESTADUAL DE CAMPINAS
_______________________________________________________
Prof. Dr. XXXXXXXXXXX
UNIVERSIDADE ESTADUAL DE CAMPINAS
Campinas, 15 de dezembro de 2007
iii

iv

Dedicatria:

Dedico este trabalho aos meus queridos filho e esposa. Alm de todos aqueles alunos que
possam crescer e melhorar o seu aprendizado.

Agradecimentos

Agradeo a sdfsdgddfasdfadfasdfasdfa
Sdfasdfasdfasdfasdfa
Sdfasdfasdfasdfasdf
sdfasdfasdfasdfasdfdssdfasdfasdf

vi

Olhando para frente ihijhijhihlkjhlkj....

vii

Resumo
CAMARGO, Thiago Augusto Bento da Silva, Desenvolvimento de Kit Didtico para Ensino de
Teoria de Motor de Passo, Campinas, Faculdade de Engenharia Mecnica, Universidade
Estadual de Campinas, 2007. XXXp. Trabalho de Graduao.

Esse trabalho tem o objetivo de tornar mais simples e fcil o aprendizado e ensino da teoria
de motores de passo. Para isso, foi desenvolvido um kit composto por um prottipo de motor de
passo, por um driver de acionamento e softwares de interface para comunicao entre o micro
controlador, computador e driver. Toda a arquitetura do kit foi voltada e documentada ao
aprendizado simples e intuitivo. Com esse kit, o aluno poder compreender de maneira bastante
visual o funcionamento de um motor de passo alm de tambm ter a possibilidade de desenvolver
um modelamento matemtico para tanto.

Palavras Chave
- Motor de Passo, Kit Didtico, ????

viii

Abstract

CAMARGO, Thiago Augusto Bento da Silva, Didactic kit development for Steppers Motors
Lectures , Campinas, Faculdade de Engenharia Mecnica, Universidade Estadual de Campinas,
2007. XXXp. Trabalho de Graduao.

kjhlkjhlkjhlkj

Key Words
Xxxxxxxxxxxxxxxxxxxxxx

ix

ndice

Dedicatria:......................................................................................................................................v
Agradecimentos...............................................................................................................................vi
Resumo..........................................................................................................................................viii
Abstract............................................................................................................................................ix
ndice................................................................................................................................................x
Lista de Figuras...............................................................................................................................xi
1. Introduo.....................................................................................................................................1
2. Reviso Bibliogrfica...................................................................................................................4
2.1 Introduo................................................................................................................4
2.2 Modos de Acionamento...........................................................................................7
2.3 Tipos de Motores...................................................................................................11
2.4 Curva Torque Vs. Velocidade de um Motore de Passo.........................................15
2.5 Modelamento Matemtico.....................................................................................16
3. Material e Mtodos.....................................................................................................................21
3.1 Kit Didtico...........................................................................................................21
3.2 Simulao computacional......................................................................................40
Anexos............................................................................................................................................46
Anexo 1. Programa para PIC na linguagem C.........................................................46

Anexo.2 Programa para Visual Basic..........................................................................57


Anexo 3 Programa para simulao computacional.....................................................62

Lista de Figuras
- Motores de Passo.........................................................................................................2
- Rotor............................................................................................................................5
- Estator..........................................................................................................................5
- Bobinas em Pares (2 ou 3)...........................................................................................6
- Fluxo Magntico por Corrente....................................................................................6
- Configurao Unipolar................................................................................................7
- Configurao Bipolar..................................................................................................7
- Acionamento Unipolar com Passo Inteiro...................................................................7
- Acionamento Bipolar com Passo Inteiro.....................................................................8
- Acionamento Unipolar de Meio Passo........................................................................8
- Acionamento Bipolar de Meio Passo..........................................................................9
- Acionamento Bipolar..................................................................................................9
- Acionamento Binvel1...............................................................................................10
- Acionamento Binvel 2..............................................................................................10
- Acionamento com Choppers.....................................................................................10
- Motor de Relutncia Varivel...................................................................................11
- Passo de um VR........................................................................................................12
- Motor PM..................................................................................................................13
- Uma Revoluo do Motor PM..................................................................................13
xi

- Motor Hbrido............................................................................................................14
- Curva Torque vs. Velocidade....................................................................................15
- Curva Torque vs. Velocidade (com carga)................................................................16
Modelo Eltrico de uma Fase...................................................................................18
- Esquema de Fluxo de Informaes...........................................................................21
- Esquema do Prottipo...............................................................................................22
- Prottipo na Posio A..............................................................................................23
- Prottipo na Posio B..............................................................................................23
- Prottipo na Posio C..............................................................................................23
- Componentes.............................................................................................................26
- Ponte-H......................................................................................................................26
- Sentido A...................................................................................................................27
- Sentido B...................................................................................................................28
- Byte de Comunicao................................................................................................30
- Seqenciamento (Byte).............................................................................................31
- Funo Passo Completo............................................................................................33
- Funo Meio Passo....................................................................................................36
- Funo Mquina de Estados......................................................................................38
- Programa de Interface VB.........................................................................................39
- Detalhe de Interface...................................................................................................40
- SDL - Simulao Computacional..............................................................................43
- Iteraes da Simulao (Perfil de Velocidades)........................................................43
- Dados da Curva.........................................................................................................44
- Curva Exemplo..........................................................................................................44
- Simulao Exemplo...................................................................................................45
xii

xiii

1. Introduo

Quando Hans Christian Oersted, em 1820, observou uma interessante relao entre a
eletricidade e magnetismo, as portas para o desenvolvimento de motores eltricos foram abertas.
Desde ento, inmeros tipos de motores foram patenteados e desenvolvidos; cada um com seu
modo de acionamento, peculiaridade, vantagens e desvantagens.
Os primeiros motores eltricos eram acionados por corrente contnua e, geralmente, tinham
um im permanente em sua constituio. Posteriormente, os motores comearam a utilizar
eletroms e possibilitar diversas formas de acionamento: por corrente contnua ou alternada.
Os motores eltricos convencionais so, hoje, largamente utilizados em todas as reas,
desde em aplicaes industriais at em eletrodomsticos, como o exemplo de trens eltricos e
liquidificadores domsticos.
Contudo, com o avano da tecnologia, necessidades especiais, como: preciso de
posicionamento e controle de velocidade, comearam a surgir, foi quando o motor de passo
surgiu para auxiliar nesses casos. Apesar dos motores eltricos de corrente alternada ou contnua
tambm possibilitarem certo controle de posio, a eficincia, nesse aspecto, do motor de passo
superior.
O motor de passo nada mais do que um motor eltrico especial (vide exemplos na figura
1). Isso quer dizer que, devido a sua arquitetura, ele possibilita inmeros tipos de controle mais
precisos que os motores convencionais. Ou seja, esse motor foi desenvolvido e projetado para
atender necessidades de controle, mais especificamente de posicionamento. Posteriormente, neste
trabalho, as caractersticas que conferem aos motores de passo esses controles sero mais
detalhadamente elucidadas.

Figura 1 - Motores de Passo

Os motores de passo tm o seu princpio bsico de funcionamento baseado no alinhamento


eletromagntico da parte girante (rotor) com a parte fixa (estator). E esse alinhamento que
garante a principal caracterstica diferencial do motor de passo: a alta preciso no
posicionamento.
Com essas caractersticas, o motor de passo comeou a ser largamente explorado em
aplicaes industriais que exigiam bom posicionamento como mesas xy, bobinadeiras e etc...
Alm de ser muito usado na industria, esse atuador tambm muito usado em eletrodomsticos
como impressoras, scanners, dispositivos computacionais entre outros. Pode-se dizer tambm que
os motores de passo conquistaram tanto espao devido ao seu baixo custo em detrimento dessa
preciso de posicionamento e sua boa interface com sistemas digitais, que fazem o seu
acionamento, o que ser abordado durante este trabalho.
Analisando tantas possibilidades e essa larga empregabilidade do motor de passo, torna-se
indispensvel para o profissional ou estudioso das reas tecnolgicas, um conhecimento mais
aprofundado das diretrizes de um motor de passo.
Por isso, de grande importncia que aquelas pessoas que pretendam trabalhar ou se inserir
na rea tecnolgica ou industrial tenha um conhecimento slido dos princpios de funcionamento

desse tipo de atuador. O que possibilitar ao conhecedor julgar sobre as possibilidades de


emprego, considerando os limites e vantagens desse tipo de motor eltrico.
O ensino desse tipo de motor, como mostrado acima, envolve a aplicao de conceitos
como o eletromagnetismo que no so visuais ou intuitivos. Ou seja, so conceitos cujos efeitos
que podem ser visualizados e materializados.
No intuito de trazer mais estmulos para o aluno durante o aprendizado e apresentao da
teoria, foi desenvolvido um kit didtico bastante visual. Esse kit composto, principalmente, por
um prottipo de motor com seu interior transparente (vide figura 2) para que o aluno possa, em
uma viso macro, compreender a estrutura de um motor de passo.
O kit foi desenvolvido para que, alm da estrutura, tambm pudessem ser de fcil
entendimento as formas de acionamento desse tipo de motor. O motor constitudo de 3 pares de
bobinas independentes que permitem acionamento tambm independente. E, alm de usar um
driver aberto, toda sua lgica foi implementada em micro controlador passvel de alterao.
Com todas essas possibilidades, o kit proporcionar ao aluno uma viso geral, porm, de
fcil aprendizado, dos princpios bsicos do funcionamento do motor de passo.

2. Reviso Bibliogrfica
2.1 Introduo

Os motores de passo, antes de tudo, so motores eltricos que tambm utilizam o princpio
do eletromagnetismo como fora motriz. Este um princpio bastante simples, mas que requer
certo nvel de abstrao.
O eletromagnetismo o nome da teoria unificada desenvolvida por James Maxwell, que
relaciona a eletricidade com o magnetismo. Para o caso aqui estudado, interessante salientar um
aspecto dessa teoria: sempre que h uma corrente eltrica gerada tambm uma variao de fluxo
de campo magntico. Isso quer dizer que quando h a movimentao ordenada de eltrons
(corrente eltrica) formado um campo magntico. Como pode ser visto pela lei de AmpreMaxwell com a equao abaixo (Eq.: 1.1):

Onde ienv a corrente que induzir o campo e B o campo magntico.


A partir desse conceito, o motor de passo pde ser desenvolvido. Diferentemente dos
motores eltricos convencionais, os motores de passo oferecem uma preciso de posicionamento
muito maior, alm de possibilitar um controle de sua velocidade, suas aceleraes e
desaceleraes. Isso possvel, pois o motor trabalha constantemente se alinhando com um
campo eletromagntico apropriadamente criado, entre uma parte girante e uma fixa quando
4

energizado; o que difere, basicamente, de um motor eltrico convencional, que, quando


energizado, gira.

Os motores de passo so compostos basicamente por um estator e um rotor:


Rotor: a denominao para o conjunto eixo-im que roda solidariamente parte mvel
do motor.
Estator: definido como a trave fixa onde as bobinas so enroladas. Abaixo segue uma
figura onde podemos ver as partes mencionadas:

Figura 2 - Rotor
Figura 3 - Estator

Os motores de passo podem ser de 3 tipos, que sero logo elucidados, mas de um modo
geral, podem ter seu funcionamento explicado pelo alinhamento entre um im-permanente ou
eletrom e um campo gerado por pares de bobinas transpassadas por corrente eltrica.
As bobinas do estator esto posicionadas sempre em pares, podendo ser comumente
encontradas em 2 ou 3 pares, como no esquema abaixo:

Figura 4 - Bobinas em Pares (2 ou 3)


Para que o campo eletromagntico seja criando, as bobinas so acionadas separadamente ou
em pares. Sendo um par, por exemplo, acionado, uma corrente eltrica passa pelo fio que est
enrolado ao redor do material ferro-magntico (bobinas) e assim o campo gerado (vide figura
5). Lembrando que esse campo segue a lei de Lenz: o sentido da corrente o oposto da variao
do campo magntic.

Figura 5 - Fluxo Magntico por Corrente

Com isso, basta que o campo eletromagntico formado fique variando de posio para que
o rotor se alinhe e d movimento ao motor de passo.
Essa troca de acionamento de bobinas outra peculiaridade do motor de passo. O
ligamento ou desligamento de um par de bobinas feito atravs de um driver de potncia que
pode ter inmeras configuraes e ser abordado posteriormente. De qualquer forma o
acionamento das bobinas pode ser de um ou meio passo e unipolar ou bipolar.
6

2.2 Modos de Acionamento

Basicamente, como dito acima, os motores podem ter seu acionamento com configuraes
entre unipolares ou bipolares e de passo inteiro ou meio passo. A configurao unipolar significa
que para cada bobina, s haver um sentido de corrente e portanto de campo eletromagntico. J
para a bipolar, a corrente e o campo podero assumir as duas direes. Outro tipo de acionamento
o com passo inteiro ou meio passo. Para o acionamento de passo inteiro as bobinas devero ser
acionadas ou unicamente ou em pares. J o acionamento com meio passo requer um acionamento
de uma nica bobina e de um par, intercaladamente. A escolha do tipo de acionamento depender
da exigncias da aplicao e do tipo de motor de passo com que se esteja trabalhando.
As possibilidades de acionamento foram exemplificadas conforme as figuras abaixo:

Figura 6 - Configurao Unipolar

Figura 7 - Configurao Bipolar

Figura 8 - Acionamento Unipolar com Passo Inteiro


7

Figura 9 - Acionamento Bipolar com Passo Inteiro

Figura 10 - Acionamento Unipolar de Meio Passo

Figura 11 - Acionamento Bipolar de Meio Passo

Comercialmente, j existem algumas solues de acionamento de motores de passo mais


comuns, como as mostradas abaixo:

Figura 12 - Acionamento Bipolar

Figura 13 - Acionamento Binvel1

Figura 14 - Acionamento Binvel 2

Figura 15 - Acionamento com Choppers

10

2.3 Tipos de Motores

Os motores de passo podem ser divididos em 3 grupos: o motor de relutncia varivel, o de


im permanente e um motor hbrido.
2.3.1 Motor de Relutncia Varivel (VR)

No motor de relutncia varivel, sempre que h a energizao das bobinas, o rotor tenta se
alinhar e se manter em uma posio de maior estabilidade. Essa posio de maior estabilidade
sempre aquela aonde h a menor relutncia entre estator e rotor. Isso quer dizer que quando as
bobinas conduzem corrente, um campo eletromagntico formado e o rotor tenta se alinhar com
o mesmo.
Nesse tipo de motor, temos o estator trabalhando com bobinas em pares e todas voltadas
para o centro. J o rotor uma pea com um formato de uma engrenagem, que, dependendo do
modelo de motor, pode ter mais ou menos dentes que pares de bobinas, constitudo de material
ferro magntico, mas no im permanente. Abaixo, a ilustrao mostra claramente esses
componentes:

Figura 16 - Motor de Relutncia Varivel

11

Para a movimentao desse motor, um par de bobinas acionado aps o outro. Sempre que
o campo magntico muda, o rotor tenta se alinhar com esse campo. Assim, o rotor estar sempre
buscando a posio de menor relutncia (que a resistncia passagem do campo magntico),
que quando h a menor distncia entre os dentes do rotor e o par de bobinas acionado.
O torque esttico de um motor de passo pode ser medido quando o mesmo no est em
funcionamento, ou no tem nenhuma bobina sendo acionada. E, justamente pelo fato de ser um
motor sem im permanente, o seu torque inicial nulo.
Comercialmente esse motor encontrado com passos que podem variar de 5 a 15 por
passo.

A figura abaixo salienta o funcionamento desse tipo de motor de passo, assim que o par de
bobinas acionadas muda, o rotor tende a se alinhar e gira at encontrar o ponto de menor
relutncia, como mostra a figura:

Figura 17 - Passo de um VR

12

Motor de Im Permanente (PM)

A grande diferena entre os motores PM e os motores VR que o seu rotor magnetizado e


no tem dentes. Ou seja, o seu torque esttico no mais nulo como no caso anterior. Sendo
assim, apesar de ser comumente encontrado funcionando com passos grandes e baixas
velocidades, ele exibe um grande torque. Abaixo podemos ver um motor (PM):

Figura 18 - Motor PM
Esse modelo se movimenta tendo suas bobinas sendo acionadas seqencialmente, a seguir a
uma seqncia de movimentao desse motor mostrada:

Figura 19 - Uma Revoluo do Motor PM


13

Motor Hbrido

Como o prprio nome sugere esse um motor que combina a estrutura dos dois motores,
ou seja, possui rotor dentado e magnetizado. Essa configurao confere a esse tipo de motor uma
grande versatilidade de aplicaes alm de ter um custo barato em relao aos motores eltricos
tradicionais.

Figura 20 - Motor Hbrido


Para facilitar uma rpida comparao desses motores, seque a tabela com suas principais
caractersticas:
Motor de Relutncia Varivel (VR)

Motor de Im permanente (PM)

Motor Hbrido

14

Rotor de ao doce multipolar


Enrolamentos no estator
Inrcia de rotor baixa
Inrcia inicial (desenergizado) nula
Rotor magnetizado radialmente
Apresenta torque residual (de
reteno)
Materiais: Ferrite e Alnico
Enrolamentos no estator
Rotor e estator multidentados
Alta preciso de posicionamento
Mistura os dois motores anteriores.

2.4 Curva Torque Vs. Velocidade de um Motore de Passo

Alm de conhecer o seu funcionamento, importante que o aluno aprenda a obter e


entender as informaes intrnsecas ao motor. Isso quer dizer que quando em funcionamento, o
motor deve ser bem conhecido para que possa ser corretamente dimensionado e aplicado.
Todo motor de passo possui caractersticas que so inerentes a sua arquitetura e
acionamento. Pode-se dizer que a identidade de um motor de passo possa ser traada pela curva
de torque vs. velocidade (figura abaixo).

Figura 21 - Curva Torque vs. Velocidade

Essa curva fornece quase todos os dados importantes para se aplicar um motor de passo,
pois ela sempre representar o mximo de torque disponvel quela velocidade. Alm de ajudar
a estipular a sua rampa de acelerao, velocidade de cruzeiro e torque. Aps a carga ser aplicada,
ela provavelmente agregar uma inrcia ao sistema, que dever ser calculada ou estipulada. Com
esses novos dados, pode-se traar outra curva que agora trar o torque relativo quela velocidade
com carga. Abaixo segue uma figura com o grfico de curva torque vs. velocidade para duas
cargas diferentes sendo comparadas com a curva de um motor em vazio.

15

Figura 22 - Curva Torque vs. Velocidade (com carga)

2.5 Modelamento Matemtico

Para um estudo mais detalhado do motor de passo interessante que seja feito um
modelamento matemtico de quanto e como seriam suas correntes, torques, deslocamentos,
velocidades e aceleraes.
interessante tambm que sejam feitos vrios tipos de modelamento, alguns mais
abrangentes e outros mais aprofundados. Todos esses modelos devero receber dados obtidos
experimentalmente como inputs. Basicamente podem ser feitos 3 tipos de modelamento.
Primeiramente, um modelo mais genrico pode ajudar no clculo da melhor velocidade a
ser utilizada para um carregamento e um nmero de passos dado. Sendo que nesse modelo a
entrada de dados a curva de velocidade vs. toque e as velocidades de teste. Um outro modelo
onde a inrcia da carga, durante o movimento, varivel. E um terceiro, onde podemos calcular
as correntes e tenses que passam pelo motor, sendo que nesse tipo de modelamento, dependendo
do circuito de acionamento (ou de controle), temos uma aproximao boa ou no da realidade.
No primeiro modelo, basta calcular alguns parmetros como: a velocidade, distncias e
tempos de acelerao, desacelerao e andamento. Para isso interessante levar em conta
algumas equaes:
16

Lembrando torque de acelerao (Tac) sempre igual ao torque da curva levantada (Tcurva)
vezes a porcentagem de utilizao (Tu) de torque menos a frio de Coulomb (Tc).
Tac = Tcurva * Tu - Tc

A variao de velocidade = torque de acelerao/inrcia do sistema*intervalo de tempo:


w = Tac * dt / (Jr+Jl)

Distncia percorrida = velocidade mdia do intervalo * intervalo de tempo:


S = (w + dw/2)* dt

Torque de desacelerao = torque da curva negativo * porcentagem de utilizao frio


de Coulomb.
Tdc = Tcurva * Tu - Tc

Assim, o torque gerado (Tg) pode ser determinado pela multiplicao da inrcia da carga,
somado com o atrito viscoso e com a frio Coulomb e torque gravitacional (se houve):
Tg = J * dw/dt + Fv * w + Tc + Tgr

No segundo moldelo, a inrcia da carga varia de acordo com a posio do motor, e ela ser
levada em conta com:
Tg = Tm * - sen (e)

17

Sendo que Tm no igual ao torque de pullout (Tpo), mas pode ser derivado dele.
Tpo = -Tm/ se * int (sen e de, - pi + se/2, - pi - se/2)

derivado => Tm = (Tpo * se )/ ( 2sen(se/2)).

No terceiro modelo, para o motor de im permanente, aonde entram as correntes das fases,
deve-se interpretar as fases como um circuito como o abaixo:

Figura 23 Modelo Eltrico de uma Fase

Para facilitar, aqui, sero apresentadas as equaes para um motor de duas fases.
Va = ia* R + L *dia/dt - NB * sen N * d/dt
Vb = ib* R + L *dib/dt - NB * sen N * d/dt

Obs.: O N indica o nmero de ciclos eltricos por revoluo mecnica, e B a fora do


im permanente.
Ta = NB * ia * - sen N
Tb = NB * ib * cos N
Td = D * -sen (4* N)
18

Tg = Ta + Tb + Td
Para o motor hibrido as equaes das fases so:
Va = ia* R + L *dia/dt + Kea * d/dt
La = L C * Z * cos N (Z = sinal da corrente)

Onde:
Kea = - N* (B C * ia) * sen N
Vb = ib* R + L *dib/dt + Keb * d/dt
Lb = L C * Z * sen N (Z = sinal da corrente)

Onde:
Keb = - N* (B C * ib) * cos N

Para os torques ficam as equaes:


Ta = Kta * ia

Onde:
Kta = N * ( B C/2 * |ia|) * - sen N
Tb = Ktb * ib

Onde:
19

Ktb = N * ( B C/2 * |ib|) * cos N


Torque perdido:
Td = D * -sen (4* N)

E o torque total:
Tg = Ta + Tb + Td

Aplicado ao modelo mecnico:


Tg = J * dw/dt + Fv * w +Tc + Td

20

3. Material e Mtodos

3.1 Kit Didtico

Para o desenvolvimento de atividades didticas voltadas ao estudo de motores de passo,


muitos conceitos acima expostos podero ser revisados atravs dos experimentos criados.
Para que o aluno pudesse compreender cada etapa do funcionamento do motor de passo, ele
ter que entender as etapas de monitoramento e gerao dos comandos e seqncia de
acionamento, arquitetura interna e drivers de acionamento.
Focado nesses aspectos, o kit didtico segue o seguinte diagrama com o fluxo de
informaes (comandos):

Figura 24 - Esquema de Fluxo de Informaes

21

O Prottipo

O prottipo de motor de passo do tipo de um motor de im permanente. Ou seja, o campo


eletromagntico formado pelas bobinas do estator fora a movimentao do rotor. Nesse sentido,
o prottipo foi construdo com o seu estator em 3pares de bobinas alinhadas formando 60 entre
si. Para mostrar como um rotor se comportaria perante a variao da posio do campo, foi
colocada uma bssola, que mostrar a direo do campo. A figura abaixo ilustra o prottipo:

Figura 25 - Esquema do Prottipo

Nesse prottipo, as bobinas trabalharo em pares, podendo ser acionadas na configurao


bipolar. Sendo assim, o motor poder assumir se acionado com meio passo, 12 posies
diferentes, sendo algumas posies aqui exemplificadas quando apenas um par estiver acionado
de cada vez:

22

Figura 26 - Prottipo na Posio A

Figura 27 - Prottipo na Posio B

Figura 28 - Prottipo na Posio C


23

Dados tcnicos do prottipo:


O prottipo foi feito em ferro doce, com um cano de XXmm de espessura e XXmm de
altura. Do lado interno foram postos cilindros de ferro doce tambm, dispostos todos voltados
para o centro e perpendiculares tangente do crculo sendo todos eqidistantes uns dos outros e
formando 60 entre si. E sobre cada barra de metal foram feitas as bobinas sendo que cada bobina
foi confeccionada com:
- fio de cobre envernizado com dimetro de 0,06mm
- 200 voltas
- XXmm de comprimento de barra de metal
- 8 ohms de resistncia.
- XX H de indutncia

Sendo a indutncia uma caracterstica intrnseca do conjunto todo, a permeabilidade


magntica do material pode ser estimada. Esse dado pode ser interessante para algumas
comparaes futuras. Para calcul-la usou-se a frmula:

Tendo a indutncia como valor medido experimentalmente.


Que resulta em

O Driver de Potncia

Para o kit didtico, um driver de potncia se torna necessrio, pois, os sinais de controle
enviados pelo micro controlador no teriam potncia ou corrente suficiente para alimentar as
24

bobinas e conseguir um campo magntico eficiente. E esse driver de potncia que far a
interface entre o micro controlador e o prottipo. Ou seja, ele o estgio que amplifica os sinais
enviados e alimenta com correntes adequadas as bobinas.
Cada bobina ser acionada de maneira bipolar, isso quer dizer, conforme dito acima, que a
corrente dever fluir nos dois sentidos. Para tanto, usou-se o conceito de acionamento por ponteH que, nada mais , do que um circuito que permite a ligao nos dois sentidos atravs do envio
de sinais de controle para transistores e ser mais bem explicado mais a frente.
Lista de Materiais:
- 1 protoboard com 550 pontos
- 6 transistores NPN (BC548)
- 6 transistores PNP (BC558)
- 12 diodos (1N914)
- 12 resistores de 1Kohm
- 1 resistor de 4r
- 6 resistores de 10ohm
- 1 cabo flatcable de 14 vias (com conectores macho e fmea)
Nos esquemas eltricos a seguir os componentes usados sero representados como na
figura:

25

Figura 29 - Componentes
Para montar o circuito foi usado o seguinte esquema de ligao para a ponte-H:

Figura 30 - Ponte-H
26

A seguir sero dadas explicaes detalhadas dos motivos e de cada componente, bem como
os seus dimensionamentos.
O funcionamento da ponte-H bastante simples. Os transistores devero ser acionados
sempre em pares para que haja a passagem de corrente e gerao do campo. Para exemplificar o
acionamento da ponte-H, algumas ilustraes foram montadas.
Nos dois casos a seguir sero mostrados os acionamento dos transistores para que a haja a
possibilidade de passagem de corrente nos dois sentidos das bobinas. Para que a ponte-H
funcione corretamente, os transistores devero ser acionados em pares e em x como mostrado a
seguir:

Figura 31 - Sentido A

E no sentido oposto:

27

Figura 32 - Sentido B
Para simbolizar o acionamento dos transistores, foram usadas as chaves S1 e S2, aonde
seus estados representam sinal alto ou baixo, representados por um ou zero respectivamente. Vale
lembrar que o acionamento de transistores PNP dado em nvel baixo (0) e os NPN em nvel
alto(1). Tambm interessante salientar que as bases dos transistores foram curto-circuitadas
convenientemente, e essa juno ser posteriormente explicada.
Para esse circuito, os resistores de 1k so apenas limitadores de corrente de acionamento.
Pois como esses componentes tm ganhos muito grandes, uma corrente de base da ordem de
5mA ser o suficiente. Alm desses componentes, h a presena de quatro diodos que permitem
que a correntes parasitas e decorrentes do regime transiente do indutor sejam dissipadas, uma vez
que o circuito ser chaveado e as correntes reversas devido variao de tenso no indutor
podero representar campos magnticos contrrios ao desejado.
Nesse circuito, algumas precaues devero ser tomadas. Os transistores nunca podero ser
acionados em linha, pois isso representa um curto circuito entre a fonte e o terra. Mesmo
tomando esse cuidado, devido ao tempo de chaveamento de cada transistor pode ser que um
28

transistor demore mais ou menos para mudar o seu estado de conduo, o que caracterizaria um
curto instantneo e de curta durao. Nesse sentido, foi colocado um resistor de 4 ohms para que
a corrente de curto seja limitada minimamente para minimizar danos. Ainda no intuito de evitar o
acionamento em linha as bases dos transistores foram curto-circuitadas, garantindo que na mesma
linha, os transistores nunca recebam sinal para conduzirem.
Para o dimensionamento da linha principal desse circuito, foram feitos alguns experimentos
prticos para se definir uma corrente que fosse suficiente para movimentar a bssola mas que
tambm no fosse demasiadamente intensa para danificar o sistema. Sendo assim, chegou-se a
concluso que a melhor corrente seria de 200mA. Por tanto, considerando o circuito total,
precisar-se-ia de mais 10 ohms para o circuito, que foi acrescentado pelo resistor.
Esse foi o circuito de acionamento de uma bobina e, por tanto, ele se repetir trs vezes,
sendo uma ponte para cada bobina. Combinado com 3 circuitos, o driver de potncia ficou assim:

Para que possa haver uma seqncia de acionamento foi montado uma espcie de protocolo
de comunicao entre o driver e os sinais de comando. Essa comunicao chegar sempre atravs
de um cabo do tipo flatcable de quatorze vias das quais s sero usadas seis (dois bits para cada
par de bobinas). Os 6 bits estaro separados por um bit inativo por motivos construtivos do
experimento. Esse byte estar representando cada chave de comando para cada bit. Novamente,
os sinais de zero e cinco volts sero aqui representados na forma de bits (zeros e ums). A figura a
baixo ilustra a relao entre os bits e as chaves. Sendo elas representadas da forma ABC para as
bobinas e um e dois para as respectivas chaves.

29

Figura 33 - Byte de Comunicao


A seguir, ser usada uma forma de representar as posies possveis do campo magntico.
Sendo a AA a representao para a bobina A acionada em um sentido e AA em no outro
sentido. Tambm podero ser acionadas duas bobinas ao mesmo tempo e elas sero representadas
com aspas simples para mostrar o sentido da corrente em cada par, por exemplo, AB sero as
bobinas A e B sendo acionadas no mesmo sentido, j o caso AB a bobina A sendo acionada em
sentido oposto ao anterior.
Portanto o padro de acionamento ficaria assim:

30

Figura 34 - Seqenciamento (Byte)

Programa de Controle (PIC)

A seguir ser apresentado o programa que far o controle seqencial do motor. A idia
bsica do programa ser interpretar os comandos enviados via seria do computador e transformlos em sada atravs do byte de comando para o driver de potncia. Assim, basicamente haver
dois modos de operao do motor. Um deles ser o acionamento manual que a cada comando o
motor se mover um passo. E outro modo aonde ser passada uma quantidade de passos e uma
velocidade mxima (de cruzeiro) a ser executada, e assim o micro controlador se encarregar de
passar os sinais corretamente para o driver.
O PIC, micro controlador, usado ser o modelo: 16F877. Esse um modelo bastante
completo e com muitos recursos, apesar de utilizar poucos deles nesse experimento, esse foi o
controlador usado, pois no laboratrio da faculdade de engenharia mecnica j o disponibiliza
com alguns recursos estruturais como os pinos de expanso, adequados para os conectores de

31

flatcable. Nesse projeto, sero usadas 6 sadas digitais no port D do controlador. Sendo as sadas
D00 a D07 as escolhidas para o experimento.

As funes do programa sero apresentadas na linguagem SDL e o programa original na


linguagem C ser colocado nos anexos.
Basicamente o motor de passo poder ser utilizado com meio passo ou passo inteiro. Para
cada caso ser usada uma funo diferente.
Para o caso do passo inteiro o programa fica assim:

32

Figura 35 - Funo Passo Completo

Nesse caso, foram usadas as variveis Motor_Pas e Motor, sendo a primeira que diz em
que posio o motor se encontra e a segunda imprime o byte de comando nos pinos de sada do
PIC. Como nesse modo, o motor anda com passo completo, a varivel Motor_Pas s assume seis
valores diferentes (0-5). J a varivel Motor, pode assumir, dentro dessa funo tambm apenas

33

seis valores. Obs.: os valores de Motor so expressos em hexadecimais para uma simples
adequao linguagem de programao usada.
Para a funo de meio passo ser usada a mesma varivel de sada de comandos (Motor),
porm ser usada uma varivel Motor_MPass, que tambm guardar a posio em que o motor se
encontra. Tambm interessante ressaltar que ao termino da funo, dever ser feita uma
converso entre as variveis Motor_MPass e Motor_Pass, para que no haja perda de
posicionamento. Sendo assim, nas duas funes, uma etapa de correo de valores feita.
A figura a seguir mostra o SDL para a funo de meio passo.
A partir das duas funes de deslocamento, pode-se construir uma mquina interpretadora
de comandos que alm de processar os comandos recebidos, executa uma rotina para realizar os
pedidos.
Para que os comandos fossem recebidos e tivessem o mnimo tratamento para erros o
programa principal funciona como uma mquina de estado. Ou seja, a cada comando, ele recebe
o dado, verifica se realmente uma comunicao e muda de estado esperando o comando
seguinte.
Para o primeiro modo, basta que seja enviado pela serial o comando N, o motor j
responde e anda um passo apenas e fica aguardando novas instrues.
No segundo modo, o primeiro comando dever ser o P e logo aps cinco algarismos
sendo os trs primeiros representando o nmero de passos a serem dados e os dois ltimos a
velocidade mxima a ser desenvolvida.

34

35

Figura 36 - Funo Meio Passo

36

37

Figura 37 - Funo Mquina de Estados


Vale salientar que a mquina interpretadora de comandos feita recebendo cada comando
separadamente e muda de estado a cada comando. Isso foi feito assim, devido a diferenas de
velocidades entre o processamento de um PIC e um PC, sendo que se fossem passados os
comandos diretamente pelo PC o buffer de sada serial estaria lotado e no receberia os
protocolos de handshake que o PIC no oferece nesse tipo de comunicao.
interessante tambm explicar o funcionamento da configurao da velocidade mxima
entrada pelo usurio. Para que fosse feito o acionamento correto do motor, h uma rampa de
acelerao, um perodo em que o motor desenvolve a sua velocidade mximo ou de cruzeiro e
posteriormente desacelera. Para tanto, os pulsos de troca de configurao possuem um delay
varivel. E atravs desse delay varivel que a velocidade controlada. Isso quer dizer que a
velocidade vai de 0 a 99% do delay mximo estipulado (1s).
Essa funo que trata da velocidade, aceleraes e contagem do nmero de passos
chamada de Anda().

Programa de interface(Visul Basic)

Para criar uma interface agradvel e de fcil entendimento, foi criado no Visual Basic uma
interface amigvel que envia os comandos para o micro controlador e mostra a posio do motor.
nesse programa que o aluno pode selecionar o modo a ser trabalhado. Se ser acionado
passo a passo ou ser atravs de objetivos.
A interface bsica do programa est ilustrada abaixo. Nela, pode-se observar que h um
boto de opo aonde poder ser selecionado o modo de trabalho. Sendo que quando um modo
foi escolhido o outro permanecer inativo e vice-versa.
Esse programa segue o mesmo padro de comandos que o PIC, uma vez que entre eles ser
estabelecida a comunicao de comandos. Com isso, essa interface se encarregar de enviar, via

38

seria, os comandos N e PpppVV. Sendo ppp o nmero de passo e VV a velocidade


mxima a ser desempenhada.

Figura 38 - Programa de Interface VB

39

Figura 39 - Detalhe de Interface


O programa com todos os detalhes e explicaes de cada evento est colocado no anexo 2.
importante ressaltar que o programa em Visual Basic 6.0 foi desenvolvido para fazer a
comunicao via serial at o micro controlador. Porm, no pode-se ter acesso direto aos pinos de
sada da porta comm1 (usada nesse experimento), o que tem que ser feito usar uma biblioteca
chamada MSComm32.ocx que realiza esse protocolo de interface.

3.2 Simulao computacional

Introduo
Alm do kit didtico, foi desenvolvido um programa simples para simulao de um motor
de passo.
Durante o estudo de motores de passo, preciso que o seu funcionamento seja bem
entendido, para que tambm possa se dimensionado de forma correta, sem que haja super ou subdimensionamento.

40

Para o dimensionamento de motores, antes de construir ou testar fisicamente alguns


modelos, necessrio que se possa fazer algumas simulaes que sejam prximas o suficiente da
realidade.
Atualmente, a prototipagem rpida tem ganhado bastante importncia no desenvolvimento
de novos produtos e/ou aplicaes. E, nesse tipo de trabalho, as simulaes computacionais tm
sido muito empregadas para poupar tempo e recursos desses projetos.
Por isso, o estudo mostrado a diante tem faz uma simulao de acelerao e velocidade e
cruzeiro.
Para um modelo inicial e mais simples de simulao de motores de passo, s sero
considerados alguns fatores dinmicos como as inrcias do motor e da carga. A parte eltrica de
acionamento e controle, por enquanto, no sero levadas em conta.

Nesse primeiro modelo de simulao adotado, foram feiras algumas aproximaes e


consideraes listadas a baixo:

Curva Pullout (Torque vs. Velocidade)


Torque do rotor e carga fixos
Torque inicial e perdas viscosas

/ Obtido experimentalmente

/ Aproximaes *
/ Aproximaes

Esses torques foram aproximados para no variarem devido a sua posio em relao a
gravidade.
Para a simulao computacional desse modelo, sero usadas como dados a serem entrados
de acordo com os objetivos pretendidos:
- Distncia total percorrida, ou distncia final.

41

- Velocidade mxima de acionamento do motor.


Obs.: Alm das entradas, aqueles dados adotados tambm foram inseridos no programa.
Tendo disponveis todos os dados, o programa far, atravs de clculo numrico, a
simulao do comportamento do motor. Esses clculos so realizados atravs de iteraes de
intervalos de tempo muito pequenas, assim, pode-se aproximar as curvas de acelerao,
velocidade e distncia de modo a se obter o comportamento do motor durante toda a simulao.
Assim, a cada iterao, todos os valores de status do motor so recalculados e o tempo
incrementado com uma unidade de tempo.
Para facilitar o entendimento e visualizao, a simulao foi baseada no seguinte diagrama
na linguagem SDL:

42

Figura 40 - SDL - Simulao Computacional

Para visualizar as iteraes e maneira de compilao da simulao h uma figura que


mostra um exemplo sobre cada iterao at a formao do perfil de velocidades.

Figura 41 - Iteraes da Simulao (Perfil de Velocidades)


43

Durante toda a simulao gerado um arquivo (*.txt) com todos os dados de velocidade e
distncia percorrida por tempo, que, posteriormente ser usado para a gerao de grficos no
Excel ou MatLab.
O programa para a simulao foi feito em linguagem C e est integralmente exposto no
anexo 3.
Como exemplo foi feita uma simulao com curva de motor:

Figura 42 - Dados da Curva

Figura 43 - Curva Exemplo

44

Aps a gerao dos arquivos em TXT, os dados podem ser plotados pelo Excel, como
mostrado logo abaixo:
Ex:
Velocidade mxima: 5000
Distncia requerida : 2000

Figura 44 - Simulao Exemplo


O grfico mostra apenas o perodo de acelerao e em velocidade de cruzeiro pois apenas
um arquivo de dados foi lido em modo de demonstrao.
Para ajudar a demonstrao foi criada uma macro em Excel que l o arquivo gerado pela
simulao e plota um grfico com esses dados.
A macro bastante simples, com apenas essa linha de comando j se tem a atualizao do
grfico.
Sub Execulta Macro_Clique()
Range("B2").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
45

Anexos

Anexo 1. Programa para PIC na linguagem C

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Trabalho de Grauao - 2o Semestre 2007
* Universidade Estadual de Campinas - UNICAMP
* Faculdade de Egenharia Mecnica - FEM
* Curso de Engenharia de Controle e Automao
* Aluno: Thiago Augusto Bento da Silva Camargo
* Orientador: Luiz Otvio Saraiva Ferreira
*
**************************************
* Programa: Motor de Passo.c
* VERSO : 1.0
* DATA : 04/11/2007
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Descrio geral
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
Este programa, a partir de caracteres enviados, via serial,
controla um prottipo de motor de passo.
Os caracteres so enviados e interpretados por uma mquina de estados.
Basicamente o acionamento se d de duas formas:
1 - Passo a Passo. (Um passo)
2 - Ou com objetivos de velocidade e nmero de passos. Assim, o motor ser
acionado at atingir o nmero de passos com velocidade mxima de cruzeiro
setada pelo usurio.
*/
/*
**===================================================================
46

** 1
Informaes Gerais
** 1.1 Revises
**
**===================================================================
*/
/*
**===================================================================
** 1.2 Referncias
**
** No Identificao
Nome ou Descrio
** =======================================================
** 1 Datasheet do microcontrolador
**
PIC16F877, da Microchip
**
**===================================================================
*/
/*
**===================================================================
** 2.
Bibliotecas a incluir
**===================================================================
*/
#include <io16f877.h>
/* Definies dos registradores do processador
*/
#include <inpic.h>
/* Definio das funes intrnsecas do compilador */
#include <stdlib.h> /* Definio das funes padro do ANSI C */
#include <ctype.h>
/* Definio da converso aSCII para HEXADECIMAL */
/*
**===================================================================
** 3.
DECLARAES
** 3.1 Definies de tipos internas
**===================================================================
*/
#define RXFLAG RCIF /* Flag de chegada de byte pela serial */
#define TXFLAG TXIF /* Flag de esvaziamento de TXREG */
#define MOTOR PORTD //Sada de dados para o LCD.
#define ENABLE RE1 //Sinal de enable para o LCD. Ativo na borda de subida.
#define RS RE0
//Sinal de envio de dados (RS=1) ou comando (RS=0) para o LCD.
#define INIT 0
#define P1
#define P2

//Estados do Mquina Interpretadora de Comandos

1
2
47

#define P3
#define V1
#define V2

3
4
5

char MOTOR_PAS;
// Posio do Motor (Passo)
char MOTOR_MPAS;
// Posio do Motor (Meio - Passo)
char PASSOS[3], VELOCIDADE[2]; // Velocidade de cruzeiro e quantidade de passos objetivo.
/*
**===================================================================
** 3.2 Prottipos de funes internas (definidas na Seo 5)
**===================================================================
*/
void Beep(char PITCH[3]);
void Delay_1ms(char TEMPO);
char Recebe(void);
void Transmite(char DADO_TX);
void Comando(void);
char Le_Tecla(void);
void Aciona_Led (char LUZ[2] );
void Inicializa_LCD (char vias, char modo, char cursor);
void Escreve_LCD (const char *str, char tamanho, char linha, char coluna);
void Escreve_Char_LCD (char caractere);
void Um_Passo (void);
void Meio_Passo (void);
void Anda(void);
/*
**===================================================================
** 3.3 Variveis Internas
**===================================================================
*/
char CHAR_RX;
// Caractere recebido pela serial
char NUM_TECLA, COD_TECLA;
// Variveis utilizadas para ler as teclas
char STT_INTERPRETADOR;
// Estado do interpretador de comandos
/*
**===================================================================
** 4.
FUNES GLOBAIS
**
(declaradas como 'extern' em algum arquivo de cabealho)
**===================================================================
*/

48

/* FUNO PRINCIPAL */
void main( void )
/*
**--------------------------------------------------------------------------**
**
** Parmetros:
**
Nenhum
**
** Retorna:
**
Nada
**
**--------------------------------------------------------------------------*/
{
/*
**-----------------------------------------------------------------** Inicia o sistema
**-----------------------------------------------------------------*/
/*
**--------------------------------------------------------------------------** IMPORTANTE: programar os Configuration bits da seguinte forma:
**
Oscillator:
XT
**
Watchdog Timer
Off
** Debug
On
**
Power Up Timer
On
**
Brown Out Detect
Off
**
Low Voltage Program Disabled
**
Flash Program Write Disabled
**
Data EE Read Protect Off
**
Code Protect
Off
**--------------------------------------------------------------------------*/
__set_configuration_word(CP_OFF&CPD_OFF&DEBUG_ON&LVP_OFF&BODEN_OFF&P
WRTE_ON&WDT_OFF&XT_OSC);
/*
** NOTA: dispositivos que tm conversor A/D podem precisar
** configurar os pinos assinalados a 'in' e 'out' como E/ digital
*/
ADCON1 = 0x07;
49

INTCON = 0x00;
/*
**
**
**
*/

//Desabilita todas as interrupes

aconselhvel primeiramente se escrever o valor inicial das portas


de E/S para depois se definir as configuraes de E;S, de modo a se
evitar transientes nos pinos de saida.

PORTA = 0x00; /* Zera os latchs de sada do PORTA */


PORTB = 0x00; /* Zera os latchs de sada do PORTB */
PORTC = 0x00; //0b.0000.0000
TRISC = 0xBD; //0b.1011.1101 //Configura-se os pinos 7 r 6 do PORTC
//como saida e entrada, respectivamente,
//da porta serial
PORTD = 0x00;
TRISD = 0x00; // Configura PORTD como sada de comandos para o driver de potncia
PORTE = 0x00;
TRISE = 0x00;
/* Inicializao da porta serial */
TXSTA = 0x26;
//0b.0010.0110 = Modo assncrono 8 bits
SPBRG = 0x19;
RCSTA = 0x90;
//0b.1001.0000 = Habilita a transmisso serial
/* Inicializa LCD */
Inicializa_LCD (0x38, 0x06, 0x0C);
/* Escreve LCD (mensagem, tamanho, linha, coluna)
Escreve_LCD ("Thiago Camargo", 14,0,0);
Escreve_LCD ("TG Step Motor", 13,1,0);
Delay_1ms(100);

*/

/* Inicializao dos Processos */


STT_INTERPRETADOR = INIT; //Estado inicial do interpretador
MOTOR_PAS = 0;
MOTOR_MPAS = 0;
MOTOR = 0x80;
/*
**---------------------------------** Inicia as rotinas de interrupo
**---------------------------------*/
/*
50

**-----------------------------------** O cdigo da sua aplicao vai aqu.


**-----------------------------------*/
while (1)
{
Comando();
}
} /* FIM DA FUNO PRINCIPAL */
/*
**===================================================================
** 5.
FUNES INTERNAS (prototipadas na Seo 3.2)
**===================================================================
*/

//*****************************************************************************
//
Funo Delay_1ms( tempo )
//
tempo = quantidade de milissegundos
//----------------------------------------------------------------------------void Delay_1ms(char TEMPO)
{
char i,j;
if (TEMPO==0) return;
do {
TEMPO--;
for (i=255; i>0; i--);
for (j=90; j>0; j--);
} while(TEMPO!=0);
}
//*****************************************************************************
/* Funo que recebe caractere pela serial */
/* No tem argumento de entrada, e o argumento de saida caractere ASCII */
/* recebido ou o nmero 0 em caso de nenhum caractere recebido */
//----------------------------------------------------------------------------char Recebe(void)
{
if (RXFLAG == 0)
{
return 0;
}
51

else
{
return RCREG;
}
}
//*****************************************************************************
/* Funo que transmite caractere pela serial */
//----------------------------------------------------------------------------void Transmite(char DADO_TX)
{
while (TXFLAG == 0) {};
TXREG = DADO_TX;
}
//****************************************************************************
/* Funo que interpreta os comandos vindos do teclado */
//---------------------------------------------------------------------------void Comando(void)
{
CHAR_RX = Recebe();
// L caractere na porta serial
// Incio da mquina de estados interpretadora de comandos.
switch (STT_INTERPRETADOR) {
case(INIT):
if (CHAR_RX == 0) break;
if (CHAR_RX == 'N') { Um_Passo(); Delay_1ms(100); MOTOR_MPAS =
2*MOTOR_PAS; break;}
if (CHAR_RX == 'P') { STT_INTERPRETADOR = P1; break;}
break;
case(P1):
if (CHAR_RX == 0) break;
if (isdigit (CHAR_RX)) { PASSOS[0] = CHAR_RX; STT_INTERPRETADOR =
P2; break;}
break;
case(P2):
if (CHAR_RX == 0) break;
if (isdigit (CHAR_RX)) { PASSOS[1] = CHAR_RX; STT_INTERPRETADOR =
P3; break; }
break;
52

case(P3):
if (CHAR_RX == 0) break;
if (isdigit (CHAR_RX))
{
STT_INTERPRETADOR = V1; break; }
break;

PASSOS[2]

CHAR_RX;

case(V1):
if (CHAR_RX == 0) break;
if
(isdigit
(CHAR_RX))
STT_INTERPRETADOR = V2; break; }
break;

VELOCIDADE[0]

CHAR_RX;

VELOCIDADE[1]

CHAR_RX;

case(V2):
if (CHAR_RX == 0) break;
if
(isdigit
(CHAR_RX))
{
STT_INTERPRETADOR = INIT; Anda(); break; }
break;
}
}
/* Funo Escreve_Char_LCD (caractere) */
//-----------------------------------------------------------------------------------------------------------void Escreve_Char_LCD (char caractere)
{
MOTOR = caractere;
ENABLE = 1;
ENABLE = 0;
Delay_1ms(1);
}
/* Funo Escreve_LCD (string, linha, coluna) */
//----------------------------------------------------------------------------------------------------------void Escreve_LCD (const char *str, char tamanho, char linha, char coluna)
{
char i;
coluna=coluna & 0x0F;
if (linha == 0) coluna = coluna + 0x80;
//Linha 0
else coluna = coluna + 0xC0;
//Linha 1
RS = 0;
53

MOTOR = coluna;
ENABLE = 1;
ENABLE = 0;
Delay_1ms(1);
RS = 1;
for (i=0; i < tamanho; i++)
{
Escreve_Char_LCD (str[i]);
}
}
/* Funo Inicializa o LCD */
//----------------------------------------------------------------------------------------------------------void Inicializa_LCD (char vias, char modo, char cursor)
{
RS = 0;
Escreve_Char_LCD (vias);
Delay_1ms (3);
Escreve_Char_LCD (modo);
Escreve_Char_LCD (cursor);
Escreve_Char_LCD (0x01);
Delay_1ms (1);
}

/* Funo Um_Passo () */
//-----------------------------------------------------------------------------------------------------------void Um_Passo ()
{
if (MOTOR_PAS > 4) MOTOR_PAS = 0;
else MOTOR_PAS++;
switch (MOTOR_PAS) {
case (0):
MOTOR = 0x37;
break;
case (1):
MOTOR = 0x57;
break;
case (2):
MOTOR = 0x67;
break;
case (3):
MOTOR = 0x73;

/* Seleciona Posio do Motor */


/* Posiciona em A-A' */
/* Posiciona em B-B' */
/* Posiciona em C-C' */
/* Posiciona em A'-A */
54

break;
case (4):
MOTOR = 0x75;
break;
case (5):
MOTOR = 0x76;
break;
default:
MOTOR = 0x77;
break;

/* Posiciona em B'-B */
/* Posiciona em C'-C */
/* Erro: Mantem em A-A' */

}
}

/* Funo Meio_Passo () */
//-----------------------------------------------------------------------------------------------------------void Meio_Passo ()
{
if (MOTOR_MPAS > 10) MOTOR_MPAS = 0;
else MOTOR_MPAS++;
switch (MOTOR_MPAS) {
case (0):
MOTOR = 0x37;
break;
case (1):
MOTOR = 0x17;
break;
case (2):
MOTOR = 0x57;
break;
case (3):
MOTOR = 0x47;
break;
case (4):
MOTOR = 0x67;
break;
case (5):
MOTOR = 0x63;
break;
case (6):
MOTOR = 0x73;
break;
case (7):

/* Seleciona Posio do Motor */


/* Posiciona em A-A' */
/* Posiciona em AB */
/* Posiciona em B-B' */
/* Posiciona em BC */
/* Posiciona em C-C' */
/* Posiciona em A'C */
/* Posiciona em A'-A */

55

MOTOR = 0x71;
break;
case (8):
MOTOR = 0x75;
break;
case (9):
MOTOR = 0x74;
break;
case (10):
MOTOR = 0x76;
break;
case (11):
MOTOR = 0x36;
break;
default:
MOTOR = 0x77;
break;

/* Posiciona em A'B' */
/* Posiciona em B'-B */
/* Posiciona em B'C' */
/* Posiciona em C'-C */
/* Posiciona em AC' */
/* Erro: Mantem em A-A' */

}
}

/* Funo Anda () */
//-----------------------------------------------------------------------------------------------------------void Anda ()
{
char i;
char Steps;
char Vel;
for (i=0; i < 3; i++)
{
if (PASSOS[i] >= 'A')
PASSOS[i] = PASSOS[i] - 0x37;
else PASSOS[i] = PASSOS[i] - 0x30;
}
if (VELOCIDADE[0] >= 'A')
VELOCIDADE[0] = VELOCIDADE[0] - 0x37;
else VELOCIDADE[0] = VELOCIDADE[0] - 0x30;
if (VELOCIDADE[1] >= 'A')
VELOCIDADE[1] = VELOCIDADE[1] - 0x37;
else VELOCIDADE[1] = VELOCIDADE[1] - 0x30;
Steps = 100*PASSOS[0]+10*PASSOS[1]+PASSOS[2];
56

Vel = 100*VELOCIDADE[0]+10*VELOCIDADE[1];
if (Steps>2*Vel)
{
for (i=0; i < Vel; i++) { Meio_Passo(); Delay_1ms(1000-i); }
for (i=Vel; i < (Steps-Vel); i++) { Meio_Passo(); Delay_1ms(1000-Vel);}
for (i=Vel; i > 0; i--) { Meio_Passo(); Delay_1ms(1000-i);}
}
else
{
for (i=0; i < Steps/2; i++) { Meio_Passo(); Delay_1ms(1000-i); }
for (i=Steps/2; i > 0; i--) { Meio_Passo(); Delay_1ms(1000-i); }
}
if (MOTOR_MPAS%2) MOTOR_PAS = (MOTOR_MPAS-1)/2;
else MOTOR_PAS = MOTOR_MPAS/2;
}
/*
**===================================================================
** FIM DO ARQUIVO
**===================================================================
*/

Anexo.2 Programa para Visual Basic

Variaveis usadas
Dim Vel As Double define o valor da velocidade
Dim Pas As Double define a quantidade de passos
Dim P1 As Integer primeiro algarismo do nmero de passos
Dim P2 As Integer segundo algarismo do nmero de passos
Dim P3 As Integer terceiro algarismo do nmero de passos
Dim V1 As Integer primeiro algarismo do valor de velocidade
Dim V2 As Integer segundo algarismo do valor de velocidade
Dim T1 As Integer variveis para espero de um segundo
Dim T2 As Integer
57

Funo que manda os dados na sada da serial


Interessante salientar que os comandos so separados por uma espera de 1 segundo para garantir
a comunicao.
Private Sub cmdEnviar_Click()
MSComm1.Output = "P"
Espera_1s
MSComm1.Output = CStr(P1)
n1.Caption = P1
Espera_1s
MSComm1.Output = CStr(P2)
n1.Caption = P2
Espera_1s
MSComm1.Output = CStr(P3)
n1.Caption = P3
Espera_1s
MSComm1.Output = CStr(V1)
n1.Caption = V1
Espera_1s
MSComm1.Output = CStr(V2)
n1.Caption = V2
Espera_1s
End Sub
Boto para 1 passo
Private Sub cmdProx_Click()
MSComm1.Output = "N"
End Sub
Funo do boto de sada
Private Sub cmdSair_Click()
resp = MsgBox("Tem certeza que deseja sair?", vbYesNo, "Confirmao")
If resp = vbYes Then
Unload frmMotor
End If
End Sub
58

Funo de espera de 1 segundo, esse um lao que se repete at transcorrer 1segundo, porm
durante a sua execuo os eventos podero acontecer normalmente pela funo DoEvent.
Apesar de esse tipo de lao ser uma perda de processamento, ele garante que os comandos sejam
repassados de maneira segura e com o intervalo de tempo adequado.
Sub Espera_1s()
T1 = Second(Time)
T2 = Second(Time)
DoEvents
Do Until (T2 = T1 + 1)
T2 = Second(Time)
Loop
End Sub
Funo de carregamento e configurao inicial
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.CommPort = 1
MSComm1.PortOpen = True
Load frmSobre
frmSobre.Visible = False
End Sub
Funo de finalizao
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Funo de visualizao de objetos
Private Sub optObjetivos_Click()
If optObjetivos = True Then
frmPassoapasso.Enabled = False
cmdProx.Enabled = False
Label9.Enabled = True
Label10.Enabled = True
frmObjetivos.Enabled = True
59

txtPos.Enabled = True
txtVel.Enabled = True
Label11.Enabled = True
Label14.Enabled = True
Else
frmPassoapasso.Enabled = True
optLigado.Enabled = True
optDesligado.Enabled = True
cmdProx.Enabled = True
Label9.Enabled = False
Label10.Enabled = False
frmObjetivos.Enabled = False
txtPos.Enabled = False
txtVel.Enabled = False
Label11.Enabled = False
Label14.Enabled = False
End If
optPaP.Value = False
End Sub
Private Sub optPaP_Click()
If optPaP = True Then
frmPassoapasso.Enabled = True
cmdProx.Enabled = True
Label9.Enabled = False
Label10.Enabled = False
frmObjetivos.Enabled = False
txtPos.Enabled = False
txtVel.Enabled = False
Label11.Enabled = False
Label14.Enabled = False
Else
frmPassoapasso.Enabled = False
optLigado.Enabled = False
optDesligado.Enabled = False
cmdProx.Enabled = False
60

Label9.Enabled = True
Label10.Enabled = True
frmObjetivos.Enabled = True
txtPos.Enabled = True
txtVel.Enabled = True
Label11.Enabled = True
Label14.Enabled = True
End If
optObjetivos.Value = False
End Sub
Funo do boto de sada
Private Sub Sair_Click()
resp = MsgBox("Tem certeza que deseja sair?", vbYesNo, "Confirmao")
If resp = vbYes Then
Unload frmMotor
End If
End Sub
Funo que mostra dados sobre o programa
Private Sub Sobre_Click()
frmSobre.Enabled = True
frmMotor.Enabled = False
frmSobre.Visible = True
End Sub
Funo que testa os dados entrados pelo usurio e retira apesar trs nmeros para a quantidade
de passo e dois nmeros para a velocidade.
Private Sub txtVel_Change()
Vel = Left(Val(txtVel.Text), 2)
Pos = Left(Val(txtPos.Text), 3)
If (Pos <> 0) Then
If (Vel <> 0) Then
cmdEnviar.Enabled = True
Else
cmdEnviar.Enabled = False
End If
61

End If
End Sub
Private Sub txtPos_Change()
Vel = Left(Val(txtVel.Text), 2)
Pos = Left(Val(txtPos.Text), 3)
P3 = Pos Mod 10
P2 = ((Pos - P3) / 10) Mod 10
P1 = Left((Pos - P3) / 10, 1)
Nesse momento, foi feita uma seqncia de cdigos que separa os algarismos do valor de
nmero de passos a serem dados.
If (Pos <> 0) Then
If (Vel <> 0) Then
cmdEnviar.Enabled = True
Else
cmdEnviar.Enabled = False
End If
End If
End Sub
Funo que separa os comandos a serem repassados
Private Sub txtVel_LostFocus()
V2 = Vel Mod 10
V1 = (Vel - V2) / 10
End Sub

Anexo 3 Programa para simulao computacional

#include <stdio.h>
#include <stdlib.h>
/////////////////////////////////
//Declarao de variveis globais
/////////////////////////////////
float Deltat=0.001;

//Tamanho da interao em tempo

float Rotorj=0.000185, Loadj=0.00025;


float Friction=0.5, Torqueut=0.5;

// Inrcia do rotor e carga

// Torque inicial e atrito viscoso


62

float SlewTime=0, SlewDist=0, TotalTime=0;// Velocidade, tempo e distncia em


velocidade
// de cruzeiro
float Distance, SlewSpeed;
// Valores objetivos
float AccelTime=0, DecelTime=0;
// Tempos de acelerao e desacelerao
float AccelDist=0, DecelDist=0;
// Distncias de acelerao e desacelerao
float AccelVel=0, DecelVel=0;
// Velocidade de acelerao e desacelerao
float AccelNum=0, DesacelNum=0;
float pi=3.141592;
// Valor de pi
float Speed=0;
// Velocidade atual do motor
///////////////////////////
//Funo de aproximao da curva Torque vs. Velocidade
//Parametros de entrada: Velocidade
//Parametros de saida: Torque aproximado
///////////////////////////
float CalcTorque(float vel)
{
float speed1=500, speed2=2000, speed3=4000, speed4=6000;
float torque1=2.8, torque2=2.5, torque3=2.1, torque4=1.4;
if (vel < speed1) return torque1;
else{ if (vel < speed2) return (torque1+(torque2-torque1)/((speed2-speed1)*(vel-speed1)));
else { if (vel < speed3) return (torque2+(torque3-torque2)/((speed3-speed2)*(velspeed2)));
else return (torque3+(torque4-torque3)/((speed4-speed3)*(vel-speed3)));
}
}
return 0;
}
//////////////////////////////////
///////////////////////////////////
//Funo que calcula os parmetros de acelerao a cada iterao
void AccelRate()
{
float PoTorque=CalcTorque(AccelVel);
float AccelTorque = PoTorque*Torqueut-Friction;
float SpeedChange = AccelTorque/(Rotorj+Loadj)*Deltat*100/pi;
AccelDist = AccelDist + (AccelVel + SpeedChange/2)*Deltat;
AccelVel = AccelVel+SpeedChange;
AccelTime = AccelTime+Deltat;
63

}
///////////////////////////////////
///////////////////////////////////
//Funo que calcula os parmetros de desacelerao a cada iterao
void DecelRate()
{
float PoTorque=CalcTorque(DecelVel);
float DecelTorque = PoTorque*Torqueut-Friction;
float SpeedChange = DecelTorque/(Rotorj+Loadj)*Deltat*100/pi;
DecelDist = DecelDist + (DecelVel + SpeedChange/2)*Deltat;
DecelVel = DecelVel+SpeedChange;
DecelTime = DecelTime+Deltat;
}
//////////////////////////////////
////////////////////////
// Loop de Calculo
////////////////////////
//Parmetros : arquivos como referncia
//Funo: chamar as funes de clculo e escrever no arquivo
////////////////////////
void Calculo(FILE *arquivo,FILE *arquivo2)
{
float i;
if ((AccelDist+DecelDist) > Distance)
{
DecelDist=Distance-AccelDist;
TotalTime = AccelTime + DecelTime + SlewTime;
return;
}
else {
if (AccelVel>DecelVel)
{
DecelRate();
fprintf(arquivo2,"%7.3f
%7.3f
Calculo(arquivo,arquivo2);
}

%7.3f\n",DecelTime,DecelVel,DecelDist);

else {
64

if (AccelVel>SlewSpeed)
{
SlewDist = Distance-AccelDist-DecelDist;
SlewTime = SlewDist/SlewSpeed;
TotalTime = AccelTime + DecelTime + SlewTime;
for (i=Deltat;i<(SlewTime);i=i+Deltat)
{
fprintf(arquivo,"%7.3f
%7.3f
%7.3f\n",i+AccelTime,SlewSpeed,(AccelDist
+i*SlewSpeed));
}
return;
}
else
{
AccelRate();
fprintf(arquivo,"%7.3f
%7.3f
%7.3f\n",AccelTime,AccelVel,AccelDist);
Calculo(arquivo,arquivo2);
}
}
}
return ;
}
/////////////////////
// Programa Principal
/////////////////////
int main ()
{
//////////////////////////////////////////
//Entrada de Valores-Objetivo
printf(" Entre com os objetivos pretendidos:\n\n\n");
printf(" Entre com a distancia que o motor percorrera: ");
scanf("%f",&Distance);
printf("\n Entre com velocidade mxima do motor:");
scanf("%f",&SlewSpeed);
//////////////////////////////////////////
///////////////////////////////////////////
// Abertura de arquivos (gravados no disco)
///////////////////////////////////////////
///////////////////////////////////////////
//Arquivo: conter os dados de tempo, distncia e velocidade
65

//
durante a acelerao e em velocidade de "cruzeiro" (objetivo)
FILE *arquivo;
arquivo = fopen("grafico.txt","w");
fprintf(arquivo," Tempo
Velocidade Distncia\n");
fprintf(arquivo,"000.000
000.000
000.000\n");
///////////////////////////////////////////
//Arquivo2: conter os dados de tempo, distncia e velocidade
//
de desacelerao (porm em ordem invertida, que ser trabalhada
//
no programa de plot dos dados (MatLab).
FILE *arquivo2;
arquivo2 = fopen("decel.txt","w");
////////////////////////////////////////////
/////////////////////////////////////
//Chamada para incio dos clculos (iterativamente)
Calculo(arquivo,arquivo2);
/////////////////////////////////////
////////////////////////////
// Fechamento dos arquivos
fclose(arquivo);
fclose(arquivo2);
////////////////////////////
system("PAUSE");
return 0;
}

66

Você também pode gostar