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.

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

1.

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) 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.

Motor de Im permanente (PM)

Motor Hbrido

14

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:


d

w = Tac * dt / (Jr+Jl)

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


d

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 1 2 47 //Estados do Mquina Interpretadora de Comandos

#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; case(V1): if (CHAR_RX == 0) break; if (isdigit (CHAR_RX)) STT_INTERPRETADOR = V2; break; } break; 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 VELOCIDADE[1] = CHAR_RX; { VELOCIDADE[0] = CHAR_RX; PASSOS[2] = CHAR_RX;

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 // Inrcia do rotor e carga

float Rotorj=0.000185, Loadj=0.00025; float Friction=0.5, Torqueut=0.5;

// 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); } else { 64

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

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