Autor Tópico: CLOCK em microsegundos  (Lida 19704 vezes)

Description:

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

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • 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: CLOCK em microsegundos
« Resposta #45 Online: 11 de Outubro de 2009, 23:04 »
Cláudio,


O Picoscope está instado no mesmo PC onde o seu software roda?

O Picoscope posui um buffer (memória interna) própria, de modo que as medições não seja influenciadas pelo Windows?

Voce teria a imagem gravada pelo sofware do Picoscope? A forma de onda é similar ao do seu programa? Como voce avaliou a diferença de 10Hz que disse haver?

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #46 Online: 12 de Outubro de 2009, 00:28 »
O Picoscope está instado no mesmo PC onde o seu software roda?
sim. esta.

Citar
O Picoscope posui um buffer (memória interna) própria, de modo que as medições não seja influenciadas pelo Windows?
sim. possui. a medição é feita totalmente via hardware. enviando apenas o necessário para gerar os gráficos.

Citar
Voce teria a imagem gravada pelo sofware do Picoscope? A forma de onda é similar ao do seu programa? Como voce avaliou a diferença de 10Hz que disse haver?
posso salvar os dados da aquisição em arquivo sim. mas, para visualizar vc tera q baixar o software e instalar no seu pc. essa diferença de 10hz eu pude notar no frequencimetro q o software possui. nos videos é possível analisar os dados, fica no rodapé do programa.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • 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: CLOCK em microsegundos
« Resposta #47 Online: 12 de Outubro de 2009, 01:24 »
Cláudio,

A princípo pode não ter nada a ver... Mas o fato do software em C++ e o Picoscope estarem no mesmo PC não é uma situação ideal do ponto de vista do sistema sendo medido x sistema medidor. Considerando que o Jitter, eventualmente, poderia afetar a ambos, é mais uma suspeita...

Voce poderia salvar o gráfico do osciloscópio em bitmap?

Voce disse que na frequência de 10.000Hz existe uma diferença de 10Hz. Que pode parecer pouco, mas é uma diferença de 10 1 pulsos a cada 10.000 pulsos, em cada segundo. Num motor de passo, o erro em frequência seria cumulativo, nesse caso, equivale ao mesmo se deslocar (ou não se deslocar) 1 passo a cada 100 1000 passos que recebe. Ou seja 1% 0,1% de erro de deslocamento a cada segundo.

Basicamente, esse erro vai ocorrer, é claro, se não houver sincronismo na geração dos pulsos, que poderia acarretar deslocamentos relativos entre os eixos X, Y, Z,.... do CNC. Se todos os pulsos estiverem sendo comandados simultaneamente pelo software (o que normalmente ocorre), a variação de frequencia é de pouca influência.
Porém, alterações muito intensas de frequência podem não ser acompanhadas pelo motor de passo, aliado a inércia do sistema mecânico da CNC. A variação máxima de frequência deverá estar restrita ao parâmetro de aceleração máxima do software CNC, que define a taxa de variação da velocidade do motor. E também não sei quais os valores usuais...

« Última modificação: 12 de Outubro de 2009, 11:17 por minilathe »

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #48 Online: 12 de Outubro de 2009, 09:31 »
Citar
A princípo pode não ter nada a ver... Mas o fato do software em C++ e o Picoscope estarem no mesmo PC não é uma situação ideal do ponto de vista do sistema sendo medido x sistema medidor. Considerando que o Jitter, eventualmente, poderia afetar a ambos, é mais uma suspeita...
não teria como, sao sistemas totalmente separados. a medição é feita via hardware, sem qualquer influência do windows.

Citar
Voce disse que na frequência de 10.000Hz existe uma diferença de 10Hz. Que pode parecer pouco, mas é uma diferença de 10 pulsos a cada 10.000 pulsos, em cada segundo. Num motor de passo, o erro em frequência seria cumulativo, nesse caso, equivale ao mesmo se deslocar (ou não se deslocar) 1 passo a cada 100 passos que recebe. Ou seja 1% de erro de deslocamento a cada segundo.
Na verdade, o erro é < 0.1%. a cada segundo pode ter até 10 pulsos a mais ou a menos.

se o erro for de 90%, perderia velocidade, mas a precisão no deslocamento nunca. Quem fizer um software nesse sentido, não pode mandar o motor rodar durante 1 7/128 de segundo. teria que contar os passos do motor para se certificar de que esta sendo efetuado corretamente e também para saber quando parar.

Citar

Basicamente, esse erro vai ocorrer, é claro, se houver deslocamentos relativos entre os eixos X, Y, Z,.... do CNC. Se todos os pulsos estiverem sendo comandados simultaneamente, a variação de frequencia é de pouca influência.
Porém, alterações muito intensas de frequência podem não ser acompanhadas pelo motor de passo, aliado a inércia do sistema mecânico da CNC.
Basicamente, esse erro vai ocorrer, é claro, se houver deslocamentos relativos entre os eixos X, Y, Z,.... do CNC. Se todos os pulsos estiverem sendo comandados simultaneamente, a variação de frequencia é de pouca influência.
Porém, alterações muito intensas de frequência podem não ser acompanhadas pelo motor de passo, aliado a inércia do sistema mecânico da CNC.
Como o gerador é um só para todos os eixos, acredito não haver problemas. Quanto as variações bruscas, qualquer sistema estará sujeito a elas, de uma forma ou outra.


Ok, sem stress.... não sou sócio do Bill Gates nem concorrente direto. E se voce tiver algum programa que rode rápido no Windows, conforme temos discutido aqui, será bem vindo...

Contra fatos, não há argumentos....  :)
Lembrabndo que, o meu propósito nesse tópico, era tentar gerar esse clock que o amigo Odail precisa.
Demonstrei que é possível. Nâo é um relógio atômico, mas é funcional. atende em 1000% as necessidades do nosso amigo.

no segundo printscreen, eu ajustei no programa os tempos de Ton e Toff para chegar mais próxmio dos 10kHz. (que ficaram com 49.800 nS)

O arquivo .psdata em anexo, poderá ser visualizado com o software PicoScope 6 que está disponível para download no site picotech.com
« Última modificação: 12 de Outubro de 2009, 11:16 por Cláudio S. Freund »

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #49 Online: 12 de Outubro de 2009, 12:30 »
Basicamente, esse erro vai ocorrer, é claro, se não houver sincronismo na geração dos pulsos, que poderia acarretar deslocamentos relativos entre os eixos X, Y, Z,.... do CNC. Se todos os pulsos estiverem sendo comandados simultaneamente pelo software (o que normalmente ocorre), a variação de frequencia é de pouca influência.
Porém, alterações muito intensas de frequência podem não ser acompanhadas pelo motor de passo, aliado a inércia do sistema mecânico da CNC. A variação máxima de frequência deverá estar restrita ao parâmetro de aceleração máxima do software CNC, que define a taxa de variação da velocidade do motor. E também não sei quais os valores usuais...

Gil, em um software para controle de CNC, deve ser gerado um clock principal e em cima desse clock principal é gerado os clocks para os motores (coisa de 10kHz?). Vamos supor que esse clock seja de 25kHz.
A largura dos pulsos nunca irá diminuir, tende a aumentar por motivos já conhecidos. O clock não tem necessidade de trabalhar a 25.000Hz cravados.
Então, o driver nunca vai deixar de receber algum pulso por largura insuficiente. Pensando assim, acredito eu, não teria como o motor perder passo.
Uma outra situação é a ausencia de clock, caso o Gerador de 25kHz falhe por alguns instantes, como por exemplo, ele desapareça com 250 ciclos (1%), o que dará uma pausa de 10mS, se esse tempo for prejudicial a usinagem, o programa tem como detectar esse erro e poderá corrigir (utilizando uma rampa de aceleração para fazer a retomada) ou simplesmente parar a usinagem.

E lembrando mais uma vez, não estamos desenvolvendo um software para controle de cnc, apresentei essa solução apenas para resolver o problema do nosso amigo criador do tópico. Em momento algum plantei a idéia de que o windows é melhor em algo comparado a qualquer outro SO.
« Última modificação: 12 de Outubro de 2009, 12:35 por Cláudio S. Freund »

matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #50 Online: 12 de Outubro de 2009, 12:38 »
Citar
tou usando o Microsoft Visual C++ 6.0.

Claudio, eu uso o C++ BUILDER vicê acha que posso executar esse codigo dentro dele  pra fazer um teste ou eu teria que  mudar pra VISUAL C?

Coloquei
Citar
o osciloscopio na paralela e tive uma surpresa...

a 10khz o desvio foi menor que 10Hz... fiquei tao surpreso que vou até postar um video pra n duvidarem de mim...rs

a 50kHz a coisa ficou mais complicada, mas acredito que com alguns ajustes (nada de sobrenatural) é possível sim fazer um gerador mais ou menos confiável.

400kHz foi o maximo que consegui no meu pc

Nusssaa Claudio estou com o sorriso ;D la na orelha cara, vc ter conseguido 400 hz no seu pc foi uma coisa incrivel pela discussao que ja tivemos aqui e 10.000 hz entao foi mais ainda.

testei no frequencimento no meu multimetro pra ver quanto o KCAM estava mandando de  frequencia pro motor eixo "Z "rodar e o resutado foi de 400hz e motor gira rapidão ate ai da pra mim tranquilo,

Teria como vc disponiblizar o codigo pra mim testar aqui na minha maquina? Claudio não some cara preciso muito de vc ;D

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #51 Online: 12 de Outubro de 2009, 12:45 »
o máximo que consegui foi 400.000Hz e não 400Hz. Mas isso foi no meu computador.

quanto ao builder, eu nunca nem vi a cara, nas C é C. Acredito que algumas modificações vc tera q fazer sim.

vou anexar o arquivo main.cpp, tenta rodar ele e ve o q acontece.
« Última modificação: 12 de Outubro de 2009, 12:49 por Cláudio S. Freund »

matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #52 Online: 12 de Outubro de 2009, 13:42 »
Opa desculpa Claudio nao prestei atenção realmente foi 400k o que conseguiu (muita coisa hein)?

no caso de fCounter++; eu poderia adicionar uma label do tipo print no builder pra mostrar a frenquencia na tela, é isso mesmo?

ja tenho threads criadas no meu programa, no caso seria so adicionar abaixo do while tipo assim:

while
{


      _outp(0x378, 2);
      QueryPerformanceCou nter(&start);
      do {
         SwitchToThread();
         QueryPerformanceCou nter(&stop);
      } while( (double(stop.QuadPart - start.QuadPart) / freq.QuadPart * 1000000) <= Ton );

      _outp(0x378, 0);
      QueryPerformanceCou nter(&start);
      do {
         SwitchToThread();
         QueryPerformanceCou nter(&stop);
      } while( (double(stop.QuadPart - start.QuadPart) / freq.QuadPart * 1000000) <= Toff );

      fCounter++;
}

claro eu teria qua adicionar os includes ton e toff

essas linhas SwitchToThread();seria necessaria no meu programa?

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #53 Online: 12 de Outubro de 2009, 13:50 »
essa é a função da fCounter. a cada segundo eu executo o seguinte código:

char str[15];
_snprintf(str, 15, "%i", fCounter); // Converte de long para char
SetWindowText(hLblFreq, str); // Mostra em um Label
fCounter = 0; // Reseta o contador

SwitchToThread(); é necessário para o windows processar outras threads. senão teu pc ficará congelado. Aconselho deixar a prioridade da thread como normal.


matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #54 Online: 12 de Outubro de 2009, 17:07 »
Olha meu codigo como ficou, nao deu nenhum erro mas tambem nao contou nada na Form1->LabelLoop->Caption = fCounter; a label ficou como na foto que esta abaixo, sera que você conseguiria achar algum erro? estou no meu trabalho e minha CNC3AX esta em casa e nao posso testar direto nos pinos da porta paralela agora.



//---------------------------------------------------------------------------
#include "manip8bits.h"
#include "porta.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define IDC_CLOSE         1
#define DISP_FREQ   WM_USER + 1
#define Ton      50   // uSec
#define Toff   50   // uSec
#include <vcl.h>
#pragma hdrstop
#define DADOS 0x378
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TPorta *Lpt;
TForm1 *Form1;
unsigned long fCounter;

HWND hMain, hLabel, hLblFreq, hButtonExit;
HANDLE hThread;
HINSTANCE hInst;

DWORD WINAPI Thread_uTimer(LPVOID lpParam){
   LARGE_INTEGER freq, start, stop;
   
   SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIM E_CRITICAL);
   
   QueryPerformanceFre quency(&freq);

   for(;){
            Lpt->Envia(DADOS, 2);
      QueryPerformanceCou nter(&start);
      do {
         SwitchToThread();
         QueryPerformanceCou nter(&stop);
      } while( (double(stop.QuadPart - start.QuadPart) / freq.QuadPart * 1000000) <= Ton );

      Lpt->Envia(DADOS, 0);
      QueryPerformanceCou nter(&start);
      do {
         SwitchToThread();
         QueryPerformanceCou nter(&stop);
      } while( (double(stop.QuadPart - start.QuadPart) / freq.QuadPart * 1000000) <= Toff );

      fCounter++;
                Form1->LabelLoop->Caption = fCounter;

   }
   return 0;
}


« Última modificação: 12 de Outubro de 2009, 17:11 por matrixlan1 »

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #55 Online: 12 de Outubro de 2009, 17:25 »
tua thread não esta sendo executada.
do jeito que está o Label iria incrementar infinitamente, até ocorrer erro.

no builder é possível jogar uma variável diferente de char direto no caption do label?

tu tentou compilar o arquivo main.cpp do jeito que esta? tira as linhas _outp e v no q da.
« Última modificação: 12 de Outubro de 2009, 17:33 por Cláudio S. Freund »

matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #56 Online: 13 de Outubro de 2009, 11:44 »
Citar
tu tentou compilar o arquivo main.cpp do jeito que esta? tira as linhas _outp e v no q da.

Opa Claudio desculpa a demora em responder, o 1º programa que postei nao rodava porque eu compilei apenas metade do codigo, rodei o main.ccp e fiz algumas modificaçoes de biblioteca de porta e FUNCIONOU!!!! ele criou o quadro "utimer" e mostra os resultados nela e mostra 9.499hz que é uma velocidade considerada alta pra mim, MUITO BOM MESMO, eu estava ate achando que isso nao era possivel mesmo, mas como o amigo GIL sempre dizia tem que haver uns "TRUQUES SUJOS" pra fazer a coisa funcionar ( se é assim que posso dizer).

MUITO OBRIGADO, agora vou testar direto na porta paralela pra ver se ela oscila nessa velocidade mesmo, você ja fez algum teste direto no PINO 2 da porta paralela?
« Última modificação: 13 de Outubro de 2009, 11:47 por matrixlan1 »

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #57 Online: 13 de Outubro de 2009, 12:17 »
Legal que deu certo Odail,

se vc baixar os valores de ton e toff, vai aumentar a freq e vice-versa.
para um freq de 1kHz, defina como 500 (500 us).

Citar
MUITO OBRIGADO, agora vou testar direto na porta paralela pra ver se ela oscila nessa velocidade mesmo, você ja fez algum teste direto no PINO 2 da porta paralela?

Já fiz sim e até postei os resultados, consegui 400kHz medindo com osciloscopio.

Como vc esta fazendo o acesso a porta paralela? por device driver? qual?
« Última modificação: 13 de Outubro de 2009, 12:19 por Cláudio S. Freund »

matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #58 Online: 13 de Outubro de 2009, 13:42 »
Amigo Claudio, eu so consegui em torno de 210KHZ, deve ser pelo fato de que estou processando um gerenciador de cyber cafe na minha maquina e deve estar cheio de threads dando prioridade.

estou ja adicionado ao programa um updown linkado a uma variavel com o nome de "repete"dentro de um laço"for" assim:

while(1){
      for(aux=0; aux<repete; aux++)
      /{
      Lpt1->Envia(0x378, 1);
      QueryPerformanceCou nter(&start);
      do {
      ................... ................... ......

desta forma com o updown eu posso incrementar a variavel "repete" para controlar os pulsos do motor a passo, ta ficando show e funcional, so ainda não testei na CNX3AX porque nao esta aqui, eu estou usando um LED ligado no pino 2 da porta paralela para monitorar e ele ta acendendo de boa.

outra coisa é como eu faria pra adicionar um controle do tipo SLIDER, pra controlar a FREQUENCIA em Ton e Toff? fiz umas tentativas mas nao consegui, seria:

Ton +Toff = a variavel do tipo int ou long?

se Ton +Toff não uma variavel como eu poderia manipular a frequerncia

Citar
Como vc esta fazendo o acesso a porta paralela? por device driver? qual?

Estou usando o componente USERPORT.SYS as vezes da uns bugs aqui e depois tenho que da STOP e depois START pra funcionar direito, qual voce usa?
 
« Última modificação: 13 de Outubro de 2009, 13:47 por matrixlan1 »

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #59 Online: 13 de Outubro de 2009, 14:01 »
ao invés de usar:

#define Ton     500
#define Toff     500

crie variáveis do tipo double:

double Ton, Toff;

quando atualizar o valor do slider, jogue nessas varáveis.

pra esse teste eu usei o comando "allowio utimer.exe /a" junto com o porttalk. tem como liberar o acesso dentro do programa usando DeviceIOControl com o porttalk.sys.


Odail, para seguir a mesma linha e adicionar o slider, leia esse artigo do msdn:
http://msdn.microsoft.com/en-us/library/bb787531(VS.85).aspx
« Última modificação: 13 de Outubro de 2009, 14:27 por Cláudio S. Freund »

 

/** * */