Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print

ELETRÔNICA / ELÉTRICA => Eletrônica Básica => Programação => Tópico iniciado por: Guigaço em 21 de Março de 2010, 21:04

Título: CLOCK em microsegundos 2
Enviado por: Guigaço em 21 de Março de 2010, 21:04
Olá pessoal,


Estou com um problema muito parecido com o do nosso amigo MATRILAN1 criado no fórum GUIACNC em outubro de 2009.

Vi os espectivos códigos, e também gostaria de fazer um programa onde eu pudesse controlar o número de passos do motor em precisão de nano segundos usando o CLOCK do processador, pois apenas assim conseguiria indentificar que ponto um eixo na máquina CNC se encontra.

No Campo "Entre com um número", é um campo pre definido por mim, onde desejo que o usuário defina um valor inteiro em milímetros, e o motor ande de acordo com esse valor, exemplo:

Meu motor é um de 200 ppv 1 pulso = 0.025mm
então é só fazer um calcúlo e fazer o meu programa contar o número de pulsos, para rodar o motor de acordo com o que o usuário definiu..... essa é minha maior dúvida.... de resto para fazer o retorno e a reversão eu vou me virando mas isso ta complicado muito, pois como nosso amigo, apenas consegui uma frequência baixa com o Sleep(1); na teoria uma frequencia de 500Hz pois o pulso só ativo quando está com 5v ouse ja:

1ms
----         -----    ou seja 2ms entre um pulso ativo e outro = 500Hz
     |       |
     |1ms       |
      ------

porém na prática é algo totalmente diferente.

possíveis perguntas que vocês poderão fazer:

1) não poderia usar uma interface externa para gerar o clock?
Poderia, porém não gostaria de usar uma interface externa, gostaria de fazer em Builder c++
 
2) você pretende chegar aos 10 kHz? Ou menos que isso seria suficiente?
Menos que isso já seria o suficiente até 1KHz estaria feliz.
 
3) programa em alguma linguagem?
Eu conheço C++, e gostaria que o programa fosse feito em C++, porém como eu digo, conheço um pouco a linguagem, fiz técnico em mecatrônica, porém acabei esquencedo algumas coisas da aula que tive de c++, mas tenho certeza que com ajuda de vocês irei relembrando aos poucos
 
trabalha com eletrônica? uControladores?
Trabalho com eletrônica também.
uControladores?? não conheço

Segue uma foto de como está ficando meu programa:



(http://s4.postimage.org/MpDGr.jpg) (http://www.postimage.org/image.php?v=aVMpDGr)
Título: Re: CLOCK em microsegundos 2
Enviado por: ivancoimbra em 21 de Março de 2010, 23:41
Porque não usa o laço " for next" e bem mais simples
 
Título: Re: CLOCK em microsegundos 2
Enviado por: Guigaço em 22 de Março de 2010, 00:14
Porque não usa o laço " for next" e bem mais simples

É uma boa para contar os numeros de passos!!
porém gostaria de algo ara gerar os pulsos de 1000Hz
Título: Re: CLOCK em microsegundos 2
Enviado por: Guigaço em 22 de Março de 2010, 00:48
Só lembrando que:

Uso 3 motores de passos 200ppv ACHO que 1 pulso = 0.025mm mas isso não vem ao caso depois descubro.

Uso 3 drivers de mercado comum pulso/direção.

Uso uma placa isoladora paralela


Título: Re: CLOCK em microsegundos 2
Enviado por: Cláudio F. em 22 de Março de 2010, 01:07
não está utilizando drivers para os motores?
Título: Re: CLOCK em microsegundos 2
Enviado por: Guigaço em 22 de Março de 2010, 08:50
não está utilizando drivers para os motores?

sim estou usando um para cada motor, porém se me ajudarem a fazer um eixo
tipo meu código é mais ow menos assim

for (i=0, i>1000, i++) // i>1000 1000 é o número de pulso.
{
outport(0x378,1);
sleep(1);
outport(0x378,0);
sleep(1);
}

Desvantagem do código assim:
1º Programa trava, não consigo movimentar os outros eixos, preciso esperar um rodar para movimentar o outro.

2º A função sleep só chega até 1ms não consigo baixar o tempo, e este tempo é totalmente relativo.
Título: Re: CLOCK em microsegundos 2
Enviado por: C N C N o w ! em 22 de Março de 2010, 11:39
... gostaria de fazer um programa onde eu pudesse controlar o número de passos do motor em precisão de nano segundos usando o CLOCK do processador, pois apenas assim conseguiria indentificar que ponto um eixo na máquina CNC se encontra.

Guilherme, nanosegundos e motor de passo não são coisas que se coloque na mesma sentença ...  ;D

Não é necessário que o jitter fique na faixa de nanosegundos e vc não vai chegar nem perto disso usando um PC, nem que trabalhe com kernel em tempo real ... sugiro que use algum prog e o estude, o TurboCNC é um excelente ponto de partida, é o que proporciona o trem de pulsos de melhor qualidade.

Isto tb não tem absolutamente nada a ver com identificar a posição do eixo, o que é feito meramente pela contagem de pulsos.

Citar
Meu motor é um de 200 ppv 1 pulso = 0.025mm

Isto não faz qualquer sentido, a resolução de um motor é indicada pelo número de passos por revolução ou desvio angular, jamais por uma dimensão linear (mm). Um motor de 200 ppr oferece resolução de 1,8o em passo cheio e 0,9o em meio passo ...

Citar
apenas consegui uma frequência baixa com o Sleep(1); na teoria uma frequencia de 500Hz ... porém na prática é algo totalmente diferente.

É, na prática é diferente e sem embasamento teórico vc vai ficar como barata tonta ... tô achando que vc precisa estudar um pouquinho mais sobre motores de passo ...

A velocidade alcançável depende tremendamente do driver e vc sequer menciona qual está usando ... portanto não dá pra comentar nada ...

Citar
Eu conheço C++, e gostaria que o programa fosse feito em C++ ...

O prob para obtenção de um acionamento confiável pouco tem a ver com a linguagem de programação, o prob é manter a latência relativamente baixa, o que é um bocado chato quando se usa Windows, é preciso recorrer a algumas mandrakarias para evitar a interferência do SO. Apesar disto, creio que para até 1 kHz não fique mal ...
 
Título: Re: CLOCK em microsegundos 2
Enviado por: Cláudio F. em 22 de Março de 2010, 15:08
Anest,

procure se informar sobre thread.

acredito q com uma thread para o clock e uma para cada motor, resolva seu problema.

o código para gerar o clock já esta pronto no tópico do matrixlan.

o que esta acoplado ao eixo do motor? como conseguiu chegar a 0,025?
Título: Re: CLOCK em microsegundos 2
Enviado por: vtrx em 27 de Março de 2010, 13:57
Olá,sou novo neste forum,se eu entendí direito,voce precisa de um programa para Windows com precisão (delay) em µs?
Eu programo em Delphi,tambem,e um de meus programas envia para a paralela audio wav entre 8000hz a 24khz com precisão.
As rotinas de tempo estão em Assembler.
Título: Re: CLOCK em microsegundos 2
Enviado por: matrixlan1 em 01 de Abril de 2010, 21:27
oa amigo, vc pode disponibilizar o seu codigo pra gente da uma olhada?
Título: Re: CLOCK em microsegundos 2
Enviado por: marc0 em 01 de Abril de 2010, 23:35
Se for por esporte reinventar a roda, tudo bem...
Mas porque vc não usa o Mach3 ou o EMC2?
Abraços...
Título: Re: CLOCK em microsegundos 2
Enviado por: Barusso em 02 de Abril de 2010, 21:10
Olá Vitor(vtrx), eu também gostaria de ver seu soft em Delphi.

Marco, se ninguém tivesse essa iniciativa estávamos todos no TurboCNC, ele já estava pronto , pro que fazer o Mach ?

Barusso
Título: Re: CLOCK em microsegundos 2
Enviado por: marc0 em 03 de Abril de 2010, 09:52
Barusso;

Não tenha nada contra ao desenvolvimento de softwares, quem tiver condições de produzir algo melhor ou contribuir para o aperfeiçoamento do Mach3 ou do EMC2, será bem vindo e a comunidade agradece.  ;)

Modo geral, gosto mais de projetos coletivos, a união não faz só açúcar...

Abraços...
Título: Re: CLOCK em microsegundos 2
Enviado por: vtrx em 03 de Abril de 2010, 21:51
Como citei,sou novato neste forum e me parece que ele é específico em algo que não percebí.
Gostaria de saber se é específico mesmo.
Sobre meu código,é de um programa fechado,mas essa parte da paralela posso explicar,só falta o Barusso responder se conseguiu instalar o componente.
Título: Re: CLOCK em microsegundos 2
Enviado por: Barusso em 05 de Abril de 2010, 08:34
Sobre meu código,é de um programa fechado,mas essa parte da paralela posso explicar,só falta o Barusso responder se conseguiu instalar o componente.
Opa, instalei sim,   já tinha testado esses componentes de microsegundos, porém o processamento vai lá nas alturas e ai o sinal não chega legal na lpt, muita latência.
Ta certo, respeito sobre o programa fechado, é que você tinha dito que utilizava o som e pensei que com isso você ia postar a rotina, não foi minha intenção em solicitar fontes de soft fechado.

Barusso
Título: Re: CLOCK em microsegundos 2
Enviado por: vtrx em 05 de Abril de 2010, 17:44
Faça o seguinte,poste a partte do código que voce usa para direcionar a saída assim posso ver oque não confere.
Tem algo errado com sua rotina pois não é para subir o uso da CPU.
Veja,este é o programa Demo que disponibilezei para um outro forum sobre microcontroladores,faça um DAC com resistores e teste pela paralela ou edite um arquivo wav e coloque os bytes para ativar a saída como quiser;
http://www.mandeibem.com.br/?cod=4420101422195405 (http://www.mandeibem.com.br/?cod=4420101422195405)
Título: Re: CLOCK em microsegundos 2
Enviado por: Barusso em 06 de Abril de 2010, 08:52
Bom dia Vitor,

Peguei seu Demo, porém, veja se estou fazendo algo errado.
Descompactei em um pasta, li o pdf, executei o soft e o mesmo rodou, para o primeiro teste abri um wav do próprio windows "encerramento do windows XP.wav", tocou nas cx de som belezinha, ai cliquei no botão saída lpt1 os leds piscaram como você tinha comentado, até ai tudo ok, porém percebi que o windows tinha dado uma arriada, resolvi abrir o gerenciador de tarefas do windows e o mesmo estava em 100% ou seja utilizando o máximo de recurso do windows, ai verifiquei que quando mudo de tela os leds pipocam um pouco, mas isso é no zoiometro não dá pra precisar...
Bom isso esta ocorrendo porque é o Demo ou eu fiz algo de errado ?
Segue o print da tela.

Opa, já estava esquecendo do mais importante, de agradecer a sua ajuda ao pessoal do forum.

Barusso
Título: Re: CLOCK em microsegundos 2
Enviado por: vtrx em 06 de Abril de 2010, 12:00
Barusso,esse uso da CPU é normal pois voce está dando saída a bytes em relativa velocidade pela porta paralela,mas isso não 'trava' o PC.
Esse programa foi feito para se gravar samples de 8Khz mono em memória para um Microcontrolador executar,tipo,secretária eletrônica,relógio digital GPS etc.
 A saída pela porta paralela,é um meio de testar a parte do DAc sem retirar a memoria da PCB.
Sua pergunta era como gerar atrasos menores que 1 milessegundo,esse programa demosntra que pode-se gerar atrazos menores que 1 ms sequencialmente.
Agora é só saber oque voce quer gerar.