spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica Avanzata > Motori e azionamenti

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #21  
Vecchio 25-10-2015, 15.31.30
potter potter non è collegato
Nuovo robottaro
 
Data registrazione: 12-09-2015
Residenza: lombardia
Messaggi: 11
Potenza reputazione: 0
potter E' per ora ancora un mistero
Predefinito

Ciao ,
mi sono documentato un po’ per quanto riguarda interrupt e varie ma non sono
riuscito nell’intento , perche’ non so come farlo interagire con il mio programma .
Forse sono troppo ottuso e lento di comprendonio , ma soprattutto inesperto di questi
tipi di linguaggio .
Sono al momento riuscito a buttare giu’ questa
piccola modifica (si trova tra gli asterischi)
Non ho potuto testarne la funzionalita’ perche’ sono fuori per lavoro
Secondo voi potrebbe funzionare una cosa del genere o e’ solo un’utopia?

Codice:
int Step=7;
int Dir=8;//pin di direzione
int EN=12; //pin 12  a livello alto disabilita la marcia
int puls1=10; // pulsante avanti 
int puls2=11; //pulsante indietro
int puls1State=0;//variabile per pulsante avanti
int puls2State=0;//variabile per pulsante indietro
int sensor=0;
int x=0;
void setup(){

pinMode (7,OUTPUT);
pinMode (8,OUTPUT);
pinMode (12,OUTPUT);
pinMode(10,INPUT);
pinMode(11,INPUT);

}
void loop(){
    int sensorValue=analogRead(A1);
  sensor= map(sensorValue,0,1023,900,10);
  // Serial.println(sensor);
    
 digitalWrite(EN,HIGH);//alla prima alimentazione tiene spento il motore
  puls1State=digitalRead(10);
  puls2State=digitalRead(11);
  
  if (puls1State==1){
    
  digitalWrite(EN,LOW);  
  digitalWrite(Dir,HIGH);
  }
  if (puls2State==1){
    
   digitalWrite(EN,LOW);  
  digitalWrite(Dir,LOW);
  }
               if (sensor==900){
      
           digitalWrite (EN,HIGH);//disabilito la marcia quando il pot e' a zero
              }
    *********************************************************

    if (puls1State==1||puls2State==1 && sensor<50)
    
     sensor=50 ; //limite col quale riesco a partire senza strappi 
     sensor = x;  //assegno a sensor una variabile
     for ( x=50; x>10; x--)  //ad ogni ciclo  decremento la variabile x da 50 
                             // sino a 10  (che e' la max velocita')        
                               
      ********************************************************
   
  
        
  digitalWrite (Step,HIGH);
  delayMicroseconds(sensor);

  digitalWrite (Step,LOW);
  delayMicroseconds(sensor);

}
Rispondi citando
  #22  
Vecchio 26-10-2015, 12.50.58
L'avatar di marnic
marnic marnic non è collegato
Administrator
 
Data registrazione: 23-05-2002
Residenza: Monselice (PD)
Età : 58
Messaggi: 5,458
Potenza reputazione: 424
marnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da potter Visualizza messaggio
Ciao ,
mi sono documentato un po’ per quanto riguarda interrupt e varie ma non sono riuscito nell’intento , perche’ non so come farlo interagire con il mio programma .
uno degli esempi con il quale ho capito è quello del telefono.
Nel tuo fare quotidiano (main loop) non impegni tempo a guardare il telefono per vedere se qualcuno ti chiama, quando succede è la suoneria che interrompe ciò che stai facendo e tu rispondi al telefono (routine interrupt o ISR routine) finita la telefonata riprandi il tuo lavoro

Quando il tuo main loop ha caratteristiche particolari, tu senti la suoneria, memorizzi che qualcuno ti sta cerfando ma continui in quello che stavi facendo (fatto salvo l'istante per memorizzare) poi quando poi/vuoi gestisci il fatto di aver ricevuto una telefonata.

Gli interrupt se abilitati (anche singolarmente) interrompono l'esecuzione del main loop ed eseguono la ISR che può fare qualcosa o semplicemente "memorizzare" facendo un Flaginterrupt=1;
All'interno del tuo loop quando serve andrai a vedere se Flaginterrupt è 1 e ti comporti di conseguenza (resettando a zero la variabile a lavoro finito)
__________________
Marnic
Roboitalia Staff
www.fabbrimarco.com
Rispondi citando
  #23  
Vecchio 26-10-2015, 13.28.37
L'avatar di sergio_camici
sergio_camici sergio_camici non è collegato
Administrator
 
Data registrazione: 23-05-2002
Residenza: Binasco (MI)
Età : 55
Messaggi: 2,665
Potenza reputazione: 305
sergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua fama
Predefinito

Ottima similitudine, e bravo Marnicchio...
Mi sono un po perso in questo 3d ma siamo sicuri che servano gli interrupt?
__________________
ciao
Sergio
---
Hai deciso di costruire un robot? Bene...
Cominciamo dalle brutte notizie: non e' facile...
Rispondi citando
  #24  
Vecchio 26-10-2015, 15.22.42
potter potter non è collegato
Nuovo robottaro
 
Data registrazione: 12-09-2015
Residenza: lombardia
Messaggi: 11
Potenza reputazione: 0
potter E' per ora ancora un mistero
Predefinito Accelerazione stepper

Beh si...... in effetti nell'ultimo post non ho specificato che l'argomento
riguardava l'accelerazione del motore passo passo .

Poi che serva un interrupt , un'altra funzione , o un qualsiasi accrocchio per fare rampare il motore , non lo ho ancora scoperto .
A me serve un metodo per che non mi faccia perdere i passi alla partenza quando mi trovo con il potenziometro al massimo .
Il concetto dell'interrupt l'ho capito abbastanza ma , come ripeto, mi viene
diffificile integrarlo nel mio programma .
Stavo cercando anche di sfruttare l'esempio di Sergio , ma ci devo lavorare
ancora un po' .
All'inizio la soluzione l'avevo trovata , pero' implementava l'uso di "delay" ,
e questo mi mandava in palla tutto il programma , ritartando il loop .
Rispondi citando
  #25  
Vecchio 26-10-2015, 15.39.38
L'avatar di sergio_camici
sergio_camici sergio_camici non è collegato
Administrator
 
Data registrazione: 23-05-2002
Residenza: Binasco (MI)
Età : 55
Messaggi: 2,665
Potenza reputazione: 305
sergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua fama
Predefinito

niente delay e niente interrupt.
ti ricordo che la "loop" è appunto un loop...
Implementa una macchina a stati ed ad ogni loop verifica a che velocità sei e che velocità vuoi raggiungere.

inoltre
non usare delay che blocca la macchina ma usa millis...

esempio
Codice:
int prev_m = 0;

void setup() {
prev_m=millis();
}

void loop() {
   if(millis()-prev_m > 1000) { // passato un sec
      // faccio cose, vedo gente ma una volta al secondo
      prev_m=millis();
   }
   // qui faccio cose, vedo gente ma alla massima velocità di loop
}
__________________
ciao
Sergio
---
Hai deciso di costruire un robot? Bene...
Cominciamo dalle brutte notizie: non e' facile...
Rispondi citando
  #26  
Vecchio 26-10-2015, 15.50.46
L'avatar di marnic
marnic marnic non è collegato
Administrator
 
Data registrazione: 23-05-2002
Residenza: Monselice (PD)
Età : 58
Messaggi: 5,458
Potenza reputazione: 424
marnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua fama
Predefinito

vabbè, ma cos'è millis (che non conoscevo, è arduino?) se non un interrupt che incrementa il valore ogni 1ms?
__________________
Marnic
Roboitalia Staff
www.fabbrimarco.com
Rispondi citando
  #27  
Vecchio 27-10-2015, 10.04.17
L'avatar di sergio_camici
sergio_camici sergio_camici non è collegato
Administrator
 
Data registrazione: 23-05-2002
Residenza: Binasco (MI)
Età : 55
Messaggi: 2,665
Potenza reputazione: 305
sergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da marnic Visualizza messaggio
vabbè, ma cos'è millis (che non conoscevo, è arduino?) se non un interrupt che incrementa il valore ogni 1ms?
Yes è puro arduino...sono i millisecondi passati dall'accensione.
Ok mi sono espresso male, gli interrupt servono di continuo, ma diciamo che il lavoro è già stato fatto e non devi reimplementarlo...
__________________
ciao
Sergio
---
Hai deciso di costruire un robot? Bene...
Cominciamo dalle brutte notizie: non e' facile...
Rispondi citando
  #28  
Vecchio 05-11-2015, 08.10.18
L'avatar di Extar
Extar Extar non è collegato
Robottaro senior
 
Data registrazione: 11-10-2011
Residenza: lucca
Messaggi: 76
Potenza reputazione: 38
Extar E' per ora ancora un mistero
Predefinito

In questo caso serve semmai micros() che restituisce i microsecondi dall'accensione, ma secondo me per ora ne puoi fare a meno, delay di nemmeno un millisecondo non crea danni, la pressione di un pulsante già di per se dura qualche decina di millisecondi.
Se vuoi far accelerare lo stepper solo quando si avvia da fermo è fattibile, diversamente è piuttosto complicato.
Alla pressione di uno dei pulsanti, controlli se il motore era precedentemente fermo (puoi appoggiarti ad una variabile secondaria, oppure controllare l'enable, fai come vuoi), in caso positivo avvii un ciclo for in cui fai aumentare gradualmente la velocità fino a raggiungere la velocità impostata, in caso negativo non fai nulla.
Dai un'occhiata alla sintassi dell'istruzione for, non è difficile una volta capita.
Finito il for, il loop continua a girare con la sua velocità già impostata, e il for non viene più eseguito a meno che il motore non venga fermato di nuovo.

Saluti, simone.
__________________
Le cronache di un laboratorio tormentato: T.S Labs


Store Tindie
Rispondi citando
  #29  
Vecchio 05-11-2015, 12.06.21
L'avatar di sergio_camici
sergio_camici sergio_camici non è collegato
Administrator
 
Data registrazione: 23-05-2002
Residenza: Binasco (MI)
Età : 55
Messaggi: 2,665
Potenza reputazione: 305
sergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua fama
Predefinito

In realtà ogni cambio di velocità dovrebbe seguire una rampa.
L'ideale sarebbe implementare un PID ma ci si può accontentare anche di una cosa più spannometrica.
Di sicuro non implementerei la cosa con un for... troppo bloccante, preferisco le macchine a stati.
__________________
ciao
Sergio
---
Hai deciso di costruire un robot? Bene...
Cominciamo dalle brutte notizie: non e' facile...
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Help arduino ---> Motore stepper linux177 E. Digitale 3 19-07-2010 11.23.26
Controllo Motore Stepper con micro Gotta89 E. di Potenza 0 11-03-2009 13.33.24
Gestione fine corsa motore stepper linuxdrake Elettronica 9 23-01-2009 17.11.15
Motore stepper controllo coals Motori e azionamenti 5 23-02-2005 15.17.58
Come posso dimensionare un motore Stepper??? elia Motori e azionamenti 4 10-09-2003 11.34.06


Tutti gli orari sono GMT. Adesso sono le: 08.11.45.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB