Ciao ragazzi..
spero possiate aiutarmi perchè non so più dove sbattere la testa..
Sto pilotando un motore passo passo con Arduino Leonardo cambiando le velocità attraverso un potenziometro.
Ho diviso in 9 intervalli. Devo pilotare il motore in quarter step (ma il problema che espongo non si risolve neppure provando con half o full step).
Quello che succede è che dal 5° intervallo in poi la velocità non aumenta più. posso solo diminuire. la cosa strana è che i led che indicano l'entrata in un certo intervallo di velocità si illuminano regolarmente.
Sapete dirmi se c'è qualcosa che può dargli noia nel codice? Magari lo manda in saturazione.. boh..
help!!
Grazie mille in anticipo!!
#include <AccelStepper.h>
// Definizione dei pin usati
#define pinStep 5
#define pinDirection 6
#define led0 0
#define led1 1
#define led2 2
#define led3 3
#define led4 4
#define led5 7
#define led6 8
#define led7 9
#define led8 10
AccelStepper stepper(1,pinStep,pinDirection);
long VelMax;
int prec_intervallo=-1;
void setup()
{
stepper.setMaxSpeed(3500);
stepper.setSpeed(950); //imposto la velocità
Serial.begin (9600);
pinMode(led0, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
}
void loop()
{
int val = analogRead(A0);
int intervallo= floor( val / 113.67);
switch (intervallo){
case 0:// vale da 0 a 113
VelMax=650;//in step/sec
digitalWrite(led0, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
break;
case 1:// vale da 114 a 227
VelMax=950;//in step/sec
digitalWrite(led0, LOW);
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
break;
case 2://vale da 228 a 341
VelMax=1270;//in step/sec
digitalWrite(led0, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
break;
case 3://vale da 342 a 454
VelMax=1595;//in step/sec
digitalWrite(led0, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
break;
case 4://vale da 455 a 568
VelMax=1920;//in step/sec
digitalWrite(led0, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
break;
case 5://vale da 569 a 682
VelMax=2240;//in step/sec
digitalWrite(led0, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, HIGH);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
break;
case 6://vale da 683 a 795
VelMax=2555;//in step/sec
digitalWrite(led0, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, HIGH);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
break;
case 7://vale da 796 a 909
VelMax=2870;//in step/sec
digitalWrite(led0, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, HIGH);
digitalWrite(led8, LOW);
break;
case 8://vale da 910 a 1023
VelMax=3205;//in step/sec
digitalWrite(led0, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, HIGH);
break;
}
stepper.runSpeed();//provo a mettere run perchè runspeed non implementa accelerazioni
stepper.setSpeed(VelMax);
if (intervallo!=prec_intervallo)
{
Serial.print ("Valore potenziometro: ");
Serial.println (val);
Serial.print (" - Velocità motore in step/sec: ");
Serial.println (VelMax);
Serial.println (" ");
}
prec_intervallo=intervallo;
}