Dando continuidade as aplicações utilizando a interface para a porta paralela, iremos estudar como é possívelcontrolar servos-mecanismos, ( servos de aeromodelos e servos de antenas parabólicas), utilizando a porta paralela !
Para maiores informações osbre a placa LPT sugiro que de uma olhada no LINK LPT PORT, para maiores informações referente ao funcionamento dos servo motores, sugiro que use a propria INTERNET para efetuar pesquisas sobre o assunto pois neste artigo iremos nos concentrar em como controlá-los utilizando a Placa de Controle para Porta Paralela.
Resumindo rapidamente como um servo funciona:
A principal características dos servos, é aboa precisão de controle dos movimentos, os quais ocorrem ao variamos a largura dos pulsos e duração aplicados a sua entrada.
Vamos observar como é um servo internamente.
Na figura 1 observamos a aparência física de um servo motor padrão utilizado em aeromodelos.
Figura 1
A diferenças entre os dois modelos de servo esta relacionado ao custo e precisão, não mencionamos aqui os servos mecanismos com engrenagem metálicas, o que aumenta em muito a capacidade de carga. Os servos motores são divididos em cinco partes, sendo elas:
O gabinete ou a caixa plástica, a placa de controle do motor, as engrenagens o motor e o potenciômetro. Analisando rapidamente cada uma das partes, citadas podemos exemplificar bastante a operação do servo.
Um sinal é aplicado à placa de controle, o eixo do motor esta conectado mecanicamente a um conjunto de engrenagens que alem de dar a força ao mecanismo também gira um potenciômetro ao qual realimenta o circuito elétrico, colocando o motor na sua posição de acordo com o pulso aplicado. Esta é uma explicação muito simplificada, sugerimos a todos consultar outros artigos publicados na internet que a que abrange o funcionamento dos servo mecanismo.
Observe a figura 2, onde temos o diagrama de tempo dos sinais aplicados a um servo.
Figura 2
A variação em PULSE WIDTH ou tamanho do pulso esta entre 1ms ate 2 ms (milissegundos ), o que equivale dizer que ao aplicarmos um pulso de 1 ms o eixo ira deslocar o braço do servo para a extremidade esquerda, ao aplicarmos 1,5ms, o braço do servo ira ate a posição central e ao aplicarmos 2 ms o braço ira todo a direita, intervalos entre 1 e 2 ms ira colocar o braço do servo nas posições intermediarias.
Uma vez definido o que é necessário para que o braço do servo execute o movimento iremos entendero software, uma vez que a pagina referente ao hardware esta disponivel aqui mesmo no site.
Antes de falarmos sobre osoftware, vamos falar de algo muito importante que se deve levar em consideração no mundo da eletrônica atualmente, que é a necessidade do profissional, entusiasta, estudanteou hobysta de ter noções de programação, pois esta cada dia mais difícil acharmos um produto eletrônico que não tenha um programa dentro dele ou mesmo firmware.Portanto preparem para eletrônica e muita programação.
Uma pergunta interessante e com resposta vaga, é aquela assim:
Qual q melhor linguagem de programação?
E ai vai a resposta: " A melhor linguagem de programação é aquela que você DOMINA".
Qual foi o meu grande desafio, em programar uma placa de interface paralela para controlar servos motores, pois já existe micro controladores que o faz, a preços bem interessantes.Então para que perder o tempo com isso ? Na verdade é um desafio, o qual foi vencido, porque existe o mito da impossibilidade de controlar o "TEMPO" ou clock de um microcomputador utilizando WINDOWS de forma precisa. O que provamos aqui é que é possível sim.Como estamos escrevendo uma serie de artigos TECNICOS, para a esta revista TECNICA, nada mais interessante do que apresentarmos estudos e aplicações reais, e funcionais, que qualquer um poderá acrescentar ao seu conhecimento.
Outra pergunta interessante, é porque utilizar a porta paralela, se a mesma já esta com os dias contados se comparado com as placas USB?
A resposta é simples, APRENDER A PROGRAMAÇÂO, BAIXO CUSTO, enriquecer conhecimento, aplicá-los, estudar, desenvolver e construir projetos de automação, e adquirir uma bagagem técnica muito boa durante o período de aprendizagem e o baixo custo do produto. Alem de tudo é muito interessante procurarmos ter uma base solida de conhecimento, caso contraria seria como alguém tentar andar de MOTORCICLETA sem nunca ter andado de BICICLETA, vai ser doloroso!
Bem, como estávamos falando, nosso problema era como produzir na porta paralela um sinal que variasse de 1 a 2 ms, em cada um dos 8 bits de saída da porta lpt, já que a fama do WINDOWS e do VB6, é ser muito ruim para controle preciso de tempo, note bem é a "FAMA", vamos provar que isso não é correto.
Iniciamos com algumas experiências, executando pulsos através de laços de tempo tipo for ...next, e nada...tentamos gerar pulsos da formas mais malucas possíveis, e o que conseguíamos era um modesto movimento de total incoerência no eixo do servo.
Vou dar uma dica a todos, façam bons cursos de eletrônica, e excelentes cursos de inglês ou de outro idioma, ou estudem muito eletrônica, mas estude muito mais outros idiomas, pois a solução existe o problema é a preguiça que a maioria tem de pesquisar. Por isso publicações técnicas em site ou revistas como a Saber Eletrônica é excelente, devido a objetividade de alguns artigos. Pois bem exercitando o meu INGLES achei no site da MICROSOFT,uma maneira de gerar os pulsos, com controle total de tempo em MS ou ( milissegundos ), tudo escrito em Inglês.
Aplicar o que tinha aprendido foi outro problema, pois entre saber como funciona e fazer um programa atuar desta maneira é uma diferença grande, por isso temos um grande problema nas instituições de ensino, estamos rodeados de professores e catedráticos ensinando os alunos que na maioria dos casos não tem a pratica em projetrar absolutamente nada, ou seja segue um duvidoso, currículo escolar.. Resumindo pessoalé como ter a teoria de como um "avião voa", mas vai tentar fazer o avião que ai sim você encontrara as dificuldades. Alguns dias tentando, pensando, errando se frustrando, ate que uma noite, quase de manha a coisa funcionou. Pessoal não desista, seja teimosos no seu querer, e graças a teimosia e muita pesquisa foi resolvido.
Todo o milagre começa com dois arquivos ou módulos acrescentados ao VB6, e a uma função, API, facilmente utilizável no Visual Basic6, um deles nos já conhecemos que é a DLL inpout32.dll e o modulo inpout4v.bas, o qual controla a nossa interface para a porta paralela, o outro arquivo é o modulo modINI.bas, ambos encontrados na NET facilmente que esta disponibilizado no site da Revista Saber Eletrônica, bem como o programa DEMO deste projeto.
Não vamos falar sobre a DLL inpout32 e nem sobre o modulo inpout4v.bas, pois eles já foi abordados no exemplar 437, iremos falar rapidamente do modulo modINI.bas e da API nosso principal objetivo.
Mas o que o modulo modINI.bas faz exatamente ? Bem ele é um modulo que pode controlar algumas funções extremamente importantes em nosso projeto futuro, que são:
A possibilidade de gravar informações em um arquivo .INI, de apagar o conteúdo de um arquivo .INI, de alterar o conteúdo de um arquivo .INI, estas funções tem como principal aplicação a gravação de movimentos dos servos para serem repetido automaticamente os quais veremos em uma oportunidade futura. No momento iremos nos ater a controlar os servos motores.
Vejamos a linha de programa abaixo: Prepare-se para adquirir conhecimentos importantes !
1 - Private Declare Function QueryPerformaceCounter Lib kernel32 (lpPerformaceCounter As LARGE_INTEGER) As Long
2 -Private Declare FunctionQueriPerformacerequency Lib Kernel32 (lpFrequency as LARGE_INTERGER) as Long
Bacana né? Mas o que isso faz? Bem essas duas linhas é o segredo de executarmos com precisão o controle de tempo no VB6. Agora que você já sabe o segredo! Vamos a aplicaçõa pratica !
A primeira linha (1) acessa um TEMPROIZADOR de alto desempenho mais conhecido como ( HPC- High Performace Counter ),o qual tem uma excelente precisão, que é exatamente o que nos precisamos. Ao utilizar esta API estaremos utilizando o sinal de CLOCK ( não da placa CPU ) e sim do próprio MICROPROCESSADOR. Quando utilizamos o sinal de CLOCK da placa CPU nos teríamos uma baixa resolução ou precisão na contagem de tempo, na ordem de 0,055 segundos ou 1/18th de um segundo, a instrução que trabalha dessa maneira é a API timeGetTime. Outra vantagem é que quando possuímos um microprocessador mais rápido, o tempo definido de execução da função não se altera e sim temos um aumento da precisão. Para ficar mais claro, se utilizarmos uma determinada contagem de tempo, utilizando o sincronismo de relógio ( clock com a timeGetTime) para placa CPU, ao ajustarmos o programa em um P4 de 2,8 ghz o programa funcionaria bem, ao colocarmos em um micro de velocidade diferente, o programa passara a ter uma perca de precisão ou ate mesmo uma falha total do programa.
A segunda linha (2) aciona um contador ATENÇÂO, olha que legal, aciona um temporizador com milésimos de segundos, ou seja, podemos controlar a freqüência com a qual o tempo será medido, ou seja a cada 1ms iremos contar 20s, isso com precisão HPC. O principio desta API é o mesmo da descrita na linha (1).
Estamos começando a entender e a descobrir como seria possivel programar em VB6, um contador de tempo de alta precisão. Pessoal, Já vi, ouvi muitas criticas que o WINDOWS ou VB não é plataforma para desenvolvedores, na verdade nada é plataforma de nada, se você não souber fazer!
Devemos antes de criticar, desistir e colocar defeito, ou pular de um galho para o outro, na utilização de linguagem de programação, ou qual é o microcontrolador que é melhor, é tentar, esgotar as possibilidades, desistir é uma opção, mas somente depois de realmente tentarmos e jamais falar o que não sabemos. Só fale do que alguém fez de forma negativa se você fizer melhor e mesmo assim não terá o direito de julgar.
Como começa o programa? De uma olhada nas linhas abaixo. ATENÇÂO, não iremos colocar todo o código fonte nas paginas da Internet, para obter o codigo fonte total faça o cadastro e no site.
As linhas acima tem como objetivo ATIVAR a função que ira disponibilizar os sinais de tempo necessários a nossa aplicação. Uma vez ativo e disponibilizado as variáveis do sistema de tempo passemos a escrever a rotina que ira gerar os milissegundos necessários ao acionamento dos servos.
Bom! Agora que já podemos ter uma referencia confiável de tempo, podemos escrever a rotina de tempo, a qual chamamos de TempoemMs.
Após o tratamento de nossa função de medição de tempo podemos acessar a mesma simplesmente chamando TempoemMs, e qualquer ponto do programa, veja um exemplo logo abaixo.
O programa de controle de servos utilizando a interface de controle LPT já esta tomando forma, na rotina acima já podemos enviar a porta LPT out dados, Val(valor) o sinal de acordo com tempo em "ms" definido.
Agora vejamos a rotina final de envio dos pulsos em "ms" diretamente a interface LPT Port.
Pronto, agora chegamos ao básico do nosso programa, obviamente existe as rotinas extras, mas a idéia principal de geração dos pulsos em "ms" se encontra descrito nesta linhas, a partir deste estudo temos condições de implementar qualquer rotina de controle de tempo com excelente precisão.
Ótimo, agora já entendemos como gerar o pulso de 2ms, vamos instalar um servo na placa de interface LPT,para isso conecte o pino de sinal em um dos pinos da port, providencie a fonte de alimentação.
Vejamos como ficou a tela de abertura do software, veja a figura 3.
Figura 3
Na figura 4 temos a disposição os controles dos servos através de barras deslizantes, no campo endereço devemos indicar o endereço da porta lpt disponível no microcomputador, no lado esquerdo de cada barra deslizante temos a indicação da posição de cada servo e a direita a freqüência em "ms", enviada ao servo.
Figura 4
E o botão SAIR, o qual obviamente sai do programa. Para obter o progrma faça o cadastro no site. A operacionalidade aqui descrita do SOFTWARE é básica, e será disponibilizado em futuro não muito distante, um programa muito mais completo. Com opções de gravar a posição dos servos para repetir movimentos automaticamente. Inclusão do controle de mais 8 servos, ficando um total de 16 servos. Função de controle de WEBCAM e acesso remoto.