cancel
Showing results for 
Search instead for 
Did you mean: 

Run two motors in the same time

anton23
Associate II
Posted on September 10, 2016 at 19:17

The main question is how to run two motors

SecondMotorRotateToLeft() and FirstMotorRotateToLeft()

in the same time?

#include ''stm32f10x.h''
#include ''stm32f10x_gpio.h''
#include ''stm32f10x_rcc.h''
void Delay(unsigned int t)
{
unsigned int i;
for (i=0;i<t;i++);
}
void GPIOD_Initialize(){
GPIO_InitTypeDef GPIOC_Stepper;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
GPIOC_Stepper.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_7;
GPIOC_Stepper.GPIO_Mode=GPIO_Mode_Out_PP;
GPIOC_Stepper.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIOC_Stepper);
GPIO_InitTypeDef GPIOD_Stepper;
GPIOD_Stepper.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_7;
GPIOD_Stepper.GPIO_Mode=GPIO_Mode_Out_PP;
GPIOD_Stepper.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIOD_Stepper);
}
void SecondMotorRotateToLeft()
{
GPIO_Write(GPIOD,GPIO_Pin_5);
Delay(time);
GPIO_Write(GPIOD,GPIO_Pin_5| GPIO_Pin_3);
Delay(time);
GPIO_Write(GPIOD,GPIO_Pin_3);
Delay(time);
GPIO_Write(GPIOD,GPIO_Pin_3|GPIO_Pin_7);
Delay(time);
GPIO_Write(GPIOD,GPIO_Pin_7);
Delay(time);
GPIO_Write(GPIOD,GPIO_Pin_7|GPIO_Pin_1);
Delay(time);
GPIO_Write(GPIOD,GPIO_Pin_1);
Delay(time);
GPIO_Write(GPIOD,GPIO_Pin_1|GPIO_Pin_5);
Delay(time);
}
void FirstMotorRotateToLeft()
{
GPIO_Write(GPIOC,GPIO_Pin_5);
Delay(time);
GPIO_Write(GPIOC,GPIO_Pin_5| GPIO_Pin_3);
Delay(time);
GPIO_Write(GPIOC,GPIO_Pin_3);
Delay(time);
GPIO_Write(GPIOC,GPIO_Pin_3|GPIO_Pin_7);
Delay(time);
GPIO_Write(GPIOC,GPIO_Pin_7);
Delay(time);
GPIO_Write(GPIOC,GPIO_Pin_7|GPIO_Pin_1);
Delay(time);
GPIO_Write(GPIOC,GPIO_Pin_1);
Delay(time);
GPIO_Write(GPIOC,GPIO_Pin_1|GPIO_Pin_5);
Delay(time);
}
int main(void)
{
const int time = 10000;
GPIOD_Initialize();
while(1)
{
FirstMotorRotateToLeft();
SecondMotorRotateToLeft();
}
}

1 REPLY 1
Posted on September 10, 2016 at 22:53

Well, you need to get rid of Delay() and learn how to use timer interrupts, but a rudimentary version for quick testing might be perhaps like this:

void BothMotorsRotateToLeft()

{

GPIO_Write(GPIOC,GPIO_Pin_5);

GPIO_Write(GPIOD,GPIO_Pin_5);

Delay(time);

GPIO_Write(GPIOC,GPIO_Pin_5| GPIO_Pin_3);

GPIO_Write(GPIOD,GPIO_Pin_5| GPIO_Pin_3);

Delay(time);

GPIO_Write(GPIOC,GPIO_Pin_3);

GPIO_Write(GPIOD,GPIO_Pin_3);

Delay(time);

GPIO_Write(GPIOC,GPIO_Pin_3|GPIO_Pin_7);

GPIO_Write(GPIOD,GPIO_Pin_3|GPIO_Pin_7);

Delay(time);

GPIO_Write(GPIOC,GPIO_Pin_7);

GPIO_Write(GPIOD,GPIO_Pin_7);

Delay(time);

GPIO_Write(GPIOC,GPIO_Pin_7|GPIO_Pin_1);

GPIO_Write(GPIOD,GPIO_Pin_7|GPIO_Pin_1);

Delay(time);

GPIO_Write(GPIOC,GPIO_Pin_1);

GPIO_Write(GPIOD,GPIO_Pin_1);

Delay(time);

GPIO_Write(GPIOC,GPIO_Pin_1|GPIO_Pin_5);

GPIO_Write(GPIOD,GPIO_Pin_1|GPIO_Pin_5);

Delay(time);

} JW