Autor Tópico: Problemas com porta paralela e mach3  (Lida 17388 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline sijoga

  • Novato
  • *
  • Posts: 13
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Mirassol-SP
  • Nome:: Joao
  • Profissão: Desenhista
Re:Problemas com porta paralela e mach3
« Resposta #15 Online: 27 de Dezembro de 2013, 14:07 »
Amigo, não é os pinos terra não, acabei de soldar todos e continua o mesmo problema, e eu me esqueci de falar, com o programa de controle da paralela, aquele q vc escolhe qual pino vc liga e desliga a mesa funciona, e quando desliga o pino a mesa para, só com esse programa q a mesa funciona "RoutOut Manager V 3.5", aqui vc clica pra ir para um lado o motor gira e para, vc clica dinovo e gira e para, é só no mach3 e turbocnc q nao funciona, o q eu penso q poderia ser, imagino uma configuração errada do comando do motor por parte de soft, e q um pulso para o motor andar não esta correto, tipo eu mando ele andar no programa 1 mm, e talves o prog manda o motor andar 100 metros, algo assim, pq o motor nao para de andar e ja logo acaba o curso da mesa, mas tipo, se minha teoria estiver certa, se eu desligar a fonte da mesa, entao o programa nao sabe e ele continua mandar o pulso at[e atingir um valor q faço o pulso terminar, só q eu ja fiz isso e o motor nao para nunca mais, cheguei a deixar meia hora e ligar a fonte novamente e o motor nao tinha parado de girar.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Problemas com porta paralela e mach3
« Resposta #16 Online: 27 de Dezembro de 2013, 14:09 »
Sijoga,

Vou comentar de novo (pela última vez), o Arduino não vai funcionar como você esta planejando:

(1) Os programas que você citou (TurboCNC, Mach3) usam a porta paralela para a geração de pulsos em tempo real. O Arduino precisaria ler esses pulsos pela porta paralela e não pela porta serial, que aliás, não é veloz o suficiente para esta aplicação. A menos que espere operar os motores lentamente.

(2) Os sinais dos programas citados são de passo e direção com acionamento direto da porta (hardware) e não servem para enviar por uma porta serial, a menos que use um driver de porta serial no Mach3 ou no TurboCNC (desconheço a sua existência). Reforço a lentidão de uma porta serial.

(2) O seu programa não terá a velocidade suficiente, pois é feito em C e há várias coisas a serem feitas, que exigem conhecimento e experiência.

Pense bem..... , se quiser resolver seu problema use um driver de motor de passo.

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re:Problemas com porta paralela e mach3
« Resposta #17 Online: 27 de Dezembro de 2013, 14:19 »
Sijoga,

Vou comentar de novo (pela última vez), o Arduino não vai funcionar como você esta planejando:

(1) Os programas que você citou (TurboCNC, Mach3) usam a porta paralela para a geração de pulsos em tempo real. O Arduino precisaria ler esses pulsos pela porta paralela e não pela porta serial, que aliás, não é veloz o suficiente para esta aplicação. A menos que espere operar os motores lentamente.

(2) Os sinais dos programas citados são de passo e direção com acionamento direto da porta (hardware) e não servem para enviar por uma porta serial, a menos que use um driver de porta serial no Mach3 ou no TurboCNC (desconheço a sua existência). Reforço a lentidão de uma porta serial.

Professor, em nenhum momento ele falou que está fazendo isso pela serial.


(2) O seu programa não terá a velocidade suficiente, pois é feito em C e há várias coisas a serem feitas, que exigem conhecimento e experiência.

Pense bem..... , se quiser resolver seu problema use um driver de motor de passo.

Na verdade C não tem nada a ver com isso! E é errada a afirmação de que um programa é lento, pois foi escrito em C. Tadinha da Apple!

Realmente será lento. Muito lento... E o código possui um erro grave que o forçará ser mais lento ainda.

Mas irá funcionar e, de repente poderá ser o suficiente para a aplicação dele.

-----------

Veja isso como um aprendizado. Afinal, é fazendo merda que adubamos a vida.
« Última modificação: 27 de Dezembro de 2013, 14:20 por Cláudio Freund »

Offline Eneias Eringer

  • Hobby
  • ****
  • Posts: 769
  • Sexo: Masculino
Re:Problemas com porta paralela e mach3
« Resposta #18 Online: 27 de Dezembro de 2013, 14:45 »
Porque você não usa o turbo cnc direto no ULN2003 em Phase drive vai funcionar também ...

Não conheço nada de nada de arduino , mas pelo que entendi é ele que esta gerando os pulsos para o motor de acordo com o que recebe do mach correto?

Será que não é porque quando o mach muda o pulso de baixo para alto ele deu um passo , e só vai abaixar o pulso de novo quando receber outro comando de passo ?




Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Problemas com porta paralela e mach3
« Resposta #19 Online: 27 de Dezembro de 2013, 16:36 »
Cláudio,

Professor, em nenhum momento ele falou que está fazendo isso pela serial.

Não sei se você já programou no Arduino, se você ler o programa apresentado (para Arduino) verá comandos de inicialização e de acionamento (escrita) da porta serial. Que podem ser para um esperado acionamento ou simplesmente monitoração, mas que, de qualquer modo, tornam um programa desse tipo mais lento e talvez, inadequado para acionar um motor em alta velocidade.

Na verdade C não tem nada a ver com isso! E é errada a afirmação de que um programa é lento, pois foi escrito em C. Tadinha da Apple!

Realmente será lento. Muito lento... E o código possui um erro grave que o forçará ser mais lento ainda.

Mas irá funcionar e, de repente poderá ser o suficiente para a aplicação dele.

-----------

Veja isso como um aprendizado. Afinal, é fazendo merda que adubamos a vida.

Sim, em nenhum momento excluo o aprendizado, mas me ative a pergunta de como acionar o motor de passo, da maneira e com a solução mais rápida, eficaz e mais adequada para um iniciante. Não exatamente a lingagem C, mas a biblioteca (em C) de motores de passo do Arduino é boa para iniciantes, porém acho-a lenta para um CNC, mesmo para amadores. Mas não deixa de ser uma fonte de aprendizado.

Eu uso muito C e é rápida o suficiente para muitas aplicações de automação (CNC, robótica, controle de processos, ....) se o compilador ajudar. Mas, você deve saber que a "rapidez da linguagem C" depende de várias coisas: o compilador utilizado, a competência do programador, as bibliotecas utilizadas, a velocidade do processador, ....

Finalmente, após analisados os avisos e conselhos, cada um escolhe o caminho a percorrer (mais longo, mais curto, errado, ...). Tudo é um aprendizado....
« Última modificação: 27 de Dezembro de 2013, 17:24 por minilathe »

Offline F.Gilii

  • Administrador
  • CNCMASTER
  • *******
  • Posts: 13796
  • Sexo: Masculino
  • Consultoria, Automação e Construção de Máquinas
  • Cidade - UF: Atibaia - SP
  • Nome:: Fabio Gilii
  • Profissão: Tec. Mecanica de Precisão
Re:Problemas com porta paralela e mach3
« Resposta #20 Online: 27 de Dezembro de 2013, 20:26 »
Me ocorreu que pode ser um problema simples de eletronica - pode ser que falte um resistor pull up ou pull down conforme o tipo de sinais que estiver usando...

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Problemas com porta paralela e mach3
« Resposta #21 Online: 27 de Dezembro de 2013, 21:31 »
Eu não ia fazer isso, mas aí vão algumas observações:
 
É importante entender como funciona a geração de pulsos pelo Mach3 o TurboCNC e o que o programa do Arduino consegue fazer.

Num programa CNC, ao gerar pulsos para mover o motor, o programa faz o sinal de STEP ser igual a 0 durante alguns poucos microssegundos e depois volta a valer 1 (+5V) durante dezenas ou até milhares de microssegundos, isso se repete uma certa quantidade de passos esperados no motor. Por outro lado, o programa postado, fica testando alguns bits de entrada do Arduino, um deles é o sinail de STEP. Ou seja:

(1) Se o programa coincidir de ler um pulso igual a zero no exato momento em que isso acontecer e não pode demorar muito para isso (apenas alguns microssegundos). Ou seja, jogue na loteria que talvez seja mais provável acertar!! Um programa desse tipo deveria utilizar ao menos interrupções do processador. Isso é beeeeeeem diferente de um L-297, por exemplo, que usa apenas circuitos lógicos discretos (="hardware puro", do tipo "bem burrinho") para gerar a movimentação e não precisa ficar testando bit nenhum. Assim, o referido programa pode até mover o motor uma vez ou outra, mas vai perder muuuuuuuuitos passos gerados pelo software. Isso é inaceitável num CNC.
 
(2) Um programa desse tipo deveria controlar a corrente, num arranjo chopper, medindo e controlando a corrente nas fases do motor. Isso é possível de ser feito, pois o Arduíno possui entradas analógicas, mas falta um programa adequado e veloz o suficiente. Tenho desconfiança que um Arduino dos mais simples consiga fazer isso com as bibliotecas padrão e o compilador C usual.

(3) Não usar a porta serial, a menos para a fase de testes, pois isso atrasa o programa e torna a movimentação lenta.

(4) Não foi mencionado como o motor está sendo efetivamente acionado. Ou seja, estão sendo usados transistores? Como estão ligados? Qual é a alimentação? Sem ligações corretas, "a mágica" não funciona, o motor não gira ....

São apenas alguns comentários e observações.

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re:Problemas com porta paralela e mach3
« Resposta #22 Online: 28 de Dezembro de 2013, 01:31 »
Amigo, não é os pinos terra não, acabei de soldar todos e continua o mesmo problema, e eu me esqueci de falar, com o programa de controle da paralela, aquele q vc escolhe qual pino vc liga e desliga a mesa funciona, e quando desliga o pino a mesa para, só com esse programa q a mesa funciona "RoutOut Manager V 3.5", aqui vc clica pra ir para um lado o motor gira e para, vc clica dinovo e gira e para, é só no mach3 e turbocnc q nao funciona, o q eu penso q poderia ser, imagino uma configuração errada do comando do motor por parte de soft, e q um pulso para o motor andar não esta correto, tipo eu mando ele andar no programa 1 mm, e talves o prog manda o motor andar 100 metros, algo assim, pq o motor nao para de andar e ja logo acaba o curso da mesa, mas tipo, se minha teoria estiver certa, se eu desligar a fonte da mesa, entao o programa nao sabe e ele continua mandar o pulso at[e atingir um valor q faço o pulso terminar, só q eu ja fiz isso e o motor nao para nunca mais, cheguei a deixar meia hora e ligar a fonte novamente e o motor nao tinha parado de girar.

Você está falando de situações diferentes.

Movimentando pelo JOG, mesmo que as configurações estejam erradas, ele não deveria movimentar, ou, continuar o movimento, sem estar pressionando alguma tecla.

Já movimentando por código G, pode ser que o campo "passos p/ mm" esteja com configuração errada. Experimente colocar 200.

Se não for problema usar o TurboCNC, acho que deveria seguir a solução do Eneias. Vá para phase drive. Terá melhor resultado.

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re:Problemas com porta paralela e mach3
« Resposta #23 Online: 28 de Dezembro de 2013, 02:05 »
Cláudio,

Professor, em nenhum momento ele falou que está fazendo isso pela serial.

Não sei se você já programou no Arduino, se você ler o programa apresentado (para Arduino) verá comandos de inicialização e de acionamento (escrita) da porta serial. Que podem ser para um esperado acionamento ou simplesmente monitoração, mas que, de qualquer modo, tornam um programa desse tipo mais lento e talvez, inadequado para acionar um motor em alta velocidade.

Você é quem está fazendo uma salada!

Referente a serial, se está escrevendo, então não tem como ser acionamento.

Gil, mais uma vez: esquece "alta velocidade". Tira isso da sua cabeça. Esse não é o foco.

E sim! É possível debugar pela serial, como ele está fazendo, sem perder o rendimento.

Na verdade C não tem nada a ver com isso! E é errada a afirmação de que um programa é lento, pois foi escrito em C. Tadinha da Apple!

Realmente será lento. Muito lento... E o código possui um erro grave que o forçará ser mais lento ainda.

Mas irá funcionar e, de repente poderá ser o suficiente para a aplicação dele.

-----------

Veja isso como um aprendizado. Afinal, é fazendo merda que adubamos a vida.

Sim, em nenhum momento excluo o aprendizado, mas me ative a pergunta de como acionar o motor de passo, da maneira e com a solução mais rápida, eficaz e mais adequada para um iniciante. Não exatamente a lingagem C, mas a biblioteca (em C) de motores de passo do Arduino é boa para iniciantes, porém acho-a lenta para um CNC, mesmo para amadores. Mas não deixa de ser uma fonte de aprendizado.

Ele não pediu nada disso. Ele quer fazer funcionar. Se vai dar certo, ele saberá testando.

Outra vez, você está se equivocando em suas afirmações. Programando em C e, utilizando essa mesma biblioteca, é possível fazer um driver que trabalhe em algumas centenas de kHz. Sei que exitem soluções mais eficientes, mas não vem ao caso.

Eu uso muito C e é rápida o suficiente para muitas aplicações de automação (CNC, robótica, controle de processos, ....) se o compilador ajudar. Mas, você deve saber que a "rapidez da linguagem C" depende de várias coisas: o compilador utilizado, a competência do programador, as bibliotecas utilizadas, a velocidade do processador, ....

Quanto a otimização, isso se aplica em qualquer linguagem de programação. Um programador em C meia boca, pode gera um executável mais eficiente que um programador em Assembly meia-boca.

Agora, "rapidez da linguagem C" soou esquisito! Processadores recebem instruções. Eles não são interpretadores.

Finalmente, após analisados os avisos e conselhos, cada um escolhe o caminho a percorrer (mais longo, mais curto, errado, ...). Tudo é um aprendizado....

Concordo! Porém tudo tem seu equilíbrio.

Errado? Pode apostar que não é!

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re:Problemas com porta paralela e mach3
« Resposta #24 Online: 28 de Dezembro de 2013, 02:36 »
Eu não ia fazer isso, mas aí vão algumas observações:
 
É importante entender como funciona a geração de pulsos pelo Mach3 o TurboCNC e o que o programa do Arduino consegue fazer.

Num programa CNC, ao gerar pulsos para mover o motor, o programa faz o sinal de STEP ser igual a 0 durante alguns poucos microssegundos e depois volta a valer 1 (+5V) durante dezenas ou até milhares de microssegundos, isso se repete uma certa quantidade de passos esperados no motor. Por outro lado, o programa postado, fica testando alguns bits de entrada do Arduino, um deles é o sinail de STEP. Ou seja:

(1) Se o programa coincidir de ler um pulso igual a zero no exato momento em que isso acontecer e não pode demorar muito para isso (apenas alguns microssegundos). Ou seja, jogue na loteria que talvez seja mais provável acertar!! Um programa desse tipo deveria utilizar ao menos interrupções do processador. Isso é beeeeeeem diferente de um L-297, por exemplo, que usa apenas circuitos lógicos discretos (="hardware puro", do tipo "bem burrinho") para gerar a movimentação e não precisa ficar testando bit nenhum. Assim, o referido programa pode até mover o motor uma vez ou outra, mas vai perder muuuuuuuuitos passos gerados pelo software. Isso é inaceitável num CNC.

Estamos falando de um microcontrolador trabalhando a 16 MIPS (Máximo de 20 MIPS). Podendo executar 240 instruções durante um pulso de 15uS. Acredite: é bastante coisa!

Na velocidade correta, funcionará perfeitamente.


(2) Um programa desse tipo deveria controlar a corrente, num arranjo chopper, medindo e controlando a corrente nas fases do motor. Isso é possível de ser feito, pois o Arduíno possui entradas analógicas, mas falta um programa adequado e veloz o suficiente. Tenho desconfiança que um Arduino dos mais simples consiga fazer isso com as bibliotecas padrão e o compilador C usual.

(3) Não usar a porta serial, a menos para a fase de testes, pois isso atrasa o programa e torna a movimentação lenta.

(4) Não foi mencionado como o motor está sendo efetivamente acionado. Ou seja, estão sendo usados transistores? Como estão ligados? Qual é a alimentação? Sem ligações corretas, "a mágica" não funciona, o motor não gira ....

São apenas alguns comentários e observações.

Ele esta usando UL2003 como driver.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Problemas com porta paralela e mach3
« Resposta #25 Online: 28 de Dezembro de 2013, 09:06 »
Cláudio,

Eu não ia fazer isso, mas aí vão algumas observações:
 
É importante entender como funciona a geração de pulsos pelo Mach3 o TurboCNC e o que o programa do Arduino consegue fazer.

Num programa CNC, ao gerar pulsos para mover o motor, o programa faz o sinal de STEP ser igual a 0 durante alguns poucos microssegundos e depois volta a valer 1 (+5V) durante dezenas ou até milhares de microssegundos, isso se repete uma certa quantidade de passos esperados no motor. Por outro lado, o programa postado, fica testando alguns bits de entrada do Arduino, um deles é o sinail de STEP. Ou seja:

(1) Se o programa coincidir de ler um pulso igual a zero no exato momento em que isso acontecer e não pode demorar muito para isso (apenas alguns microssegundos). Ou seja, jogue na loteria que talvez seja mais provável acertar!! Um programa desse tipo deveria utilizar ao menos interrupções do processador. Isso é beeeeeeem diferente de um L-297, por exemplo, que usa apenas circuitos lógicos discretos (="hardware puro", do tipo "bem burrinho") para gerar a movimentação e não precisa ficar testando bit nenhum. Assim, o referido programa pode até mover o motor uma vez ou outra, mas vai perder muuuuuuuuitos passos gerados pelo software. Isso é inaceitável num CNC.

Estamos falando de um microcontrolador trabalhando a 16 MIPS (Máximo de 20 MIPS). Podendo executar 240 instruções durante um pulso de 15uS. Acredite: é bastante coisa!

Sim, eu acredito em você....

Mas, não sei se você já programou em Arduino, eu já programei em vários modelos, inclusive usando interrupção, que acho você não entendeu a finalidade para que serviria nesse caso.

Também já fiz vários experimentos da velocidade máxima em trens de pulsos via programa, usando um oscilosópio, não chega a algumas dezenas de KHz em linguagem C.

Mas, não vou ficar me estendendo para não "poluir" e suscitar mal entendidos e mais distorções do que eu realmente disse. Já estou me excedendo no que eu me dispunha a postar neste tópico.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Problemas com porta paralela e mach3
« Resposta #26 Online: 28 de Dezembro de 2013, 10:37 »
Pois bem, testei um Arduino Mega-SDK (processador ATmega2560 @ 16MHz) com um programa bem simples:

int p13 = 13;
void setup() {               
  pinMode(p13, OUTPUT);     
}

void loop() {
  digitalWrite(p13, HIGH);
  digitalWrite(p13, LOW);
}


Sem nenhuma biblioteca adicional, para não perder mais tempo de execução.

A frequência obtida no pino 13 foi de aproximadamente 70 KHz. Para acionar um motor de passo, assumindo que não haja perda de torque devido a velocidade (o ULN2003 não possibilita isso), a velocidade máxima (rotação do motor) em half-step com muita boa vontade, será de:

60*70000 / (2*400) = 5250 RPM

Essa é a velocidade máxima teórica com apenas duas instruções conforme acima, usando o compilador padrão do Arduino e o programa bem simples acima.

Se o programa gerar a sequência de passos de acionamento das fases do motor, ficar testando bits de entrada e acionar mais de um eixo motriz, a velocidade será bem menor. Não foi levada em conta a perda de torque, que ocorrerá, pois o circuito não controla a corrente do motor, o que limitará ainda mais a velocidade útil do motor.

Concluindo, o Arduino é capaz de acionar um motor de passo. A questão é, a que velocidade de acionamento do motor e se é possível o sincronismo do movimento com o Mach3 ou TurboCNC sem perder nenhum passo, sem jitter no acionamento do motor e com todos os eixos do CNC sincronizados. Aí, a coisa fica bem complicada se for usar um Arduino e seu ambiente padrão de programação (compilador, bibliotecas, ...) apenas....
« Última modificação: 28 de Dezembro de 2013, 10:59 por minilathe »

Offline sijoga

  • Novato
  • *
  • Posts: 13
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Mirassol-SP
  • Nome:: Joao
  • Profissão: Desenhista
Re:Problemas com porta paralela e mach3
« Resposta #27 Online: 28 de Dezembro de 2013, 13:07 »
Boa tarde pessoal, obrigado por tantas respostas, seguinte não estou usando comunicação serial pra acionar os motores, eu uso a serial para ler se esta acionando ou nao os pinos da porta paralela, quanto ao funcionamento do programa mach3 e turbocnc, eu nao sei se tem como regular o tempo do pulso dele, pois se for como o amigo falou que sao varios pulsos e micro segundos, e a porta volta a ficar no estado q ela estava entao pode ser isso o problema, esse phaser driver é esse do link "http://www.google.com.br/imgres?safe=off&sa=X&biw=1366&bih=642&tbm=isch&tbnid=RYkcbOVoIvmfdM:&imgrefurl=http://bildr.org/2011/06/easydriver/&docid=XN4ZBSuwbWcCDM&imgurl=http://bildr.org/blog/wp-content/uploads/2011/05/EasyDriver-Stepper-Motor-Driver2.png&w=433&h=782&ei=7ei-Up7xIdLekQfd84DgAw&zoom=1&ved=1t:3588,r:30,s:0,i:178&iact=rc&page=2&tbnh=190&tbnw=105&start=17&ndsp=23&tx=54&ty=84"
a plaquinha vermelha?
Se for isso essa peça é bem baratinha e com isso eu elimino o arduino completamente certo?

Offline Eneias Eringer

  • Hobby
  • ****
  • Posts: 769
  • Sexo: Masculino
Re:Problemas com porta paralela e mach3
« Resposta #28 Online: 28 de Dezembro de 2013, 13:26 »
KKKK Voce ta querendo complicar as coisas kkkk...

Voce liga a porta paralela direto no ULN2003 como no anexo que peguei no site rogercom , dai configura o turbo cnc para phase drive.

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re:Problemas com porta paralela e mach3
« Resposta #29 Online: 28 de Dezembro de 2013, 14:57 »
Mas, não sei se você já programou em Arduino, eu já programei em vários modelos, inclusive usando interrupção, que acho você não entendeu a finalidade para que serviria nesse caso.

Nunca utilizei a IDE do arduino, porém conheço o hardware, pois utilizei a linha AVR durante alguns anos. Com WinAVR e posteriormente Atmel Studio.

Não sei de onde você tirou essa afirmação sobre interrupção. Mas de qualquer maneira, neste caso, a interrupção tornaria o programa mais lento.

Também já fiz vários experimentos da velocidade máxima em trens de pulsos via programa, usando um oscilosópio, não chega a algumas dezenas de KHz em linguagem C.

Você precisa saber separar as coisas.

O compilador vai transformar o seu código em linguagem de máquina. Não existe um interpretador dentro do processador para executar o programa. O que acontece com o JAVA.

O que define a velocidade é a experiência do programador.

Um exemplo:

Código: [Selecionar]
    while(1)
    {
    PORTB |= (1 << PINB7);
    asm("nop");
    PORTB &= ~(1 << PINB7);
    }

Compilando:

Código: [Selecionar]
        sbi 0x05, 7 ; 2 Clocks
        nop ; 1 Clock
        cbi 0x05, 7 ; 2 Clocks
      rjmp .-8      ; 2 Clocks

Teu pino ficará balançando a 2 MHz.

Vamos espremer um pouco mais:

Código: [Selecionar]
    while(1)
    {
    PORTB ^= (1 << PINB7);
    }

Resultado:

Código: [Selecionar]
      in r24, 0x05 ; 1 Clock
        subi r24, 0x80 ; 1 Clock
out 0x05, r24 ; 1 Clock
        rjmp .-8      ; 2 Clocks

Teu pino ficará balançando a 3 MHz. Como pode ser mais rápido que isso?

Se não for o suficiente, ainda temos o TIMER1 que é capaz de fazer esse pino balançar a 8MHz e de lambuja a CPU fica livre pra você.


Mas, não vou ficar me estendendo para não "poluir" e suscitar mal entendidos e mais distorções do que eu realmente disse. Já estou me excedendo no que eu me dispunha a postar neste tópico.

Em momento algum tentei distorcer o que você diz. Rebati, pois não concordei em alguns pontos com você. E no final das contas, saímos todos ganhando.


Pois bem, testei um Arduino Mega-SDK (processador ATmega2560 @ 16MHz) com um programa bem simples:

int p13 = 13;
void setup() {               
  pinMode(p13, OUTPUT);     
}

void loop() {
  digitalWrite(p13, HIGH);
  digitalWrite(p13, LOW);
}


Sem nenhuma biblioteca adicional, para não perder mais tempo de execução.

A frequência obtida no pino 13 foi de aproximadamente 70 KHz. Para acionar um motor de passo, assumindo que não haja perda de torque devido a velocidade (o ULN2003 não possibilita isso), a velocidade máxima (rotação do motor) em half-step com muita boa vontade, será de:

60*70000 / (2*400) = 5250 RPM

Essa é a velocidade máxima teórica com apenas duas instruções conforme acima, usando o compilador padrão do Arduino e o programa bem simples acima.

Se o programa gerar a sequência de passos de acionamento das fases do motor, ficar testando bits de entrada e acionar mais de um eixo motriz, a velocidade será bem menor. Não foi levada em conta a perda de torque, que ocorrerá, pois o circuito não controla a corrente do motor, o que limitará ainda mais a velocidade útil do motor.

Concluindo, o Arduino é capaz de acionar um motor de passo. A questão é, a que velocidade de acionamento do motor e se é possível o sincronismo do movimento com o Mach3 ou TurboCNC sem perder nenhum passo, sem jitter no acionamento do motor e com todos os eixos do CNC sincronizados. Aí, a coisa fica bem complicada se for usar um Arduino e seu ambiente padrão de programação (compilador, bibliotecas, ...) apenas....

Não coloque a culpa no C (no caso do arduino: C++). Provavelmente essas funções executam muitas instruções.

E mesmo assim funcionará para do criador do tópico.

Ao menos você já mudou o seu discurso. Agora o arduino é capaz...

 

/** * */