UNIVERSIDADE LUTERANA DO BRASIL – ULBRA
CONTROLE DE MOTOR DE PASSO VIA PORTA PARALELA -BUILDER C++
FABRÍCIO DE MARI
Canoas, junho de 2007.
SUMÁRIO
1. INTRODUÇÃO.......................................................................................................03
1.1 Objetivo .....................................................................................................04
1.2 Justificativa ...............................................................................................04
1.3 Cronograma ..............................................................................................04
1.4 Orçamento ................................................................................................05
2. METODOLOGIA ...................................................................................................06
2.1 Software ....................................................................................................06
2.1.1 Interface Gráfica e fluxogramas ..................................................06
2.1.2 Fundamentação Teórica .............................................................07
2.1.2.1 Porta Paralela ................................................................07
2.1.2.2 Motor de Passo .............................................................10
2.1.3 Descrição do software .................................................................11
2.1.4 Testes a serem realizados ..........................................................12
2.2 Hardware ..................................................................................................13
2.2.1 Descrição do Hardware ...............................................................13
2.2.2 Esquema elétrico ........................................................................13
3. RESULTADOS ......................................................................................................14
3.1 Problemas técnicos encontrados ..............................................................14
3.2 Resultados obtidos ...................................................................................14
4. CONCLUSÃO .......................................................................................................15
REFERÊNCIAS BIBLIOGRÁFICAS .........................................................................16
ANEXO I ....................................................................................................................17
ANEXO II ...................................................................................................................19
1. INTRODUÇÃO
Motores de passos são dispositivos mecânicos eletro-magnéticos que podem
ser controlados digitalmente através de um hardware específico ou através de
softwares.
Motores de passos são encontrados em aparelhos onde a precisão é um fator
muito importante. São usados em larga escala em impressoras, plotters, scanners,
drivers de disquetes, discos rígidos e muitos outros aparelhos.
Existem vários modelos de motores de passos disponíveis no mercado que
podem ser utilizados para diversos propósitos. Poderemos utilizá-los para mover
robôs, câmeras de vídeo, brinquedos ou mesmo uma cortina.
Em relação aos outros motores, o motor de passos apresenta evidentes
vantagens, como tamanho e custo reduzidos, total adaptação à lógica digital (o que
permite o controle preciso da velocidade direção e distância), características de
bloqueio, pouco desgaste e dispensa realimentação.
São poucas as desvantagens mas elas existem:
Má relação potência/volume: quando é necessário acionar uma carga pesada
com um motor de passo, este se torna cada vez maior. Quanto maior sua potência,
maior seu tamanho.
Controle relativamente complexo: um motor de passo tem que ser controlado
por um dispositivo digital, na maioria das vezes um computador, e necessita de um
controlador.
1.1 – Objetivo
Este trabalho tem por objetivo, por em prática parte dos conhecimentos
adquiridos durante a disciplina de Engenharia de Processamento Digital II,
demonstrando que tais conhecimentos foram bem assimilados pelos alunos.
Esta disciplina nos trouxe conhecimentos que nos deixaram aptos a desenvolver
sistemas que façam interface entre hardware e software utilizando uma linguagem
de programação visual, orientada a objetos que é de grande utilização no mercado.
1.2 – Justificativa
O projeto descrito neste relatório foi criado com base na grande utilização que os
motores de passo têm hoje na indústria. A escolha deste assunto trouxe também
mais conhecimentos sobre a utilização da porta paralela para acionamento de
aparelhos externos, que pode trazer facilidades no dia a dia das pessoas.
Tendo também a pretensão de demonstrar estar apto a desenvolver softwares
que façam a interface entre o usuário e hardware.
1.3 – Cronograma
07/05/07 - Escolha do projeto
10/05/07 – Compra dos materiais
14/05/07 – Inicio da montagem do Hardware
16/05/07 - Procura de bibliografia para auxiliar no desenvolvimento
21/05/07 – Desenvolvimento do fluxograma inicial
22/05/07 – Testes de Hardware
23/05/07 – Conclusão do Hardware
01/06/07 – Inicio de desenvolvimento do software
02/06/07 - Incrementado tela gráfica
02/06/07 - Acrescentado figuras
04/06/07 - Inclusão do arquivo io.h
05/06/07 - Testes com software e hardware
06/06/07 - Criado rotina para sentido anti_horario.
07/06/07 - Rotinas de sentido de rotação separadas em funções
07/06/07 - Seleção dos sentidos de rotação
08/06/07 - Incluído Main Menu
08/06/07 - Criado form2 para Help->About
09/06/07 - Criado 3 velocidades fixas
11/06/07 - Botão de SAIR
12/06/07 - Numero de voltas determinado pelo usuario
13/06/07 - Alteração para determinar velocidade
13/06/07 - Velocidades variável
15/06/07 - Alteração na rotina de passos - retirado laço for e utilizado timer
15/06/07 - Barra para controle de velocidade
18/06/07 - Colocado contador de pulsos e voltas
21/06/07 – Relatório
1.4 – Orçamento
1 pç – Placa padrão................................................................................. R$ 8,00
1 pç – Motor de Passo .............................................................................. Sucata
1 pç – CI ULN 2003 ................................................................................. R$ 1,00
1 pç – Suporte p/ CI ................................................................................ R$ 0,50
1 pç – cabo 25p ........................................................................................ Sucata
1 pç – Conector DB25 .............................................................................. Sucata
1 pç – Diodo Zener 12 v / 0,5W .............................................................. R$ 0,70
1 pç – Fonte de alimentação 12 v / 1 A .................................................... Sucata
5 pç – Plugs ............................................................................................. R$ 6,00
1m – Estanho .......................................................................................... R$ 2,00
1 pç - Ferro de Solda .......................................................................... Já possuía
1 pç - Caixa de proteção ........................................................................... Sucata
Total ...................................................................................................... R$ 18,20
2. METODOLOGIA
2.1 – Software
2.1.1 – Interface Gráfica e fluxogramas
Tela Principal
1
2
3
9
6
4
10
5
7
8
1 – Barra de Ferramentas
2 – Botão liga
3 – Botão desliga
4 – Barra de velocidade
5 – Indicador da velocidade ( intervalo entre passos ) mili segundos
6 – Botão para reiniciar contadores
7 – Contador de pulsos
8 – Contador de voltas realizadas
9 – Seleção do sentido de rotação
10 – Botão sair
Tela Help – About
Esta é uma tela informativa, com dados sobre o programa e o autor. Ela
informa a universidade, o curso e o nome do autor, assim como a data em que foi
criado o software e também o e-mail do autor para maiores informações.
Fluxograma conforme Anexo I.
2.1.2 – Fundamentação Teórica
2.1.2.1 – Porta Paralela
A porta paralela é uma interface de comunicação entre um computador e um
periférico. Quando a IBM criou seu primeiro PC ("Personal Computer" ou
"Computador Pessoal"), a idéia era conectar a essa porta a uma impressora, mas
atualmente, são vários os periféricos que se podem utilizar desta conexão para
enviar e receber dados para o computador (exemplos: scanners, câmeras de vídeo,
unidade de disco removível entre outros).
A partir do sistema operacional Windows 95 tornou-se possivel efetuar
comunicação entre dois computadores através da porta paralela, usando um
programa nativo chamado "comunicação direta via cabo". Esta rede é muito simples
de ser implementada, bastando apenas a utilização de um cabo DB25, conectado
entre os dois computadores. É, no entanto, necessária uma configuração específica
nos cabos para que a rede possa funcionar corretamente.
O computador nomeia as Portas Paralelas, chamando-as de LPT1, LPT2,
LPT3 etc, mas, a Porta física padrão de seu computador é a LPT1, e seus
endereços são: 378h ( para enviar um byte de dados pela Porta), 378+1h (para
receber um valor através da Porta) e, 378+2h (para enviar dados). Às vezes pode
está disponível a LPT2, e seus endereços são: 278h, 278+1h e 278+2h, com as
mesmas funções dos endereços da porta LPT1 respectivamente.
Nome
Porta
da Endereço
memória
de
Endereço da Porta
Descrição
LPT1
0000:0408
378
888 decimal Endereço base
hexadecimal
LPT2
0000:040A
278
632 decimal Endereço base
hexadecimal
Abaixo uma tabela com os endereços dos registradores da porta paralela.
Nome
Registro
Dados
de
Registro
Status
de
Registro
Controle
de
Endereços
LPT1
Endereços
LPT2
Descrição
378h
278h
Envia um
impressora
379h
279h
Ler o Status da impressora
37Ah
27Ah
Envia dados de controle para a
impressora
byte
para
a
O DB25 é um conector que fica na parte de trás do gabinete do computador, e
é através deste, que o cabo paralelo se conecta ao computador para poder enviar e
receber dados.
No DB25, um pino está em nível lógico 0 quando a tensão elétrica no mesmo
está entre 0 a 0,4v. Um pino se encontra em nível lógico 1 quando a tensão elétrica
no mesmo está acima de 3.1 e até 5v.
A figura abaixo mostra o conector padrão DB25, com 25 pinos, onde cada
pino tem um nome que o identifica:
DB25 que fica atrás do Micro
Conector Macho do Cabo Paralelo
Foto do conector DB25 macho do cabo Paralelo
Esquema de funcionamento do DB25 no modo SPP
2.1.2.2 – Motor de Passo
A forma com que o motor irá operar dependerá bastante do que se deseja
controlar. Tem casos em que o torque é mais importante, outros a precisão ou
mesmo a velocidade. Essas são características gerais dos motores de passos, a
maioria deles permitem trabalhar dessa forma. Ao trabalhar com motores de passos,
precisamos saber algumas características de funcionamento como a tensão de
alimentação, a máxima corrente elétrica suportada nas bobinas, o grau (precisão), o
torque e muitos outros. As características importantes que deveremos saber para
poder controlar um motor de passo seriam a tensão de alimentação e a corrente
elétrica que suas bobinas suportam.
Para se controlar a velocidade de um motor de passo envia-se uma
seqüência de pulsos digitais ( veja Tabela 1 ) num determinado intervalo. Quanto
menor esse intervalo, maior será a velocidade em que o motor irá girar.
Não defina intervalo menor que 10ms entre cada passo, o motor perderá o
torque e em vez de rodar, irá vibrar.
Tabela 1 - Passo Completo
Nº
do
B3
passo
1-->
1
2-->
0
3-->
0
4-->
1
B2 B1 B0 Decimal
1
1
0
0
0
1
1
0
0
0
1
1
12
6
3
9
Para mudar a direção de rotação do motor, simplesmente é invertida a
seqüência dos passos.
Para acionarmos um motor de passo precisamos de um hardware específico,
chamado driver. Pode se fazer um driver usando transistores de potência como os
BD135, DB241 etc., A maneira mais fácil é adquirir drivers prontos, como o ULN
2003 usado na realização deste projeto, que nada mais são que arrays de
transistores Darlington que podem controlar correntes de até 500mA, estão em
forma de circuitos integrados prontos para serem usados em interfaces que
necessitem controlar motores de passos, solenóides, relês, motores DC e muitos
outros dispositivos.
Veja na figura abaixo as pinagens e as características desse CI.
Figura 1 - Pinagens do CI ULN2003
2.1.3 – Descrição do software
Este é um software de fácil utilização pelo usuário, com uma interface clara e
objetiva, que tem como função o controle de um motor de passo através da porta
paralela. O software foi desenvolvido em C++ com interface em Builder 5.0.
Consiste em um botão para ligar o motor de passo e outro para desligá-lo,
uma luz verde indicara que o botão liga foi acionado e uma vermelha indicara que o
motor está desligado.
Através de uma barra o usuário determinará a velocidade do motor, bastando
para isso arrastar o cursor para cima, aumentando a velocidade ou arrastando o
cursor para baixo, diminuindo a velocidade de rotação, isso pode ser feito a qualquer
instante. Abaixo da barra a velocidade será indicada em mili segundos.
Para determinação do sentido de rotação do motor, o usuário tem a
disposição uma seletora, para isso basta clicar no sentido desejado, sendo que para
isso não é necessário parar o funcionamento do motor.
Na barra de ferramentas temos um help para maiores informações sobre o
software e seu autor.
Para sair do programa basta clicar no botão sair, isso deixará a porta paralela
livre para outras tarefas e desligará todas as bobinas do motor.
O usuário também tem acesso a um contador de votas e pulsos dados pelo
motor, estes contadores são atualizados a cada movimento do motor. Para reiniciar
a contagem basta clicar sob um botão específico a qualquer instante.
2.1.4 – Testes a serem realizados
Para um pleno funcionamento do software proceda todos os testes
relacionados abaixo.
1º Certifique-se que a porta paralela selecionada seja a LPT1 (0X378);
2º Tenha certeza das condições de funcionamento da porta paralela de seu PC
3º Ao montar o hardware, siga corretamente o esquema de ligação;
4º Após a montagem do hardware, cheque todas as ligações, para evitar mau
contato ou curto circuito;
5º Verifique se a fonte de alimentação está realmente alimentando com a tensão
compatível do motor;
6º Verifique seu cabo, e as ligações com o conector DB25;
7º Cheque se o cabo está corretamente ligado à placa e a porta paralela correta do
PC;
2.2 – Hardware
2.2.1 - Descrição do Hardware
O hardware deste projeto tem como componente principal CI ULN 2003,
responsável por gerenciar o motor de passo, a configuração do CI está descrita na
figura 1 do item 2.1.2.2.
Do conector DB25 são usados os pinos 2, 3, 4, 5 que correspondem aos
pinos D0, D1, D2, D3 da porta paralela. Estes são ligados aos pinos 1, 2, 3, 4, do CI
ULN2003.
Os pinos 18 a 25 correspondem ao Gnd da porta e são ligados ao 0V da fonte
e ao pino 8 do CI. Os pinos 16, 15, 14 e 13 são ligados às bobinas do motor ( B1,
B2, B3, B4 respectivamente ), já o pino 9 do CI é sua alimentação e é ligado ao
comum do motor e ao + da fonte, antes é colocado um diodo Zener para proteção da
porta.
2.2.2 – Esquema elétrico
3. RESULTADOS
3.1 – Problemas técnicos encontrados
No inicio as dúvidas eram constantes, porém exercitando e realizando testes
práticos estas dúvidas foram sendo sanadas.
O primeiro problema foi ao acionar a porta paralela, pois não havia copiado o
arquivo dll necessário para essa função, então os comandos usados não eram
reconhecidos pelo compilador. Nos livros que estava buscando auxilio, o comando
usado não se aplicava ao Windows. Esta dúvida foi facilmente solucionada com o
auxilio do professor.
Também com o auxilio do professor, consegui achar a solução para um falha
que o software apresentava. Falha esta que não permitia o usuário acessar nada
enquanto o motor estava em funcionamento. Este problema foi corrigido quando ao
usar um laço de for para os intervalos de acionamento das bobinas do motor, foi
utilizado um timer próprio do Builder, assim consegui liberar qualquer acesso do
usuário para controle do motor, mesmo com ele em funcionamento.
Um problema que é bastante normal é relacionar a parte teórica com a parte
prática, isto só foi conseguido através de muitos testes e erros cometidos e
consertados. Também uma dificuldade que mesmo não sendo técnica, porém deve
ser levado em consideração, pois a grande maioria dos alunos devem ter sentido, é
a de conciliar outras cadeiras do curso com o realização do projeto.
3.2 – Resultados obtidos
Com o termino deste projeto foi possível realizar o principal objetivo deste,
que era aplicar na prática os conhecimentos adquiridos em sala de aula.
O resultado final foi satisfatório pois foi possível ver alguma coisa criada por
mim, através de dedicação, estudo, e também de auxilio, e ver uma pequena parte
do que se é possível através da programação.
4. CONCLUSÃO
Ao fim deste, podemos concluir que a disciplina de Engenharia de
Processamento Digital II, é de muito proveito para a formação acadêmica de um
futuro engenheiro elétrico. Claro que não conseguimos em apenas 2 créditos
abranger todas as possibilidades e alternativas que a programação em C++ e
Builder nos dão. Porém conseguimos construir uma forte base de conhecimento que
certamente terá crescimento com o empenho do aluno, auxilio de pessoas
capacitadas e muito trabalho, pois o melhor modo de aprender é fazendo e
corrigindo as falhas.
Finalizando, com este projeto foi possível mostrar alguns conhecimentos
adquiridos ao longo da disciplina, e tendo a certeza que estes serão muito utilizados
em nossa formação profissional.
REFERÊNCIAS BIBLIOGRÁFICAS
1. __________. Notas de aula. Canoas, 2007
2. Wikipedia a enciclopédia livre. Disponível em:http://pt.wikipedia.org. Acesso em 22
jun. 2007.
3. Rogercom.com. Disponível em: http://rogercom.com Acesso em 22 maio 2007.
4. PRODANOV, Cleber Cristiano. Manual de Metodologia Científica: 3.ed. Novo
Hamburgo – RS: Feevale, 2003. 77p.
5. JAMSA, Kris. Salvo pelo C++: Rio de janeiro: LTC, 1994. 262p.
ANEXO I
FLUXOGRAMA
ANEXO II
CODIGO FONTE
/* CONTROLE DE MOTOR DE PASSO PELA PORTA PARALELA - BUILDER C++*/
//--------------------------------------------------------------------------#include <vcl.h>
#include "main_principal.h"
#include "Uhelp.h"
#include "io.h"
//--------------------------------------------------------------------------#pragma hdrstop
#pragma package(smart_init)
#pragma resource "*.dfm"
//--VARIAVEIS GLOBAIS--------------------------------------------bool bLiga=0;
int ncontavolta=0,ncontapasso=0;
int nvelocidade,nfase=0;
TMotor_2 *Motor_2;
//--------------------------------------------------------------------------__fastcall TMotor_2::TMotor_2(TComponent* Owner)
: TForm(Owner)
{
if(LoadIODLL()==1) { // tenta carregar a dll
ShowMessage("Faltou a io.dll no diretório do aplicativo");
return;
}
}
//--------------------------------------------------------------------------void __fastcall TMotor_2::Button1Click(TObject *Sender)
{
bLiga=1;
Shape1->Brush->Color=clGreen;
Shape2->Brush->Color=clWhite;
}
//--------------------------------------------------------------------------void __fastcall TMotor_2::Timer1Timer(TObject *Sender)
{
Panel3->Caption=TrackBar1->Position;
Panel1->Caption=ncontavolta;
Panel2->Caption=ncontapasso;
Timer1->Interval=TrackBar1->Position;
if (bLiga==1)
{
if (RadioGroup1->ItemIndex==0)
{
switch (nfase)
{
case 0:
PortOut(0x378,3);
break;
case 1:
PortOut(0x378,6);
break;
case 2:
PortOut(0x378,12);
break;
case 3:
PortOut(0x378,9);
break;
}
ncontapasso++;
if (ncontapasso>=200)
{
ncontavolta++;
ncontapasso=0;
}
nfase++;
if (nfase>3){nfase=0;}
}
else
{
switch (nfase)
{
case 3:
PortOut(0x378,3);
break;
case 2:
PortOut(0x378,6);
break;
case 1:
PortOut(0x378,12);
break;
case 0:
PortOut(0x378,9);
break;
}
ncontapasso++;
if (ncontapasso>=200)
{
ncontavolta++;
ncontapasso=0;
}
Panel1->Caption=ncontavolta;
nfase++;
if (nfase>3){nfase=0;}
}
}
}
//--------------------------------------------------------------------------void __fastcall TMotor_2::Button2Click(TObject *Sender)
{
bLiga=0;
PortOut(0x378,00); // zera porta paralela
Shape1->Brush->Color=clWhite;
Shape2->Brush->Color=clRed;
}
//--------------------------------------------------------------------------void __fastcall TMotor_2::Button3Click(TObject *Sender)
{
PortOut(0x378,00); // zera porta paralela
Application->Terminate();
}
//--------------------------------------------------------------------------void __fastcall TMotor_2::Sair1Click(TObject *Sender)
{
PortOut(0x378,00); // zera porta paralela
Application->Terminate();
}
//--------------------------------------------------------------------------void __fastcall TMotor_2::About1Click(TObject *Sender)
{
telaabout->Visible=true;
}
//--------------------------------------------------------------------------void __fastcall TMotor_2::Button4Click(TObject *Sender)
{
ncontavolta=0;
ncontapasso=0;
}
//---------------------------------------------------------------------------
Download

UNIVERSIDADE LUTERANA DO BRASIL – ULBRA CONTROLE DE