Sie sind auf Seite 1von 105

CENTRO PAULA SOUZA

FACULDADE DE TECNOLOGIA
FATEC SANTO ANDR
Tecnologia em Eletrnica Automotiva





Leone de Sousa e Silva
Vando Antonio de Sousa







APLICAO DO MICROPASSO NO MOTOR DE
PASSO DO PAINEL DE INSTRUMENTOS
AUTOMOTIVO











Santo Andr So Paulo
2012




CENTRO PAULA SOUZA
FACULDADE DE TECNOLOGIA
FATEC SANTO ANDR
Tecnologia em Eletrnica Automotiva






Leone de Sousa e Silva
Vando Antonio de Sousa






APLICAO DO MICROPASSO NO MOTOR DE
PASSO DO PAINEL DE INSTRUMENTOS
AUTOMOTIVO




Monografia apresentada ao Curso de Tecnologia
Autotrnica da FATEC Santo Andr, como
requisito parcial para concluso do curso de
Tecnologia em Autotrnica

Orientador: Prof. Weslley Medeiros Torres





Santo Andr So Paulo
2012







































































































Dedicamos este trabalho s nossas famlias
e aos nossos estimados amigos que sempre
estiveram prximos durante esta jornada.









AGRADECIMENTOS

Gostaramos de agradecer a todos aqueles que direta e indiretamente contriburam para
a realizao deste trabalho e principalmente aos colegas de sala, que mantiveram estmulos
nos momentos mais rduos desta jornada e auxiliaram no desenvolvimento mtuo do
conhecimento. Dedicamos nosso trabalho aos professores, colaboradores e funcionrios da
Fatec Santo Andr que sempre estiveram prontos a nos ajudar.
Agradecemos tambm a Deus, aos nossos queridos familiares, e em especial ao
Professor Armando Lagan e ao Professor Cleber Willian Gomes pelo apoio e pelo incentivo,
ao Professor Wagner Massarope pelas palavras de perseverana e de grande estmulo e
tambm ao Professor Weslley Torres pelas orientaes providenciais para o desenvolvimento
do trabalho.
































































O assunto mais importante do mundo pode
ser simplificado at o ponto em que todos
possam apreci-lo e compreend-lo. Isso
ou deveria ser a mais elevada forma de
arte.
Charles Chaplin











RESUMO





Seja no formato digital, seja no formato analgico, o painel de instrumentos automotivo
fornece uma variedade de informaes relevantes ao condutor do veculo, como a velocidade
na qual o automvel se encontra, a rotao do motor de combusto interna, o nvel de
combustvel no tanque, entre outras, permitindo ao motorista observar e analisar as diversas
situaes de desempenho, bem como apontamentos de possveis problemas. Este painel indica
com exatido os valores medidos, graas s tcnicas de controle dos motores de passo. Porm,
a exatido em baixas rotaes fica comprometida quando os motores sofrem problemas como
ressonncia, vibrao e rudos, causados principalmente por mudanas abruptas nos nveis de
corrente eltrica fornecida a eles. Este trabalho visa minimizar essas pequenas interferncias,
e com uma tcnica de subdiviso dos passos, ou seja, do deslocamento angular do motor,
melhorar significativamente a preciso e a linearidade do controle dos ponteiros de um
prottipo de mostrador, avaliando desta forma a importncia da tcnica do micropasso no
motor de passo dos paineis dos automveis.




Palavras-chave: painel de instrumentos, automvel, motores de passo, linearidade,
micropasso.
















ABSTRACT





Be in digital format, either in analog format, the automotive instrument panel provides a
variety of useful information to the driver of the vehicle, as the speed at which the automobile
is, the internal combustion engine revolution, fuel level in the tank, among other, allowing the
driver to observe and analyze the various performance situations, as well as hints of possible
problems. This panel indicates the exact measurements, because of the control techniques of
the stepper motors. However, the accuracy at low speeds is compromised when the engines
suffer from problems such as resonance, vibration and noise, mainly caused by abrupt
changes in the levels of electrical current supplied to them. This study seeks to minimize these
little interferences, and with a technique of subdivision of the steps, i.e., the angular
displacement of the motor, improve the accuracy and linearity of the control of the needles of
a prototype display, thereby evaluating the importance of microstepping technique in the
stepper motor of the panels of automobiles.


Keywords: instrument panel, automobile, stepper motors, linearity, microstepping.









LISTA DE ILUSTRAES

Figura 1: Painel de instrumentos, ou cluster. Extrado de (OFRIA, 2007). ........................................................... 16
Figura 2:Viso explodida do cluster. Extrado de (GUIMARES, 2007). ........................................................... 17
Figura 3: Exemplo de mscara. Extrado de (GUIMARES, 2007). .................................................................... 18
Figura 4: Conector de um Mercedes Classe A. Extrado de (GUIMARES, 2007). ............................................ 18
Figura 5: Chicote do painel de instrumentos. Extrado de (http://commons.wikimedia.org). ............................... 18
Figura 6: Visibilidade dos clusters do Mercedes Classe A ( esq.) e do Mercedes Classe G. Adaptado de
(GUIMARES, 2007). .......................................................................................................................................... 19
Figura 7: Exemplar de motor de passo em trs vistas diferentes. Adaptado de (Fraen 6405-15xx - Standard
Stepper Motors Datasheet). ................................................................................................................................... 20
Figura 8: Localizao do motor de passo na construo do painel. Extrado de (BOSCH, 2005). ....................... 20
Figura 9: Motor de relutncia varivel. Extrado de (BRITES et al., 2008). ......................................................... 21
Figura 10: Comparao do fluxo magntico em um entreferro maior (a) e um menor (b). Adaptado de (KENJO,
1984)...................................................................................................................................................................... 22
Figura 11: Motor de m permanente. Extrado de (BRITES et al, 2008). ............................................................ 22
Figura 12: Motor hbrido. Extrado de (BRITES et al., 2008). .............................................................................. 23
Figura 13: Motor unipolar. Extrado de (BRITES et al., 2008). ............................................................................ 24
Figura 14: Motor bipolar. Extrado de (BRITES et al., 2008). .............................................................................. 24
Figura 15: Motor bifilar. Adaptado de (JONES, 1995) ......................................................................................... 25
Figura 16: Enrolamentos de um motor polifsico. Adaptado de (JONES, 1995) .................................................. 25
Figura 17: Comparativo entre os modos de passo completo e de micropasso. Extrado de (www.atmel.com). ... 26
Figura 18: Exemplo de conexo entre um seqenciador e um driver. Extrado de (KENJO, 1984). .................... 27
Figura 19:Motor de corrente contnua. .................................................................................................................. 28
Figura 20: Motor de corrente contnua com sentido invertido. ............................................................................. 28
Figura 21: Ponte H com chaves. ........................................................................................................................ 29
Figura 22: Polarizao do motor para sentido horrio (a) e anti-horrio (b). ........................................................ 29
Figura 23: Ponte H com transistores. Extrado de (MANEA, 2009). .................................................................... 30
Figura 24: Diagrama de blocos simplificado de um microcontrolador. ................................................................ 31
Figura 25: Controle em malha aberta com tenso fixa. ......................................................................................... 31
Figura 26: Controle em malha aberta com corrente fixa. ...................................................................................... 32
Figura 27: Driver com sensor de corrente. ............................................................................................................ 32
Figura 28: Controle em malha fechada com controle de corrente. ........................................................................ 33
Figura 29: Sequncia de acionamento no motor unipolar com passo completo. Adaptado de (pt.wikipedia.org). 33
Figura 30: Motor bipolar com passo completo. Adaptado de (BRITES et al., 2008). ........................................... 34
Figura 31: Motor unipolar com meio passo. Extrado de (BRITES et al., 2008). ................................................. 34
Figura 32: Motor bipolar com meio passo. Extrado de (BRITES et al., 2008). ................................................... 35
Figura 33: Corrente nas bobinas durante o micropasso e sua trajetria resultante. Extrado de (YEDAMALE et
al., 2002). ............................................................................................................................................................... 36
Figura 34: Trajetria da corrente no micropasso utilizando 1/8 de passo. Extrado de (LAIDMAN, 2001). ........ 36
Figura 35: Energia de excitao em funo dos comprimentos de passo. Extrado de (Industrial Circuits
Application Note Microstepping). ...................................................................................................................... 37
Figura 36: Sinal PWM. Extrado de (GHIRARDELLO, 2008). ............................................................................ 38
Figura 37: Ciclo ativo. Extrado de (GHIRARDELLO, 2008). ............................................................................. 38
Figura 38: Potncia aplicada carga. Extrado de (GHIRARDELLO, 2008). ...................................................... 39
Figura 39: Prottipo experimental. ........................................................................................................................ 40
Figura 40: Sensor de velocidade.Extrado de (BOSCH, 2005). ............................................................................ 41
Figura 41: Fluxograma parcial de controle do motor. ........................................................................................... 43
Figura 42: Sensor de nvel de combustvel. ........................................................................................................... 44
Figura 43: Esquema eltrico do sensor de combustvel. ........................................................................................ 44
Figura 44: Marcador de combustvel. .................................................................................................................... 45
Figura 45. Display LCD. ....................................................................................................................................... 46
Figura 46: Driver do motor de passo para micropassos. ....................................................................................... 48
Figura 47: Sinal de PWM no controle do micropasso. .......................................................................................... 49
Figura 48:Sinal de PWM no controle do micropasso. ........................................................................................... 49
Figura 49: Sinal na ponte H. .............................................................................................................................. 50
Figura 50: Forma de onda da corrente nas bobinas. .............................................................................................. 50
Figura 51:Forma de onda da corrente nas bobinas. ............................................................................................... 50






LISTA DE TABELAS

Tabela 1: Relaes entre velocidade, pulsos e perodo para se definir o deslocamento ........................................ 42
Tabela 2: Relao para se encontrar o nvel de combustvel. ................................................................................ 45
Tabela 3: Porcentagem de corrente por deslocamento em funo do seno do ngulo. .......................................... 47
Tabela 4: Porcentagem de corrente por deslocamento em funo do cosseno do ngulo. .................................... 48






LISTA DE ABREVIATURAS

ADC Analog-to-Digital Converter

CCP Capture, Compare and PWM

I/O Input/Output

IP Instrument Panel

LCD Liquid Crystal Display

PCB Printed Circuit Board

PWM Pulse Width Modulation













































SUMRIO
1 INTRODUO .................................................................................................................................................. 13
1.1 Motivao e Objetivos ................................................................................................................................. 14
1.2 Contedo ..................................................................................................................................................... 14
1.3 Metodologia ................................................................................................................................................. 14
2 CONCEITOS DE CLUSTER ............................................................................................................................. 16
2.1 Componentes do Painel ............................................................................................................................... 17
2.1.1 Visibilidade .......................................................................................................................................... 19
2.2 Fundamentos do Motor de Passo ................................................................................................................. 19
2.2.1 Tipos de motores de passo .................................................................................................................... 21
2.3 Caractersticas e Operao ........................................................................................................................... 23
3 DRIVER DO MOTOR DE PASSO .................................................................................................................... 27
3.1 Esquema da ponte H ................................................................................................................................ 28
3.2 Microcontrolador ......................................................................................................................................... 30
3.3 Sistema de Controle de Motor de Passo ...................................................................................................... 31
3.3.1 Topologias de controle ......................................................................................................................... 31
3.3.1.1 Controle em malha aberta com tenso fixa ........................................................................................ 31
3.3.1.2 Controle em malha aberta com corrente fixa ..................................................................................... 32
3.3.1.3Controle em malha fechada com controle de corrente ........................................................................ 32
3.3.2 Formas de controle ............................................................................................................................... 33
3.3.2.1 Passo completo .................................................................................................................................. 33
3.3.2.2 Meio Passo ........................................................................................................................................ 34
3.3.3 Sistema de Micropasso ......................................................................................................................... 35
3.4 Circuito PWM ............................................................................................................................................. 38
4 EXPERIMENTOS ............................................................................................................................................. 40
4.1 Velocmetro ................................................................................................................................................. 40
4.2 Marcador de Combustvel ........................................................................................................................... 44
4.2 Odmetro ..................................................................................................................................................... 45
4.3 Micropassos ................................................................................................................................................. 46
5 CONCLUSES E PROPOSTAS FUTURAS .................................................................................................... 51
REFERNCIAS .................................................................................................................................................... 52
ANEXO I ............................................................................................................................................................... 54
ANEXO II ............................................................................................................................................................. 74
ANEXO III ............................................................................................................................................................ 75
ANEXO IV ............................................................................................................................................................ 84
ANEXO V ............................................................................................................................................................. 85
ANEXO VI ............................................................................................................................................................ 98



13



1 INTRODUO

Sabe-se que o mostrador automotivo, localizado imediatamente atrs do volante do
veculo e de frente para o condutor, exibe informaes de extrema importncia para garantir a
segurana e o bom desempenho do automvel, a integridade e o conforto do prprio motorista
e dos demais integrantes. Ele possui vrias luzes capazes de indicar o estado de
funcionamento de determinados componentes do veculo, como a temperatura do lquido de
arrefecimento do motor e o alerta para portas abertas, entre outros. Tambm mostra, de forma
analgica (com ponteiros conectados a motores de passo), como se encontra a velocidade de
deslocamento do veculo, a rotao e a temperatura do motor, entre outros parmetros - cada
um com suas devidas escalas de medio. Em veculos mais modernos e sofisticados, de
forma a incrementar o design do interior do veculo, exibe estes dados de forma digital em
telas de LCD. Porm, por se tratar de um sistema que gera altos custos de produo e, logo,
um acentuado acrscimo ao preo do automvel, ainda permanece a predominncia no
mercado dos veculos com mostradores analgicos.
Os motores de passo que movimentam esses ponteiros ou agulhas, como so
conhecidos nas linhas de produo so eficientes e relativamente de baixo custo. Com o
auxlio de um microcontrolador, o qual vai captar os sinais dos diversos sensores do veculo e
convert-los em movimento angular, eles executam movimentos que oscilam constantemente
e de forma linear, de acordo com as caractersticas instantneas de desempenho do veculo em
funcionamento.
Contudo, o motor de passo prejudicado com possveis e iminentes interferncias,
como ressonncia, rudos e vibraes; alteraes no fornecimento da corrente eltrica que o
alimenta causam perda da linearidade da angulao do motor e, por conseqncia, dos
ponteiros, gerando em baixas rotaes um movimento impreciso e, em alguns casos, trmulo.
Nessas situaes, uma alternativa eficaz a aplicao do sistema de micropasso, o qual busca
suavizar o deslocamento angular, executando passos muito menores aos que conduzem
normalmente esses motores, fator que exige um gerenciamento eletrnico eficaz e que alcance
o devido resultado: controlar esse gerador de movimentos para que o sistema analgico do
painel de instrumentos possua uma exibio to linear quanto possvel, considerando
inclusive momentos em que as variaes so menores e o motor de passo se movimenta sob
velocidade reduzida.
14



1.1 Motivao e Objetivos

A motivao pela qual foi realizado esse estudo capta como base a ideia de que os
ponteiros, por abrangerem muitos valores decimais de velocidade, de nvel de combustvel no
tanque, de rotao, entre outros, necessita de uma preciso condizente com as variaes que
devem ser identificadas pelo condutor do veculo.
Com base nos conceitos sobre o motor de passo, suas caractersticas e seus
fundamentos de operao, o trabalho que se segue tem por objetivo o desenvolvimento por
hardware e software de um controle preciso dos ponteiros do painel de instrumentos, com a
aplicao de um microcontrolador. Esta ao permitir ao motor de passo elevar seu
desempenho de linearidade com a reduo ou eliminao dos elementos causadores de
interferncias no movimento, mesmo em baixas rotaes do motor. O veculo, ento, passa a
ter um mostrador com ponteiros livres de oscilaes indesejveis.

1.2 Contedo


No captulo 2, discutimos sobre os componentes gerais de um painel de instrumentos
automotivo e os conceitos e princpios de operao dos motores de passo; no captulo 3,
relatamos os fundamentos do driver do motor de passo, tcnicas de controle do motor e
tambm o hardware e o software associados ao desenvolvimento eletrnico do cluster; no
captulo 4, so apresentados e discutidos os resultados dos experimentos; e finalmente, no
captulo 5, so expostas as concluses geradas pelos resultados e projetados novos estudos e
desafios.

1.3 Metodologia


Foram utilizados para os experimentos prticos relacionados a esse estudo dois
motores de passo que produzem o direcionamento (horrio e anti-horrio) dos ponteiros, um
display LCD para mostrar, de acordo com um determinado nmero de pulsos, a distncia
percorrida pelo veculo e a total registrada (odmetro), alm de dois ponteiros com seus
respectivos marcadores de velocidade (velocmetro) e nvel de combustvel. Para a utilizao
do microcontrolador, programamos em linguagem C, e projetamos tambm um hardware
15



eletrnico para controle dos motores de passo. Primeiramente, foi moldado um fluxograma
com as aes de leitura que o cluster deveria executar, e com base nele foi criado um software
desenvolvido no compilador MPLAB IDE, com um microcontrolador PIC 16F877A.
16



2 CONCEITOS DE CLUSTER

Em um automvel, um painel de instrumentos tambm chamado por engenheiros de
produto das montadoras como cluster ou at mesmo IP Cluster, sinnimo de instrument panel
um conjunto de marcadores (Fig. 1) que fornece as principais informaes sobre o veculo,
compreendendo os dados relacionados aos sistemas mecnicos e eletroeletrnicos. Segundo
(DING, 2008), Ele desempenha um papel importante [...] por prover informaes
necessrias, e importncia para segurana e economia..
Por essas razes, o cluster pode ser considerado o principal meio de comunicao
entre o veculo e o motorista. De acordo com (GUIMARES, 2007), [...] processa algumas
informaes de sensores e interruptores e, em alguns casos, responsvel pelo controle de
algumas funes no veculo.. Exemplos:
- Indicar a velocidade do veculo e a rotao do motor;
- Indicar o nvel de combustvel;
- Controlar as luzes de aviso e de alerta;
- Controlar as setas, lavadores e limpadores dos vidros.


Figura 1: Painel de instrumentos, ou cluster. Extrado de (OFRIA, 2007).
17



Parte considervel dos paineis de instrumentos trabalha com ponteiros mecnicos
(denominados tecnicamente como agulhas, ou needles) e mostrador, e possui um circuito
magntico compacto, que possibilita agilidade e rapidez aos ponteiros.

2.1 Componentes do Painel
Em sua estrutura, um cluster (Fig. 2) composto por:
- Lente;
- Carcaa;
- PCB (Placa de circuito impresso);
- Tampa traseira;
- Mscara (Fig. 3);
- Conector.
Na viso de (GUIMARES, 2007), Todos estes componentes devem ser
precisamente montados para que a aparncia final seja excelente e o conjunto esteja
totalmente livre de rudos..
Entre esses elementos, a mscara se torna bastante importante, pois um filme feito de
polmero que traz detalhes importantes relativos ao layout do painel. nela que esto
marcados os smbolos de alarme, de alerta, as unidades de medio de cada instrumento e
tambm as escalas dos ponteiros. Segundo (GUIMARES, 2007) [...] o formato de sua
borda feito no sentido de garantir uma perfeita montagem na carcaa..


Figura 2:Viso explodida do cluster. Extrado de (GUIMARES, 2007).
18




Figura 3: Exemplo de mscara. Extrado de (GUIMARES, 2007).

O conector (Fig. 4) tambm de suma importncia para um cluster automotivo, pois
ele ir interligar o painel de instrumentos ao restante do veculo. Ele fica localizado na tampa
traseira do painel, e a quantidade desses conectores e suas pinagens vo variar de acordo com
a quantidade de funes realizadas pelo cluster. importante salientar tambm o tipo de
travamento utilizado entre o conector desse painel de instrumentos e a contra-pea do chicote
do veculo. Nas palavras de (GUIMARES, 2007), Atualmente, procura-se utilizar
conectores sem mecanismos sofisticados de travamento. Eles so mais caros que os
convencionais e oferecem a mesma qualidade no travamento.. A Figura 5 mostra um
exemplar de chicote do painel.


Figura 4: Conector de um Mercedes Classe A. Extrado de (GUIMARES, 2007).


Figura 5: Chicote do painel de instrumentos. Extrado de (http://commons.wikimedia.org).
19



2.1.1 Visibilidade

Um fator tambm importante de se salientar a visibilidade (Fig. 6) do cluster ao
condutor do veculo atravs do volante de direo do automvel, a qual precisa ser perfeita.
Segundo (GUIMARES, 2007), Alm de ter relao direta com a aparncia do conjunto
final, existem regulamentaes que fiscalizam os projetos para garantir que todos os
instrumentos sejam facilmente visualizados pelo motorista.. No apropriado que haja
ponteiros precisos e de boa linearidade se os mesmos ficam ocultos ao olhar do motorista.
Portanto, os detalhes radiais do volante no podem interferir na exibio do painel de
instrumentos.


Figura 6: Visibilidade dos clusters do Mercedes Classe A ( esq.) e do Mercedes Classe G. Adaptado de
(GUIMARES, 2007).

2.2 Fundamentos do Motor de Passo

O motor de passo (Fig. 7) pode ser definido como um motor eltrico sncrono que
pode dividir um ciclo completo de rotao em um grande nmero de passos. Como o prprio
nome sugere, os passos desse tipo de motor acontecem um de cada vez, situao oposta aos
motores convencionais, que giram de forma contnua. Para (GRANT, 2005), Um motor de
passo um motor alimentado eletricamente que gera rotao vinda de uma corrente eltrica
que circula dentro do motor..
Nas palavras de (BRITES et al., 2008), Eles podem ser usados em aplicaes onde
necessrio controlar vrios fatores tais como: ngulo de rotao, velocidade, posio e
sincronismo.. o caso do painel de instrumentos automotivo, o qual requer respostas rpidas
e com o mximo de linearidade possvel.

20




Figura 7: Exemplar de motor de passo em trs vistas diferentes. Adaptado de (Fraen 6405-15xx - Standard
Stepper Motors Datasheet).

De acordo com (YEDAMALE et al., 2002), o motor de passo muito usado em
aplicaes de baixo custo e sistemas de controle open loop, o que significa que no h retorno
de informaes sobre a posio em que o rotor se encontra, o que elimina a possvel utilizao
de elementos caros, como leitores ticos..
Existem vrias aplicaes para esse sistema open loop. Nas palavras de (ASTARLOA
et al., 2003), Um controle open loop o bastante para muitos dispositivos, tais como
pequenas fresadoras, impressoras e itens eletrnicos, devido a uma pequena acelerao
aplicada carga esttica..
A posio do motor conhecida simplesmente tendo como base o nmero de pulsos
de entrada. A seqncia desses pulsos influencia diretamente no direcionamento do eixo de
rotao do motor. A velocidade desse eixo de rotao diretamente relacionada com a
freqncia dos pulsos de entrada, e a durao da rotao tem relao com o nmero de pulsos
aplicados na entrada. A Figura 8 exibe, alm dos itens de construo do painel de
instrumentos, a localizao do motor de passo nesse conjunto.


Figura 8: Localizao do motor de passo na construo do painel. Extrado de (BOSCH, 2005).
21



2.2.1 Tipos de motores de passo

Existem trs tipos de motor de passo: de relutncia varivel, de mpermanente, e
hbrido. Nas palavras de (CONDIT et al., 2004), O estator [...] do motor de passo possui
mltiplos enrolamentos. O arranjo destes enrolamentos o fator primrio para distinguir, de
um ponto de vista eltrico, os diferentes motores de passo.. Vamos descrev-los:
- O motor de passo de relutncia varivel (Fig. 9) funciona com base em um rotor
multi-dentado e um estator. Quando os enrolamentos do estator so energizados por uma
corrente contnua, os plos passam a ficar magnetizados. Para(BRITES et al., 2008), A
rotao ocorre quando os dentes do estator so atrados pelos plos do estator energizado,
devido fora que aparece, para que o sistema tenha o circuito com menor relutncia..
importante salientar que o espao do entreferro (Fig. 10) deve ser o menor possvel,
para produzir maior torque exigindo menos do rotor e para alcanar uma preciso de
posicionamento mais alta, fator muito importante na tcnica do micropasso. Para um mesmo
nvel de fora magnetomotriz um entreferro pequeno render um maior fluxo magntico, o
que produzir um torque maior. Pode-se deduzir tambm, de acordo com (KENJO, 1984),
[...] que o deslocamento de uma posio de equilbrio menor com um entreferro menor
quando um torque externo aplicado ao rotor..
















Figura 9: Motor de relutncia varivel. Extrado de (BRITES et al., 2008).
22





Figura 10: Comparao do fluxo magntico em um entreferro maior (a) e um menor (b). Adaptado de (KENJO,
1984).
- Os motores de m permanente, como o da Figura 11 possuem esses ms
adicionados estrutura do motor, e no possui dentes como o de relutncia varivel. Nas
palavras de (BRITES et al., 2008): Motores de m permanente tem baixo custo e baixa
resoluo, com passos tpicos de 7,5 a 15 (48 24 passos / revoluo).. O rotor
magnetizado com a alternncia dos plos norte e sul; tais plos esto situados em uma linha
reta que se encontra paralela ao eixo do rotor. Estes plos magnetizados fazem com que a
intensidade do fluxo magntico seja incrementada e, conseqentemente, apresenta um torque
de melhor desempenho, se comparado ao motor citado anteriormente.


Figura 11: Motor de m permanente. Extrado de (BRITES et al, 2008).

- Por ltimo, temos os motores hbridos (Fig. 12), que so mais caros, porm possuem
maior eficincia quanto aos quesitos resoluo de passo, torque e velocidade. De acordo com
(BRITES et al., 2008), ngulos de passo tpico de motores hbridos esto entre 3,6 a 0,9
(100 400 passos / volta). O motor hbrido combina as melhores caractersticas dos motores
23



de m permanente e motor de relutncia varivel.. Seu rotor multi-dentado como o de
relutncia varivel e possui um m magnetizado axialmente em volta de seu eixo. Ainda
segundo (BRITES et al., 2008), Os dentes do rotor provm um melhor caminho que ajuda a
guiar o fluxo magntico para locais preferidos no GAP de ar.. Esse GAP conhecido
tambm como entreferro.


Figura 12: Motor hbrido. Extrado de (BRITES et al., 2008).

2.3 Caractersticas e Operao
O motor de passo, alm dos movimentos precisos, apresenta mais algumas
caractersticas:
- um dispositivo seguro: se algum sistema externo quebrar, o motor pra;
- Possuem uma longa vida til;
- Excelente torque em baixas velocidades;
- tima repetibilidade: depois de avanar, pode retornar exatamente posio anterior.
- Ocorrendo alguma sobrecarga mecnica, o motor no se danifica.
Quanto sua operao, os motores de passo podem ser divididos em: unipolares e
bipolares.
Quanto ao seu enrolamento, podemos ter os motores: unipolar, bipolar, bifilar e multi-
fase.
24



Os motores unipolares (Fig. 13) tm dois enrolamentos por fase, um para cada sentido
da corrente eltrica. Nas palavras de (BRITES et al., 2008), Desde que neste arranjo um plo
magntico possa ser invertido sem comutar o sentido da corrente, o circuito da comutao
pode ser feito de forma muito simples [...] para cada enrolamento.


Figura 13: Motor unipolar. Extrado de (BRITES et al., 2008).

Os motores bipolares (Fig. 14) s tm um enrolamento por fase. A corrente eltrica em
um enrolamento precisa ser invertida para que o plo magntico tambm seja invertido. Por
isso, o circuito que conduz a corrente deve possibilitar a inverso do sentido da mesma
utilizando, por exemplo, uma ponte H. Nas palavras de (BRITES et al., 2008): H duas
ligaes por fase, nenhuma est em comum.[...]Como os enrolamentos so melhor utilizados,
so mais poderosos do que um motor unipolar do mesmo peso..

Figura 14: Motor bipolar. Extrado de (BRITES et al., 2008).


Os motores bifilares (Fig. 15), como o nome sugere, so compostos por dois fios, e so
semelhantes aos motores bipolares; porm, neste caso, cada uma das bobinas composta por
dois fios enrolados em paralelo. Ou seja: um motor bifilar possui oito terminais o dobro dos
terminais de um motor bipolar.
25



Segundo (JONES, 1995), Na prtica, motores com enrolamento bifilar so sempre
energizados como os motores unipolares ou bipolares.. Para usar o motor bifilar como
unipolar, visando alta tenso de operao, so conectados em srie os dois fios de cada
bobina. Alm disso, nas palavras de (JONES, 1995), [...] o ponto de conexo usado como
derivao central., como na bobina 1 da Figura 15. Para us-lo como bipolar, se a aplicao
exige alta corrente de operao, os dois fios de cada bobina so conectados em paralelo, como
na bobina 2 da mesma figura.

Figura 15: Motor bifilar. Adaptado de (JONES, 1995).

Por ltimo, temos os motores polifsicos ou multi-fase, que possuem todos os
enrolamentos conectados em uma srie cclica, com um ponto de derivao definido entre
cada par de enrolamentos no ciclo; ou com apenas um terminal de cada enrolamento do motor
acessvel, enquanto os terminais da outra extremidade dos enrolamentos so conectados em
comum formando uma conexo interna inacessvel. Para (JONES, 1995), No contexto dos
motores trifsicos, estas configuraes poderiam ser descritas como Delta e Y, mas elas
tambm podem ser usadas com motores de 5 fases [...], como mostra a Figura 16. Alguns
motores polifsicos deixam expostos todos os finais dos enrolamentos do motor, permitindo
ao usurio decidir usar as configuraes Delta, Y ou alternar entre ambas, permitindo acionar
cada enrolamento de forma independente. Os motores multi-fase so utilizados em aplicaes
que exigem maior torque, como posicionamento de antenas e equipamentos de laboratrio,
por exemplo.





Figura 16: Enrolamentos de um motor polifsico. Adaptado de (JONES, 1995).
26



No caso do painel de instrumentos, os motores de passo possuem um rotor que contm
um m permanente, que controlado por uma srie de campos eletromagnticos, os quais so
acionados e desacionados de forma mecnica. Para fazer a curva do eixo do motor, um
eletrom energizado, atraindo aos dentes eletromagnticos os dentes da engrenagem. Nesse
momento, os dentes da engrenagem esto alinhados a esse eletrom, porm um pouco
deslocados do eletrom seguinte. Assim, quando o prximo eletrom ligado, o anterior
desligado, sendo necessrio que a engrenagem gire um pouco para se alinhar ao prximo, e
assim por diante. Cada um desses pequenos giros chamado de passo, e uma somatria
desses passos nos d a rotao completa. Dessa maneira, o motor pode girar com preciso
angular.
Apesar de serem de baixo custo e de manuteno simples, os motores de passo sofrem
constantemente com interferncias no seu deslocamento angular, surgindo ressonncias,
vibraes e rudos no sistema. Isso pode ocorrer tanto no sistema de passo completo do motor
quanto no de meio passo. Segundo (MORAR, 2004), A fraqueza das operaes de passo
completo e de meio passo aparecem em baixas velocidades. O movimento pode ser irregular.
Para que esses efeitos sejam minimizados, aplicada ao motor a lgica do micropasso,
que exige menor posicionamento do rotor em funo do tempo se comparado ao passo
completo (Fig. 17). Ainda de acordo com (MORAR, 2004), Isto tem um significado especial
em laboratrios. A forte tendncia ressonncia mais um motivo para migrar para o
micropasso.. A tcnica do micropasso ser detalhada posteriormente neste trabalho.



Figura 17: Comparativo entre os modos de passo completo e de micropasso. Extrado de (www.atmel.com).

27



3 DRI VER DO MOTOR DE PASSO

Para acionamento do motor de passo, e posteriormente a aplicao da tcnica do
micropasso, essencial que se tenha um conhecimento do driver do mesmo.
Os sinais de sada de um sequenciador lgico so transmitidos para as entradas de um
driver de alimentao, pelo qual so direcionadas as aes de liga/desliga nos enrolamentos
do motor. Esse driver de alimentao pode ser chamado de driver do motor ou simplesmente
driver.

O mtodo mais simples de conexo a direta, mostrada nos itens (a) e (b) (Fig. 18).
Porm, se a corrente de sada do seqenciador no for suficiente para alimentar os
transistores, se torna necessrio adicionar um buffer para que seja possvel amplificar a
corrente entre os dois estgios, como mostrado nos itens (c) e (d) da Figura 18.



Figura 18: Exemplo de conexo entre um seqenciador e um driver. Extrado de (KENJO, 1984).
28



3.1 Esquema da ponte H

Um circuito fundamental para aplicaes que utilizam motor de corrente contnua - no
caso do nosso estudo, o motor de passo - chamado de circuito ponte, ou ponte H. Com ela,
possvel controlar o acionamento da bobina do motor e tambm o sentido de circulao da
corrente eltrica, que ir definir o lado para o qual o motor dever se deslocar.
O sentido de rotao do motor de corrente contnua depende da polaridade na qual ele
energizado. Considerando que a bobina de um motor de corrente contnua tenha dois pontos
(a) e (b) (Fig.19), ao fechar a chave S1 o motor ser energizado com o positivo da fonte no
ponto (a). Desse modo, o motor ir girar no sentido horrio.


Figura 19: Motor de corrente contnua.

Para fazer com que o motor gire no sentido anti-horrio, a polaridade do motor deve
ser invertida, ou seja, o positivo deve ser aplicado no ponto (b) (Fig. 20).


Figura 20: Motor de corrente contnua com sentido invertido.

Observando a Figura 19 e a Figura 20, pode-se deduzir que para inverter o sentido de
rotao do motor deve ser invertida tambm a polaridade da fonte de energia. Quando existe a
necessidade de inverter o sentido de rotao de um motor, monta-se um circuito para fazer a
inverso de polaridade a partir de chaves de acionamento. Tal circuito chamado de ponte
H, cuja denominao associada forma de construo do mesmo, como pode ser
observado na Figura 21.
29




Figura 21: Ponte H com chaves.

Ao acionar somente as chaves S1 e S4, o motor ser polarizado com positivo no ponto
a, fazendo com que o motor gire no sentido horrio. O sentido da corrente eltrica pode ser
observado na Figura 22 (a).
Ao acionar somente as chaves S2 e S3, o motor ser polarizado com o positivo no
ponto b, fazendo com que o motor gire no sentido anti-horrio. O sentido da corrente
eltrica pode ser observado na Figura 22 (b).

(a) (b)

Figura 22: Polarizao do motor para sentido horrio (a) e anti-horrio (b).
30



Substituindo as chaves utilizadas nos exemplos acima por transistores, o circuito de
ponte H pode ser controlado por sinais discretos, ou mesmo por microcontroladores.
importante colocar diodos em paralelo com os componentes de chaveamento, a fim
de bloquear picos de tenso reversa, ocasionados quando acontece o desligamento dos
transistores. Como podemos observar na Figura 23, se o transistor Q1A est conduzindo, o
caminho da corrente eltrica no circuito ser indicado pela curva de traado cinza que passa
pela bobina e conduz atravs do transistor Q2B at o aterramento. Aps cortar os transistores,
a bobina gera uma tenso reversa que descarregada atravs dos diodos. O caminho da
corrente eltrica tambm pode ser observado na Figura 23.


Figura 23: Ponte H com transistores. Extrado de (MANEA, 2009).

3.2 Microcontrolador
O microcontrolador um circuito integrado de alta capacidade que possui um
microprocessador, memrias e perifricos de I/O (entrada e sada), e em alguns modelos
dispositivos perifricos como conversores analgicos/digitais (ADC) e tambm interface de
entrada e sada de dados. Ele recebe informaes de variveis fsicas temperatura,
resistncia, velocidade, entre outras aps serem convertidas em sinais eltricos por sensores,
gerencia essas informaes atravs de uma lgica de programao e executa aes nos
dispositivos de sada (lmpadas, motores, vlvulas, etc.). A Figura 24 exemplifica, em um
diagrama de blocos, o fluxo de dados em um microcontrolador

31




Figura 24: Diagrama de blocos simplificado de um microcontrolador.

3.3 Sistema de Controle de Motor de Passo

3.3.1 Topologias de controle
As topologias de controle utilizadas em diversas aplicaes para motor de passo so:
malha aberta com tenso fixa, malha aberta com corrente fixa e em malha fechada com
controle de corrente.

3.3.1.1 Controle em malha aberta com tenso fixa

Este o mtodo mais simples de controle do motor de passo, onde a tenso aplicada
nas bobinas a tenso nominal do motor (Fig. 25).


Figura 25: Controle em malha aberta com tenso fixa.

32




3.3.1.2 Controle em malha aberta com corrente fixa

Este mtodo utilizado para ajudar a manter o torque em velocidades elevadas.
Conforme a velocidade do motor aumenta, o tempo que uma bobina fica energizada diminui.
Assim, a corrente eltrica na bobina no consegue atingir seu valor nominal, o que acarreta na
perda de torque. Para compensar essa perda, conforme a velocidade do motor aumenta,
aumenta-se a tenso injetada na bobina de forma que a corrente eltrica dela seja sempre igual
corrente nominal para qual a bobina foi projetada, mantendo uma relao de velocidade e
torque (Fig. 26).


Figura 26: Controle em malha aberta com corrente fixa.

3.3.1.3 Controle em malha fechada com controle de corrente

Neste mtodo utiliza-se um resistor shunt (Fig.27) como sensor, para fazer a leitura de
corrente que esta sendo aplicada na bobina, visando garantir que a corrente eltrica na bobina
atinja seu valor esperado (corrente nominal). A partir desse retorno, o controle aumenta ou
diminui a corrente conforme a necessidade (Fig. 28).

Figura 27: Driver com sensor de corrente.
33




Figura 28: Controle em malha fechada com controle de corrente.

3.3.2 Formas de controle

3.3.2.1 Passo completo

Passo completo o maior deslocamento que o rotor faz quando uma bobina do estator
energizada. Para fazer um passo completo, no caso do motor unipolar, energiza-se uma
bobina de cada vez. Ao energizar um enrolamento do estator, ele cria um fluxo que se alinha
com o rotor. Ento esta primeira bobina deve ser desacionada e em seguida outra bobina deve
ser acionada. Isto far com que o fluxo criado na bobina que est energizada puxe o rotor,
fazendo ele se deslocar para se alinhar com o fluxo. Para deslocar mais um passo, a bobina
deve ser desenergizada e energizada a prxima da sequncia, e assim sucessivamente para as
outras bobinas, conforme mostrado na Figura 29.


Figura 29: Sequncia de acionamento no motor unipolar com passo completo. Adaptado de (pt.wikipedia.org).

34



No caso de um motor bipolar, uma bobina deve ser energizada de cada vez, e em
seguida elas devem ser energizadas com a polaridade invertida, como se observa na Figura
30.


Figura 30: Motor bipolar com passo completo. Adaptado de (BRITES et al., 2008).

3.3.2.2 Meio Passo

Para o meio passo utilizando o motor unipolar, preciso energizar uma bobina, e ento
a prxima bobina da sequencia deve ser energizada. O fluxo magntico criado por essa bobina
far com que o motor desloque em direo mesma, porm como a outra bobina ainda est
acionada, seu fluxo ser similar ao da primeira e, devido a isso, o rotor se manter entre as
duas bobinas. Em seguida, desenergiza-se a primeira bobina que foi energizada e assim
sucessivamente, como pode ser visto na Figura 31.


Figura 31: Motor unipolar com meio passo. Extrado de (BRITES et al., 2008).

Quando um motor bipolar utilizado com meio passo, a seqncia fica como na
Figura 32.

35




Figura 32: Motor bipolar com meio passo. Extrado de (BRITES et al., 2008).

3.3.3 Sistema de Micropasso
O sistema de microstepping (micropasso) consiste em controlar o fluxo de corrente
que passa pelas bobinas, criando uma subdiviso do passo completo, e dessa forma gerando
maior suavidade no movimento do rotor. Segundo (MANEA, 2009), [...] a melhor forma de
onda para controlar a corrente no motor de passo uma senoide.. Deve-se observar que, ao
controlar os motores de passo em full step ou em half step, a seqncia eltrica de energizar as
bobinas se repete a cada quatro ciclos.Esse fenmeno do motor de passo significa que um
ciclo eltrico completo (360 eltricos) consiste em quatro passos completos. Vale lembrar
que um ciclo eltrico completo diferente de uma volta completa do rotor.
O motor de passo um motor eltrico sncrono, ou seja, cuja posio do rotor est em
sincronia com o fluxo do estator. A lgica de micropasso existente dentro do motor que o
rotor ter um movimento bem mais suave sob baixas freqncias, j que o fluxo do estator,
que controla a posio na qual o rotor deve parar, vai se alterar gradualmente e dosado em
pequenas partes. A corrente nas bobinas devera seguir a trajetria de uma senoide (Fig. 33),
defasadas de 90 uma da outra, seguindo de maneira mais contnua, se comparado aos
sistemas de full-step (passo completo) e half-step (meio passo).

36




Figura 33: Corrente nas bobinas durante o micropasso e sua trajetria resultante. Extrado de (YEDAMALE et
al., 2002).

A trajetria de corrente resultante no micropasso pode ser observada detalhadamente
na Figura 34.

Figura 34: Trajetria da corrente no micropasso utilizando 1/8 de passo. Extrado de (LAIDMAN, 2001).

H muitos tipos de micropasso: desde 1/3 de passo at 1/64 de passo, ou at passos
menores ainda.
37



Com freqncias chegando a duas ou trs vezes maiores que a freqncia natural do
sistema, o micropasso acaba tendo pouca influncia no movimento do rotor, se comparado ao
passo completo. Os motivos para tal afirmao so a inrcia de carga e o efeito da filtragem
do rotor.
Em muitas aplicaes, o modo de micropasso pode incrementar o desempenho do
sistema, alm de baixar os custos e a complexidade do mesmo. Pode ser usado para resolver
problemas de rudos e ressonncia que de fato afetam os motores de passo do painel de
instrumentos automotivo e elevar os nveis de preciso e resoluo de cada passo dado pelo
motor.
Podemos afirmar que o sistema de micropasso permite que os nveis de energia de
excitao (Fig. 35) sejam reduzidos de tal forma que todas as ressonncias sejam
completamente eliminadas. Porm, isso s atingvel em um motor de passo ideal. Na
verdade, h vrias fontes de aumento de ressonncia no sistema. Apesar disso, usar a tcnica
do micropasso suaviza e lineariza o movimento em praticamente todas as aplicaes, e em
muitos casos ele sozinho pode proporcionar uma reduo ntida das vibraes e dos rudos e
satisfazer a aplicao.


Figura 35: Energia de excitao em funo dos comprimentos de passo. Extrado de (Industrial Circuits
Application Note Microstepping).

Aliado a um microprocessador no caso de nosso estudo, o microcontrolador , a
aplicao do micropasso pode ser feita com o auxlio de PWM (Pulse Width Modulation).
38



Pode ser introduzida tambm com conversores D/A (Digital/Analgico) dentro do prprio
microprocessador, a fim de baratear o mximo possvel os custos de hardware, mas sem abrir
mo da qualidade da aplicao dentro do cluster.

3.4 Circuito PWM


O PWM (Pulse Width Modulation) uma forma de controlar um nvel de corrente
eltrica aplicada a uma carga modulando a largura do pulso do sinal. Para isto, mantm-se a
amplitude do sinal constante e rapidamente o mesmo ligado e desligado, variando o tempo
que a carga recebe corrente eltrica e o tempo que no recebe, criando assim uma tenso
mdia entre os tempos t
1
(ligado) e t
2
(desligado), conforme ilustrado na Figura 36.


Figura 36: Sinal PWM. Extrado de (GHIRARDELLO, 2008).

A parte alta do sinal chamada de duty cycle (ciclo ativo); ela define a potncia
aplicada carga, que corresponde ao tempo que a carga fica ligada. Ela calculada dividindo
o ciclo ativo (t1) pela freqncia (t) e multiplicando por 100, o que observado na figura 37.




Figura 37: Ciclo ativo. Extrado de (GHIRARDELLO, 2008).

A figura 38 mostra exemplos de variao da potncia aplicada carga.
39





Figura 38: Potncia aplicada carga. Extrado de (GHIRARDELLO, 2008).


40



4 EXPERIMENTOS
Foi desenvolvido um circuito para simular algumas funes do cluster de um veculo.
Para isto, utilizamos um microcontrolador PIC16F877A para gerenciar as informaes
recebidas atravs do sensor de velocidade, do sensor do nvel de combustvel no tanque e da
chave de ignio, a fim de transmitir informaes da velocidade atual do veculo, nvel de
combustvel e quilometragem total e parcial atravs de motores de passo e um display digital.
O prottipo do circuito montado pode ser observado na Figura 39.


Figura 39: Prottipo experimental.

4.1 Velocmetro

O sensor de velocidade - ou sensor de relutncia varivel - montado de frente a uma
rodafnica com um nmero conhecido de dentes (Fig. 40) para que o deslocamento do carro
seja obtido em funo da distncia entre eles; foi ligado na entrada de captura de borda de
pulso do microcontrolador (CCP), atravs da qual medimos o tempo entre dois pulsos para
calcular a velocidade instantnea do veculo. Neste experimento, o sinal desse sensor foi
simulado por um gerador de funes.



41












Figura 40: Sensor de velocidade. Extrado de (BOSCH, 2005).

Para se obter o deslocamento do veculo necessrio calcular o permetro da roda.
Utilizamos como base uma roda aro 13. Como o dimetro da roda est em polegadas,
primeiramente convertemos em milmetros e fizemos os seguintes clculos:

4 , 25 13 = D

mm D 2 , 330 =

raio Permetro = t 2

|
.
|

\
|
=
2
2 , 330
2 t Permetro

mm Permetro 838 , 1036 =

Convertendo em metros teremos:

m Permetro 037 , 1 =

Para efeito de clculos, consideramos o permetro da roda igual a 1m, e que o sensor
gera um pulso a cada volta e montamos a Tabela 1:




42




1 km/h 1000 pulsos/h 1000 pulsos 3600 s
10 km/h 10000 pulsos/h 10000 pulsos 3600 s
100 km/h 100000 pulsos/h 100000 pulsos 3600 s
200 km/h 200000 pulsos/h 200000 pulsos 3600 s
240 km/h 240000 pulsos/h 240000 pulsos 3600 s

1 km/h 0,277778 m/s
10 km/h 2,777778 m/s
100 km/h 27,77778 m/s
200 km/h 55,55556 m/s
240 km/h 66,66667 m/s
Tabela 1: Relaes entre velocidade, pulsos e perodo para se definir o deslocamento.

Utilizamos a constante 3600 para calcular a velocidade em funo do intervalo entre
dois pulsos.
Tomando como exemplo um pulso com tempo de 360ms temos:

o empoDoPuls
oPorPulso eslocament teTempo ons
tnea ns elocidadeI
T
D C
V

=
tan
tan


36 , 0
001 , 0 3600
tan

=
tnea ns elocidadeI
V



h km V
tnea ns elocidadeI
/ 10
tan
=


A partir destes dados, foi criada uma rotina de software para constantemente verificar
o tempo entre os pulsos, calcular a velocidade e mostr-la atravs de uma escala graduada,
sendo atrelada a velocidade atual a um ponteiro. Este tem seu movimento angular gerado por
um motor de passo, que controlado em funo da velocidade atual.
O motor de passo utilizado tem 0,5 de deslocamento angular por passo mecnico, ou
ainda 2 de deslocamento angular por cada ciclo eltrico, o que corresponde a quatro passos
de deslocamento mecnico.
Foi verificado com testes que, para percorrer por toda a escala que compreende de 0 a
240km/h, foram necessrios 560 passos do motor ou seja 140 ciclos eltricos.
Calculando o valor para cada 1km/h temos:

43









Calculando em ciclos eltricos:






Primeiramente foi feito o controle do motor de passo utilizando passos completos,
tendo como base no desenvolvimento do nosso software de controle do motor os ciclos
eltricos. O esquema de controle do motor segue o fluxograma da Figura 41, que est
detalhado no Anexo V.


Figura 41: Fluxograma parcial de controle do motor.



... 333 , 2
240
560 1
/ 1
/ 240 560
=

=
=
=
x
x
h km xpassos
h km passos
583 , 0
240
140 1
/ 1
/ 240 140
=

=
=
=
x
x
h km xciclos
h km ciclos
44



4.2 Marcador de Combustvel

O sensor de nvel de combustvel, um sensor resistivo com formato de boia (Fig. 42),
utilizado para verificar a quantidade de combustvel dentro do tanque de gasolina do veculo,
funciona como um potencimetro; conforme o nvel de combustvel varia, ele retorna um
valor de resistncia proporcional posio da boia. O sinal deste sensor foi simulado por um
potencimetro, que foi ligado entrada analgica AN0 do microcontrolador. O esquema de
ligao pode ser observado na Figura 43.


Figura 42: Sensor de nvel de combustvel.


Figura 43: Esquema eltrico do sensor de combustvel.

45



O conversor A/D (Analgico/Digital) utilizado foi configurado para trabalhar com oito
bits, e foi feita a Tabela 2 para estabelecer a relao do sinal com o nmero de bits.
Range de sinal do sensor = 0 5V
Resoluo do conversor = 8 bits
Calculando o valor de tenso para um bit:

V V
V
bit
bit
019608 , 0
255
0 5
=

=


Tenso (V) Valor Digital Nvel Estimado
0 0 Vazio
2,5019 127 Metade
5 255 Cheio
Tabela 2: Relao para se encontrar o nvel de combustvel.
O deslocamento necessrio para mover o ponteiro por toda a escala do marcador de
combustvel (Fig. 44) de 114.


Figura 44: Marcador de combustvel.

Como estamos utilizando como referncia para deslocamento do motor de passo, que
move o ponteiro um ciclo eltrico, que neste caso gira o motor 2, precisaremos de 57 ciclos
para deslocar o motor do ponto indicador de tanque vazio at o ponto indicador de nvel
cheio.

4.2 Odmetro

46



Para calcular o deslocamento do veculo e atualizar o valor a ser mostrado no
odmetro, utilizamos o mesmo sinal do sensor de velocidade, j conhecendo o valor do
deslocamento por pulso. Foi criada uma rotina no software do microcontrolador para
incrementar uma varivel a cada pulso do sensor, e escrever num display de LCD (Fig. 44) a
quilometragem atual a cada 0,1km. Com esta varivel, foram feitos dois odmetros: um que
marca a quilometragem total e no pode ser apagado, e um parcial, que pode ser zerado ao
pressionar um boto, o qual est ligado entrada digital C0.


Figura 45. Display LCD.
4.3 Micropassos

Aps os testes de funcionamento controlando o motor de passos com full step (passo
completo), observamos que o ponteiro do mostrador quando movimentado em baixas
velocidades se deslocava de forma no linear, com preciso maior que 2 km/h, aparentando
que o motor estava com dificuldades de transmitir movimento. A fim de minimizar esse
efeito, alteramos a forma de controle do motor, criando subdivises em cada passo fazendo
com que o ponteiro se movimentasse mais uniformemente.
Decidimos dividir um passo completo em oito micropassos e ento fizemos o
levantamento das variveis necessrias para utilizar no controle. Como o micropasso utiliza o
controle de corrente nas bobinas do motor, calculamos a quantidade de corrente necessria
para aplicar em cada passo, conforme descrito a seguir.
Cada passo completo desloca o motor por 90 eltricos. Dividindo em oito
micropassos, temos que:

25 , 11
8
90
=
47




Ento cada 1/8 de passo vai deslocar o rotor por 11,25, e o seno do ngulo de
deslocamento nos fornece a porcentagem de corrente que deve ser aplicada na Fase1.

( ) 19509 , 0 25 , 11 = Seno
ou seja, 19,51% de corrente.

Para 2/8 temos:

( ) 382683 , 0 5 , 22
5 , 22 2
8
90
=
=
Seno

ou seja, 38,27% de corrente.

Seguindo este raciocnio, foi criada a Tabela 3.


Passo Deslocamento
Corrente aplicada-
seno(deslocamento)
0 0 0,00%
1/8 11,25 19,51%
2/8 22,5 38,27%
3/8 33,75 55,56%
4/8 45 70,71%
5/8 56,25 83,15%
6/8 67,5 92,39%
7/8 78,75 98,08%
1 90 100,00%
Tabela 3: Porcentagem de corrente por deslocamento em funo do seno do ngulo.

Como as duas bobinas precisam estar defasadas em 90, para a segunda bobina,
teremos a mesma tabela, porm agora em funo do cosseno, como mostra a Tabela 4.
Podemos observar nessa tabela que a porcentagem de corrente aplicada bobina corresponde
aos pontos no grfico da Figura 34.


48



Passo Deslocamento
Corrente aplicada -
cos(deslocamento)
0 0 100,00%
1/8 11,25 98,08%
2/8 22,5 92,39%
3/8 33,75 83,15%
4/8 45 70,71%
5/8 56,25 55,56%
6/8 67,5 38,27%
7/8 78,75 19,51%
1 90 0,00%
Tabela 4: Porcentagem de corrente por deslocamento em funo do cosseno do ngulo.

Ento modificamos nossa rotina de software de acionamento do motor, para controlar
a quantidade de corrente injetada nas bobinas, obedecendo a seqncia das Tabelas 3 e 4. Para
isto, utilizamos os PWM internos do microcontrolador, associados a uma ponte H e a uma
porta de controle, conforme a Figura 46, que tambm se encontra no Anexo IV deste trabalho.

Figura 46: Driver do motor de passo para micropassos.
49




Coletamos algumas amostras dos sinais de controle nas etapas de testes de
funcionamento do motor controlado com micropassos. A Figura 47 e a Figura 48 mostram o
comportamento da sada de PWM do microcontrolador utilizando a frequncia de 1KHz,
fazendo o uso das tabelas (3) e (4).
Utilizamos um transistor bipolar BC548, pois, devido ao fato de que ele de uso
comum e facilmente encontrado no mercado e tambm de que a corrente de acionamento das
bobinas do motor utilizado era baixa, ele atendia s necessidades do experimento prtico.











Figura 47: Sinal de PWM no controle do micropasso.



Figura 48: Sinal de PWM no controle do micropasso.

O sinal aps passar pela ponte H pode ser observado na Figura 49.

50




Figura 49: Sinal na ponte H.

Como citado no contedo terico do captulo 3, foi colocado um resistor como sensor
de corrente na sada da ponte H para coletar o sinal de corrente nas bobinas, que mostrado
na Figura 50 e na Figura 51.


Figura 50: Forma de onda da corrente nas bobinas.


Figura 51: Forma de onda da corrente nas bobinas.

51



5 CONCLUSES E PROPOSTAS FUTURAS

Aps os experimentos prticos terem sido finalizados e analisando os sinais colhidos
pelo osciloscpio, chegou-se concluso de que a aplicao da tcnica de controle utilizando
micropassos em um motor de passo aumenta significativamente a preciso do motor quando
comparado ao controle passo completo. A velocidade quando utilizamos micropassos se
manteve a mesma em comparao ao passo completo, visto que foi criada uma relao para
manter a velocidade igual a do controle de passos completos. Quando utilizado 1/8 de passo,
aumentamos a velocidade do acionamento dos micropassos em oito vezes, mantendo a mesma
velocidade de percurso do ponteiro. Foi criado um algoritmo de testes do motor e
cronometrado o deslocamento do ponteiro durante o percurso, utilizando a tcnica de controle
de micropassos. Com o acionamento de cada micropasso em 1ms, obtivemos 4,4 segundos no
cronmetro; j com o controle de passos completos, o acionamento de cada passo foi feito a
cada 8ms e cronometramos o tempo total de 4,54 segundos. Portanto, o micropasso se mostra
uma tcnica de controle vlida e eficaz, que possibilita um deslocamento nitidamente mais
suavizado do motor - como foi visto no prottipo -, ou seja, maior estabilidade quando ele se
encontra em situao de baixos nveis de rotao. Esse resultado pode se estender a outros
motores de passo utilizados no painel do veculo, visto que o mesmo, salvo as aquisies de
dados do automvel, segue os princpios e caractersticas de funcionamento que foram
abordados no prottipo utilizado neste trabalho.
Como perspectiva de propostas futuras, sugerimos que essa tcnica do micropasso seja
inserida primeira parte do nosso projeto, ou seja, que possa ser executada dentro da
programao desenvolvida e descrita no Anexo I, e posteriormente adicionando os demais
componentes de um cluster, que possa ser prosseguida a montagem do mesmo.
Deve-se salientar que nosso hardware est limitado a utilizar um motor de passo com
a tcnica de controle por micropassos, pois possui apenas duas sadas PWM; utilizando o
microcontrolador PIC 18F4520, possvel acionar dois motores ao mesmo tempo com essa
tcnica.








REFERNCIAS
ALLAIN, Gildas. Microstepping: A Smoother Way of Life, Atmel Automotive Compilation,
Vol. 5, 2008, disponvel em http://www.atmel.com/, acessado em 04/04/2012.
ASTARLOA, Armando, BIDARTE, Unai, ZULOAGA, Aitzol, ALEGRIA, Iigo Mtz. De.
Reconfigurable Microstepping Control of Stepper Motors using FPGA embedded RAM,
Department of Electronics and Telecommunications, University of the Basque Country,
Bilbao, Spain, 2003.
BOSCH, Robert L.. Manual de Tecnologia Automotiva, 25 Edio Editora Edgard Blcher,
So Paulo, 2005.
BRITES, Felipe Gonalves, SANTOS, Vinicius Puga de Almeida. Motor de Passo,
Universidade Federal Fluminense, Grupo PET-Tele, Niteri RJ, 2008.
CONDIT, Reston, JONES, Dr. Douglas W., University of Iowa. AN 907 Stepping Motor
Fundamentals, Microchip Technology Inc., 2004.
DING, Shoucheng. Design And Implementation of the Numeric Automobile Instrument,
LanzhouUniversity of Technology, China, 2008.
Fraen Corporation. Fraen6405-15xx Standard Stepper Motors Datasheet.
Geo Storm Gsi, disponvel em http://commons.wikimedia.org/, acessado em 03/04/2012.
GHIRARDELLO, Ariovaldo Prof., Apostila sobre Modulao PWM, Curso Tcnico em
Eletrnica, Colgio Politec, 2008.
GRANT, Matthew. AN 2974 Quick Start for Beginners to Drive a Stepper Motor, Freescale
Semiconductor, 2005.
GUIMARES, Alexandre de Almeida. Eletrnica Embarcada Automotiva, 1 Edio
Editora rica, So Paulo, 2007.
Industrial Circuits Application Note Microstepping, disponvel em
http://users.ece.utexas.edu/, acessado em 02/04/2012.
JONES, Douglas W.. Control of Stepping Motors, Department of Computer Science,
University of Iowa, 1995.
KENJO, Takashi. Stepping Motors And Their Microprocessor Controls, OxfordUniversity
Press, 1984.





LAIDMAN, Russell. Stepper Motors and Control, 2001. Disponvel em
http://www.stepperworld.com/, acessado em 05/04/2012.
MANEA, Sorin. AN 1307- Stepper Motor Control With dsPIC DSCs, Microchip
Technology Inc., 2009.
MORAR, Alexandru. Microstepping Control Card, Department of Electrical Engineering,
Petru Maior University of Trgu-Mures, Romania, 2004.
Motor de Passo, disponvel em http://pt.wikipedia.org/, acessado em 30/03/2012.
OFRIA, Charles. Understanding Your Dashboard Gauges, Smart Trac Computer Systems
Inc., 2007, disponvel em http://www.familycar.com/, acessado em 30/03/2012.
YEDAMALE, Padmaraja, CHATTOPADHYAY, Sandip.AN 822 - Stepper Motor
Microstepping with PIC 18F452, Microchip Technology Inc., 2002.










































ANEXO I
Programao do projeto inicial

/******************************************************************************/
/* Modulo: driverMotor.c */
/* Descrio: Modulo principal (main loop) . */
/* Projeto: Cluster */
/* Autores: Leone */
/* : Vando */
/* Compilador/Assembler: CCS versao 3.43 */
/* Hardware: Microchip PIC16F877A */
/* Data: <05/04/2012> */
/* */
/* Historico: Iniciais Motivo da Mudana */
/* do Projetista */
/* 05/04/2012 LSILVA Initial version. */
/* VSOUSA */
/* */
/* 12/04/2012 LSILVA Testes Drive do Motor */
/* VSOUSA */
/* */
/* 19/04/2012 LSILVA Testes Drive do Motor */
/* VSOUSA */
/* */
/* 26/04/2012 LSILVA Subrotinas */
/* VSOUSA */
/* */
/* 03/05/2012 LSILVA Loop Principal */
/* VSOUSA */
/* */
/* 10/05/2012 LSILVA Loop Principal */
/* VSOUSA */
/* */
/* 17/05/2012 LSILVA Ajustes */
/* VSOUSA */
/* */
/******************************************************************************/

#include"16F877A.h"
#include"_lcd_1.c"
#use delay(clock=4000000)
#fuses XT,NOWDT,PUT,NOBROWNOUT,NOLVP
#zero_ram


/******************************************************************************/
/* Definio das Variveis */
/******************************************************************************/

int timer; //varivel que temporiza intervalo entre as aes da subrotina do acionamento do motor do
mostrador de combustivel
long int segundo;
int combustivel; //variavel para armazenar leitura analogica do sensor de combustivel
boolean bit; //variavel utilizada para piscar um led como estatus de funcionamento do programa
boolean flag1; //flag de passagem na subrotina do controle do motor do ponteiro combustivel
boolean flag2; //flag de passagem na subrotina do controle do motor do ponteiro combustivel
boolean flag3 =; //flag de passagem na subrotina do controle do motor do ponteiro combustivel
boolean flagAnalog; //flag de passagem na subrotina do da leitura de combustivel
boolean flagAnalog2; //flag de passagem na subrotina do da leitura de combustivel




int memoria; // tenta evitar ruidos nos extremos do potenciometro
signed int passos; // indica o nmero de passos que o marcador deve andar
int posMotor; // variavel que monitora a posio do marcador do combustivel

boolean flag1Vel; //flag de passagem na subrotina do controle do motor do ponteiro da velocidade
boolean flag2Vel; //flag de passagem na subrotina do controle do motor do ponteiro da velocidade
boolean flag3Vel; //flag de passagem na subrotina do controle do motor do ponteiro da velocidade
signed int passosVel; // indica o nmero de passos que o marcador deve andar no motor do velocimetro
float aux2_vel; //variavel para auxiliar nos calculos na subrotina da velocidade
int posMotorVel; // variavel que monitora a posio do marcador do velocimetro
int timerVel; //varivel que temporiza intervalo entre as aes da subrotina do acionamento do motor do
mostrador de velocidade
int bounceVel; //variavel utilizada no auxilio de retirar ruidos de acionamento na subrotina de leitura da
velocidade
boolean flagCCP1; //flag de passagem na interrupo do ccp1
long int timerccp; //variavel que ira contar o tempo entre dois pulsos do sensor da roda para calcular a
velocidade e a distancia percorrida
long int timerccp_2; //variavel utilizada para copiar o valor de tempo entre dois pulsos do sensor da roda para
calcular a velocidade e a distancia percorrida

long int timerLeVel; //varivel que temporiza intervalo entre as leituras de velocidade instantanea

int unidadekm; //
int dezenakm;
int centenakm;
long int odototal; // variavel que armazena distancia percorrida no odometro total
long int odoparcial; // variavel que armazena distancia percorrida no odometro parcial
int auxOdototal; // variavel auxiliar para odometro total
boolean inicializa; // flag que marca que a inicializao foi feita
boolean desligado; // flag que marca que o sistema foi desligado
int timerDesliga; // variavel que temporiza a verificao se o sistema foi desligado

int timerOdo; //varivel que temporiza intervalo entre as aes da subrotina do odometro
boolean flagOdo1; //flag de passagem na subrotina do odometro
boolean flagOdo2; //flag de passagem na subrotina do odometro
boolean flagOdo3; //flag de passagem na subrotina do odometro
boolean flagOdo4; //flag de passagem na subrotina do odometro

/******************************************************************************/
/* Nome: TrataTimer */
/* Descrio: Realiza a interrupo do timer 0 */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

#int_timer0 // trata interrupo do TIMER0
void tratat0 ()
{
set_timer0(131 + get_timer0 () ); // Carrega timer 0 com 131 para ter uma base de tempo de 1 ms ********

if (timer) // Faz o decremento da variavel que faz os intervalos de acionamento das bobinas do motor
{
timer--; // do ponteiro do marcador de combustivel at que seja zero.*******
}

if (timerVel) // Faz o decremento da variavel que faz os intervalos de acionamento das bobinas do motor
{
timerVel--; // do ponteiro do marcador de Velocidade at que seja zero. *****
}





if (timerOdo) // Faz o decremento da varivel que faz os intervalos de atualizao
{
timerOdo--; // dos digitos do display at que seja zero.******
}

if (timerLeVel) // Faz o decremento da variavel que faz os intervalos de leitura da velocidade
{
timerLeVel--; // at que seja zero.******
}

if (timerDesliga) // Faz o decremento da variavel que faz os intervalos para poder verificar
{
timerDesliga--; // se o sistema foi desligado.*****
}

segundo ++; // incrementa a variavel do sinalizador de status.*****

timerccp ++; // incrementa a varivel que conta o intervlo entre os pulsos da roda.*****

if (500 == segundo) // A cada meio segundo inverte o estado do bit para atualizar o sinalizador de
status.*******
{
bit = !bit;
segundo = 0;
}



}







/******************************************************************************/
/* Nome: TrataCCP */
/* Descrio: Trata a interrupo do CCP1 */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/


#int_CCP1 // trata interrupo do CCP1
void trataCCP1 ()
{



if(input(pin_c0)) // Verifica se a chave de ignio (entrada C0) esta ligada (1)
{
odoparcial ++; // Incrementa varivel do odometro Parcial contando 1 metro******
auxOdototal ++; // Incrementa varivel auxiliar do odometro Total contando 1 metro
}

if (flagCCP1) // Se flag CCP1 for um indica que primeira leitura j foi efetuada
{
timerccp_2 = timerccp; // copia valor do intervalo entre os pulsos
timerccp = 0; // zera para medir novamente.****




}

if (!flagCCP1) // Se flag CCP1 for zero indica primeira leitura
{
flagCCP1 = 1; // liga flag CCP1 para idicar que foi feita a primeira leitura
timerccp = 0; // zera varivel que conta o intervalo entre os pulsos da roda
}

}


/******************************************************************************/
/* Nome: ContMotor */
/* Descrio: Controlar o motor de passo do combustivel */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void ContMotor(void)
{

if(0 > passos) // Avana sentido anti-horrio
{
if ((!timer)&&(!flag1)&&(!flag2)&&(!flag3)) // Verifica se esta no tempo de acionar a bobina e se a flag
ja foi acionada
{
output_low(pin_b3); // Desliga bobina acionada anteriormente
output_high(pin_b0); // Liga prxima bobina da sequencia
flag1 = 1; // Aciona flag de passagem
timer = 10; // carrega tempo para prximo acionamento
}

if ((!timer)&&(flag1)&&(!flag2)&&(!flag3)) // Verifica se esta no tempo de acionar a bobina e se a flag ja
foi acionada
{
output_low(pin_b0); // Desliga bobina acionada anteriormente
output_high(pin_b1); // Liga prxima bobina da sequencia
flag2 = 1; // Aciona flag de passagem
timer = 10; // carrega tempo para prximo acionamento
}
if ((!timer)&&(flag1)&&(flag2)&&(!flag3)) // Verifica se esta no tempo de acionar a bobina e se a flag ja
foi acionada
{
output_low(pin_b1); // Desliga bobina acionada anteriormente
output_high(pin_b2); // Liga prxima bobina da sequencia
flag3 = 1; // Aciona flag de passagem
timer = 10; // carrega tempo para prximo acionamento
}

if ((!timer)&&(flag1)&&(flag2)&&(flag3)) // Verifica se esta no tempo de acionar a bobina e se a flag ja
foi acionada
{
output_low(pin_b2); // Desliga bobina acionada anteriormente
output_high(pin_b3); // Liga prxima bobina da sequencia
flag1 = 0; // Zera flag de passagem para liberar proximo ciclo
flag2 = 0; // Zera flag de passagem para liberar proximo ciclo
flag3 = 0; // Zera flag de passagem para liberar proximo ciclo
posMotor --; // Decrementa varivel de posio atual do motor pois completou um passo (de
cada bobina)
timer = 10; // carrega tempo para prximo acionamento




}
}

if(0 < passos) // Recua (sentido horrio)
{


if ((!timer)&&(!flag1)&&(!flag2)&&(!flag3)) // Verifica se esta no tempo de acionar a bobina e se a flag ja
foi acionada
{
output_low(pin_b3); // Desliga bobina acionada anteriormente
output_high(pin_b2); // Liga prxima bobina da sequencia
flag1 = 1; // Aciona flag de passagem
timer = 10; // carrega tempo para prximo acionamento
}

if ((!timer)&&(flag1)&&(!flag2)&&(!flag3)) // Verifica se esta no tempo de acionar a bobina e se a flag ja
foi acionada
{
output_low(pin_b2); // Desliga bobina acionada anteriormente
output_high(pin_b1); // Liga prxima bobina da sequencia
flag2 = 1; // Aciona flag de passagem
timer = 10; // carrega tempo para prximo acionamento
}
if ((!timer)&&(flag1)&&(flag2)&&(!flag3)) // Verifica se esta no tempo de acionar a bobina e se a flag ja
foi acionada
{
output_low(pin_b1); // Desliga bobina acionada anteriormente
output_high(pin_b0); // Liga prxima bobina da sequencia
flag3 = 1; // Aciona flag de passagem
timer = 10; // carrega tempo para prximo acionamento
}

if ((!timer)&&(flag1)&&(flag2)&&(flag3)) // Verifica se esta no tempo de acionar a bobina e se a flag ja
foi acionada
{
output_low(pin_b0); // Desliga bobina acionada anteriormente
output_high(pin_b3); // Liga prxima bobina da sequencia
flag1 = 0; // Zera flag de passagem para liberar proximo ciclo
flag2 = 0; // Zera flag de passagem para liberar proximo ciclo
flag3 = 0; // Zera flag de passagem para liberar proximo ciclo
posMotor ++; // Incrementa varivel de posio atual do motor pois completou um passo (de
cada bobina)
timer = 10; // carrega tempo para prximo acionamento
}
}

}

/******************************************************************************/
/* Nome: ContMotorVel */
/* Descrio: Controlar o motor de passo da velocidade */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void ContMotorVel(void)
{

if(0 > passosVel) // Avana sentido anti-horrio




{
if ((!timerVel)&&(!flag1Vel)&&(!flag2Vel)&&(!flag3Vel)) // Verifica se esta no tempo de acionar a
bobina e se a flag ja foi acionada
{
output_low(pin_c7); // Desliga bobina acionada anteriormente
output_high(pin_c4); // Liga prxima bobina da sequencia
flag1Vel = 1; // Aciona flag de passagem
timerVel = 10; // carrega tempo para prximo acionamento
}

if ((!timerVel)&&(flag1Vel)&&(!flag2Vel)&&(!flag3Vel)) // Verifica se esta no tempo de acionar a bobina
e se a flag ja foi acionada
{
output_low(pin_c4); // Desliga bobina acionada anteriormente
output_high(pin_c5); // Liga prxima bobina da sequencia
flag2Vel = 1; // Aciona flag de passagem
timerVel = 10; // carrega tempo para prximo acionamento
}
if ((!timerVel)&&(flag1Vel)&&(flag2Vel)&&(!flag3Vel)) // Verifica se esta no tempo de acionar a bobina
e se a flag ja foi acionada
{
output_low(pin_c5); // Desliga bobina acionada anteriormente
output_high(pin_c6); // Liga prxima bobina da sequencia
flag3Vel = 1; // Aciona flag de passagem
timerVel = 10; // carrega tempo para prximo acionamento
}

if ((!timerVel)&&(flag1Vel)&&(flag2Vel)&&(flag3Vel)) // Verifica se esta no tempo de acionar a bobina e
se a flag ja foi acionada
{
output_low(pin_c6); // Desliga bobina acionada anteriormente
output_high(pin_c7); // Liga prxima bobina da sequencia
flag1Vel = 0; // Zera flag de passagem para liberar proximo ciclo
flag2Vel = 0; // Zera flag de passagem para liberar proximo ciclo
flag3Vel = 0; // Zera flag de passagem para liberar proximo ciclo
posMotorVel --; // Decrementa varivel de posio atual do motor pois completou um
passo (de cada bobina)
timerVel = 10; // carrega tempo para prximo acionamento
}
}

if(0 < passosVel) // Recua (sentido horrio)
{


if ((!timerVel)&&(!flag1Vel)&&(!flag2Vel)&&(!flag3Vel)) // Verifica se esta no tempo de acionar a
bobina e se a flag ja foi acionada
{
output_low(pin_c7); // Desliga bobina acionada anteriormente
output_high(pin_c6); // Liga prxima bobina da sequencia
flag1Vel = 1; // Aciona flag de passagem
timerVel = 10; // carrega tempo para prximo acionamento
}

if ((!timerVel)&&(flag1Vel)&&(!flag2Vel)&&(!flag3Vel)) // Verifica se esta no tempo de acionar a bobina
e se a flag ja foi acionada
{
output_low(pin_c6); // Desliga bobina acionada anteriormente
output_high(pin_c5); // Liga prxima bobina da sequencia
flag2Vel = 1; // Aciona flag de passagem




timerVel = 10; // carrega tempo para prximo acionamento
}
if ((!timerVel)&&(flag1Vel)&&(flag2Vel)&&(!flag3Vel)) // Verifica se esta no tempo de acionar a bobina
e se a flag ja foi acionada
{
output_low(pin_c5); // Desliga bobina acionada anteriormente
output_high(pin_c4); // Liga prxima bobina da sequencia
flag3Vel = 1; // Aciona flag de passagem
timerVel = 10; // carrega tempo para prximo acionamento
}

if ((!timerVel)&&(flag1Vel)&&(flag2Vel)&&(flag3Vel)) // Verifica se esta no tempo de acionar a bobina e
se a flag ja foi acionada
{
output_low(pin_c4); // Desliga bobina acionada anteriormente
output_high(pin_c7); // Liga prxima bobina da sequencia
flag1Vel = 0; // Zera flag de passagem para liberar proximo ciclo
flag2Vel = 0; // Zera flag de passagem para liberar proximo ciclo
flag3Vel = 0; // Zera flag de passagem para liberar proximo ciclo
posMotorVel ++; // Incrementa varivel de posio atual do motor pois completou um
passo (de cada bobina)
timerVel = 10; // carrega tempo para prximo acionamento
}
}

}


/******************************************************************************/
/* Nome: PiscaLed */
/* Descrio: Pisca um Led */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void PiscaLed(void)
{
output_bit(pin_c3,bit); // Atualiza estado do led de status ***** pisca com frequencia de(1 Hz)*** para
auxiliar se o programa travou
}

/******************************************************************************/
/* Nome: Analogica */
/* Descrio: Faz a leitura do nivel de combustivel */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Analogica(void)
{
if ((!flagAnalog) && (!timer) && (!flagAnalog2)) // Verifica se esta no tempo de ler o sinal da boia de
combustivel e se a flag de leitura ja foi acionada
{
flagAnalog = 1; // Aciona a flag de leitura
combustivel = read_adc(); // le o sinal analgico da boia de nivel de combustivel
}

if ((flagAnalog) && (!timer) &&(!flagAnalog2)) // Verifica se esta no tempo de ler o sinal da boia de
combustivel e se a flag de leitura ja foi acionada
{





memoria = ((combustivel / 4.5) - posMotor); // Faz o calculo do numero de passos necessrios para
colocar o ponteiro na posio
// referente ao valor lido anteriormente. obs: 4.5 uma constante obtida com testes de
deslocamento
if (memoria >= 250) // Verifica se esta prximo a extremidade do sensor
{
memoria = 255; // fora para valor maximo para evitar ruidos
}

if (memoria <= 10) // Verifica se esta prximo a extremidade do sensor
{
memoria = 0; // fora para valor minimo para evitar ruidos
}

passos = memoria; // Numero de passos para o motor do combustivel
flagAnalog2 = 1; // Aciona marcador de passagem

}

if ((flagAnalog) && (!timer) &&(flagAnalog2)) // Verifica se passou o tempo e se as flags foram acionadas
{
flagAnalog = 0; // Zera flag de passagem para liberar proximo ciclo
flagAnalog2 = 0; // Zera flag de passagem para liberar proximo ciclo
}

}

/******************************************************************************/
/* Nome: Velocimetro */
/* Descrio: Faz a leitura da velocidade */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Velocimetro(void)
{

if(!timerLeVel) // Verifica se ja passou o tempo para efetuar a leitura
{
aux2_vel = ( 3600 / timerccp_2) ; // Utiliza constante (3600) para calcular a velocidade em funo
do intervalo entre 2 pulsos.


if(aux2_vel > 255) // Faz ajuste para evitar ruidos nos valores das extremidades
{
aux2_vel = 255; // Fora para valor mximo
}

if(aux2_vel < 5) // Faz ajuste para evitar ruidos nos valores das extremidades
{
aux2_vel = 0; // Fora para valor mnimo
}

passosVel = ((aux2_vel / 2) - posMotorVel); // Calcula o deslocamento necessrio (numero de passos) para
colocar ponteiro na posio futura

bounceVel = passosVel; // Copia numero de passos necessrios para um variavel que no
cosidera os sinais (+ -)





if(3 > bounceVel) // Verifica uma diferena minima de tres passos para evitar ruidos no
ponteiro
{
passosVel = 0; // Se a diferena no atingiu o valor minimo, carrega com zero para no
alterar a posio
bounceVel = 0;
}

timerLeVel = 100; // Carrega variavel de tempo para prxima leitura

}


}

/******************************************************************************/
/* Nome: Odometro */
/* Descrio: Atualiza Odometro */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Odometro(void)
{
if(auxOdototal >=100) // Verifica se atingiu 100 pulsos ( 1 pulso = 1 metro)
{
odototal ++; // Se atingiu os 100 metros incrementa variavel do odometro total
auxOdototal = 0; // e zera a variavel auxiliar para iniciar novamente.
}


if(!timerOdo && !flagOdo1 && !flagOdo2 && !flagOdo3 && !flagOdo4 )
{

output_D(0xC8);
comando ();

output_D(((odototal / 10000) % 10)+0x30);
escreve();

flagOdo1 = 1;
timerOdo = 100;
}

if(!timerOdo && flagOdo1 && !flagOdo2 && !flagOdo3 && !flagOdo4 )
{

output_D(0xC9);
comando ();

output_D(((odototal / 1000) % 10)+0x30);
escreve();

output_D(0x89);
comando ();

output_D('0');
escreve();

flagOdo2 = 1;




timerOdo = 100;
}

if(!timerOdo && flagOdo1 && flagOdo2 && !flagOdo3 && !flagOdo4 )
{

output_D(0xCA);
comando ();

output_D(((odototal / 100) % 10)+0x30);
escreve();

output_D(0x8A);
comando ();

output_D(centenakm+0x30);
escreve();

flagOdo3 = 1;
timerOdo = 100;
}

if(!timerOdo && flagOdo1 && flagOdo2 && flagOdo3 && !flagOdo4 )
{

output_D(0xCB);
comando ();

output_D(((odototal / 10) % 10)+0x30);
escreve();

output_D(0x8B);
comando ();

output_D(dezenakm+0x30);
escreve();

flagOdo4 = 1;
timerOdo = 100;
}

if(!timerOdo && flagOdo1 && flagOdo2 && flagOdo3 && flagOdo4 )
{

output_D(0xCC);
comando ();

output_D('.');
escreve();

output_D(0xCD);
comando ();

output_D((odototal % 10)+0x30);
escreve();

output_D(0x8C);
comando ();

output_D('.');




escreve();

output_D(0x8D);
comando ();

output_D(unidadekm+0x30);
escreve();

flagOdo1 = 0;
flagOdo2 = 0;
flagOdo3 = 0;
flagOdo4 = 0;
timerOdo = 100;
}








}

/******************************************************************************/
/* Nome: Contador */
/* Descrio: Atualiza Contador */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Contador(void)
{

if(odoparcial >=100)
{
unidadekm ++;
odoparcial = 0;
}

if(unidadekm>9)
{
unidadekm = 0;
dezenakm ++;
}

if(dezenakm>9)
{
dezenakm = 0;
centenakm ++;
}

if(centenakm>9)
{
unidadekm = 0;
dezenakm = 0;
centenakm =0;
}

if(!input(pin_C1))




{
unidadekm = 0;
dezenakm = 0;
centenakm =0;
}

}

/******************************************************************************/
/* Nome: Inicializacao */
/* Descrio: Inicializa e faz as definies de hardware */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Inicializacao(void)
{
setup_adc_ports(RA0_analog);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_ccp1(CCP_CAPTURE_RE);
enable_interrupts(INT_RTCC);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);


set_tris_a(0x01);
set_tris_b(0x00);
set_tris_c(0x07);
set_tris_d(0x00);
set_tris_e(0x00);

preparacao();
}

/******************************************************************************/
/* Nome: Init_Var */
/* Descrio: Atribui valores iniciais as variveis */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Init_Var(void)
{
int timer = 0;
long int segundo;
int combustivel =0;
boolean bit = 0;
boolean flag1 = 0;
boolean flag2 = 0;
boolean flag3 = 0;
boolean flagAnalog = 0;
boolean flagAnalog2 = 0;
int memoria = 0;




signed int passos = 0;
int posMotor = 0;
boolean flag1Vel = 0;
boolean flag2Vel = 0;
boolean flag3Vel = 0;
signed int passosVel = 0;
float aux2_vel = 0;
int posMotorVel = 0;
int timerVel = 0;
int bounceVel = 0;
boolean flagCCP1 = 0;
long int timerccp = 0;
long int timerccp_2 = 0
timerLeVel = 0unidadekm = 0;
dezenakm = 0;
centenakm = 0;
odototal = 0;
odoparcial = 0;
auxOdototal = 0;
inicializa = 0;
desligado = 0;
timerDesliga = 0;
timerOdo = 0;
bflagOdo1 = 0;
flagOdo2 = 0;
flagOdo3 = 0;
flagOdo4 = 0;

}


/******************************************************************************/
/* Nome: InicializaLCD */
/* Descrio: Inicializa o LCD */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void InicializaLCD(void)
{
output_D('C');
escreve();
output_D('L');
escreve();
output_D('U');
escreve();
output_D('S');
escreve();
output_D('T');
escreve();
output_D('E');
escreve();
output_D('R');
escreve();

output_D(0xCE);
comando();

output_D('k');
escreve();




output_D('m');
escreve();

output_D(0x8E);
comando();

output_D('k');
escreve();
output_D('m');
escreve();

inicializa = 1;
}

/******************************************************************************/
/* Nome: Desliga */
/* Descrio: Desliaga o LCD e coloca os ponteiros na posio inicial */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Desliga(void)
{

if(!timerDesliga)
{
if(!desligado)
{
preparacao();
inicializa = 0;
desligado = 1;
}

if(posMotorVel)
{
passosVel = (0 - posMotorVel);
ContMotorVel();
}

if(posMotor)
{
passos = (0 - posMotor);
ContMotor();
}

timerDesliga = 10;
}

}

/******************************************************************************/
/* Nome: main */
/* Descrio: Executa o programa principal */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void main(void)
{





Inicializacao();
Init_Var();
timerOdo = 100;
timerDesliga = 10;

while(1)

{
PiscaLed();

while(input(pin_c0))

{
if(!inicializa)
{
InicializaLCD();
desligado = 0;
}

ContMotor(); // Chama subrotina de controle do motor do mostrador de combustivel

ContMotorVel(); // Chama subrotina de controle do motor do mostrador de velocidade

PiscaLed(); // Chama subrotina de status do programa ( piscando led enquanto o programa
esta rodando)

Analogica(); // Chama subrotina de leitura do nivel de combustivel

Velocimetro(); // Chama subrotina de leitura de velocidade

Odometro(); // Chama subrotina de atualizao do odometro

Contador(); // Chama subrotina que conta o odometro parcial
}

Desliga(); //Chama subrotina que posiciona os ponteiros e desliga o LCD quando o painel
desligado

}

}


output_D('0');
escreve();

flagOdo2 = 1;
timerOdo = 100;
}

if(!timerOdo && flagOdo1 && flagOdo2 && !flagOdo3 && !flagOdo4 )
{

output_D(0xCA);
comando ();

output_D(((odototal / 100) % 10)+0x30);
escreve();

output_D(0x8A);




comando ();

output_D(centenakm+0x30);
escreve();

flagOdo3 = 1;
timerOdo = 100;
}

if(!timerOdo && flagOdo1 && flagOdo2 && flagOdo3 && !flagOdo4 )
{

output_D(0xCB);
comando ();

output_D(((odototal / 10) % 10)+0x30);
escreve();

output_D(0x8B);
comando ();

output_D(dezenakm+0x30);
escreve();

flagOdo4 = 1;
timerOdo = 100;
}

if(!timerOdo && flagOdo1 && flagOdo2 && flagOdo3 && flagOdo4 )
{

output_D(0xCC);
comando ();

output_D('.');
escreve();

output_D(0xCD);
comando ();

output_D((odototal % 10)+0x30);
escreve();

output_D(0x8C);
comando ();

output_D('.');
escreve();

output_D(0x8D);
comando ();

output_D(unidadekm+0x30);
escreve();

flagOdo1 = 0;
flagOdo2 = 0;
flagOdo3 = 0;
flagOdo4 = 0;
timerOdo = 100;




}








}

/******************************************************************************/
/* Nome: Contador */
/* Descrio: Atualiza Contador */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Contador(void)
{

if(odoparcial >=100)
{
unidadekm ++;
odoparcial = 0;
}

if(unidadekm>9)
{
unidadekm = 0;
dezenakm ++;
}

if(dezenakm>9)
{
dezenakm = 0;
centenakm ++;
}

if(centenakm>9)
{
unidadekm = 0;
dezenakm = 0;
centenakm =0;
}

if(!input(pin_C1))
{
unidadekm = 0;
dezenakm = 0;
centenakm =0;
}

}

/******************************************************************************/
/* Nome: Inicializacao */
/* Descrio: Inicializa e faz as definies de hardware */
/* Entrada: Nenhum */
/* Retorno: Nenhum */




/******************************************************************************/

void Inicializacao(void)
{
setup_adc_ports(RA0_analog);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_ccp1(CCP_CAPTURE_RE);
enable_interrupts(INT_RTCC);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);


set_tris_a(0x01);
set_tris_b(0x00);
set_tris_c(0x07);
set_tris_d(0x00);
set_tris_e(0x00);

preparacao();
}

/******************************************************************************/
/* Nome: Init_Var */
/* Descrio: Atribui valores iniciais as variveis */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Init_Var(void)
{



}
/******************************************************************************/
/* Nome: InicializaLCD */
/* Descrio: Inicializa o LCD */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void InicializaLCD(void)
{
output_D('C');
escreve();
output_D('L');
escreve();
output_D('U');
escreve();
output_D('S');
escreve();
output_D('T');
escreve();




output_D('E');
escreve();
output_D('R');
escreve();

output_D(0xCE);
comando();

output_D('k');
escreve();
output_D('m');
escreve();

output_D(0x8E);
comando();

output_D('k');
escreve();
output_D('m');
escreve();

inicializa = 1;
}

/******************************************************************************/
/* Nome: Desliga */
/* Descrio: Desliga o LCD e coloca os ponteiros na posio inicial */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void Desliga(void)
{

if(!timerDesliga)
{
if(!desligado)
{
preparacao();
inicializa = 0;
desligado = 1;
}

if(posMotorVel)
{
passosVel = (0 - posMotorVel);
ContMotorVel();
}

if(posMotor)
{
passos = (0 - posMotor);
ContMotor();
}

timerDesliga = 10;
}

}





/******************************************************************************/
/* Nome: Main */
/* Descrio: Executa o programa principal */
/* Entrada: Nenhum */
/* Retorno: Nenhum */
/******************************************************************************/

void main(void)
{

Inicializacao();
timerOdo = 100;
timerDesliga = 10;

while(1)

{
PiscaLed();

while(input(pin_c0))

{
if(!inicializa)
{
InicializaLCD();
desligado = 0;
}

ContMotor(); // Chama subrotina de controle do motor do mostrador de combustivel

ContMotorVel(); // Chama subrotina de controle do motor do mostrador de velocidade

PiscaLed(); // Chama subrotina de status do programa ( piscando led enquanto o programa
esta rodando)

Analogica(); // Chama subrotina de leitura do nivel de combustivel

Velocimetro(); // Chama subrotina de leitura de velocidade

Odometro(); // Chama subrotina de atualizao do odometro

Contador(); // Chama subrotina que conta o odometro parcial
}

Desliga(); //Chama subrotina que posiciona os ponteiros e desliga o LCD quando o painel
desligado

}

}














ANEXO II

Hardware do projeto inicial












ANEXO III








































































































MotorVel
tempo2
== 0?
passos_vel
passos_vel
>0
Retorna
sim sim
sim
no
no
no
Passo
MotorVel
Sent. Horario
Passo
MotorVel
Sent. Ant-Horario
tempo2 =
intervalo_tempo2
Atualiza posio do ponteiro de velocidade
passos_vel ++ passos_vel - -
































































Analgica
tempo3
== 0?
leitura
==1?
Retorna
sim
sim
no
no
tempo3 =
intervalo_tempo3
Faz Leitura do nvel do combustvel
L entrada
analgica
leitura = 1
calcula
passos_c
































































Velocmetro
tempo4
== 0?
Retorna
no
tempo4 =
intervalo_tempo4
Faz leitura da velocidade
calcula
velocidade
com intervalo
de tempo entre
dois pulsos do
ccp1
leitura = 1
calcula
passos_vel
sim
































































Odmetro
tempo5
== 0
odo_
alterou?
Retorna
sim sim
no
no
tempo5 =
intervalo_tempo5
Atualiza odmetro
Atualiza odmetro
no display LCD
































































#int_timer0
Retorna
Interrupo Timer 0
tempo1--
tempo1
tempo2--
tempo2
tempo3--
tempo3
tempo4--
tempo4
tempo5--
tempo5
timerccp++
































































#int_CCP1
Interrupo CCP1
odmetro_++
auxtimerccp = timerccp
timerccp = 0
Retorna





ANEXO IV

Hardware do micropasso


















ANEXO V

Fluxograma do micropasso



Incio
Define I/O
Define variveis
Configura PWM
Configura Timers
Habilita
Interrupes
1
Aciona Bobina 4
A
passos
>140?
!tempo
flag1 ==
0?
set_pwm1_duty(255);
set_pwm2_duty(0);
flag1 = 1
sim
no
sim
no
tempo = valor_tempo
1
sim
no
sim
Aciona Bobina 1
Desaciona Bobina 3































!tempo
flag1 ==
1?
set_pwm1_duty(250);
set_pwm2_duty(50);
flag1 = 2
sim
no
sim
no
!tempo
flag1 ==
2?
sim
no
sim
no
tempo = valor_tempo
1
!tempo
flag1 ==
3?
set_pwm1_duty(212);
set_pwm2_duty(142);
flag1 = 4
sim
no
sim
no
tempo = valor_tempo
2
set_pwm1_duty(236);
set_pwm2_duty(98);
flag1 = 3
tempo = valor_tempo





!tempo
flag1 ==
4?
set_pwm1_duty(180);
set_pwm2_duty(180);
flag1 = 5
sim
no
sim
no
!tempo
flag1 ==
5?
sim
no
sim
no
tempo = valor_tempo
2
!tempo
flag1 ==
6?
set_pwm1_duty(98);
set_pwm2_duty(236);
flag1 = 7
sim
no
sim
no
tempo = valor_tempo
3
set_pwm1_duty(142);
set_pwm2_duty(212);
flag1 = 6
tempo = valor_tempo





!tempo
flag1 ==
7?
set_pwm1_duty(50);
set_pwm2_duty(250);
flag1 = 8
sim
no
sim
no
tempo = valor_tempo
3
passos ++
!tempo
flag1 ==
9?
set_pwm1_duty(0);
set_pwm2_duty(255);
Desaciona Bobina 4
sim
no
sim
no
tempo = valor_tempo
4
!tempo
flag1 ==
8?
set_pwm1_duty(0);
set_pwm2_duty(255);
flag1 = 9
sim
no
sim
no
tempo = valor_tempo
passos ++
flag1 = 10
Aciona Bobina 2





!tempo
flag1
== 10?
set_pwm1_duty(50);
set_pwm2_duty(250);
flag1 = 11
sim
no
sim
no
!tempo
flag1
== 11?
sim
no
sim
no
tempo = valor_tempo
4
!tempo
flag1
== 12?
set_pwm1_duty(142);
set_pwm2_duty(212);
flag1 = 13
sim
no
sim
no
tempo = valor_tempo
5
set_pwm1_duty(98);
set_pwm2_duty(236);
flag1 = 12
tempo = valor_tempo





!tempo
flag1 ==
13?
set_pwm1_duty(180);
set_pwm2_duty(180);
flag1 = 14
sim
no
sim
no
!tempo
flag1 ==
14?
sim
no
sim
no
tempo = valor_tempo
5
!tempo
flag1 ==
15?
set_pwm1_duty(236);
set_pwm2_duty(98);
flag1 = 16
sim
no
sim
no
tempo = valor_tempo
6
set_pwm1_duty(212);
set_pwm2_duty(142);
flag1 = 15
tempo = valor_tempo





!tempo
flag1 ==
16?
set_pwm1_duty(250);
set_pwm2_duty(50);
flag1 = 17
sim
no
sim
no
tempo = valor_tempo
6
passos ++
!tempo
flag1
== 18?
set_pwm1_duty(255);
set_pwm2_duty(0);
flag1 = 19
sim
no
sim
no
tempo = valor_tempo
7
!tempo
flag1 ==
17?
set_pwm1_duty(255);
set_pwm2_duty(0);
flag1 = 18
sim
no
sim
no
tempo = valor_tempo
passos ++
Desaciona Bobina 2
Aciona Bobina 3





!tempo
flag1
== 19?
set_pwm1_duty(250);
set_pwm2_duty(50);
flag1 = 20
sim
no
sim
no
!tempo
flag1
== 20?
sim
no
sim
no
tempo = valor_tempo
!tempo
flag1
== 21?
set_pwm1_duty(212);
set_pwm2_duty(142);
flag1 = 22
sim
no
sim
no
tempo = valor_tempo
7
0
set_pwm1_duty(236);
set_pwm2_duty(98);
flag1 = 21
tempo = valor_tempo
8





!tempo
flag1 ==
22?
set_pwm1_duty(180);
set_pwm2_duty(180);
flag1 = 23
sim
no
sim
no
!tempo
flag1 ==
23?
sim
no
sim
no
tempo = valor_tempo
!tempo
flag1 ==
24?
set_pwm1_duty(98);
set_pwm2_duty(236);
flag1 = 25
sim
no
sim
no
tempo = valor_tempo
set_pwm1_duty(142);
set_pwm2_duty(212);
flag1 = 24
tempo = valor_tempo
8
9





!tempo
flag1 ==
25?
set_pwm1_duty(50);
set_pwm2_duty(250);
flag1 = 26
sim
no
sim
no
tempo = valor_tempo
passos ++
!tempo
flag1
== 27?
set_pwm1_duty(0);
set_pwm2_duty(255);
Desaciona Bobina 3
sim
no
sim
no
tempo = valor_tempo
Aciona Bobina 4
flag1 = 28
!tempo
flag1 ==
26?
set_pwm1_duty(0);
set_pwm2_duty(255);
flag1 = 27
sim
no
sim
no
tempo = valor_tempo
passos ++
9
10





!tempo
flag1
== 28?
set_pwm1_duty(50);
set_pwm2_duty(250);
flag1 = 29
sim
no
sim
no
!tempo
flag1
== 29?
sim
no
sim
no
tempo = valor_tempo
!tempo
flag1
== 30?
set_pwm1_duty(142);
set_pwm2_duty(212);
flag1 = 31
sim
no
sim
no
tempo = valor_tempo
set_pwm1_duty(98);
set_pwm2_duty(236);
flag1 = 30
tempo = valor_tempo
10
11




!tempo
flag1 ==
31?
set_pwm1_duty(180);
set_pwm2_duty(180);
flag1 = 32
sim
no
sim
no
!tempo
flag1 ==
32?
sim
no
sim
no
tempo = valor_tempo
!tempo
flag1 ==
33?
set_pwm1_duty(236);
set_pwm2_duty(98);
flag1 = 34
sim
no
sim
no
tempo = valor_tempo
set_pwm1_duty(212);
set_pwm2_duty(142);
flag1 = 33
tempo = valor_tempo
11
12





!tempo
flag1 ==
34?
set_pwm1_duty(250);
set_pwm2_duty(50);
flag1 = 35
sim
no
sim
no
tempo = valor_tempo
passos ++
!tempo
flag1 ==
35?
set_pwm1_duty(255);
set_pwm2_duty(0);
flag1 = 0
sim
no
sim
no
tempo = valor_tempo
passos ++
Desaciona Bobina 3
A
12




ANEXO VI

Programao do micropasso

/*************************************************************************/
/* Modulo: Micropassos.c */
/* Descrio: Controle do motor de passo utilizando micropasso com uma */
/*rotina de testes */
/* Projeto: TCC Cluster controlando o motor de passo com Micropassos */
/* Autores: Leone */
/* : Vando */
/* Compilador/Assembler: CCS versao 3.43 */
/* Hardware: Microchip PIC16F877A*/
/* Data: <24/05/2012>*/
/*************************************************************************/

#include<16f877A.h>// Inclui o arquivo padro do pic 16f877A
#use delay(clock=4000000)// Utiliza clock de 4MHz para gerar delay
#fuses XT,NOWDT,PUT,NOBROWNOUT

/*************************************************************************/
/*Definio das Variveis*/
/*************************************************************************/

long int segundo = 0;
long int tempo = 500;
long int a = 0;
int b;
long int passos = 0;
boolean led = 1;
int flag1 = 0;

/*************************************************************************/
/*Interrupo Timer0 */
/*************************************************************************/

#int_timer0
void trata_t0 ()
{
set_timer0(131 + get_timer0 () ); // Carrega timer 0 com 131 para ter uma base de tempo de 1 ms ********

segundo ++;

if(tempo)
{
tempo--;
}


if(segundo > 1000)
{
segundo =0;
led = !led;
}


}
/*************************************************************************/
/*Programa Principal */




/*************************************************************************/


void main()
{

/*************************************************************************/
/*Inicializao do hardware*/
/*************************************************************************/


setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_timer_2(T2_div_by_4,248,1); //timer2 = 1,004 khz
setup_timer_2(T2_div_by_4,248,1);
setup_ccp2(ccp_pwm); //ativa pwm
setup_ccp1(ccp_pwm); //ativa pwm
set_pwm2_duty (0); //configura ciclo ativo em 0
set_pwm1_duty (0); //configura ciclo ativo em 0
setup_vref(FALSE);
set_tris_a (0x00);
set_tris_b (0x00);
set_tris_c (0x00);
set_tris_d (0x00);
set_tris_e (0x00);
set_adc_channel (10);
delay_ms (15);


enable_interrupts (global | int_timer0);

set_pwm2_duty(0);
output_d (0b00000001);
output_c (0b00000001);
output_high(pin_c5);
delay_ms(1000);

a = 40;
b = 1;
tempo = a;


//255
//250
//236
//212
//180
//142
//98
//50
//0


/*************************************************************************/
/*Loop de Teste da Tecnica de Micropassos utilizando 1/8 passo*/




/*************************************************************************/


while(1)

{

output_bit(pin_d1, led);

if(passos<124)
{
if((!tempo) && (flag1 ==0) ) // Aciona BOBINA Sequencia 1
{
output_bit(pin_d2, 0);
output_bit(pin_d3, 0);
output_bit(pin_c4, 0);

set_pwm2_duty(0);
set_pwm1_duty(255);
flag1 = 1;
tempo = a;

output_bit(pin_d2, 1);
output_bit(pin_c5, 1);
}



if((!tempo) && (flag1 ==1) ) // 1/8 Passo
{
set_pwm2_duty(50);
set_pwm1_duty(250);
flag1 = 2;
tempo = a;
}

if((!tempo) && (flag1 ==2) ) // 2/8 Passo
{
set_pwm2_duty(98);
set_pwm1_duty(136);
flag1 = 3;
tempo = a;
}

if((!tempo) && (flag1 ==3) ) // 3/8 Passo
{
set_pwm2_duty(142);
set_pwm1_duty(212);
flag1 = 4;
tempo = a;
}

if((!tempo) && (flag1 ==4) ) // 4/8 Passo
{
set_pwm2_duty(180);
set_pwm1_duty(180);
flag1 = 5;
tempo = a;
}





if((!tempo) && (flag1 ==5) ) // 5/8 Passo
{
set_pwm2_duty(212);
set_pwm1_duty(142);
flag1 = 6;
tempo = a;
}

if((!tempo) && (flag1 ==6) ) // 6/8 Passo
{
set_pwm2_duty(236);
set_pwm1_duty(98);
flag1 = 7;
tempo = a;
}

if((!tempo) && (flag1 ==7) ) // 7/8 Passo
{
set_pwm2_duty(250);
set_pwm1_duty(50);
flag1 = 8;
tempo = a;
}

if((!tempo) && (flag1 ==8) ) // 8/8 Passo
{
set_pwm2_duty(255);
set_pwm1_duty(0);
flag1 = 9;
tempo = a;
}


if((!tempo) && (flag1==9 ) ) // Aciona BOBINA Sequencia 2
{
output_bit(pin_c4, 0);
output_bit(pin_c5, 0);

set_pwm1_duty(0);
set_pwm2_duty(255);
flag1 = 10;
tempo = a;

output_bit(pin_d3, 1);
}

if((!tempo) && (flag1 ==10) ) // 1/8 Passo
{
set_pwm2_duty(250);
set_pwm1_duty(50);
flag1 = 11;
tempo = a;
}

if((!tempo) && (flag1 ==11) ) // 2/8 Passo
{
set_pwm2_duty(236);
set_pwm1_duty(98);
flag1 = 12;
tempo = a;




}

if((!tempo) && (flag1 ==12) ) // 3/8 Passo
{
set_pwm2_duty(212);
set_pwm1_duty(142);
flag1 = 13;
tempo = a;
}

if((!tempo) && (flag1 ==13) ) // 4/8 Passo
{
set_pwm2_duty(180);
set_pwm1_duty(180);
flag1 = 14;
tempo = a;
}

if((!tempo) && (flag1 ==14) ) // 5/8 Passo
{
set_pwm2_duty(142);
set_pwm1_duty(212);
flag1 = 15;
tempo = a;
}

if((!tempo) && (flag1 ==15) ) // 6/8 Passo
{
set_pwm2_duty(98);
set_pwm1_duty(236);
flag1 = 16;
tempo = a;
}

if((!tempo) && (flag1 ==16) ) // 7/8 Passo
{
set_pwm2_duty(50);
set_pwm1_duty(250);
flag1 = 17;
tempo = a;
}

if((!tempo) && (flag1 ==17) ) // 8/8 Passo
{
set_pwm2_duty(0);
set_pwm1_duty(255);
flag1 = 18;
tempo = a;
}


if((!tempo) && (flag1==18) ) //Aciona BOBINA Sequencia 3
{
output_bit(pin_d2, 0);
output_bit(pin_c5, 0);

set_pwm2_duty(0);
set_pwm1_duty(255);
flag1 = 19;
tempo = a;





output_bit(pin_c4, 1);
}

if((!tempo) && (flag1 ==19) ) // 1/8 Passo
{
set_pwm2_duty(50);
set_pwm1_duty(250);
flag1 = 20;
tempo = a;
}

if((!tempo) && (flag1 ==20) ) // 2/8 Passo
{
set_pwm2_duty(98);
set_pwm1_duty(236);
flag1 = 21;
tempo = a;
}

if((!tempo) && (flag1 ==21) ) // 3/8 Passo
{
set_pwm2_duty(142);
set_pwm1_duty(212);
flag1 = 22;
tempo = a;
}

if((!tempo) && (flag1 ==22) ) // 4/8 Passo
{
set_pwm2_duty(180);
set_pwm1_duty(180);
flag1 = 23;
tempo = a;
}

if((!tempo) && (flag1 ==23) ) // 5/8 Passo
{
set_pwm2_duty(212);
set_pwm1_duty(142);
flag1 = 24;
tempo = a;
}

if((!tempo) && (flag1 ==24) ) // 6/8 Passo
{
set_pwm2_duty(236);
set_pwm1_duty(98);
flag1 = 25;
tempo = a;
}

if((!tempo) && (flag1 ==25) ) // 7/8 Passo
{
set_pwm2_duty(250);
set_pwm1_duty(50);
flag1 = 26;
tempo = a;
}





if((!tempo) && (flag1 ==26) ) // 8/8 Passo
{
set_pwm2_duty(255);
set_pwm1_duty(0);
flag1 = 27;
tempo = a;
}



if((!tempo) && (flag1 ==27) ) //Aciona BOBINA Sequencia 4
{
output_bit(pin_d2, 0);
output_bit(pin_d3, 0);

set_pwm2_duty(255);
set_pwm1_duty(0);
flag1 = 28;
tempo = a;

output_bit(pin_c5, 1);
}

if((!tempo) && (flag1 ==28) ) // 1/8 Passo
{
set_pwm2_duty(250);
set_pwm1_duty(50);
flag1 = 29;
tempo = a;
}

if((!tempo) && (flag1 ==29) ) // 2/8 Passo
{
set_pwm2_duty(236);
set_pwm1_duty(98);
flag1 = 30;
tempo = a;
}

if((!tempo) && (flag1 ==30) ) // 3/8 Passo
{
set_pwm2_duty(212);
set_pwm1_duty(142);
flag1 = 31;
tempo = a;
}

if((!tempo) && (flag1 ==31) ) // 4/8 Passo
{
set_pwm2_duty(180);
set_pwm1_duty(180);
flag1 = 32;
tempo = a;
}

if((!tempo) && (flag1 ==32) ) // 5/8 Passo
{
set_pwm2_duty(142);
set_pwm1_duty(212);
flag1 = 33;




tempo = a;
}

if((!tempo) && (flag1 ==33) ) // 6/8 Passo
{
set_pwm2_duty(98);
set_pwm1_duty(236);
flag1 = 34;
tempo = a;
}

if((!tempo) && (flag1 ==34) ) // 7/8 Passo
{
set_pwm2_duty(50);
set_pwm1_duty(250);
flag1 = 35;
tempo = a;
}

if((!tempo) && (flag1 ==35) ) // 8/8 Passo
{
set_pwm2_duty(0);
set_pwm1_duty(255);
flag1 = 0;
tempo = a;
passos ++;
}

}



}

}

Das könnte Ihnen auch gefallen