collapse

* Posts Recentes

Fabricação de ferramenta de corte por zordlyon
[Ontem às 00:23]


SCT-013 + i2c eeprom, Gravar e Ler dados. por dennis_boy
[23 de Abril de 2018, 21:43]


Controlar Motor AC por senso
[23 de Abril de 2018, 12:34]


Apresentação do Legendary Urban Hacker por Sarat
[23 de Abril de 2018, 00:24]


Redes LoRa por ralex
[22 de Abril de 2018, 22:53]


Canal de video aulas no youtube! por zkreamer
[22 de Abril de 2018, 21:58]


Nueva en el Foro!!!!!!!! me presento!! por zkreamer
[22 de Abril de 2018, 21:48]


Alguem usa as libs md_max72xx e md_parola ? por vasco
[21 de Abril de 2018, 23:44]


Paineis Fotovoltaicos para Autoconsumo (Kits EDP)? por KammutierSpule
[20 de Abril de 2018, 13:42]


Como repôr posições dos Icones/Pastas no Desktop W8? por senso
[19 de Abril de 2018, 23:55]

Autor Tópico: STM32 Stepper Driver firmware  (Lida 2013 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.739
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.739
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.739
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.739
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.739
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.739
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 :)