LusoRobótica - Robótica em Português

Electrónica => Electrónica Geral => Tópico iniciado por: metRo_ em 24 de Março de 2013, 16:27

Título: Controlador Motor de Passo
Enviado por: metRo_ em 24 de Março de 2013, 16:27
Olá,
Preciso de controlar um motor de passo Nema 23 com as seguintes caracteristicas:

modelorated current (A)phase resistance (ohm)phase inductance (mH)
57BYGH56-401A2,80,832,2

Rapidamente me surgiu a duvida relativamente à tensão de alimentação do motor pois com uma R de 0,83, tenho que alimentar o motor a 2V, é suposto isto?
Título: Re: Controlador Motor de Passo
Enviado por: senso em 24 de Março de 2013, 16:45
Não, alimentas com muito mais, o driver tem é de fazer limitação de corrente, a ST tens uns porreiros, agora modelos não sei de cabeça..
Título: Re: Controlador Motor de Passo
Enviado por: Marvin em 24 de Março de 2013, 16:58
o DRV8833 da TI permite controlar a corrente utilizando resistencias. Se calhar serve para driver do Nema23
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 24 de Março de 2013, 17:03
Não, alimentas com muito mais, o driver tem é de fazer limitação de corrente, a ST tens uns porreiros, agora modelos não sei de cabeça..

Tambem estive os da ST, têm uns de 3A que me servem. Encontrei entretanto um da toshiba que parece ser muito utilizado http://www.ebay.com/itm/One-Axis-Single-3-5A-TB6560AHQ-Stepper-Motor-Driver-Board-f-CNC-Router-Semi-Flow-/300862988301?pt=UK_BOI_Industrial_Automation_Control_ET&hash=item460cd4e00d (http://www.ebay.com/itm/One-Axis-Single-3-5A-TB6560AHQ-Stepper-Motor-Driver-Board-f-CNC-Router-Semi-Flow-/300862988301?pt=UK_BOI_Industrial_Automation_Control_ET&hash=item460cd4e00d) e nesta fase de desenvolvimento seria uma opção muito mais rapida.

A st tem uns de 3A a minha unica duvida é relativamente ao facto do microstepping ser definido por SPI e se calhar a minha interessava-me conseguir mudar o microstepping durante o movimento o que na datasheet diz não ser possivel.
Título: Re: Controlador Motor de Passo
Enviado por: senso em 24 de Março de 2013, 17:15
Sim, os TB6560 são all the rage actualmente, pena a Mouser não os ter.
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 24 de Março de 2013, 17:21
Sim, os TB6560 são all the rage actualmente, pena a Mouser não os ter.

Mas a mouser tem :) http://pt.mouser.com/Search/Refine.aspx?Keyword=TB6560 (http://pt.mouser.com/Search/Refine.aspx?Keyword=TB6560)

Então é uma boa opção este?
Título: Re: Controlador Motor de Passo
Enviado por: senso em 24 de Março de 2013, 17:30
Até á pouco tempo não tinham, bem, re-desenhar uma placa que aqui tenho em standby então..
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 24 de Março de 2013, 17:32
Até á pouco tempo não tinham, bem, re-desenhar uma placa que aqui tenho em standby então..

essa placa é só para o motor ou faz parte de outro projecto maior? Estás a pensar disponiblizar? Acho que vou comprar a placa do ebay nesta fase inicial :)
Título: Re: Controlador Motor de Passo
Enviado por: senso em 24 de Março de 2013, 18:01
Ahh, agora é que vi, esse não é o que se usa tambem como ponte H, mas tenho de ir ver, porque não tinham essa familia dos TB, o que eu queria era o TTB6612FNG
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 25 de Março de 2013, 09:34
Boas, existe mesmo a Tb6550 de 5 Amperes ou é enganos na net?
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 25 de Março de 2013, 10:39
Boas, existe mesmo a Tb6550 de 5 Amperes ou é enganos na net?

pena datasheet a versão mais pontente aguenta 3,5A
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 25 de Março de 2013, 10:45
Boas, existe mesmo a Tb6550 de 5 Amperes ou é enganos na net?

Parece que há uma nova versão: TB6600hq
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 25 de Março de 2013, 13:34
Parece que há uma nova versão: TB6600hq
Será que dá para substituir pelo TB6550... :)
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 17 de Abril de 2013, 12:06
Acabei por comprar este controlador (http://www.ebay.com/itm/One-Axis-Single-3-5A-TB6560AHQ-Stepper-Motor-Driver-Board-f-CNC-Router-Semi-Flow-/300862988301) para o motor indicado no primeiro post. Estou a usar uma fonte de PC 19V 4.74A.

Segundo a datasheet do controlador  (http://www.toshiba.com/taec/components2/Datasheet_Sync/201103/DST_TB6560-TDE_EN_27885.pdf)este aceita no clk uma onde de freq ate 15khz o que da um pedriodo de 67uS. O que acontece é que por exemplo, eu dando no clk um sinal com periodo de 100uS ou mesmo 200uS este já não funciona, isto é, o motor parece que fica sem força, fica aos soluços, testei tambem com outro motor mais fraco e acontece o mesmo problema sendo que neste motor mais fraco com um controlador A4983 conseguia dar passos a esta velocidade.

O que poderá ser que está acontecer?
Título: Re: Controlador Motor de Passo
Enviado por: Njay em 17 de Abril de 2013, 12:52
Experimenta um periodo de 5 a 50 ms.
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 17 de Abril de 2013, 13:48
Experimenta um periodo de 5 a 50 ms.

Se calhar não me expliquei bem. Subindo o tempo, isto é, aí para uns 600uS já dá os passos direitos. Se colocar em micro-step 1/16 consigo ir ate uns 300uS.
Título: Re: Controlador Motor de Passo
Enviado por: Njay em 17 de Abril de 2013, 14:43
Então não há nada que saber, simplesmente a "potência" de passo que lhe estás a aplicar não é suficiente. Terias que subir a tensão para manter passos "curtos". Quando começas a "acelerar" um motor de passo para lá dos seus "limites", ele começa a perder passos e depois a ter um comportamento errático como andar uns passos para a frente e depois para trás, até chegar ao ponto em que já nem consegue fazer mexer o rotor, ficando só com uns tremeliques.
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 17 de Abril de 2013, 14:57
Então não há nada que saber, simplesmente a "potência" de passo que lhe estás a aplicar não é suficiente. Terias que subir a tensão para manter passos "curtos". Quando começas a "acelerar" um motor de passo para lá dos seus "limites", ele começa a perder passos e depois a ter um comportamento errático como andar uns passos para a frente e depois para trás, até chegar ao ponto em que já nem consegue fazer mexer o rotor, ficando só com uns tremeliques.

Mas a minha duvida é que este motor https://www.sparkfun.com/datasheets/Robotics/StepperMotor.pdf (https://www.sparkfun.com/datasheets/Robotics/StepperMotor.pdf) com o controlador A4983 eu conseguia andar mais rapido que o mesmo motor com este controlador, por isso é que se calhar terá alguma coisa  aver com o controlador, nao?
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 17 de Abril de 2013, 15:08
Boas,

Partindo do principio que esse TB6560 é _original_ (coisa que duvido) alem das características do mesmo tens que ter
em conta mais alguns factores para poderes calcular os RPMs máximos:
- Corrente máxima do motor e configurar o TB6560 de acordo.
- Angulo do step do motor.
- Modo de ligação das coils do motor (serie ou paralelo) uma vez que a impedância tem uma grande influencia na
velocidade com que o motor atinge o rendimento máximo.

Geralmente um stepper pode ir até ás 1250 RPMs, o que para um motor com 1.8º por step dá qualquer coisa como
uma frequência de +- 4Khz (multiplicado pelo numero de microsteps caso estejas nesse modo), por isso não esperes
conseguir um período abaixo dos  250uS, e isto claro que estiverem reunidas todas as condições ideais.

Outro factor MUITO importante é o modo como fazes o "ramp-up" do motor até ao maximo de RPMs, e essa curva de
aceleração depende de cada motor e da tensão que estas a usar, quanto maio a tensão de alimentação mais rapido
as RMPs sobem e mais longe podem ir.

Configuração ideal para o maximo de RMPs:
- 24v ou mesmo 46 volts
- Máximo de Amps possíveis para o motor (configuras o TB6560 para isso)
- Coils do motor em paralelo

ADENDUM: Quando enviei este post ainda não tinha visto que já tinhas colocado a datashet do motor, vou
escrever outro post tendo essa nova informação em conta.

Abraços,
PA
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 17 de Abril de 2013, 15:25
Boas novamente,

Volto a frisar que o TB6560 pode não ser original.

Dito isso, a primeira ideia que me vem à cabeça depois de olhar para a datasheet do motor é que o TB6560 é OVERKILL
para este motorzito ;)

E quando digo overkill é literalmente, pois no setting mínimo o TB6560 debita 0,5 Amps e esse motor só aguenta
até aos 280mA ... será que ainda não deitou fumo ? ;)

De qualquer forma, devias poder ir até ás 800 RPMs ... mas com uma fase de ramp-up, tenho por experiência que
o TB6560 é capaz de ir até ás 1200 RPMs com motores comuns.

Hum... cá para mim tens ai um TB6560  remarcado ... ou então estás a subir as RMPs muito rapidamente, experimenta
uma fase de aceleração com uma curva mais suave e em formato "S".

Abraços,
PA

Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 17 de Abril de 2013, 15:31
Boas novamente,

Volto a frisar que o TB6560 pode não ser original.

Dito isso, a primeira ideia que me vem à cabeça depois de olhar para a datasheet do motor é que o TB6560 é OVERKILL
para este motorzito ;)

E quando digo overkill é literalmente, pois no setting mínimo o TB6560 debita 0,5 Amps e esse motor só aguenta
até aos 280mA ... será que ainda não deitou fumo ? ;)

De qualquer forma, devias poder ir até ás 800 RPMs ... mas com uma fase de ramp-up, tenho por experiência que
o TB6560 é capaz de 1000 RPMs.

Hum... cá para mim tens ai um TB6560  remarcado ... ou então estás a subir as RMPs muito rapidamente, experimenta
uma fase de aceleração com uma curva mais suave e em formato "S".

Abraços,
PA

uppss esse motor que foste ver a datasheet foi so para testes mas foi com ele que reparei que com o A4983 conseguia colocar o motor andar mais rapido que com o controlador actual, agora não posso fazer mais testes com o A4983 pois ao tentar colocar o novo motor andar só mesmo para testar se dava uns passinhos ele queimou lool  O motor que estou a usar agora, e a causa de ter comprado o TB6560 é este:

modelo                           rated current (A)   phase resistance (ohm)   phase inductance (mH)
57BYGH56-401A                          2,8                                      0,83                                       2,2
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 17 de Abril de 2013, 15:32
Vou então tentar com 24V, não é que necessite tambem de muita mais velocidade pois a calha tem só 2metros, vou fazer alguns testes e medir os passos e velocidade com rigor.
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 17 de Abril de 2013, 15:59
Boas,

Configura o TB6560:
-  2.5 Amps (SW1=on, SW2=on, SW3=off)
-  100 torque (SW4-1=off, SW4-2=off)
-  medium decay (SW4-5=off, SW4-6=onf)

E não te esqueças de ter uma rotina de aceleração ... é muito importante e por vezes basta ajustar o numero de passos
e o delay entre cada passo na aceleração para ser possível atingir os tais > 100 RPMs.

Abraços,
PA

 
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 17 de Abril de 2013, 19:58
Boas,

Configura o TB6560:
-  2.5 Amps (SW1=on, SW2=on, SW3=off)
-  100 torque (SW4-1=off, SW4-2=off)
-  medium decay (SW4-5=off, SW4-6=onf)

E não te esqueças de ter uma rotina de aceleração ... é muito importante e por vezes basta ajustar o numero de passos
e o delay entre cada passo na aceleração para ser possível atingir os tais > 100 RPMs.

Abraços,
PA

Amanha à noite acho que já tenho hipoteses de testar isso e partilhar os resultados :)
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 21 de Abril de 2013, 01:01
Testei o que disseste, a alteração do decay não mostrou resultados consistentes mas regra geral consegui ir um pouco mais longe no valor do time usado no código abaixo, isto é, um valor mais baixo.

O que realmente faz muito diferença, é utilizar uma rotina de aceleração. Consegui ir até o valor de 300us por ciclo. Tenho que medir com o logic analyser os reais valores dos passos, pois pelas minhas contas: 300(us/passos)*200(passos)=60000us
60(s)/0.06(s)=1000RPM tenho mesmo que medir que isto deve entre muda estado de pin, erros nos delays etc, o valor de 300us deve subir um bocado!

Código usado nos testes, logo não está o código mais limpo como era supsoto lol):
Código: [Seleccione]
int clk = 3;
int dir = 2;
int ena = 4;

int start=1000;
int limit=150;
int stepV=3;

void setup(){
  pinMode(clk,1);
  pinMode(dir,1);
  pinMode(ena,1);
 
  PORTD |= bit(ena);
  //PORTD |= bit(dir);
  //PORTD &= ~ bit(dir);
 
}

void loop(){
 
  PORTD &= ~ bit(dir);
  int time=start;
  for(int i=0;i<4000;i++){
    PORTD |= bit(clk);
    delayMicroseconds(time);
    PORTD &= ~ (bit(clk));
    delayMicroseconds(time);
    if(time>limit){
      time-=stepV;
    }
  }
  for(int i=0;i<500;i++){
    PORTD |= bit(clk);
    delayMicroseconds(time);
    PORTD &= ~ (bit(clk));
    delayMicroseconds(time);
    time++;
  }
 
  PORTD |= bit(dir);
  time=start;
  for(int i=0;i<4000;i++){
    PORTD |= bit(clk);
    delayMicroseconds(time);
    PORTD &= ~ (bit(clk));
    delayMicroseconds(time);
    if(time>limit){
      time-=stepV;
    }
  }
  for(int i=0;i<500;i++){
    PORTD |= bit(clk);
    delayMicroseconds(time);
    PORTD &= ~ (bit(clk));
    delayMicroseconds(time);
    time++;
  }
 
  /*int time=1000;
  for(int i=0;i<26;i++){
    PORTD |= bit(clk);
    delayMicroseconds(time);
    PORTD &= ~ (bit(clk));
    delayMicroseconds(time);
    time=-25;
  }
 
  for(int i=0;i<374;i++){
    PORTD |= bit(clk);
    delayMicroseconds(350);
    PORTD &= ~ (bit(clk));
    delayMicroseconds(350);
  }*/
 
  //while(1){};
}
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 21 de Abril de 2013, 03:15
Boas,

A única forma de teres uma rampa de aceleração constante é usando um timer independente,  pois os delays dentro de
um loop acabam por introduzir uma segunda harmónica na aceleração.

A implementação mais comum usa 2 timers,  o primeiro é os "steps-per-second" (SPS) que é usado para gerar um
intervalo certo para a taxa de steps por segundo. O segundo timer  é o da aceleração em si, e é usada para alterar
o valor do primeiro timer a intervalos periódicos, alterando assim  a velocidade angular.

Tenho aqui algo no género para ARM R4 ... vou ver se tenho para AVR.

Abraços,
PA
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 21 de Abril de 2013, 09:09
Boas,

A única forma de teres uma rampa de aceleração constante é usando um timer independente,  pois os delays dentro de
um loop acabam por introduzir uma segunda harmónica na aceleração.

A implementação mais comum usa 2 timers,  o primeiro é os "steps-per-second" (SPS) que é usado para gerar um
intervalo certo para a taxa de steps por segundo. O segundo timer  é o da aceleração em si, e é usada para alterar
o valor do primeiro timer a intervalos periódicos, alterando assim  a velocidade angular.

Tenho aqui algo no género para ARM R4 ... vou ver se tenho para AVR.

Abraços,
PA

se partilhares o codigo para arm ja percebo a implementacao :) alias vou usar um cortex m3 no final, p arduino era so para testar o motor :) viste a minha pm por causa do quadcopter?
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 21 de Abril de 2013, 09:17
tu dizes que é criada uma segunda harmonica por estar a usar delays em varios fors? se o meu codigo tivesse so um for isso tb acontecia?
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 29 de Abril de 2013, 22:20
tu dizes que é criada uma segunda harmonica por estar a usar delays em varios fors? se o meu codigo tivesse so um for isso tb acontecia?

Boas,

Nunca mais me lembrei deste tópico ... sorry :(

Diz-me se ainda necessitas do código.

Abraços,
PA
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 29 de Abril de 2013, 22:36
tu dizes que é criada uma segunda harmonica por estar a usar delays em varios fors? se o meu codigo tivesse so um for isso tb acontecia?

Boas,

Nunca mais me lembrei deste tópico ... sorry :(

Diz-me se ainda necessitas do código.

Abraços,
PA

sim, ainda não comecei a desenvolver o código utilizando os timers do stm32 por isso dá sempre jeito :)
A minha pergunta faz algum sentido?
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 19 de Junho de 2013, 00:22
Boas, acabei de receber a minha placa TB6550HQ 3 eixos.

Ainda vou montar tudo, arranjar uma fonte, pois queria ver se arranjava uma de 20Volts.
Já vi vários vídeos acerca de cnc´s, o pessoal não utiliza muito os switchs de limites.

Isso que vocês falam das curvas de aceleração é configurado no Mach3?
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 19 de Junho de 2013, 13:54
Boas, acabei de receber a minha placa TB6550HQ 3 eixos.

Ainda vou montar tudo, arranjar uma fonte, pois queria ver se arranjava uma de 20Volts.
Já vi vários vídeos acerca de cnc´s, o pessoal não utiliza muito os switchs de limites.

Isso que vocês falam das curvas de aceleração é configurado no Mach3?

Boas,

Porque 20 volts ? Porque não 24v ? :)

Estou a usar duas Switching Power Supply 24V 14.6A (350W) (http://www.ebay.com/itm/24V-14-6A-350W-AC-DC-Switching-Power-Supply-/350583429547?pt=LH_DefaultDomain_0&hash=item51a06699ab)  e estou super satisfeito.


Sim, a aceleração é configurada no Mach3.

Abraços,
PA
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 19 de Junho de 2013, 15:27
Estou a usar duas Switching Power Supply 24V 14.6A (350W) (http://www.ebay.com/itm/24V-14-6A-350W-AC-DC-Switching-Power-Supply-/350583429547?pt=LH_DefaultDomain_0&hash=item51a06699ab)  e estou super satisfeito.

Pois não queria estar a mandar vir mais coisas da China, já comprei o resto do material tudo na china e foi uma eternidade, excepto um motor por DHL, mas cheira a alho.
Até comprava a alguém cá em Portugal, melhor dar mais algum do que vir da china, o material vem todo mal soldado como aconteceu a minha TB6550, espero que esteja a funcionar.
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 19 de Junho de 2013, 15:34
Estou a usar duas Switching Power Supply 24V 14.6A (350W) (http://www.ebay.com/itm/24V-14-6A-350W-AC-DC-Switching-Power-Supply-/350583429547?pt=LH_DefaultDomain_0&hash=item51a06699ab)  e estou super satisfeito.

Pois não queria estar a mandar vir mais coisas da China, já comprei o resto do material tudo na china e foi uma eternidade, excepto um motor por DHL, mas cheira a alho.
Até comprava a alguém cá em Portugal, melhor dar mais algum do que vir da china, o material vem todo mal soldado como aconteceu a minha TB6550, espero que esteja a funcionar.

Boas,

Pois, compreendo perfeitamente ... ;)

Abraços,
PA
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 19 de Junho de 2013, 15:36
StarRider podes partilhar o código?

Há tempos a pedir informações sobre uma fonte no site da meanwell respondeu-me no mesmo dia ou no dia a seguir o representante em Portugal http://www.olfer.com/ (http://www.olfer.com/) é uma questão de ver preços.
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 19 de Junho de 2013, 15:49
StarRider podes partilhar o código?

Há tempos a pedir informações sobre uma fonte no site da meanwell respondeu-me no mesmo dia ou no dia a seguir o representante em Portugal http://www.olfer.com/ (http://www.olfer.com/) é uma questão de ver preços.

Boas,

Pois.... tenho que tomar Memofante :(

Vais implementar num AVR não ?

Abraços,
PA
Título: Re: Controlador Motor de Passo
Enviado por: ivitro em 19 de Junho de 2013, 15:53
Olha vê se alguma destas serve

http://www.jcce.pt/index.php/pt/energia/fontes-de-alimentacao/industriais/caixa/results,10-129?language=pt-PT (http://www.jcce.pt/index.php/pt/energia/fontes-de-alimentacao/industriais/caixa/results,10-129?language=pt-PT)

Se quiseres uma especifica eles praticamente que arranjam de uma semana para a outra.
Título: Re: Controlador Motor de Passo
Enviado por: metRo_ em 19 de Junho de 2013, 15:56
Boas,

Pois.... tenho que tomar Memofante :(

Vais implementar num AVR não ?

Abraços,
PA

Não, STM32. Como a partida vou inserir um LCD no projecto sempre consigo fazer algo mais apelativo com o processamento extra.
Estou a estudar este livro (http://www.cs.indiana.edu/~geobrown/book.pdf) para ficar a conhecer os stm32 :)
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 19 de Junho de 2013, 16:59
Olha vê se alguma destas serve

http://www.jcce.pt/index.php/pt/energia/fontes-de-alimentacao/industriais/caixa/results,10-129?language=pt-PT (http://www.jcce.pt/index.php/pt/energia/fontes-de-alimentacao/industriais/caixa/results,10-129?language=pt-PT)

Se quiseres uma especifica eles praticamente que arranjam de uma semana para a outra.
Porreiro, pena terem só até 8A.
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 19 de Junho de 2013, 17:06
Há tempos a pedir informações sobre uma fonte no site da meanwell respondeu-me no mesmo dia ou no dia a seguir o representante em Portugal http://www.olfer.com/ (http://www.olfer.com/) é uma questão de ver preços.

Enviei email a perguntar preço de uma fonte 24V 450W 18.8A  :)
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 19 de Junho de 2013, 20:06
Não, STM32. Como a partida vou inserir um LCD no projecto sempre consigo fazer algo mais apelativo com o processamento extra.
Estou a estudar este livro (http://www.cs.indiana.edu/~geobrown/book.pdf) para ficar a conhecer os stm32 :)


Boas,

Como o código é dependente,  vou tentar comentar o mesmo pois sem veres o resto possivelmente não dá para apanhar o fio à meada.

Estou a usar a Peripheral Lib  da STM (STM32F4 DSP e StdPeriph Lib V1.0.1) e o Keil. Mas deve ser totalmente compatível com qualquer Lib da STM e qualquer outro compilador.
Necessitas criar 2 Timers:
- O primeiro Timer vai servir para controlar a linha STEP (e DIR) do TB6550, é um simples Timer em que podes usar o Output Compare Toggle Mode, ou então uma simples Interrupt e fazes tu o toggle das portas IO nessa mesma Interrupt. A frequência deste Timer está dependente do teu hardware mas de uma forma geral uma resolução de 100uS é mais que suficiente. Esta frequência não é a frequência final dos steps do motor, a frequência dos  steps do é controlado com o valor do(s) CCR (Cature Compare Register).
- O segundo Timer serve para controlar a Aceleração/Desaceleração dos motores quanto esta é necessária, e este Timer basicamente altera o valor do CCR do primeiro timer, alterando assim a frequência dos steps.

O código para inicializar/configurar os Timers é este:

Código: [Seleccione]
//==============================================================================
// descri: Setup Motors Timers
// params: void
// return: none
//
void TIM_MOTORS_Config(void)
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

  // clock enable  -----------------------------------------------------------
  // No meu caso estou a usar o TIM1 como o Timer para a frequencia dos steppers
  // e estou a usar o TIM12 para o timer da aceleração/desaceleração
  RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM12 , ENABLE);
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1 , ENABLE);

// GPIO Configuration - STEP e DIR inputs do driver
// No meu caso uso um driver que não o TB6550 mas para o caso é a mesma coisa
// Como estou a usar a função Output Compare Toggle Mode dos Timers os pinos do STM33 devem
// ser os específicos para esta tarefa, estou a usar dois canais nesta aplicação, mas podes
// usar somente um ou os 4 canais que o STM32 disponibiliza no TIM1
//
// IO pin TIM1 Channel Function IO pin mode
// PE9 TIM1_CH1 Motor 1 Step Out PushPull
// PE11 TIM1_CH2 Motor 2 Step Out PushPull
//

GPIO_PinAFConfig(GPIOE, GPIO_PinSource9,  GPIO_AF_TIM1);  // ligar os pinos do TIM1 a AF1 (Alternat Function 1)
GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_TIM1); // ligar os pinos do TIM1 a AF1 (Alternat Function 1)

// IO pin mode
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; // podes experimentar GPIO_Speed_100MHz se a tua TIM1CLK for diferente
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;
GPIO_Init(GPIOE, &GPIO_InitStructure);


//--- TIM1 Configuration ---------------------------------------------------
// Atenção estas contas são para o STM32F4 a 168Mhz, se o teu MCU for outro ou o clock for outro diz-me para eu poder calcular.
//
// O input clock (TIM1CLK) do TIM1 é = 2 x APB2 clock (PCLK2), uma vez que o APB2 prescaler é diferente de 1.   
// TIM1CLK = 2 * PCLK2 
// PCLK2 = HCLK / 2
// => TIM1CLK = 2 * (HCLK / 2) = HCLK = SystemCoreClock
  //
// Para um "TIMx counter clock" de 10KHz (exemplo com resolução de 100uS) o "Prescaler" deve ser calculado assim:
// Prescaler = (uint16_t) (SystemCoreClock / 10000) - 1;
//
// O "Period" neste caso não interessa pois os CCR (capture/compare register) controlam o togles dos
// estados HiGH e LOW dos channels e o seu valor é manipulado no interrupt TIMx_IRQHandler
  //
  // A resolução do sistema é definida no define MOTORS_TIMFREQ, que neste exemplo é de 10KHz, se vires que o motor "engasga"
  // aumenta este valor.
  //
#define MOTORS_TIMFREQ 10000
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t) (SystemCoreClock / MOTORS_TIMFREQ) - 1;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0000;
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  TIM_UpdateDisableConfig(TIM1, ENABLE);  // deve ser ENABLE pois para desactiver o Update Event o bit deve ser 1

  // Configuração do Output Compare Toggle Mode do TIM1, todos os canais
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; // Disable por defeito, usar "MotorX_On()" para ligar
  TIM_OCInitStructure.TIM_Pulse = 0;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
                                                           
  // Output Compare Toggle Mode configuration: Channel1 - Motor 1
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Disable);

  // Output Compare Toggle Mode configuration: Channel2 - Motor 2
  TIM_OC2Init(TIM1, &TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Disable);

  // Enable the TIM1 gloabal Interrupt
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  // TIM INT enable : CC1 = RA ,  CC2 = DEC
  // A interrupt é activada na função _MotorX_On()
  //TIM_ITConfig(TIM1, TIM_IT_CC1 | TIM_IT_CC2, ENABLE);

// TIM enable counter
  // O timer é activado na função Motors_ON()
  //TIM_Cmd(TIM1, ENABLE);


//--- TIM12 Configuration ---------------------------------------------------
// Atenção estas contas são para o STM32F4 a 168Mhz, se o teu MCU for outro ou o clock for outro diz-me para eu poder calcular.
//
// O input clock (TIM12CLK) do TIM12 é = 2 x APB1 clock (PCLK1), uma vez que o APB1 prescaler é diferente de 1.   
// TIM12CLK = 2 * PCLK1 
// PCLK1 = HCLK / 4
// => TIM12CLK = 2 * (HCLK / 4) = HCLK / 2 = SystemCoreClock / 2
  //
// Timer 12 PARA O ACELL e DECEL dos MOTORES
  //
  // Para efeitos de ACELL e DECEL a resolução (valor espeficicado pelo "TIMx counter clock") e dada
// pelo #define MOTORRAMP_TIMFREQ
  //
#define MOTORRAMP_TIMFREQ    2000     // 2 Khz , frequencia do timer para a acelaração e desacelaração dos motores
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t) ((SystemCoreClock / 2) / MOTORRAMP_TIMFREQ) - 1;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0000;
  TIM_TimeBaseInit(TIM12, &TIM_TimeBaseStructure);
  TIM_UpdateDisableConfig(TIM12, ENABLE);  // deve ser ENABLE pois para desactiver o Update Event o bit deve ser 1

// Output Compare Toggle Mode configuration: All Channels
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; // Disable pois é somemte para timing sem output no pin
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_Pulse = 0;

// Output Compare Toggle Mode configuration: Channel1 - Motor 1 ACELL e DECEL
TIM_OC1Init(TIM12, &TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIM12, TIM_OCPreload_Disable);

  // Output Compare Toggle Mode configuration: Channel2 - Motor 2 ACELL e DECEL
  TIM_OC2Init(TIM12, &TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM12, TIM_OCPreload_Disable);

  // Enable the TIM gloabal Interrupt
  NVIC_InitStructure.NVIC_IRQChannel = TIM8_BRK_TIM12_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
   
// TIM INT enable : CC1 = RA ,  CC2 = DEC
  // Os int são activados na função MotorX_SetSpeedTarget(...), por isso não devem ser activados aqui
  //TIM_ITConfig(TIM12, TIM_IT_CC1 | TIM_IT_CC2, ENABLE);

  // TIM enable counter
  // O timer é activado na função Motors_ON()
  //TIM_Cmd(TIM12, ENABLE);
}
//==============================================================================

Continua ...
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 20 de Junho de 2013, 14:51
Boas, quem já tenha ligado os limits e o stop nesta placa se puder dar uma ajuda a identificar os números dos pinos.
Tenho receio ao ligar isto queimar a placa.
Será que está correcto como marquei na imagem?

Abraço
Título: Re: Controlador Motor de Passo
Enviado por: StarRider em 20 de Junho de 2013, 15:48
Boas, quem já tenha ligado os limits e o stop nesta placa se puder dar uma ajuda a identificar os números dos pinos.
Tenho receio ao ligar isto queimar a placa.
Será que está correcto como marquei na imagem?

Abraço

Boas,

Segue o esquema desta imagem:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.microastro.com%2Ffotos%2FTB3-Wiring.jpg&hash=010a602f0436726d53b09e0959d096ca09ae2388)

Abraços,
PA
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 26 de Junho de 2013, 20:52
Obrigado pelas dicas, liguei os motores a placa, configurei tudo certo, só que agora ao ligar a fonte os motores ficam presos (bobines com corrente), e a fonte quase a derreter(desligo logo porque acho que não seja normal) coloco o mach 3 a andar e não acontece nada.

Será que alguém tem experiência nesta placa para me dar uma ajuda.
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 27 de Junho de 2013, 13:46
Obrigado pelas dicas, liguei os motores a placa, configurei tudo certo, só que agora ao ligar a fonte os motores ficam presos (bobines com corrente), e a fonte quase a derreter(desligo logo porque acho que não seja normal) coloco o mach 3 a andar e não acontece nada.

Será que alguém tem experiência nesta placa para me dar uma ajuda.

Problema resolvido, Mach3 em versão espanhol não funciona.
Título: Re: Controlador Motor de Passo
Enviado por: c3dr1c em 27 de Junho de 2013, 19:35
Agora tens um problema novo... Colocares um video na Lusorobitica da tua cnc em funcionamento... que tal?

Cumps
Título: Re: Controlador Motor de Passo
Enviado por: Nunito em 28 de Junho de 2013, 10:27
Agora tens um problema novo... Colocares um vídeo na Lusorobitica da tua cnc em funcionamento... que tal?

Não está nada montado ainda na CNC. :-\