6 years, 9 months ago.  This question has been closed. Reason: Duplicate question

Stepper Motor Issue

Hello, I am experimenting with 2 steppers to make them run together using Threads. I am using STM32 Nucleo F767ZI development board. One of the stepper motors vibrates too much while running the code. But, they run smoothly while making them run separately. I think the issue is with the threads. What could be the better solution?

#include "mbed.h"
#include "stepperMotor.h"

Serial pc(USBTX, USBRX);

int recepticlestepspeed = 400 ;                                //motor speed for recepticle conveyor stepper
int recepticlenumstep = 800; 

int microtrackstep_speed = 400 ;                             //motor speed for microtrack conveyor stepper
int microtracknumstep = 133;

Thread *t1;                         
Thread *t2;                         
Thread *t3;                         
Thread *t4;                         

sMotor recepticle_conveyor(PF_5, PF_10, PA_7, PF_2);       

sMotor microtrack_conveyor(PA_3, PC_0, PC_3, PF_3);       


DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);

void func_stepper1()
{
        for(int i = 0; i<6; i++)
        {
            microtrack_conveyor.step(microtracknumstep,  0 , microtrackstep_speed);
        } 
}           
    
void func_stepper2()
{
     recepticle_conveyor.step(recepticlenumstep, 1 , recepticlestepspeed);   
}

void func_stepper2_return()
{
     recepticle_conveyor.step(recepticlenumstep, 0 , recepticlestepspeed);
}

void func_stepper1_return()
{
        for(int i=0; i<6; i++)
        microtrack_conveyor.step(microtracknumstep , 1 , microtrackstep_speed); 
}

int main() 
{
    int t; 
    while(1)
    {
        pc.printf("\n\r Press 1 to start: ");
        pc.scanf("%d", &t);
        if(t == 1)
        {   
            if(t1) delete t1; 
            if(t2) delete t2;
            t1 = new Thread;
            t2 = new Thread;
            t1->start(func_stepper1);
            t2->start(func_stepper1);
            wait(5);
            if(t3) delete t3; 
            if(t4) delete t4;
            t3 = new Thread;
            t4 = new Thread;
            t3->start(func_stepper1_return);
            t4->start(func_stepper2_return);
        }
    }
}