collapse

* Links de Robótica

* Posts Recentes

Perfis V-Slot vs C-Beam vs Bosch vs 8020 por KammutierSpule
[Hoje às 19:53]


Ajuda Projecto IR / RF por Njay
[20 de Outubro de 2017, 13:24]


Medir Agua que está no Poço por edeweld
[18 de Outubro de 2017, 09:15]


Equipar laboratorio por LVirtual
[13 de Outubro de 2017, 08:34]


Arranjo de Berbequim por jm_araujo
[13 de Outubro de 2017, 08:34]


Escolher ligações por dropes
[08 de Outubro de 2017, 23:26]


Ideias para construir um quadrúpede simples por Njay
[07 de Outubro de 2017, 22:12]


Meu projecto - Arm Robot com arduino por Diogo Bento
[05 de Outubro de 2017, 20:54]


Alimentar arduino nano com 12V por helderjsd
[05 de Outubro de 2017, 16:26]


Compra Colectiva RS-Amidata por Hugu
[02 de Outubro de 2017, 20:20]

Autor Tópico: STM32 Stepper Driver firmware  (Lida 1912 vezes)

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

StarRider

  • Visitante
STM32 Stepper Driver firmware
« em: 04 de Agosto de 2013, 23:27 »
Boas,

Já tinha prometido isto vai para largos meses ao metRo_ , mas acabei por nunca colocar na totalidade aqui no
forum pois o código é usado em vários projecto e tem muitas interdependências com os mesmos, o que o torna
problemático de separar do resto dos projectos, alem das questões de copyright.

Assim, acabei por implementar um driver independente, totalmente autónomo que pode ser muito facilmente
incluído em qualquer outro projecto, fácil de configurar ao hardware e fácil de usar (penso eu) e que está
razoavelmente encapsulado para evitar grandes complicações.

Foi pensado, e implementado, para correr em MCUs STM32 mas pode ser facilmente alterado para correr em
qualquer outro MCU, o código é 100% C99 compatível por isso é facilmente compilado por qualquer toolchain.
Eu uso o Keil, podem efectuar o download deste na versão "free" que dá para pequenos projectos e para teste.

Algumas características:
 - STM32Fx compatível (usa "StdPeriph Lib" da ST - não testado com o STM32F0xx)
 - Funciona com stepper ICs que usam a interface SD (translator, ou com inputs "Step" e "Dir")
 - Controla 2 motores totalmente independentes
 - Rampa de aceleração e desaceleração configurável e independente para cada motor (um pode estar a
acelerar e o outro a desacelerar)
-  Velocidades de 2 a 1000 passos por segundo (pode ser alterado)
-  Velocidade constante (Move) ou posicionamento (Goto) independente e simultânea para os dois motores
 - Contador com a posição actual do motor (respeita a direcção dos movimentos)
 - Direcção CW (clockwise) ou CCW (counterclockwise )
 - Usa somente um TIMER (TIMER3, pode ser alterado)
 - Permite assignar qualquer pino IO para DIR e STEP
 - E mais umas cenas ...

O "source", e um projecto de exemplo para o Keil, estão em anexo.
Espero que seja útil, qualquer duvida "postem" aqui no forum enviem um email para o endereço que está nos
ficheiros do source.

Abraços,
PA
« Última modificação: 05 de Agosto de 2013, 01:48 por StarRider »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.727
Re: STM32 Stepper Driver firmware
« Responder #1 em: 05 de Agosto de 2013, 00:11 »
Ainda hoje me lembrei disto :p Vou analisar nos próximos dias, muito obrigado :)

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.727
Re: STM32 Stepper Driver firmware
« Responder #2 em: 05 de Agosto de 2013, 15:43 »
Não estou a conseguir abrir o ficheiro, dá erro de ficheiro :s Podes comprimir noutro formato?

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.727
Re: STM32 Stepper Driver firmware
« Responder #3 em: 28 de Agosto de 2013, 11:59 »
[strike]Não estou a perceber o periodo que defines aqui.
Do que sei de timers para criar uma onda com uma freq_pretendida no output channel usaria algo do genero:

TIM_TimeBaseStructure.TIM_Period = (SystemCoreClock/(freq_pretendida*2)) - 1;
TIM_TimeBaseStructure.TIM_Prescaler = 0;

Será que poderias aprofundar um bocadinho esta parte?[/strike]

Já percebi :)

Código: [Seleccione]
//--- TIMx Configuration: Output Compare Timing Mode -----------------------
// TIM3 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1), since APB1 prescaler is different from 1.   
// TIM3CLK = 2 * PCLK1 
// PCLK1 = HCLK / 4
// => TIM3CLK = 2 * (HCLK / 4) = HCLK / 2 = SystemCoreClock / 2
//
// Para um "TIMx counter clock" de 100KHz (exemplo com resolução de 10uS) o "Prescaler" deve ser calculado assim:
// Prescaler = (uint16_t) (TIMxCLK / 100000) - 1;
//
// O "Period" neste caso não interessa pois a IRQ (TIMx_IRQHandler) dos CCR (capture/compare register) controla o
// togles dos estados HiGH e LOW dos PINs do STEP
//
// A resolução do sistema é definida em "stm32f_stpdrv.h" no define STPDRV_TIMFREQ
//
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t) ((SystemCoreClock / 2) / (STPDRV_TIMFREQ * 2)) - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0000;
TIM_TimeBaseInit(STPDRV_TIM, &TIM_TimeBaseStructure);
TIM_UpdateDisableConfig(STPDRV_TIM, ENABLE);  // deve ser ENABLE pois para desactiver o Update Event o bit deve ser 1
/* Prescaler configuration */
//TIM_PrescalerConfig(STPDRV_TIM, PrescalerValue, TIM_PSCReloadMode_Immediate);

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.727
Re: STM32 Stepper Driver firmware
« Responder #4 em: 10 de Setembro de 2013, 23:40 »
#define STPDRV_MAXSETPSEC     1000     // maximo de steps/sec, deve satisfazer a condição: STPDRV_TIMFREQ / STPDRV_MAXSETPSEC > 100

Não percebo esta limitação :s

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.727
Re: STM32 Stepper Driver firmware
« Responder #5 em: 15 de Setembro de 2013, 23:56 »
Num stm32f1 tive que alterar a frequencia para 10khz, 100khz é mt para os 24mhz dele :s consegui ter uma onda de 2khz quando selecionado 1000 steps por segundo mas isto nao respeita a  a indicação de que o max steps devia ser freq/maxsteps > 100.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.727
Re: STM32 Stepper Driver firmware
« Responder #6 em: 05 de Outubro de 2013, 13:10 »
Num stm32f1 tive que alterar a frequencia para 10khz, 100khz é mt para os 24mhz dele :s consegui ter uma onda de 2khz quando selecionado 1000 steps por segundo mas isto nao respeita a  a indicação de que o max steps devia ser freq/maxsteps > 100.

Afinal acho que era meu o problema, devia ter registos com valores antigos depois de fazer um reset completo consegui usar o codigo com os 100khz :)