Pilotare motore stepper

Ciao avrei bisogno di un aiuto per cortesia . Sto pilotando un motorino stepper con la keyes l298

https://www.google.it/search?q=keyes+l298&client=firefox-b&source=lnms&tbm=isch&sa=X&ved=0ahUKEwixu-PIwL_OAhVE1hQKHVQNAiUQ_AUICCgB&biw=1440&bih=763

Ogni passo sono 0.9° e mi aspetto che partendo da una posizione nota , dopo 200 step abbia compiuto un angolo di 180°.

Invece le bastano 110 passi per compiere una rotazione di 180° come se ogni passo fosse 1,6°

Sto pilotando il motorino in questo modo

void motorR(){
  int bitMask=B00001111; // maschera per modificare solo gli ultimi 4 bit
          
          for (int id = 0; id <4; id++) {
            PORTB = (PORTB &~bitMask) |  modeR[id]; 
            Serial.println(id);
            while (tmp2++<12000);
            tmp2=0;
          }
}


void motorF(){
  int bitMask=B00001111; // maschera per modificare solo gli ultimi 4 bit
          
          for (int id = 0; id <4; id++) {
            PORTB = (PORTB &~bitMask) |  modeF[id]; 
            Serial.println(id);
            while (tmp2++<12000);
            tmp2=0;
          }
}

dove modeF[] e modeR[] sono :

byte modeR[] = {B00001001, B00001010, B00000110, B00000101};
byte modeF[] = {B00000101, B00000110, B00001010, B00001001};

motorF e motorR sono dentro un ciclo while

void cerca() {
   passi = negativoP;      //inizializza passi
  while (1)
  {
    if(distance > MAX_DISTANCE && !foundObj)  passi = negativoP;  
    else if (!foundObj){                                    
      

                foundObj = 1;                   // ho trovato un oggetto

    }

    
    while (passi<positivoP && distance > MAX_DISTANCE) // escursione da sinistra a destra ( da -passi a +passi).Si ferma se vede un ostacolo all'interno del raggio d'azione
    {
      
       if (passi<0) motorF(); // se proviene da sinistra e raggiunge lo zero , si sposta verso destra
       else motorR();
      passi++;  
       
   }
   foundObj = 0;
 }  
}

qualche idea o osservazione? :confused:
Grazie mille , ciao

Ciao per spiegarmi meglio ho creato questa immagine

Sembra che il motorino faccia più di un passo per volta.
Ruota per 180° se gli faccio fare 110 passi . Quello che vorrei io e farlo ruotare di 180° con 200 passi

il ciclo for lo ripetto 55 volte per poi fare l'OR con modeF[] e quindi cambiare direzione e riperlo ancora
55 volte

Di seguito il programma compilabile per testare il motorino

#define negativoP -55
#define positivoP 55
#define Speed 7500

int motorPin1 = 11;
int motorPin2 = 10;
int motorPin3 = 9;
int motorPin4 = 8;         

int passi;
unsigned int tmp2;

byte modeR[] = {B00001001, B00001010, B00000110, B00000101};
byte modeF[] = {B00000101, B00000110, B00001010, B00001001};

void setup() {

  Serial.begin(115200); //Opens serial connection at 9600 baud.     

  passi = negativoP;

  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT); 
  
  pinMode(3,OUTPUT); 
  pinMode(2,OUTPUT); 
  
  digitalWrite(2,HIGH);
  digitalWrite(3,HIGH); 
}

void loop()
{
    while (Serial.available())
    {
      char cmd = (char)Serial.read();
      if (cmd == 's')   while(1) cerca();
    }
}
void motorR(){
  int bitMask=B00001111; // maschera per modificare solo gli ultimi 4 bit
          
          for (int id = 0; id <4; id++) {
            PORTB = (PORTB &~bitMask) |  modeR[id]; 
            while (tmp2++<Speed);
            tmp2=0;
          }
}
void motorF(){
  int bitMask=B00001111; // maschera per modificare solo gli ultimi 4 bit
          
          for (int id = 0; id <4; id++) {
            PORTB = (PORTB &~bitMask) |  modeF[id]; 
            while (tmp2++<Speed);
            tmp2=0;
          }
}
void cerca() {
   passi = negativoP;      //inizializza passi
  while (1)
  {
    while (passi<positivoP) // escursione da sinistra a destra ( da -passi a +passi)
    {
       if (passi<0) motorF(); // se proviene da sinistra e raggiunge lo zero , si sposta verso destra
       else motorR();

      Serial.println(passi);        
      passi++;  
   }
 }  
}

Nessun ha mai usato questa scheda ? :confused:

Victor795 ... tu pretendi che qualcuno risponda in meno di 24 ore ... sotto ferragosto ? ? ? :o :o :o

Devi pazientare ... moltissimi sono in vacanza ... :wink:

Guglielmo

gpb01:

Victor795 ... tu pretendi che qualcuno risponda in meno di 24 ore ... sotto ferragosto ? ? ? :o :o :o

Devi pazientare ... moltissimi sono in vacanza ... :wink:

Guglielmo

ahahah :smiley: hai ragione e allora buon Ferragosto ! :wink:

Ciao, sei certo di quanti passi/giro è il motore?
Tra l'altro la sequenza mi ha incuriosito, con 2 positivi dovresti avere una sorta di mezzo step...: ti rimando a questo link http://www.logicaprogrammabile.it/motore-passo-passo-bipolare-driver-l298n/

Stefano

cam9500:
Ciao, sei certo di quanti passi/giro è il motore?
Tra l'altro la sequenza mi ha incuriosito, con 2 positivi dovresti avere una sorta di mezzo step...: ti rimando a questo link Motore passo passo. Come usare un motore stepper l298n

Stefano

Si c'e scritto

Sankyo MSJC400A11 0.9 deg/step

Ma ammetto che sto andando un pò in confusione.
Il motore gira in modo fluido senza intoppi

EDIT: sto pilotando 4 passi per volta. Ho seguito il tuo link ma continua ad andare a 4 passi.
devo aver fatto qualche errore nel programma

Credo di aver capito il problema, dovevo fare una pausa :smiley:

ti rimando a questo link http://www.logicaprogrammabile.it/motore-passo-passo-bipolare-driver-l298n/

esatto, Solo che io facevo 4 passi per volta dentro un ciclo for :S

cam9500:
Tra l'altro la sequenza mi ha incuriosito, con 2 positivi dovresti avere una sorta di mezzo step...:

Qui parla dei due positivi e del suo vantaggio http://www.nmbtc.com/step-motors/engineering/full-half-and-microstepping/

Grazie e buon Ferragosto