implementação de kit didático para ensino de motores de passo

80
UNIVERSIDADE ESTADUAL DE CAMPINAS FACULDADE DE ENGENHARIA MECÂNICA DEPARTAMENTE DE MECÂNICA COMPUTACIONAL – DMC Desenvolvimento de Kit Didático para Ensino de Teoria de Motores de Passo Autor: Thiago Augusto Bento da Silva Camargo Orientador: Luiz Otávio Saraiva Ferreira Curso: Engenharia de Controle e Automação Trabalho de graduação apresentado à comissão de Graduação da Faculdade de Engenharia Mecânica, como requisito para conclusão do curso de graduação em Engenharia de Controle e Automação. Campinas, 2007 S.P. – Brasil i

Upload: hoangliem

Post on 09-Jan-2017

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Implementação de kit didático para ensino de motores de passo

UNIVERSIDADE ESTADUAL DE CAMPINASFACULDADE DE ENGENHARIA MECÂNICA

DEPARTAMENTE DE MECÂNICA COMPUTACIONAL – DMC

Desenvolvimento de Kit Didático para Ensino de Teoria de Motores de Passo

Autor: Thiago Augusto Bento da Silva CamargoOrientador: Luiz Otávio Saraiva Ferreira

Curso: Engenharia de Controle e Automação

Trabalho de graduação apresentado à comissão de Graduação da Faculdade de Engenharia Mecânica, como requisito para conclusão do curso de graduação em Engenharia de Controle e Automação.

Campinas, 2007S.P. – Brasil

i

Page 2: Implementação de kit didático para ensino de motores de passo

FICHA CATALOGRÁFICA ELABORADA PELA

BIBLIOTECA DA ÁREA DE ENGENHARIA - BAE - UNICAMP

F884p

Freitas, José da Silva

Título / José da Silva Freitas –Campinas, SP: [s.n.], 2004.

Orientador:

Dissertação/Tese - Universidade Estadual de Campinas, Faculdade de Engenharia Mecânica.

1. 2. 3. 4. I. , . II. Universidade Estadual de Campinas. Faculdade de Engenharia Mecânica. III. Título.

Titulo em Inglês:

Palavras-chave em Inglês:

Área de concentração:

Titulação:

Banca examinadora:

Data da defesa:

ii

Page 3: Implementação de kit didático para ensino de motores de passo

UNIVERSIDADE ESTADUAL DE CAMPINASFACULDADE DE ENGENHARIA MECÂNICA

DEPARTAMENTO DE MECÂNICA COMPUTACIONAL

TRABALHO DE GRADUAÇÃO

Desenvolvimento de Kit Didático para Ensino de Teoria de Motor de Passo

Autor: Thiago Augusto Bento da Silva CamargoOrientador: Luiz Otávio Saraiva Ferreira

A Banca Examinadora composta pelos membros abaixo aprovou esta Dissertação:

_______________________________________________________Prof. Dr. XXXXXXXXXXXUNIVERSIDADE ESTADUAL DE CAMPINAS

_______________________________________________________Prof. Dr. XXXXXXXXXXXUNIVERSIDADE ESTADUAL DE CAMPINAS

_______________________________________________________Prof. Dr. XXXXXXXXXXXUNIVERSIDADE ESTADUAL DE CAMPINAS

Campinas, 15 de dezembro de 2007

iii

Page 4: Implementação de kit didático para ensino de motores de passo

iv

Page 5: Implementação de kit didático para ensino de motores de passo

Dedicatória:

Dedico este trabalho aos meus queridos filho e esposa. Além de todos aqueles alunos que

possam crescer e melhorar o seu aprendizado.

v

Page 6: Implementação de kit didático para ensino de motores de passo

Agradecimentos

Agradeço a sdfsdgddfasdfadfasdfasdfa

Sdfasdfasdfasdfasdfa

Sdfasdfasdfasdfasdf

sdfasdfasdfasdfasdfdssdfasdfasdf

vi

Page 7: Implementação de kit didático para ensino de motores de passo

Olhando para frente ihijhijhihlkjhlkj....

vii

Page 8: Implementação de kit didático para ensino de motores de passo

Resumo

CAMARGO, Thiago Augusto Bento da Silva, Desenvolvimento de Kit Didático para Ensino de

Teoria de Motor de Passo, Campinas, Faculdade de Engenharia Mecânica, Universidade

Estadual de Campinas, 2007. XXXp. Trabalho de Graduação.

Esse trabalho tem o objetivo de tornar mais simples e fácil o aprendizado e ensino da teoria

de motores de passo. Para isso, foi desenvolvido um kit composto por um protótipo de motor de

passo, por um driver de acionamento e softwares de interface para comunicação 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 além de também ter a possibilidade de desenvolver

um modelamento matemático para tanto.

Palavras Chave

- Motor de Passo, Kit Didático, ????

viii

Page 9: Implementação de kit didático para ensino de motores de passo

Abstract

CAMARGO, Thiago Augusto Bento da Silva, Didactic kit development for Steppers Motors

Lectures , Campinas, Faculdade de Engenharia Mecânica, Universidade Estadual de Campinas,

2007. XXXp. Trabalho de Graduação.

kjhlkjhlkjhlkj

Key Words

Xxxxxxxxxxxxxxxxxxxxxx

ix

Page 10: Implementação de kit didático para ensino de motores de passo

Índice

Dedicatória: ...................................................................................................................................... v

Agradecimentos ............................................................................................................................... vi

Resumo .......................................................................................................................................... viii

Abstract ............................................................................................................................................ ix

Índice ................................................................................................................................................ x

Lista de Figuras ............................................................................................................................... xi

1. Introdução ..................................................................................................................................... 1

2. Revisão Bibliográfica ................................................................................................................... 4

2.1 Introdução ................................................................................................................ 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 Matemático ..................................................................................... 16

3. Material e Métodos ..................................................................................................................... 21

3.1 Kit Didático ........................................................................................................... 21

3.2 Simulação computacional ...................................................................................... 40

Anexos ............................................................................................................................................ 46

Anexo 1. Programa para PIC na linguagem “C” ......................................................... 46

x

Page 11: Implementação de kit didático para ensino de motores de passo

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

Anexo 3 Programa para simulação computacional ..................................................... 62

Lista de Figuras

- Motores de Passo.........................................................................................................2

- Rotor............................................................................................................................5

- Estator..........................................................................................................................5

- Bobinas em Pares (2 ou 3)...........................................................................................6

- Fluxo Magnético por Corrente....................................................................................6

- Configuração Unipolar................................................................................................7

- Configuração 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 Binível1...............................................................................................10

- Acionamento Binível 2..............................................................................................10

- Acionamento com Choppers.....................................................................................10

- Motor de Relutância Variável...................................................................................11

- Passo de um VR........................................................................................................12

- Motor PM..................................................................................................................13

- Uma Revolução do Motor PM..................................................................................13

xi

Page 12: Implementação de kit didático para ensino de motores de passo

- Motor Híbrido............................................................................................................14

- Curva Torque vs. Velocidade....................................................................................15

- Curva Torque vs. Velocidade (com carga)................................................................16

– Modelo Elétrico de uma Fase...................................................................................18

- Esquema de Fluxo de Informações...........................................................................21

- Esquema do Protótipo...............................................................................................22

- Protótipo na Posição A..............................................................................................23

- Protótipo na Posição B..............................................................................................23

- Protótipo na Posição C..............................................................................................23

- Componentes.............................................................................................................26

- Ponte-H......................................................................................................................26

- Sentido A...................................................................................................................27

- Sentido B...................................................................................................................28

- Byte de Comunicação................................................................................................30

- Seqüenciamento (Byte).............................................................................................31

- Função Passo Completo............................................................................................33

- Função Meio Passo....................................................................................................36

- Função Máquina de Estados......................................................................................38

- Programa de Interface VB.........................................................................................39

- Detalhe de Interface...................................................................................................40

- SDL - Simulação Computacional..............................................................................43

- Iterações da Simulação (Perfil de Velocidades)........................................................43

- Dados da Curva.........................................................................................................44

- Curva Exemplo..........................................................................................................44

- Simulação Exemplo...................................................................................................45

xii

Page 13: Implementação de kit didático para ensino de motores de passo

xiii

Page 14: Implementação de kit didático para ensino de motores de passo
Page 15: Implementação de kit didático para ensino de motores de passo

1. Introdução

Quando Hans Christian Oersted, em 1820, observou uma interessante relação entre a

eletricidade e magnetismo, as portas para o desenvolvimento de motores elétricos foram abertas.

Desde então, inúmeros tipos de motores foram patenteados e desenvolvidos; cada um com seu

modo de acionamento, peculiaridade, vantagens e desvantagens.

Os primeiros motores elétricos eram acionados por corrente contínua e, geralmente, tinham

um imã permanente em sua constituição. Posteriormente, os motores começaram a utilizar

eletroímãs e possibilitar diversas formas de acionamento: por corrente contínua ou alternada.

Os motores elétricos convencionais são, hoje, largamente utilizados em todas as áreas,

desde em aplicações industriais até em eletrodomésticos, como é o exemplo de trens elétricos e

liquidificadores domésticos.

Contudo, com o avanço da tecnologia, necessidades especiais, como: precisão de

posicionamento e controle de velocidade, começaram a surgir, foi quando o motor de passo

surgiu para auxiliar nesses casos. Apesar dos motores elétricos de corrente alternada ou contínua

também possibilitarem certo controle de posição, a eficiência, nesse aspecto, do motor de passo é

superior.

O motor de passo nada mais é do que um motor elétrico especial (vide exemplos na figura

1). Isso quer dizer que, devido a sua arquitetura, ele possibilita inúmeros 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 características que conferem aos motores de passo esses controles serão mais

detalhadamente elucidadas.

1

Page 16: Implementação de kit didático para ensino de motores de passo

Figura 1 - Motores de Passo

Os motores de passo têm o seu princípio básico de funcionamento baseado no alinhamento

eletromagnético da parte girante (rotor) com a parte fixa (estator). E é esse alinhamento que

garante a principal característica diferencial do motor de passo: a alta precisão no

posicionamento.

Com essas características, o motor de passo começou a ser largamente explorado em

aplicações industriais que exigiam bom posicionamento como mesas xy, bobinadeiras e etc...

Além de ser muito usado na industria, esse atuador também é muito usado em eletrodomésticos

como impressoras, scanners, dispositivos computacionais entre outros. Pode-se dizer também que

os motores de passo conquistaram tanto espaço devido ao seu baixo custo em detrimento dessa

precisão 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

indispensável para o profissional ou estudioso das áreas tecnológicas, um conhecimento mais

aprofundado das diretrizes de um motor de passo.

Por isso, é de grande importância que aquelas pessoas que pretendam trabalhar ou se inserir

na área tecnológica ou industrial tenha um conhecimento sólido dos princípios de funcionamento

2

Page 17: Implementação de kit didático para ensino de motores de passo

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

emprego, considerando os limites e vantagens desse tipo de motor elétrico.

O ensino desse tipo de motor, como mostrado acima, envolve a aplicação de conceitos

como o eletromagnetismo que não são visuais ou intuitivos. Ou seja, são conceitos cujos efeitos é

que podem ser visualizados e materializados.

No intuito de trazer mais estímulos para o aluno durante o aprendizado e apresentação da

teoria, foi desenvolvido um kit didático bastante visual. Esse kit é composto, principalmente, por

um protótipo de motor com seu interior transparente (vide figura 2) para que o aluno possa, em

uma visão macro, compreender a estrutura de um motor de passo.

O kit foi desenvolvido para que, além da estrutura, também pudessem ser de fácil

entendimento as formas de acionamento desse tipo de motor. O motor é constituído de 3 pares de

bobinas independentes que permitem acionamento também independente. E, além de usar um

driver aberto, toda sua lógica foi implementada em micro controlador passível de alteração.

Com todas essas possibilidades, o kit proporcionará ao aluno uma visão geral, porém, de

fácil aprendizado, dos princípios básicos do funcionamento do motor de passo.

3

Page 18: Implementação de kit didático para ensino de motores de passo

2. Revisão Bibliográfica

2.1 Introdução

Os motores de passo, antes de tudo, são motores elétricos que também utilizam o princípio

do eletromagnetismo como força motriz. Este é um princípio bastante simples, mas que requer

certo nível de abstração.

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 elétrica é gerada também uma variação de fluxo

de campo magnético. Isso quer dizer que quando há a movimentação ordenada de elétrons

(corrente elétrica) é formado um campo magnético. Como pode ser visto pela lei de Ampère-

Maxwell com a equação abaixo (Eq.: 1.1):

Onde ienv é a corrente que induzirá o campo e B é o campo magnético.

A partir desse conceito, o motor de passo pôde ser desenvolvido. Diferentemente dos

motores elétricos convencionais, os motores de passo oferecem uma precisão de posicionamento

muito maior, além de possibilitar um controle de sua velocidade, suas acelerações e

desacelerações. Isso é possível, pois o motor trabalha constantemente se “alinhando” com um

campo eletromagnético apropriadamente criado, entre uma parte girante e uma fixa quando

4

Page 19: Implementação de kit didático para ensino de motores de passo

energizado; o que difere, basicamente, de um motor elétrico convencional, que, quando

energizado, gira.

Os motores de passo são compostos basicamente por um estator e um rotor:

Rotor: é a denominação para o conjunto eixo-imã que roda solidariamente à parte móvel

do motor.

Estator: é definido como a trave fixa onde as bobinas são 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 serão logo elucidados, mas de um modo

geral, podem ter seu funcionamento explicado pelo alinhamento entre um imã-permanente ou

eletroímã e um campo gerado por pares de bobinas transpassadas por corrente elétrica.

As bobinas do estator estão posicionadas sempre em pares, podendo ser comumente

encontradas em 2 ou 3 pares, como no esquema abaixo:

5

Page 20: Implementação de kit didático para ensino de motores de passo

Figura 4 - Bobinas em Pares (2 ou 3)

Para que o campo eletromagnético seja criando, as bobinas são acionadas separadamente ou

em pares. Sendo um par, por exemplo, acionado, uma corrente elétrica passa pelo fio que está

enrolado ao redor do material ferro-magnético (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 variação

do campo magnétic.

Figura 5 - Fluxo Magnético por Corrente

Com isso, basta que o campo eletromagnético formado fique variando de posição 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 através de um driver de potência que

pode ter inúmeras configurações e será abordado posteriormente. De qualquer forma o

acionamento das bobinas pode ser de um ou meio passo e unipolar ou bipolar.

6

Page 21: Implementação de kit didático para ensino de motores de passo

2.2 Modos de Acionamento

Basicamente, como dito acima, os motores podem ter seu acionamento com configurações

entre unipolares ou bipolares e de passo inteiro ou meio passo. A configuração unipolar significa

que para cada bobina, só haverá um sentido de corrente e portanto de campo eletromagnético. Já

para a bipolar, a corrente e o campo poderão assumir as duas direções. Outro tipo de acionamento

é o com passo inteiro ou meio passo. Para o acionamento de passo inteiro as bobinas deverão 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 exigências da aplicação e do tipo de motor de passo com que se esteja trabalhando.

As possibilidades de acionamento foram exemplificadas conforme as figuras abaixo:

Figura 6 - Configuração Unipolar Figura 7 - Configuração Bipolar

Figura 8 - Acionamento Unipolar com Passo Inteiro

7

Page 22: Implementação de kit didático para ensino de motores de passo

Figura 9 - Acionamento Bipolar com Passo Inteiro

Figura 10 - Acionamento Unipolar de Meio Passo

8

Page 23: Implementação de kit didático para ensino de motores de passo

Figura 11 - Acionamento Bipolar de Meio Passo

Comercialmente, já existem algumas soluções de acionamento de motores de passo mais

comuns, como as mostradas abaixo:

Figura 12 - Acionamento Bipolar

9

Page 24: Implementação de kit didático para ensino de motores de passo

Figura 13 - Acionamento Binível1

Figura 14 - Acionamento Binível 2

Figura 15 - Acionamento com Choppers

10

Page 25: Implementação de kit didático para ensino de motores de passo

2.3 Tipos de Motores

Os motores de passo podem ser divididos em 3 grupos: o motor de relutância variável, o de

imã permanente e um motor híbrido.

2.3.1 Motor de Relutância Variável (VR)

No motor de relutância variável, sempre que há a energização das bobinas, o rotor tenta se

alinhar e se manter em uma posição de maior estabilidade. Essa posição de maior estabilidade é

sempre aquela aonde há a menor relutância entre estator e rotor. Isso quer dizer que quando as

bobinas conduzem corrente, um campo eletromagnético é 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 peça com um formato de uma engrenagem, que, dependendo do

modelo de motor, pode ter mais ou menos dentes que pares de bobinas, é constituído de material

ferro magnético, mas não é imã permanente. Abaixo, a ilustração mostra claramente esses

componentes:

Figura 16 - Motor de Relutância Variável

11

Page 26: Implementação de kit didático para ensino de motores de passo

Para a movimentação desse motor, um par de bobinas é acionado após o outro. Sempre que

o campo magnético muda, o rotor tenta se alinhar com esse campo. Assim, o rotor estará sempre

buscando a posição de menor relutância (que é a resistência à passagem do campo magnético),

que é quando há a menor distância entre os dentes do rotor e o par de bobinas acionado.

O torque estático de um motor de passo pode ser medido quando o mesmo não está em

funcionamento, ou não 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

relutância, como mostra a figura:

Figura 17 - Passo de um VR

12

Page 27: Implementação de kit didático para ensino de motores de passo

Motor de Imã Permanente (PM)

A grande diferença entre os motores PM e os motores VR é que o seu rotor é magnetizado e

não tem “dentes”. Ou seja, o seu torque estático não é 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 seqüencialmente, a seguir a

uma seqüência de movimentação desse motor é mostrada:

Figura 19 - Uma Revolução do Motor PM

13

Page 28: Implementação de kit didático para ensino de motores de passo

Motor Híbrido

Como o próprio nome sugere esse é um motor que combina a estrutura dos dois motores,

ou seja, possui rotor dentado e magnetizado. Essa configuração confere a esse tipo de motor uma

grande versatilidade de aplicações além de ter um custo barato em relação aos motores elétricos

tradicionais.

Figura 20 - Motor Híbrido

Para facilitar uma rápida comparação desses motores, seque a tabela com suas principais

características:

Motor de Relutância Variável (VR) - Rotor de aço doce multipolar- Enrolamentos no estator- Inércia de rotor baixa- Inércia inicial (desenergizado) nula

Motor de Imã permanente (PM) - Rotor magnetizado radialmente- Apresenta torque residual (de

retenção)- Materiais: Ferrite e Alnico- Enrolamentos no estator

Motor Híbrido - Rotor e estator multidentados- Alta precisão de posicionamento- Mistura os dois motores anteriores.

14

Page 29: Implementação de kit didático para ensino de motores de passo

2.4 Curva Torque Vs. Velocidade de um Motore de Passo

Além de conhecer o seu funcionamento, é importante que o aluno aprenda a obter e

entender as informações intrínsecas 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 características que são inerentes a sua arquitetura e

acionamento. Pode-se dizer que a identidade de um motor de passo possa ser traçada 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 máximo de torque “disponível” àquela velocidade. Além de ajudar

a estipular a sua rampa de aceleração, velocidade de cruzeiro e torque. Após a carga ser aplicada,

ela provavelmente agregará uma inércia ao sistema, que deverá ser calculada ou estipulada. Com

esses novos dados, pode-se traçar outra curva que agora trará o torque relativo àquela velocidade

com carga. Abaixo segue uma figura com o gráfico de curva torque vs. velocidade para duas

cargas diferentes sendo comparadas com a curva de um motor em vazio.

15

Page 30: Implementação de kit didático para ensino de motores de passo

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

2.5 Modelamento Matemático

Para um estudo mais detalhado do motor de passo é interessante que seja feito um

modelamento matemático de quanto e como seriam suas correntes, torques, deslocamentos,

velocidades e acelerações.

É interessante também que sejam feitos vários tipos de modelamento, alguns mais

abrangentes e outros mais aprofundados. Todos esses modelos deverão receber dados obtidos

experimentalmente como inputs. Basicamente podem ser feitos 3 tipos de modelamento.

Primeiramente, um modelo mais genérico pode ajudar no cálculo da melhor velocidade a

ser utilizada para um carregamento e um número 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 inércia da carga, durante o movimento, é variável. E um terceiro, onde podemos calcular

as correntes e tensões que passam pelo motor, sendo que nesse tipo de modelamento, dependendo

do circuito de acionamento (ou de controle), temos uma aproximação boa ou não da realidade.

No primeiro modelo, basta calcular alguns parâmetros como: a velocidade, distâncias e

tempos de aceleração, desaceleração e andamento. Para isso é interessante levar em conta

algumas equações:

16

Page 31: Implementação de kit didático para ensino de motores de passo

Lembrando torque de aceleração (Tac) é sempre igual ao torque da curva levantada (Tcurva)

vezes a porcentagem de utilização (Tu) de torque menos a frição de Coulomb (Tc).

Tac = Tcurva * Tu - Tc

A variação de velocidade = torque de aceleração/inércia do sistema*intervalo de tempo:

dw = Tac * dt / (Jr+Jl)

Distância percorrida = velocidade média do intervalo * intervalo de tempo:

dS = (w + dw/2)* dt

Torque de desaceleração = torque da curva negativo * porcentagem de utilização – frição

de Coulomb.

Tdc = Tcurva * Tu - Tc

Assim, o torque gerado (Tg) pode ser determinado pela multiplicação da inércia da carga,

somado com o atrito viscoso e com a frição Coulomb e torque gravitacional (se houve):

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

No segundo moldelo, a inércia da carga varia de acordo com a posição do motor, e ela será

levada em conta com:

Tg = Tm * - sen (θe)

17

Page 32: Implementação de kit didático para ensino de motores de passo

Sendo que Tm não é igual ao torque de “pullout” (Tpo), mas pode ser derivado dele.

Tpo = -Tm/ θse * int (sen θe dθe, - 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 Elétrico de uma Fase

Para facilitar, aqui, serão apresentadas as equações 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 número de ciclos elétricos por revolução mecânica, e “B” a força do

imã permanente.

Ta = NB * ia * - sen Nθ

Tb = NB * ib * cos Nθ

Td = D * -sen (4* Nθ)

18

Page 33: Implementação de kit didático para ensino de motores de passo

Tg = Ta + Tb + Td

Para o motor hibrido as equações das fases são:

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 equações:

Ta = Kta * ia

Onde:

Kta = N * ( B – C/2 * |ia|) * - sen Nθ

Tb = Ktb * ib

Onde:

19

Page 34: Implementação de kit didático para ensino de motores de passo

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 mecânico:

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

20

Page 35: Implementação de kit didático para ensino de motores de passo

3. Material e Métodos

3.1 Kit Didático

Para o desenvolvimento de atividades didáticas voltadas ao estudo de motores de passo,

muitos conceitos acima expostos poderão ser revisados através 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 geração dos comandos e seqüência de

acionamento, arquitetura interna e drivers de acionamento.

Focado nesses aspectos, o kit didático segue o seguinte diagrama com o fluxo de

informações (comandos):

Figura 24 - Esquema de Fluxo de Informações

21

Page 36: Implementação de kit didático para ensino de motores de passo

O Protótipo

O protótipo de motor de passo é do tipo de um motor de imã permanente. Ou seja, o campo

eletromagnético formado pelas bobinas do estator força a movimentação do rotor. Nesse sentido,

o protótipo foi construído com o seu estator em 3pares de bobinas alinhadas formando 60º entre

si. Para mostrar como um rotor se comportaria perante a variação da posição do campo, foi

colocada uma bússola, que mostrará a direção do campo. A figura abaixo ilustra o protótipo:

Figura 25 - Esquema do Protótipo

Nesse protótipo, as bobinas trabalharão em pares, podendo ser acionadas na configuração

bipolar. Sendo assim, o motor poderá assumir se acionado com meio passo, 12 posições

diferentes, sendo algumas posições aqui exemplificadas quando apenas um par estiver acionado

de cada vez:

22

Page 37: Implementação de kit didático para ensino de motores de passo

Figura 26 - Protótipo na Posição A

Figura 27 - Protótipo na Posição B

Figura 28 - Protótipo na Posição C

23

Page 38: Implementação de kit didático para ensino de motores de passo

Dados técnicos do protótipo:

O protótipo 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 também, dispostos todos voltados

para o centro e perpendiculares à tangente do círculo sendo todos eqüidistantes 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 diâmetro de 0,06mm

- 200 voltas

- XXmm de comprimento de barra de metal

- 8 ohms de resistência.

- XX H de indutância

Sendo a indutância uma característica intrínseca do conjunto todo, a permeabilidade

magnética do material pode ser estimada. Esse dado pode ser interessante para algumas

comparações futuras. Para calculá-la usou-se a fórmula: .

Tendo a indutância como valor medido experimentalmente.

Que resulta em

O Driver de Potência

Para o kit didático, um driver de potência se torna necessário, pois, os sinais de controle

enviados pelo micro controlador não teriam potência ou corrente suficiente para alimentar as

24

Page 39: Implementação de kit didático para ensino de motores de passo

bobinas e conseguir um campo magnético eficiente. E esse driver de potência é que fará a

interface entre o micro controlador e o protótipo. Ou seja, ele é o estágio 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 ponte-

H que, nada mais é, do que um circuito que permite a ligação nos dois sentidos através 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 fêmea)

Nos esquemas elétricos a seguir os componentes usados serão representados como na

figura:

25

Page 40: Implementação de kit didático para ensino de motores de passo

Figura 29 - Componentes

Para montar o circuito foi usado o seguinte esquema de ligação para a ponte-H:

Figura 30 - Ponte-H

26

Page 41: Implementação de kit didático para ensino de motores de passo

A seguir serão dadas explicações detalhadas dos motivos e de cada componente, bem como

os seus dimensionamentos.

O funcionamento da ponte-H é bastante simples. Os transistores deverão ser acionados

sempre em pares para que haja a passagem de corrente e geração do campo. Para exemplificar o

acionamento da ponte-H, algumas ilustrações foram montadas.

Nos dois casos a seguir serão 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 deverão ser acionados em pares e em “x” como mostrado a

seguir:

Figura 31 - Sentido A

E no sentido oposto:

27

Page 42: Implementação de kit didático para ensino de motores de passo

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 nível baixo (0) e os NPN em nível

alto(1). Também é interessante salientar que as bases dos transistores foram curto-circuitadas

convenientemente, e essa junção será posteriormente explicada.

Para esse circuito, os resistores de 1k são apenas limitadores de corrente de acionamento.

Pois como esses componentes têm ganhos muito grandes, uma corrente de base da ordem de

5mA será o suficiente. Além desses componentes, há a presença 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 à variação de tensão no indutor

poderão representar campos magnéticos contrários ao desejado.

Nesse circuito, algumas precauções deverão ser tomadas. Os transistores nunca poderão 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

Page 43: Implementação de kit didático para ensino de motores de passo

transistor demore mais ou menos para mudar o seu estado de condução, o que caracterizaria um

curto instantâneo e de curta duração. 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

práticos para se definir uma corrente que fosse suficiente para movimentar a bússola mas que

também não fosse demasiadamente intensa para danificar o sistema. Sendo assim, chegou-se a

conclusão 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á três vezes,

sendo uma ponte para cada bobina. Combinado com 3 circuitos, o driver de potência ficou assim:

Para que possa haver uma seqüência de acionamento foi montado uma espécie de protocolo

de comunicação entre o driver e os sinais de comando. Essa comunicação chegará sempre através

de um cabo do tipo “flatcable” de quatorze vias das quais só serão usadas seis (dois bits para cada

par de bobinas). Os 6 bits estarão 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 serão aqui representados na forma de bits (zeros e ums). A figura a

baixo ilustra a relação entre os bits e as chaves. Sendo elas representadas da forma ABC para as

bobinas e um e dois para as respectivas chaves.

29

Page 44: Implementação de kit didático para ensino de motores de passo

Figura 33 - Byte de Comunicação

A seguir, será usada uma forma de representar as posições possíveis do campo magnético.

Sendo a AA’ a representação para a bobina A acionada em um sentido e A’A em no outro

sentido. Também poderão ser acionadas duas bobinas ao mesmo tempo e elas serão representadas

com aspas simples para mostrar o sentido da corrente em cada par, por exemplo, AB serão as

bobinas A e B sendo acionadas no mesmo sentido, já o caso A’B é a bobina A sendo acionada em

sentido oposto ao anterior.

Portanto o padrão de acionamento ficaria assim:

30

Page 45: Implementação de kit didático para ensino de motores de passo

Figura 34 - Seqüenciamento (Byte)

Programa de Controle (PIC)

A seguir será apresentado o programa que fará o controle seqüencial do motor. A idéia

básica do programa será interpretar os comandos enviados via seria do computador e transformá-

los em saída através do byte de comando para o driver de potência. Assim, basicamente haverá

dois modos de operação 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 máxima (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 laboratório da faculdade de engenharia mecânica já o disponibiliza

com alguns recursos estruturais como os pinos de expansão, adequados para os conectores de

31

Page 46: Implementação de kit didático para ensino de motores de passo

flatcable. Nesse projeto, serão usadas 6 saídas digitais no port D do controlador. Sendo as saídas

D00 a D07 as escolhidas para o experimento.

As funções do programa serão 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 função diferente.

Para o caso do passo inteiro o programa fica assim:

32

Page 47: Implementação de kit didático para ensino de motores de passo

Figura 35 - Função Passo Completo

Nesse caso, foram usadas as variáveis “Motor_Pas” e Motor, sendo a primeira que diz em

que posição o motor se encontra e a segunda imprime o byte de comando nos pinos de saída do

PIC. Como nesse modo, o motor anda com passo completo, a variável Motor_Pas só assume seis

valores diferentes (0-5). Já a variável Motor, pode assumir, dentro dessa função também apenas

33

Page 48: Implementação de kit didático para ensino de motores de passo

seis valores. Obs.: os valores de “Motor” são expressos em hexadecimais para uma simples

adequação à linguagem de programação usada.

Para a função de meio passo será usada a mesma variável de saída de comandos (Motor),

porém será usada uma variável Motor_MPass, que também guardará a posição em que o motor se

encontra. Também é interessante ressaltar que ao termino da função, deverá ser feita uma

conversão entre as variáveis Motor_MPass e Motor_Pass, para que não haja perda de

posicionamento. Sendo assim, nas duas funções, uma etapa de correção de valores é feita.

A figura a seguir mostra o SDL para a função de meio passo.

A partir das duas funções de deslocamento, pode-se construir uma máquina interpretadora

de comandos que além de processar os comandos recebidos, executa uma rotina para realizar os

pedidos.

Para que os comandos fossem recebidos e tivessem o mínimo tratamento para erros o

programa principal funciona como uma máquina de estado. Ou seja, a cada comando, ele recebe

o dado, verifica se é realmente uma comunicação 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 instruções.

No segundo modo, o primeiro comando deverá ser o “P” e logo após cinco algarismos

sendo os três primeiros representando o número de passos a serem dados e os dois últimos a

velocidade máxima a ser desenvolvida.

34

Page 49: Implementação de kit didático para ensino de motores de passo

35

Page 50: Implementação de kit didático para ensino de motores de passo

Figura 36 - Função Meio Passo

36

Page 51: Implementação de kit didático para ensino de motores de passo

37

Page 52: Implementação de kit didático para ensino de motores de passo

Figura 37 - Função Máquina de Estados

Vale salientar que a máquina interpretadora de comandos é feita recebendo cada comando

separadamente e muda de estado a cada comando. Isso foi feito assim, devido a diferenças de

velocidades entre o processamento de um PIC e um PC, sendo que se fossem passados os

comandos diretamente pelo PC o buffer de saída serial estaria lotado e não receberia os

protocolos de handshake que o PIC não oferece nesse tipo de comunicação.

É interessante também explicar o funcionamento da configuração da velocidade máxima

entrada pelo usuário. Para que fosse feito o acionamento correto do motor, há uma rampa de

aceleração, um período em que o motor desenvolve a sua velocidade máximo ou de cruzeiro e

posteriormente desacelera. Para tanto, os pulsos de troca de configuração possuem um delay

variável. E é através desse delay variável que a velocidade é controlada. Isso quer dizer que a

velocidade vai de 0 a 99% do delay máximo estipulado (1s).

Essa função que trata da velocidade, acelerações e contagem do número de passos é

chamada de “Anda()”.

Programa de interface(Visul Basic)

Para criar uma interface agradável e de fácil entendimento, foi criado no Visual Basic uma

interface amigável que envia os comandos para o micro controlador e mostra a posição do motor.

É nesse programa que o aluno pode selecionar o modo a ser trabalhado. Se será acionado

passo a passo ou será através de objetivos.

A interface básica do programa está ilustrada abaixo. Nela, pode-se observar que há um

botão de opção 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 padrão de comandos que o PIC, uma vez que entre eles será

estabelecida a comunicação de comandos. Com isso, essa interface se encarregará de enviar, via

38

Page 53: Implementação de kit didático para ensino de motores de passo

seria, os comandos “N” e “PpppVV”. Sendo “ppp” o número de passo e “VV” a velocidade

máxima a ser desempenhada.

Figura 38 - Programa de Interface VB

39

Page 54: Implementação de kit didático para ensino de motores de passo

Figura 39 - Detalhe de Interface

O programa com todos os detalhes e explicações de cada evento está colocado no anexo 2.

É importante ressaltar que o programa em Visual Basic 6.0 foi desenvolvido para fazer a

comunicação via serial até o micro controlador. Porém, não pode-se ter acesso direto aos pinos de

saída 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 Simulação computacional

Introdução

Além do kit didático, foi desenvolvido um programa simples para simulação de um motor

de passo.

Durante o estudo de motores de passo, é preciso que o seu funcionamento seja bem

entendido, para que também possa se dimensionado de forma correta, sem que haja super ou sub-

dimensionamento.

40

Page 55: Implementação de kit didático para ensino de motores de passo

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

modelos, é necessário que se possa fazer algumas simulações que sejam próximas o suficiente da

realidade.

Atualmente, a prototipagem rápida tem ganhado bastante importância no desenvolvimento

de novos produtos e/ou aplicações. E, nesse tipo de trabalho, as simulações computacionais têm

sido muito empregadas para poupar tempo e recursos desses projetos.

Por isso, o estudo mostrado a diante tem faz uma simulação de aceleração e velocidade e

cruzeiro.

Para um modelo inicial e mais simples de simulação de motores de passo, só serão

considerados alguns fatores dinâmicos como as inércias do motor e da carga. A parte elétrica de

acionamento e controle, por enquanto, não serão levadas em conta.

Nesse primeiro modelo de simulação adotado, foram feiras algumas aproximações e

considerações listadas a baixo:

Curva Pullout (Torque vs. Velocidade) / Obtido experimentalmente

Torque do rotor e carga fixos / Aproximações *

Torque inicial e perdas viscosas / Aproximações

Esses torques foram aproximados para não variarem devido a sua posição em relação a

gravidade.

Para a simulação computacional desse modelo, serão usadas como dados a serem entrados

de acordo com os objetivos pretendidos:

- Distância total percorrida, ou distância final.

41

Page 56: Implementação de kit didático para ensino de motores de passo

- Velocidade máxima de acionamento do motor.

Obs.: Além das entradas, aqueles dados adotados também foram inseridos no programa.

Tendo disponíveis todos os dados, o programa fará, através de cálculo numérico, a

simulação do comportamento do motor. Esses cálculos são realizados através de iterações de

intervalos de tempo muito pequenas, assim, pode-se aproximar as curvas de aceleração,

velocidade e distância de modo a se obter o comportamento do motor durante toda a simulação.

Assim, a cada iteração, todos os valores de “status” do motor são recalculados e o tempo é

incrementado com uma unidade de tempo.

Para facilitar o entendimento e visualização, a simulação foi baseada no seguinte diagrama

na linguagem SDL:

42

Page 57: Implementação de kit didático para ensino de motores de passo

Figura 40 - SDL - Simulação Computacional

Para visualizar as iterações e maneira de compilação da simulação há uma figura que

mostra um exemplo sobre cada iteração até a formação do perfil de velocidades.

Figura 41 - Iterações da Simulação (Perfil de Velocidades)

43

Page 58: Implementação de kit didático para ensino de motores de passo

Durante toda a simulação é gerado um arquivo (*.txt) com todos os dados de velocidade e

distância percorrida por tempo, que, posteriormente será usado para a geração de gráficos no

Excel ou MatLab.

O programa para a simulação foi feito em linguagem “C” e está integralmente exposto no

anexo 3.

Como exemplo foi feita uma simulação com curva de motor:

Figura 42 - Dados da Curva

Figura 43 - Curva Exemplo

44

Page 59: Implementação de kit didático para ensino de motores de passo

Após a geração dos arquivos em TXT, os dados podem ser plotados pelo Excel, como

mostrado logo abaixo:

Ex:

Velocidade máxima: 5000

Distância requerida : 2000

Figura 44 - Simulação Exemplo

O gráfico mostra apenas o período de aceleração e em velocidade de cruzeiro pois apenas

um arquivo de dados foi lido em modo de demonstração.

Para ajudar a demonstração foi criada uma macro em Excel que lê o arquivo gerado pela

simulação e plota um gráfico com esses dados.

A macro é bastante simples, com apenas essa linha de comando já se tem a atualização do

gráfico.

Sub Execulta Macro_Clique()Range("B2").SelectSelection.QueryTable.Refresh BackgroundQuery:=False

45

Page 60: Implementação de kit didático para ensino de motores de passo

Anexos

Anexo 1. Programa para PIC na linguagem “C”

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Trabalho de Grauação - 2o Semestre 2007 * Universidade Estadual de Campinas - UNICAMP * Faculdade de Egenharia Mecânica - FEM * Curso de Engenharia de Controle e Automação * Aluno: Thiago Augusto Bento da Silva Camargo * Orientador: Luiz Otávio Saraiva Ferreira * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Programa: Motor de Passo.c * VERSÃO : 1.0 * DATA : 04/11/2007 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Descrição geral * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//*

Este programa, a partir de caracteres enviados, via serial, controla um protótipo de motor de passo. Os caracteres são enviados e interpretados por uma máquina de estados.Basicamente o acionamento se dá de duas formas:1 - Passo a Passo. (Um passo)2 - Ou com objetivos de velocidade e número de passos. Assim, o motor seráacionado até atingir o número de passos com velocidade máxima de cruzeiro setada pelo usuário.

*//***===================================================================

46

Page 61: Implementação de kit didático para ensino de motores de passo

** 1 Informações Gerais** 1.1 Revisões****===================================================================*/

/***===================================================================** 1.2 Referências**** No Identificação Nome ou Descrição** =======================================================** 1 Datasheet do microcontrolador** PIC16F877, da Microchip****===================================================================*/

/***===================================================================** 2. Bibliotecas a incluir**===================================================================*/#include <io16f877.h> /* Definições dos registradores do processador */#include <inpic.h> /* Definição das funções intrínsecas do compilador */#include <stdlib.h> /* Definição das funções padrão do ANSI C */#include <ctype.h> /* Definição da conversão aSCII para HEXADECIMAL */

/***===================================================================** 3. DECLARAÇÕES** 3.1 Definições de tipos internas**===================================================================*/

#define RXFLAG RCIF /* Flag de chegada de byte pela serial */#define TXFLAG TXIF /* Flag de esvaziamento de TXREG */#define MOTOR PORTD //Saída 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 //Estados do Máquina Interpretadora de Comandos

#define P1 1 #define P2 2

47

Page 62: Implementação de kit didático para ensino de motores de passo

#define P3 3#define V1 4#define V2 5

char MOTOR_PAS; // Posição do Motor (Passo)char MOTOR_MPAS; // Posição do Motor (Meio - Passo)char PASSOS[3], VELOCIDADE[2]; // Velocidade de cruzeiro e quantidade de passos objetivo.

/***===================================================================** 3.2 Protótipos de funções internas (definidas na Seção 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 Variáveis Internas**===================================================================*/

char CHAR_RX; // Caractere recebido pela serialchar NUM_TECLA, COD_TECLA; // Variáveis utilizadas para ler as teclaschar STT_INTERPRETADOR; // Estado do interpretador de comandos

/***===================================================================** 4. FUNÇÕES GLOBAIS ** (declaradas como 'extern' em algum arquivo de cabeçalho)**===================================================================*/

48

Page 63: Implementação de kit didático para ensino de motores de passo

/* FUNÇÃO PRINCIPAL */ void main( void )/***---------------------------------------------------------------------------****** Parâmetros:** 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&PWRTE_ON&WDT_OFF&XT_OSC);

/*** NOTA: dispositivos que têm conversor A/D podem precisar** configurar os pinos assinalados a 'in' e 'out' como E/ digital */ADCON1 = 0x07;

49

Page 64: Implementação de kit didático para ensino de motores de passo

INTCON = 0x00; //Desabilita todas as interrupções /*** É aconselhável primeiramente se escrever o valor inicial das portas** de E/S para depois se definir as configurações de E;S, de modo a se** evitar transientes nos pinos de saida. */

PORTA = 0x00; /* Zera os latchs de saída do PORTA */PORTB = 0x00; /* Zera os latchs de saída do PORTB */PORTC = 0x00; //0b.0000.0000TRISC = 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 saída de comandos para o driver de potênciaPORTE = 0x00;TRISE = 0x00;

/* Inicialização da porta serial */TXSTA = 0x26; //0b.0010.0110 = Modo assíncrono 8 bitsSPBRG = 0x19;RCSTA = 0x90; //0b.1001.0000 = Habilita a transmissão 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);

/* Inicialização dos Processos */STT_INTERPRETADOR = INIT; //Estado inicial do interpretador

MOTOR_PAS = 0;MOTOR_MPAS = 0;MOTOR = 0x80;

/* **---------------------------------- ** Inicia as rotinas de interrupção **---------------------------------- */

/*

50

Page 65: Implementação de kit didático para ensino de motores de passo

**------------------------------------ ** O código da sua aplicação vai aquí. **------------------------------------ */ while (1) {

Comando();}

} /* FIM DA FUNÇÃO PRINCIPAL */

/***===================================================================** 5. FUNÇÕES INTERNAS (prototipadas na Seção 3.2)**===================================================================*/

//*****************************************************************************// Função 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);}

//*****************************************************************************/* Função que recebe caractere pela serial *//* Não tem argumento de entrada, e o argumento de saida é caractere ASCII *//* recebido ou o número 0 em caso de nenhum caractere recebido *///-----------------------------------------------------------------------------

char Recebe(void){ if (RXFLAG == 0) { return 0; }

51

Page 66: Implementação de kit didático para ensino de motores de passo

else { return RCREG; } }

//*****************************************************************************/* Função que transmite caractere pela serial *///-----------------------------------------------------------------------------

void Transmite(char DADO_TX){ while (TXFLAG == 0) {}; TXREG = DADO_TX;}

//****************************************************************************/* Função que interpreta os comandos vindos do teclado *///----------------------------------------------------------------------------

void Comando(void){

CHAR_RX = Recebe(); // Lê caractere na porta serial// Início da máquina 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

Page 67: Implementação de kit didático para ensino de motores de passo

case(P3):

if (CHAR_RX == 0) break;if (isdigit (CHAR_RX)) { PASSOS[2] = CHAR_RX;

STT_INTERPRETADOR = V1; break; }break;

case(V1):

if (CHAR_RX == 0) break;if (isdigit (CHAR_RX)) { VELOCIDADE[0] = CHAR_RX;

STT_INTERPRETADOR = V2; break; }break;

case(V2):

if (CHAR_RX == 0) break;if (isdigit (CHAR_RX)) { VELOCIDADE[1] = CHAR_RX;

STT_INTERPRETADOR = INIT; Anda(); break; }break;

}}

/* Função Escreve_Char_LCD (caractere) *///------------------------------------------------------------------------------------------------------------

void Escreve_Char_LCD (char caractere){

MOTOR = caractere;ENABLE = 1;ENABLE = 0;Delay_1ms(1);

}

/* Função 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 0else coluna = coluna + 0xC0; //Linha 1RS = 0;

53

Page 68: Implementação de kit didático para ensino de motores de passo

MOTOR = coluna;ENABLE = 1;ENABLE = 0;Delay_1ms(1);RS = 1;for (i=0; i < tamanho; i++){

Escreve_Char_LCD (str[i]);}

}

/* Função 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);

}

/* Função Um_Passo () *///------------------------------------------------------------------------------------------------------------

void Um_Passo (){ if (MOTOR_PAS > 4) MOTOR_PAS = 0; else MOTOR_PAS++;

switch (MOTOR_PAS) { /* Seleciona Posição do Motor */case (0):

MOTOR = 0x37; /* Posiciona em A-A' */break;

case (1):MOTOR = 0x57; /* Posiciona em B-B' */break;

case (2):MOTOR = 0x67; /* Posiciona em C-C' */break;

case (3):MOTOR = 0x73; /* Posiciona em A'-A */

54

Page 69: Implementação de kit didático para ensino de motores de passo

break;case (4):

MOTOR = 0x75; /* Posiciona em B'-B */break;

case (5):MOTOR = 0x76; /* Posiciona em C'-C */break;

default:MOTOR = 0x77; /* Erro: Mantem em A-A' */break;

}

}

/* Função Meio_Passo () *///------------------------------------------------------------------------------------------------------------

void Meio_Passo (){ if (MOTOR_MPAS > 10) MOTOR_MPAS = 0; else MOTOR_MPAS++;

switch (MOTOR_MPAS) { /* Seleciona Posição do Motor */case (0):

MOTOR = 0x37; /* Posiciona em A-A' */break;

case (1):MOTOR = 0x17; /* Posiciona em AB */break;

case (2):MOTOR = 0x57; /* Posiciona em B-B' */break;

case (3):MOTOR = 0x47; /* Posiciona em BC */break;

case (4):MOTOR = 0x67; /* Posiciona em C-C' */break;

case (5):MOTOR = 0x63; /* Posiciona em A'C */break;

case (6):MOTOR = 0x73; /* Posiciona em A'-A */break;

case (7):

55

Page 70: Implementação de kit didático para ensino de motores de passo

MOTOR = 0x71; /* Posiciona em A'B' */break;

case (8):MOTOR = 0x75; /* Posiciona em B'-B */break;

case (9):MOTOR = 0x74; /* Posiciona em B'C' */break;

case (10):MOTOR = 0x76; /* Posiciona em C'-C */break;

case (11):MOTOR = 0x36; /* Posiciona em AC' */break;

default:MOTOR = 0x77; /* Erro: Mantem em A-A' */break;

}

}

/* Função 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

Page 71: Implementação de kit didático para ensino de motores de passo

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 velocidadeDim Pas As Double ‘define a quantidade de passosDim P1 As Integer ‘ primeiro algarismo do número de passosDim P2 As Integer ‘ segundo algarismo do número de passosDim P3 As Integer ‘ terceiro algarismo do número de passosDim V1 As Integer ‘ primeiro algarismo do valor de velocidadeDim V2 As Integer ‘ segundo algarismo do valor de velocidadeDim T1 As Integer ‘ variáveis para espero de um segundoDim T2 As Integer

57

Page 72: Implementação de kit didático para ensino de motores de passo

‘Função que manda os dados na saída da serial‘Interessante salientar que os comandos são separados por uma espera de 1 segundo para garantir ‘a comunicação.

Private Sub cmdEnviar_Click()

MSComm1.Output = "P"Espera_1sMSComm1.Output = CStr(P1)n1.Caption = P1Espera_1sMSComm1.Output = CStr(P2)n1.Caption = P2Espera_1sMSComm1.Output = CStr(P3)n1.Caption = P3Espera_1sMSComm1.Output = CStr(V1)n1.Caption = V1Espera_1sMSComm1.Output = CStr(V2)n1.Caption = V2Espera_1sEnd Sub

‘Botão para 1 passo

Private Sub cmdProx_Click()MSComm1.Output = "N"End Sub

‘Função do botão de saída

Private Sub cmdSair_Click()

resp = MsgBox("Tem certeza que deseja sair?", vbYesNo, "Confirmação")

If resp = vbYes Then

Unload frmMotor

End If

End Sub

58

Page 73: Implementação de kit didático para ensino de motores de passo

‘Função de espera de 1 segundo, esse é um laço que se repete até transcorrer 1segundo, porém ‘durante a sua execução os eventos poderão acontecer normalmente pela função “DoEvent”.‘Apesar de esse tipo de laço 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)DoEventsDo Until (T2 = T1 + 1)T2 = Second(Time)LoopEnd Sub

‘Função de carregamento e configuração inicial

Private Sub Form_Load()

MSComm1.CommPort = 1MSComm1.Settings = "9600,N,8,1"MSComm1.CommPort = 1MSComm1.PortOpen = TrueLoad frmSobrefrmSobre.Visible = False

End Sub

‘Função de finalização

Private Sub Form_Unload(Cancel As Integer)

MSComm1.PortOpen = False

End Sub

‘Função de visualização de objetos

Private Sub optObjetivos_Click()

If optObjetivos = True Then

frmPassoapasso.Enabled = FalsecmdProx.Enabled = False

Label9.Enabled = TrueLabel10.Enabled = TruefrmObjetivos.Enabled = True

59

Page 74: Implementação de kit didático para ensino de motores de passo

txtPos.Enabled = TruetxtVel.Enabled = TrueLabel11.Enabled = TrueLabel14.Enabled = True

Else

frmPassoapasso.Enabled = TrueoptLigado.Enabled = TrueoptDesligado.Enabled = TruecmdProx.Enabled = True

Label9.Enabled = FalseLabel10.Enabled = FalsefrmObjetivos.Enabled = FalsetxtPos.Enabled = FalsetxtVel.Enabled = FalseLabel11.Enabled = FalseLabel14.Enabled = False

End If

optPaP.Value = False

End Sub

Private Sub optPaP_Click()

If optPaP = True Then

frmPassoapasso.Enabled = TruecmdProx.Enabled = True

Label9.Enabled = FalseLabel10.Enabled = FalsefrmObjetivos.Enabled = FalsetxtPos.Enabled = FalsetxtVel.Enabled = FalseLabel11.Enabled = FalseLabel14.Enabled = False

Else

frmPassoapasso.Enabled = FalseoptLigado.Enabled = FalseoptDesligado.Enabled = FalsecmdProx.Enabled = False

60

Page 75: Implementação de kit didático para ensino de motores de passo

Label9.Enabled = TrueLabel10.Enabled = TruefrmObjetivos.Enabled = TruetxtPos.Enabled = TruetxtVel.Enabled = TrueLabel11.Enabled = TrueLabel14.Enabled = TrueEnd IfoptObjetivos.Value = False

End Sub

‘Função do botão de saída

Private Sub Sair_Click()

resp = MsgBox("Tem certeza que deseja sair?", vbYesNo, "Confirmação")If resp = vbYes ThenUnload frmMotorEnd If

End Sub

‘Função que mostra dados sobre o programa

Private Sub Sobre_Click()

frmSobre.Enabled = TruefrmMotor.Enabled = FalsefrmSobre.Visible = TrueEnd Sub

‘Função que testa os dados entrados pelo usuário e retira apesar três números para a quantidade ‘de passo e dois números 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

Page 76: Implementação de kit didático para ensino de motores de passo

End IfEnd Sub

Private Sub txtPos_Change()Vel = Left(Val(txtVel.Text), 2)Pos = Left(Val(txtPos.Text), 3)

P3 = Pos Mod 10P2 = ((Pos - P3) / 10) Mod 10P1 = Left((Pos - P3) / 10, 1)

‘Nesse momento, foi feita uma seqüência de códigos que separa os algarismos do valor de número de passos a serem dados.

If (Pos <> 0) Then If (Vel <> 0) Then cmdEnviar.Enabled = True Else cmdEnviar.Enabled = False End IfEnd IfEnd Sub

‘Função que separa os comandos a serem repassados

Private Sub txtVel_LostFocus()V2 = Vel Mod 10V1 = (Vel - V2) / 10End Sub

Anexo 3 Programa para simulação computacional

#include <stdio.h>#include <stdlib.h>///////////////////////////////////Declaração de variáveis globais/////////////////////////////////

float Deltat=0.001; //Tamanho da interação em tempo

float Rotorj=0.000185, Loadj=0.00025; // Inércia do rotor e carga

float Friction=0.5, Torqueut=0.5; // Torque inicial e atrito viscoso

62

Page 77: Implementação de kit didático para ensino de motores de passo

float SlewTime=0, SlewDist=0, TotalTime=0;// Velocidade, tempo e distância em velocidade

// de cruzeirofloat Distance, SlewSpeed; // Valores objetivosfloat AccelTime=0, DecelTime=0; // Tempos de aceleração e desaceleraçãofloat AccelDist=0, DecelDist=0; // Distâncias de aceleração e desaceleraçãofloat AccelVel=0, DecelVel=0; // Velocidade de aceleração e desaceleraçãofloat AccelNum=0, DesacelNum=0;float pi=3.141592; // Valor de pifloat Speed=0; // Velocidade atual do motor

/////////////////////////// //Função de aproximação 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)*(vel-

speed2))); else return (torque3+(torque4-torque3)/((speed4-speed3)*(vel-speed3))); } } return 0;}//////////////////////////////////

/////////////////////////////////////Função que calcula os parâmetros de aceleração a cada iteração

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

Page 78: Implementação de kit didático para ensino de motores de passo

}///////////////////////////////////

/////////////////////////////////////Função que calcula os parâmetros de desaceleração a cada iteração

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//////////////////////////Parâmetros : arquivos como referência//Função: chamar as funções de cálculo 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 %7.3f\n",DecelTime,DecelVel,DecelDist); Calculo(arquivo,arquivo2); }

else {

64

Page 79: Implementação de kit didático para ensino de motores de passo

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 máxima do motor:");scanf("%f",&SlewSpeed); //////////////////////////////////////////

///////////////////////////////////////////// Abertura de arquivos (gravados no disco)///////////////////////////////////////////

/////////////////////////////////////////////Arquivo: conterá os dados de tempo, distância e velocidade

65

Page 80: Implementação de kit didático para ensino de motores de passo

// durante a aceleração e em velocidade de "cruzeiro" (objetivo)FILE *arquivo;arquivo = fopen("grafico.txt","w");fprintf(arquivo," Tempo Velocidade Distância\n");fprintf(arquivo,"000.000 000.000 000.000\n");/////////////////////////////////////////////Arquivo2: conterá os dados de tempo, distância e velocidade // de desaceleração (porém em ordem invertida, que será trabalhada// no programa de plot dos dados (MatLab).FILE *arquivo2;arquivo2 = fopen("decel.txt","w");////////////////////////////////////////////

///////////////////////////////////////Chamada para início dos cálculos (iterativamente)Calculo(arquivo,arquivo2);/////////////////////////////////////

////////////////////////////// Fechamento dos arquivos fclose(arquivo);fclose(arquivo2);////////////////////////////

system("PAUSE");return 0;}

66