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: ivan braga em 17 de Janeiro de 2011, 06:12
-
Olá a todos.
Bom, o que às vezes parece ser a parte mais simples torna-se o mais complicado de se compreender.
Vamos aos fatos.
Estou terminando o projeto de uma controladora para motores de passo bipolar, até ai nada de muito complicado, porem o problema surgiu quando estava fazendo uma programa de comunicação entre a controladora e o pc.
Na parte que diz respeito à comunicação via porta paralela estão as seguintes configurações:
• Passos por volta - 1/1 até 1/32 o que dará ate 6400 passos por volta
• Corrente do motor
• Controle da temperatura da controladora
• E mais algumas “frescurites”
A complicação apareceu justamente nas “frescurites”, enquanto estava usando o programa que fiz para o desenvolvimento e configuração da controladora, não tive nenhuma duvida.
Porem quando quis entender como os programas usados para controle das CNCs fazem a rampa de aceleração acontecer, ai sim deu “M”, não que isto seja necessário para minha controladora, mais queria que o programa de configuração também informasse os parâmetros usados pelo Mach e TCNC para a rampa de aceleração, afim de facilitar a vida de alguns usuários.
Usarei como parâmetros da minha duvida, frequências bem baixas e também dispensarei momentaneamente o que se refere à cinemática do deslocamento.
EX:
• Velocidade Inicial = 1Hz
• Velocidade Final =10Hz
• Aceleração =2Hz
• Largura do Pulso da velocidade Inicial = 1s (Ton+Toff)
• Largura do Pulso da velocidade Final = 0,1s (Ton+Toff)
• Largura do Pulso da Aceleração 0,5s (Ton+Toff)
• Tempo para aceleração = 4,5s
• Tempo entre o maior e o menor Pulso = 0,9s
Deixando de lado a mecânica, quero entender como calcular a quantidade de pulsos e a largura de cada um deles.
Visto que temos uma velocidade variável, ou seja, o 1º pulso deverá ter 1s e o ultimo deverá ter 0,1s, ou estou errado?
Quantos pulsos podem e ou devem ser dados, e como calcular a largura de cada um deles???
Sinceramente, já estou a mais de uma semana tentando entender isto, já fiz e refiz cálculos que parecem não ter fim e não cheguei a lugar nenhum, nada do que faço me dá um resultado satisfatório e coerente.
Por mais que eu tente, não consigo deixar isso de lado enquanto não entender a logica para resolver essa duvida, pois nas infinidades de cálculos que já fiz, provavelmente passou despercebida a resposta e 'engoli barriga'.
Abraços e aguardo sugestões.
Ivan B.
-
Ivan,
A largura dos pulsos é fixa - a velocidade é relacionada à frequencia que estes pulsos são enviados.
Posso estar errado porque eletronica não é meu forte, mas penso que se voce tem um pulso de 0,1s, a máxima frequencia de envio deste pulso será de 600Hz (60/0,1)
Normalmente a largura dos pulsos é bem menor do que esta que voce exemplificou - dê uma olhada em algum datasheet de algum integrado para motor de passo e verá que o "duty cycle" é bem mais curto - por exemplo algo em torno de 4us (microsegundos).
Há ainda outros tempos necessários para ao correto funcionamento do drive e não só o Ton e o Toff, e são estes tempos que de certa forma limitam a frequencia máxima de envio dos pulsos, ou que faz com que o motor comece a perder passos (claro que há outras imlicações que influencial a perda de passos e que limitam a frequencia de pulsos que pode ser transmitidas).
-
Posso estar errado porque eletronica não é meu forte, mas penso que se voce tem um pulso de 0,1s, a máxima frequencia de envio deste pulso será de 600Hz (60/0,1)
Normalmente a largura dos pulsos é bem menor do que esta que voce exemplificou - dê uma olhada em algum datasheet de algum integrado para motor de passo e verá que o "duty cycle" é bem mais curto - por exemplo algo em torno de 4us (microsegundos).
Corrigindo, para um pulso de 0,1 s de Toff e 4 us de Ton, a frequência máxima seria de 1/(0,1+4x10-6), ou aproximadamente 10 Hz.
O ciclo de trabalho seria de 4x10-6 / (0,1+4x10-6), aproximadamente 4x10-5 ou então 0,004%
-
Estou estudando esse mesmo problema para controle de motores de passo diretamente pelo microcontrolador, para tarefas simples.
Embora esteja apenas começando a quebrar a cabeça, concordo com o Gilli, que a largura do pulso é fixa, e a cada pulso a controladora vai variando as fases do motor que estão ligadas e as que estão desligadas, mantendo um estado até que receba outro pulso.
Aumentando a frequência dos pulsos de forma linear, tem-se a aceleração desejada.
-
Na verdade a largura de tempo Ton é fixa, mas a frequência varia, pois Toff varia.
No caso do L297, Ton varia e Toff é fixa.
-
Extraído do datasheet do L297:
(http://www.guiacnc.com.br/w2box/data/Fabio%20Gilii/coisas/tempo.PNG)
Para haver um passo o tempo de duração do pulso será Ts + Th, onde Ts = Setup Time (1us) e Th = Hold Time (4Us).
O tempo total do pulso "para ser reconhecido como pulso" é de 0,5 uS, e este é o menor sinal que pode ter para funcionar - o resto é consequencia disso.
-
O Ts é o tempo para a lógica interna L297 "entender" os sinais CW/CCW e Half/Full Step.
Com relação aos valores de Ton e Toff, o primeiro é variável e o segundo é fixo (no mínimo 0,5 us). O que eu falei relativo ao ciclo de trabalho deve ser corrigido, pois considerei Ton (e não Toff) fixo, sem ler o catálogo do L297.
Porém, o raciocínio é o mesmo, e deve ser alterado para:
Com clock de 10Hz e Toff de 4us, o ciclo de trabalho será aproximadamente 1 - 0,00004 = 0,99996 ou 99,996%.
-
Antes de tudo, obrigado a todos pelo retorno.
Acho que não me fiz entender muito bem, desculpe-me por isso, vou tentar esclarecer.
Coloquei Ton e Toff, dentro do mesmo período para facilitar o entendimento e acabei complicando.
Fabio e minilathe
Não tenho duvidas no que se refere ao acionamento do motor de passo, nem do seu controle, sei que o mais comum é configurar o Ton do Mach e do Tcnc com 5us. Tambem sei que o que varia é o Toff.
Vou detalhar o exemplo.
O raciocino mais lógico seria:
1º pulso => Ton=0.5us + Toff=0.999995s =>1s
2º pulso => Ton=0.5us + Toff=0.899995s =>0.9s
3º pulso => Ton=0.5us + Toff=0.799995s =>0.8s
4º pulso => Ton=0.5us + Toff=0.699995s =>0.7s
5º pulso => Ton=0.5us + Toff=0.599995s =>0.6s
6º pulso => Ton=0.5us + Toff=0.499995s =>0.5s
7º pulso => Ton=0.5us + Toff=0.399995s =>0.4s
8º pulso => Ton=0.5us + Toff=0.299995s =>0.3s
9º pulso => Ton=0.5us + Toff=0.199995s =>0.2s
10º pulso => Ton=0.5us + Toff=0.099995s =>0.1s
O que daria 10 pulsos, que somados daria 5.5s e não 4.5 como no inicio do raciocino.
-
Ivan,
Pelo que eu entendo, não se configura nada de Ton ou Toff... a coisa é feita internamente.
No Mach3, Turbocnc e outros programas o que se configura são os tamanhos dos pulsos completos - e apenas para exemplificar usaria o gráfico do L297 porque é claro e existe, então seria a soma do Ts + Th, e a quantidade de passos para um determinado deslocamento.
É o programa quem vai calcular quantos pulsos serão necessários para fazer o deslocamento de uma determinada medida.
Então por exemplo, se o deslocamento desejado é de 1mm, e e digamos que para haver este deslocamento são necessários 10 pulsos, o programa gera um trem de pulsos contento estes dez pulsos apenas, e cada pulso dura os 5us que teriam sido informados nas janelas de configuração.
A velocidade de deslocamento é que irá manda na frequencia que estes dez pulsos serão gerados...
Supondo que eu queira mover em 1 mm e em um segundo, o trem de 10 pulsos terá duração de 1 segundo - se eu quiser aumentar a velocidade - envio os mesmos dez pulsos na metade do tempo (0,5s) e terei dobrado de velocidade de deslocamento, mas a contagem de pulsos é a mesma...
A velocidade de deslocamento será calculada levando em conta a quantidade de pulsos para que haja um deslocamento conhecido - seja uma unidade como o milimetro por exemplo mais o tempo que se deseja executar este deslocamento.
O tempo para o deslocamento é calculado levando-se em conta a máxima velocidade e a aceleração - em alguns programas como o Turbocnc, há velocidade mínima e máxima.
Veja - estou comparando com os programas, mas não sei se é esta sua intenção - apenas o fiz para melhor entendimento.
-
Fabio.
Concordo com quase tudo que você escreveu, discordando apenas neste trecho.
, e cada pulso dura os 5us que teriam sido informados nas janelas de configuração.
Vamos considerar o trem de pulsos "mal desenhado" abaixo tendo exato 1seg e sendo caracterizado como "pulso" de uma rampa de descida outra.
Na primeira linha digo que tenho uma frequencia de 5Hz, pois como descrito nesta fonte ""http://pt.wikipedia.org/wiki/Frequ%C3%AAncia (http://pt.wikipedia.org/wiki/Frequ%C3%AAncia)""
Frequência é uma grandeza física ondulatória que indica o número de ocorrências de um evento (ciclos, voltas, oscilações, etc) em um determinado intervalo de tempo.
Alternativamente, podemos medir o tempo decorrido para uma oscilação. Este tempo em particular recebe o nome de período (T). Desse modo, a frequência é o inverso do período.
o mesmo evento se repete 5 vezes em 1seg.
Na segunda linha digo que tenho uma frequencia de 6Hz, pois o mesmo evento se repete 6 vezes em 1seg.
Na terceira linha digo que tenho uma frequencia de 10Hz, pois o mesmo evento se repete 10 vezes em 1seg.
|--------------------1seg---------------------|
| _ _ _ _ _ |
| ____| |____| |____| |____| |____| | |
| _ _ _ _ _ _ |
| ___| |___| |___| |___| |___| |___| | |
| _ _ _ _ _ _ _ _ _ _ |
| _| |_| |_| |_| |_| |_| |_| |_| |_| |_| | |
Tudo isso desprezando o Ton e Toff, pois isto e irrelevante, estou apenas demonstrando o conceito de "frequencia" e "pulso".
Exatamente, como escrevi anteriormente, compreendo e concordo.
Supondo que eu queira mover em 1 mm e em um segundo, o trem de 10 pulsos terá duração de 1 segundo - se eu quiser aumentar a velocidade - envio os mesmos dez pulsos na metade do tempo (0,5s) e terei dobrado de velocidade de deslocamento, mas a contagem de pulsos é a mesma...
Ainda usando o desenho.
Sei que as frequencias usadas são baixas, é apenas para esclarecer, não vou configurar o Mach nem o Tcnc com elas, ao contrario, o que quero entender é como chegar a este trem de pulsos.
Ainda com o exemplo da primeira mensagem, digamos que configurei o Tcnc desta forma:
• Velocidade Inicial = 1Hz
• Velocidade Final =10Hz
• Aceleração =2Hz
E ele chegou a este trem de pulso, 6 pulsos no tempo de 1seg, e como pode ser visto, os pulsos são decrescentes.
|--------------------1seg--------------------- |
| _ _ _ _ _ _ |
| ______| |_____| |____| |___| |__| |_| | |
Com um osciloscópio ligado a porta paralela, vejo um sinal muito próximo disso. O problema é que meu osciloscópio é analógico, se fosse digital seria muito mais fácil compreender esta duvida.
Minha intenção e apenas compreender como chegar a um numero especifico de passos, sei que eu na condição de usuário de qualquer um destes programas não tenho que me preocupar com numero de passo, pulsos e bichos do gênero, mais como trabalho com programação de MCUs, não consigo deixar de pensar em como fazer.
Veja - estou comparando com os programas, mas não sei se é esta sua intenção - apenas o fiz para melhor entendimento.
-
Ivan,
O que eu entendo é que o trem de pulsos é fixo no tempo, então numa rampa de aceleração, a frequencia varia a cada amostra de tempo.
Imaginando que para chegar à vel. máxima eu demore digamos 10 segundos (por exemplo apenas), a cada segundo o trem de pulsos terá uma frequencia fixa, variando na relação de velocidade x tempo...
Supondo que eu começe de velocidade zero e vá até velocidade 10 num tempo de 10 segundos, no primeiro segundo a frequencia é 1/10 da frequencia máxima, depois 2/10, depois 3/10 e assim por diante até a máxima frequencia.
Eu não tenho como medir isso até porque eletronica não é meu forte, mas me baseio pelo que ouço nos acionamentos que faço com alguns drives e em determinadas ocasiões.
Claro - o ideal seria ter a capacidade de analisar a coisa com equipamento adequado.
Pena que eu não posso ajudar mais que as minhas impressões.
-
Ivan,
Com relação ao acionamento, o que importa em primeiro lugar é a quantidade de pulsos, pensando na CNC como um controlador de posição (x, y, z, r, ...). Em segundo lugar vem as restrições desse controle de posição, que são a velocidade e a aceleração máxima, que são os "batentes", ou parâmetros na geração dos pulsos. As restrições servem para que o sistema a ter sua posição controlada (que inclui: driver do motor, motor, estrutura, spindle, ferramenta, peça) se "comporte bem", não perdendo passos, evitando frequências de ressonância, etc. Mas o objetivo básico do software CNC é o controle de posição, que depende basicamente da quantidade de pulsos, num sistema CNC baseado em motor de passo.
Para controlar, ou limitar, a frequência, basta controlar a taxa de envio dos pulsos pela porta de saída do controlador da CNC. Daí, se pode definir a aceleração e a frequência máxima. É simples assim!!
Ou então, acho que ainda não entendi sua dúvida...
-
Fabio,
Este também é meu pensamento sobre a duvida que postei, o que está difícil é saber como chagar a um determinado numero de pulsos e a duração de cada um deles.
Supondo que eu começe de velocidade zero e vá até velocidade 10 num tempo de 10 segundos, no primeiro segundo a frequencia é 1/10 da frequencia máxima, depois 2/10, depois 3/10 e assim por diante até a máxima frequencia.
minilathe,
Sei de tudo que você escreveu, esta não é meu questionamento.
Vamos esquecer totalmente o conceito referente as maquinas.
Supondo que eu queira fazer um gerador de funções, e uma desta funções é gerar em trem de pulsos de ondas quadradas com um duty cycle de 50% que varie de 0 a 10Hz com uma aceleração de 1Hz.
Este citado trem de pulsos terá que se iniciar de 0Hz e ir até 10Hz. E terá uma rampa de aceleração de 1Hz, logo (10Hz-0Hz)/1Hz=10seg, sendo assim no meu 1º segundo tenho 1 pulso que durará tambem 1seg, Já no meu 2º seg terei 2 pulsos, porem estes pulsos não podem ter a mesma largura, ou seja, se cada um tiver 0.5seg de largura(entenda que para facilitar quando falo de largura me refiro sempre a Ton e Toff do pulso em evidencia), o 1º pulso do 2º seg teve uma rampa de aceleração em relação ao único pulso do 1º seg, porem o 2º pulso do 2º seg não teve nenhuma aceleração em relação ao 1ºpulso do 2º seg.
Como no 3º seg eu terei "possivelmente" 3 pulsos e em teoria já estarei entrando na casa dos 3Hz, 1seg/3Hz=0.333...seg. Então voltando a confusão do parágrafo acima, meu 2º pulso do 2º seg terá que ter um tempo entre >0.5seg e 0.333seg< para poder apresentar uma aceleração em relação ao seu anterior.
Sei os parágrafos acima parecem confusos, porem lendo com atenção acho que agora da para entender meu questionamento.
Se ainda não fui claro, tentarei de outra maneira.
Ou então, acho que ainda não entendi sua dúvida...
Obrigado pelas respostas de todos.
-
Supondo que eu queira fazer um gerador de funções, e uma desta funções é gerar em trem de pulsos de ondas quadradas com um duty cycle de 50% que varie de 0 a 10Hz com uma aceleração de 1Hz.
Este citado trem de pulsos terá que se iniciar de 0Hz e ir até 10Hz. E terá uma rampa de aceleração de 1Hz,
Acho que a idéia inicial deve ser refeita. Ao invés de um gerador de sinais, vamos imaginar um contador de passos. Para o qual queremos enviar 100 pulsos. Porém, a frequência máxima é de 10 Hz e a aceleração de 2Hz por segundo.
É importante frisar que: na prática a coisa não seria implementada assim!!!
Mas para compreender, podemos fazer uma analogia com a cinemática, utilizando as seguintes equações:
f = f0 + a * t .... (Eq. 1)
N = N0 + f0 * t + 0,5 * a * t 2 .... (Eq. 2)
Saindo de 0 Hz e N0 = 0,
Em t = 1 s, teremos:
f = 0 + 2 * 1 = 2 Hz
N = 0 + 0 + 0,5 * 2 * 1 = 1 passo
Em t = 2 s, teremos:
f = 2 + 2 * 1 = 4 Hz
N = 1 + 2 * 2 + 0,5 * 2 * 4 = 9 passos
Em t = 3 s, teremos:
f = 4 + 2 * 1 = 6 Hz
N = 9 + 4 * 3 + 0,5 * 2 * 9 = 30 passos
Em t = 4 s, teremos:
f = 6 + 2 * 1 = 8 Hz
N = 30 + 6 * 4 + 0,5 * 2 * 16 = 70 passos
Em t = 5 s, teremos:
f = 8 + 2 * 1 = 10 Hz (chegou ao limite máximo, não aumentar mais a frequência!! "Zerar" a aceleração!!)
N = 70 + 8 * 5 + 0,5 * 2 * 25 = .... limitar em 100 passos
-
de 9 passos em 2 segundos pula para 30 passos em 3s?
Acho que tem coisa errada aí...
-
Agora acho que está certo:
-
minilathe,
Achei interessante a evolução da "parabólica" que se formou no gráfico.
Na segunda equação houve dois detalhes que não entendi. Primeiro a constantes "0.5", refere-se a algo especifico? O outro, você pode observar nas setas em vermelho, a variável "t", você usa valores aleatórios?
Antes de mais nada agradeço a você, ao Fabio e ao kelmer pelo tempo usado em resposta a minha duvida.
Sei que vocês tiveram extrema boa vontade de responder, porem a duvida ainda não foi esclarecida, até mesmo com a ultima resposta do minilathe, o que você propôs "minilathe" pode servir a duvida do "kelmer", porem a minha não.
Veja, na tabela que fiz no excel usando sua formula, tenho 1, 5, 12, 22....(não me preocupei com os 100 passos propostos para ver a inclinação) ou seja 1ºseg 1 passo, sem problema, porem 2º seg 5 passos "1/5=0.2seg", nesse momento não tenho aceleração, terei aceleração apenas na transição de um segundo para o outro.
Semana que vem tentarei pegar o osciloscópio digital de um amigo só para ver se o Mach e ou Tcnc usam uma aceleração reta '/' ou tipo escada '_|' .
Mais uma vez obrigado, assim que possível após o teste darei um retorno.
-
A minha resposta anterior estava incompleta, pois só considerou a aceleração, faltou a desaceleração. Segue planilha e gráficos, acho que agora, corretos.
O valor 0,5 é uma constante.
-
A equação 2, da quantidade de passos, tinha um erro, já corrigido:
N = N0 + f0 * t + 0,5 * a * t 2 .... (Eq. 2)
-
Da cinemática, há outra equação que pode ajudar para verificar se o valor de fmax será ultrapassado num deslocamento com "N" passos com uma aceleração "a":
f2 = f02 + 2 *a * N ..... (Eq. 3)
-
não sei se vai ajudar mas há alguns links que tratam de aceleração,
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1231909180/1 (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1231909180/1)
http://hwml.com/LeibRamp.pdf (http://hwml.com/LeibRamp.pdf)
http://www.buildlog.net/pic/pic_basic_motion.html (http://www.buildlog.net/pic/pic_basic_motion.html)
esse é muito bom AVR app note 446 http://fab.cba.mit.edu/classes/MIT/961.09/projects/i0/doc8017.pdf (http://fab.cba.mit.edu/classes/MIT/961.09/projects/i0/doc8017.pdf)
-
fh007
Obrigado pelos links, estes dois abaixo
http://hwml.com/LeibRamp.pdf (http://hwml.com/LeibRamp.pdf)
http://fab.cba.mit.edu/classes/MIT/961.09/projects/i0/doc8017.pdf (http://fab.cba.mit.edu/classes/MIT/961.09/projects/i0/doc8017.pdf)
São derivações deste
http://www.embedded.com//showArticle.jhtml?articleID=56800129 (http://www.embedded.com//showArticle.jhtml?articleID=56800129)
muito bom e excelente fonte de consulta.
Os outros irei dar uma lida depois retorno.
Ivan