// definizione dei PIN
const int dirPin = 5;
const int stepPin = 6;
const int motMS1Pin = 9;
const int motMS2Pin = 10;
const int motMS3Pin = 11;
const unsigned long stepForRevolution = 200 * 16; // passi per rivoluzione con microstepping 1/16
// list of microstep config pin outputs in binary notation B[MS1][MS2][MS3]
byte microSteps[5] = {
B000, // full step
B100, // 1/2 step
B010, // 1/4 step
B110, // 1/8 step
B111, // 1/16 step
};
int motSpeed = 1000; // Velocità iniziale (ritardo in microsecondi tra i passi)
int minSpeed = 38; // Velocità massima (ritardo minimo, quindi più veloce)
float acceleration = 0.00005; // Quantità di riduzione del ritardo (accelerazione)
void setup() {
// configura i pin del motore
digitalWrite(stepPin, LOW);
digitalWrite(dirPin, HIGH);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(motMS1Pin, OUTPUT);
pinMode(motMS2Pin, OUTPUT);
pinMode(motMS3Pin, OUTPUT);
digitalWrite(motMS1Pin, bitRead(microSteps[4], 2)); // 1/16 step
digitalWrite(motMS2Pin, bitRead(microSteps[4], 1));
digitalWrite(motMS3Pin, bitRead(microSteps[4], 0));
}
void loop() {
// Motore in direzione oraria
digitalWrite(dirPin, LOW);
// 45 giri del motore
for (long x = 0; x < 45 * stepForRevolution; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(motSpeed); // Ritardo per controllare la velocità
digitalWrite(stepPin, LOW);
delayMicroseconds(motSpeed);
// Riduci gradualmente il ritardo per aumentare la velocità (accelerazione)
if (motSpeed > minSpeed) {
motSpeed -= acceleration; // Aumenta la velocità riducendo il ritardo
}
}
delay(6000); // pausa di 6 secondi
}