collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[22 de Abril de 2024, 14:14]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: Controlador Motor de Passo  (Lida 20777 vezes)

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

Offline Nunito

  • Mini Robot
  • *
  • Mensagens: 923
Re: Controlador Motor de Passo
« Responder #30 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?

StarRider

  • Visitante
Re: Controlador Motor de Passo
« Responder #31 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)  e estou super satisfeito.


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

Abraços,
PA

Offline Nunito

  • Mini Robot
  • *
  • Mensagens: 923
Re: Controlador Motor de Passo
« Responder #32 em: 19 de Junho de 2013, 15:27 »
Estou a usar duas Switching Power Supply 24V 14.6A (350W)  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.

StarRider

  • Visitante
Re: Controlador Motor de Passo
« Responder #33 em: 19 de Junho de 2013, 15:34 »
Estou a usar duas Switching Power Supply 24V 14.6A (350W)  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

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Controlador Motor de Passo
« Responder #34 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/ é uma questão de ver preços.

StarRider

  • Visitante
Re: Controlador Motor de Passo
« Responder #35 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/ é uma questão de ver preços.

Boas,

Pois.... tenho que tomar Memofante :(

Vais implementar num AVR não ?

Abraços,
PA

Offline ivitro

  • Mini Robot
  • *
  • Mensagens: 451
Re: Controlador Motor de Passo
« Responder #36 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

Se quiseres uma especifica eles praticamente que arranjam de uma semana para a outra.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Controlador Motor de Passo
« Responder #37 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 para ficar a conhecer os stm32 :)

Offline Nunito

  • Mini Robot
  • *
  • Mensagens: 923
Re: Controlador Motor de Passo
« Responder #38 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

Se quiseres uma especifica eles praticamente que arranjam de uma semana para a outra.
Porreiro, pena terem só até 8A.

Offline Nunito

  • Mini Robot
  • *
  • Mensagens: 923
Re: Controlador Motor de Passo
« Responder #39 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/ é uma questão de ver preços.

Enviei email a perguntar preço de uma fonte 24V 450W 18.8A  :)

StarRider

  • Visitante
Re: Controlador Motor de Passo
« Responder #40 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 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 ...

Offline Nunito

  • Mini Robot
  • *
  • Mensagens: 923
Re: Controlador Motor de Passo
« Responder #41 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

StarRider

  • Visitante
Re: Controlador Motor de Passo
« Responder #42 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:


Abraços,
PA
« Última modificação: 20 de Junho de 2013, 15:50 por StarRider »

Offline Nunito

  • Mini Robot
  • *
  • Mensagens: 923
Re: Controlador Motor de Passo
« Responder #43 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.
« Última modificação: 27 de Junho de 2013, 10:30 por Nunito »

Offline Nunito

  • Mini Robot
  • *
  • Mensagens: 923
Re: Controlador Motor de Passo
« Responder #44 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.