2 stappenmotoren op de Arduino UNO met 2 verschillende snelheden?

Hallo,

Ik heb op de Arduino UNO een tweetal bipolaire stappenmotoren aangesloten (via drivers M415C ). Het toerental van de beide motoren is niet gelijk. Het lukt me maar niet om dit in een werkbaar algoritme te verwerken.

Dit is wat ik tot op heden heb (begin vh programma niet bijgevoegd):

void setup()
{
Serial.begin(9600);

pinMode(motor1Puls, OUTPUT); // sets the digital pin as output
pinMode(motor1Dir, OUTPUT); // sets the digital pin as output
pinMode(motor1Opto, OUTPUT); // sets the digital pin as output
pinMode(motor1En, OUTPUT); // sets the digital pin as output

pinMode(motor2Puls, OUTPUT); // sets the digital pin as output
pinMode(motor2Dir, OUTPUT); // sets the digital pin as output
pinMode(motor2Opto, OUTPUT); // sets the digital pin as output
pinMode(motor2En, OUTPUT); // sets the digital pin as output

}

void loop(){
digitalWrite(motor1Opto, LOW);
digitalWrite(motor1En, LOW);
digitalWrite(motor2Opto, LOW);
digitalWrite(motor2En, LOW);

digitalWrite(motor1Opto, HIGH);
digitalWrite(motor1En, HIGH);
digitalWrite(motor2Opto, HIGH);
digitalWrite(motor2En, HIGH);

/* motoren draaien linksom */
digitalWrite(motor1Dir, HIGH);
digitalWrite(motor2Dir, HIGH);
for (puls = 0; puls < 144000; puls++){
digitalWrite(motor1Puls, HIGH);
digitalWrite(motor2Puls, HIGH);
delayMicroseconds(motorsnelheid);
digitalWrite(motor1Puls, LOW);
digitalWrite(motor2Puls, LOW);
delayMicroseconds(motorsnelheid);
}
}

Ik heb getracht om voor iedere motor een apart algoritme te schrijven, maar dit werkt gewoon niet. Dat wil zeggen, motor 1 loopt, motor 2 niet of niet naar behoren. Of moet je dan 2 Uno's gebruiken?

Tot slot: de stappenmotoren moeten met een constante snelheid voor langere tijd kunnen draaien.
Mijn vraag: is er eigenlijk een meer eenvoudige notatie te bedenken voor de regel:

for (puls = 0; puls < 18000000; puls++)

Eigenlijk moet er iets staan in de trant van

Van puls = 0 naar puls is oneindig

Ik heb internet afgestruind naar vergelijkbare programma's, inclusief die van Tom Igoe. Zijn programma voor een stationair draaiende stappenmotor werkt als je het algoritme letterlijk overneemt, maar zodra je de snelheid wil aanpassen beginnen de stappenmotoren rare kuren te vertonen, de rotor draait in ieder geval niet meer naar behoren. Bovendien, werkt dit programma ook bij de aansturing van 2 stappenmotoren met verschillende snelheden?

Hoi en welkom als actief lid.

Je hebt je al een tijd geleden geregistreerd, ik hoop dat je inmiddels al veel hebt gelezen.
Zou je dit (klik!) en de link naar het Engelstalige deel daarvan ook nog eens willen doorlezen ?

Je moet altijd even kijken of je grote getallen zomaar kunt gebruiken.
Ik vraag me af of je zomaar tussen neus en lippen door achttien miljoen kunt gebruiken in je sketch, en bovendien zie ik die helemaal niet in die sketch van je (wellicht omdat je niet alle relevante informatie hebt gepost ?).
Ik zie overigens wel 144000 in een vergelijkbare regel.

Verder gebruik je een grote (relatief langdurige) for.. loop, waarin een delay zit verwerkt.
Dat is een blokkerende code die ook veel roet in het eten kan gooien.
Ik denk dat je je eerst een voorstelling van looptijden (hoe snel word je code eigenlijk afgehandeld ?) moet gaan maken, en aan de hand daarvan je motoren moet aansturen.
Daar zijn verschillende oplossingen voor mogelijk.
Maar als allereerste moet je het gebruik van delays gaan afleren en dat op een andere manier gaan doen.
Daarom ook hier nogmaals, bestudeer de blink without delay sketch.
Voer 'm eens uit, verander 'm en zorg dat je doorhebt wat er daar gedaan word, hoe en waarom.
Als je daar vragen over hebt, schroom dan niet die hier te stellen, het is belangrijk dat je deze materie snapt.