UNIVERSIDADE LUTERANA DO BRASIL ULBRA CONTROLE DE MOTOR DE PASSO VIA PORTA PARALELA -BUILDER C++ FABRÍCIO DE MARI - PDF
Download "UNIVERSIDADE LUTERANA DO BRASIL ULBRA CONTROLE DE MOTOR DE PASSO VIA PORTA PARALELA -BUILDER C++ FABRÍCIO DE MARI"
Denílson Paixão Padilha
1 UNIVERSIDADE LUTERANA DO BRASIL ULBRA CONTROLE DE MOTOR DE PASSO VIA PORTA PARALELA -BUILDER C++ FABRÍCIO DE MARI Canoas, junho de 2007.
2 SUMÁRIO 1. INTRODUÇÃO Objetivo Justificativa Cronograma Orçamento METODOLOGIA Software Interface Gráfica e fluxogramas Fundamentação Teórica Porta Paralela Motor de Passo Descrição do software Testes a serem realizados Hardware Descrição do Hardware Esquema elétrico RESULTADOS Problemas técnicos encontrados Resultados obtidos CONCLUSÃO...15 REFERÊNCIAS BIBLIOGRÁFICAS...16 ANEXO I...17 ANEXO II...19
3 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.
4 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.
5 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 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
6 2. METODOLOGIA 2.1 Software Interface Gráfica e fluxogramas Tela Principal 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
7 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 do autor para maiores informações. Fluxograma conforme Anexo I Fundamentação Teórica 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
8 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 da Endereço Porta memória LPT1 0000:0408 LPT2 0000:040A de Endereço da Porta 378 hexadecimal 278 hexadecimal Descrição 888 decimal Endereço base 632 decimal Endereço base Abaixo uma tabela com os endereços dos registradores da porta paralela. Nome Registro Dados Registro Status Registro Controle Endereços LPT1 de 378h Endereços LPT2 278h Descrição Envia um byte para a impressora de 379h 279h Ler o Status da impressora de 37Ah 27Ah Envia dados de controle para a impressora 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:
9 DB25 que fica atrás do Micro Conector Macho do Cabo Paralelo Foto do conector DB25 macho do cabo Paralelo
10 Esquema de funcionamento do DB25 no modo SPP 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.
11 Tabela 1 - Passo Completo Nº do B3 B2 B1 B0 Decimal passo 1--> > > > 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 ULN 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.
12 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 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;
13 2.2 Hardware 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 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 Esquema elétrico
14 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.
15 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.
16 REFERÊNCIAS BIBLIOGRÁFICAS 1.. Notas de aula. Canoas, Wikipedia a enciclopédia livre. Disponível em: Acesso em 22 jun Rogercom.com. Disponível em: Acesso em 22 maio PRODANOV, Cleber Cristiano. Manual de Metodologia Científica: 3.ed. Novo Hamburgo RS: Feevale, p. 5. JAMSA, Kris. Salvo pelo C++: Rio de janeiro: LTC, p.
17 ANEXO I FLUXOGRAMA
19 ANEXO II CODIGO FONTE
20 /* 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;
21 // 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;
22 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;
23 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; //
UNIVERSIDADE LUTERANA DO BRASIL DEPARTAMENTO DE ENGENHARIA ELÉTRICA DISCIPLINA DE ENGENHARIA DE PROCESSAMENTO DIGITAL II PROJETO DE SOFTWARE
UNIVERSIDADE LUTERANA DO BRASIL DEPARTAMENTO DE ENGENHARIA ELÉTRICA DISCIPLINA DE ENGENHARIA DE PROCESSAMENTO DIGITAL II JANAÍNA TRINDADE DE ÁVILA PROJETO DE SOFTWARE Controle de Motor de Indução e Inversor