Go Down

Topic: Stepper va in una direzione sola (Read 1 time) previous topic - next topic

spookyrufus

Buonasera a tutti,

Sono nuovo del forum e ho iniziato da pochi giorni  a sviluppare su Arduino, pur avendo un piccolo background con PIC e devboard della MikroE.
Ho acquistato il kit che potete vedere http://cgi.ebay.it/Arduino-Uno-Kit-IR-Remote-DIY-lcd-SD-card-Kit-Advanced-/160571393538?pt=LH_DefaultDomain_0&hash=item2562cd0602 , e sebbene tutti gli esempi proposti funzionino come mi aspetterei, il progetto con il motore stepper non va come mi aspetterei.

Sto provando ad eseguire l'esempio presente nell'IDE chiamato MotorKnob, ma succede una cosa strana:

quando chiamo la funzione Stepper.step(), indipendentemente dal fatto che il parametro sia positivo o negativo, lo stepper gira sempre in senso orario.
Sono sicuro che i collegamenti sono corretti, e trattandosi di un esempio molto semplice mi aspettavo che tutto andasse per il verso giusto.

Non avendo esperienza con i motori stepper, pur avendo letto un po' di teoria, non mi raccapezzo e non so come cercare/trovare il problema.

Qualcuno puo' darmi una mano per favore?

Grazie!

FEDERICO

Sei assolutamente certo del collegamento elettrico?
Queste pagine mi hanno aiutato:

http://www.ladyada.net/make/mshield/use.html

e in particolare

http://www.ladyada.net/make/mshield/resources.html
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

uwefed

Ciao spookyrufus

Gratulazioni, hai comprato un  Arduino UNO falsificato (non é fatto dal produttore ufficiale e lo noto perché manca il "Made in Italy" e i simboli CE e FCC).
Dovrebbe funzionare comunque. Parentesi chiusa.  ;) ;) ;)

È difficile dire cosa potrebbe essere il problema visto che non si capisce quale integrato é sul motordriver. Presumo che sia un L293D.
Se il motore gira bene e fluido in una direzine presumo che il collegamenti siano corretti.

Facci per favore una foto un po dettagliata del collegamento Arduino driver motore.

CIao Uwe



spookyrufus

@uwefed: non sapevo esistesse una cosa come un Arduino falsificato. Essendo opensource, ho capito che chiunque potesse produrne una propria versione e farne cio che vuole. Spero di non aver infranto nessun regolamento comprando quello.

In ogni modo, ecco alcune foto. L'integrato sul driver e' scritto sull'immagine.

Va detto che anche quando gira in senso orario (l'unica direzione in cui gira), il motore 'ticchetta'. MA ho immaginato che questo fosse normale.

Vi ringrazio per le risposte!






Pelletta

Quote
Essendo opensource, ho capito che chiunque potesse produrne una propria versione e farne cio che vuole

Puoi farne quanti ne vuoi e di qualsiasi layout, però non puoi chiamarli arduino.

uwefed

#5
Jul 06, 2011, 12:40 am Last Edit: Jul 06, 2011, 12:48 am by uwefed Reason: 1
Come dice Pelletta
Una licenza libera non dice che non ci sono diritti d'autore e marchi o nomi registrati.
Non é permesso l'uso del nome "ARDUINO", del layout originale e del simbolo infinito di Arduino. Poi una copia privata fatta per se stesso é differente a una copia venduta e publicizzata come "Arduino UNO".
Di piú puoi leggere su http://arduino.cc/en/Main/FAQ

Hai infranto leggi, ma penso se prometti di comprare in futuro solo l'Arduino autentico o dei cloni legali nessuno si incazzerá.
ps: l'Arduino UNO viene prodotto in Italia.
L' intenzione di quelli che producono l' Arduino originali sará non di rompere chi ne compra uno, ma di chi li vende in grande stile e fa soldi.

Ritorniamo al Tuo problema:
Se fai andare il motore lentamente cosa fanno i 4 LED sulla schedina driver? Dovrebbero accendersi in una certa sequenza (per esempio: 1,3,2,4). Se inverti la direzione si accendono ancora ma 2 LED dovrebbero invertire la loro posizione (1,4,2,3).

Ciao Uwe

spookyrufus

Allora l'andamento dei led sul driver e' il seguente, a seconda di come il motore dovrebbe girare:

counterclockwise ADB(D)C
clockwise ACB(A)D

La lettera tra parentesi indica un flash brevissimo, che non riesco a spiegarmi.
In entrambi i casi, il motore gira sempre e solo in senso antiorario.

Che succede???

uwefed

Mi sembra che la schedina sia questa:
http://cgi.ebay.com/5V-4-Phase-5-Wire-Stepper-Motor-Driver-Test-Board-/190521786271?pt=LH_DefaultDomain_0&hash=item2c5bfbbf9f
(in basso c'é una foto e lo schema).

La sequenza dei LED é uguale a motore staccato?

Sí? Sembra che possa essere solo un problema del SW.
Mandi per favore il programma che usi?

Grazie ciao Uwe


spookyrufus

#8
Jul 07, 2011, 11:38 am Last Edit: Jul 07, 2011, 11:40 am by spookyrufus Reason: 1
Si la sequenza e' uguale a motore staccato (domanda di servizio: "come potrebbe mai essere diversa? i segnali non arrivano 'da monte verso valle'?).

Il programma e' quello incluso tra gli esempi dell'IDE:

Code: [Select]

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
                                    // for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8,9,10,11);            

void setup() {
 // set the speed at 60 rpm:
 myStepper.setSpeed(60);
 // initialize the serial port:
 Serial.begin(9600);
}

void loop() {
 // step one revolution  in one direction:
  Serial.println("clockwise");
 myStepper.step(stepsPerRevolution);
 delay(500);
 // step one revolution in the other direction:
 Serial.println("counterclockwise");
 myStepper.step(-stepsPerRevolution);
 delay(500);
}


Ah si: mi ero dimenticato di promettere che in futuro staro' piu attento a cosa e dove compro. Sono rimasto abbagliato dal prezzo e ho comprato senza pensare.

spookyrufus


uwefed

#10
Jul 07, 2011, 09:33 pm Last Edit: Jul 07, 2011, 09:49 pm by uwefed Reason: 1
Ciao spookyrufus

Quote
Si la sequenza e' uguale a motore staccato (domanda di servizio: "come potrebbe mai essere diversa? i segnali non arrivano 'da monte verso valle'?).

Certi test si fanno per escludere parti di probabile o improbabile causa.
Sapendo che lo fa anche senza motore collegato mi permetto di escludere come cause il motore e l' elettronica del driver ma vado diretta su un ipotetico errore si SW forse della libreria.

Hai provato di pilotare il motore senza usare la libreria Stepper.h?

prova questo codice che trovi sulla pagina: http://www.arduino.cc/en/Tutorial/StepperUnipolar


Controlla quale cavo corrisponde a quale avvolgimento e modifica di consequenza il collegamento ai piedini del arduino.
La sequenza giusta é
pin8: un cavetto del primo avolgimanto
pin9: un cavetto del altro avolgimanto
pin10: secondo cavetto del primo avolgimanto
pin11: secondo cavetto del altro avolgimanto

ciao Uwe

rotazione in una direzione:
Code: [Select]
/* Stepper Copal
* -------------
*
* Program to drive a stepper motor coming from a 5'25 disk drive
* according to the documentation I found, this stepper: "[...] motor
* made by Copal Electronics, with 1.8 degrees per step and 96 ohms
* per winding, with center taps brought out to separate leads [...]"
* [http://www.cs.uiowa.edu/~jones/step/example.html]
*
* It is a unipolar stepper motor with 5 wires:
*
* - red: power connector, I have it at 5V and works fine
* - orange and black: coil 1
* - brown and yellow: coil 2
*
* (cleft) 2005 DojoDave for K3
* http://www.0j0.org | http://arduino.berlios.de
*
* @author: David Cuartielles
* @date: 20 Oct. 2005
*/

int motorPin1 = 8;      // black   coil 1
int motorPin2 = 9;      // brown  coil 2
int motorPin3 = 10;    // orange coil1
int motorPin4 = 11;    // yellow coil 2
int delayTime = 500;

void setup() {
 pinMode(motorPin1, OUTPUT);
 pinMode(motorPin2, OUTPUT);
 pinMode(motorPin3, OUTPUT);
 pinMode(motorPin4, OUTPUT);
}

void loop() {
 digitalWrite(motorPin1, HIGH);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin4, LOW);
 delay(delayTime);
 digitalWrite(motorPin1, LOW);
 digitalWrite(motorPin2, HIGH);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin4, LOW);
 delay(delayTime);
 digitalWrite(motorPin1, LOW);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin3, HIGH);
 digitalWrite(motorPin4, LOW);
 delay(delayTime);
 digitalWrite(motorPin1, LOW);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin4, HIGH);
 delay(delayTime);
}



rotazione nel altra direzione:
Code: [Select]


int motorPin1 = 8;      // black   coil 1
int motorPin2 = 9;      // brown  coil 2
int motorPin3 = 10;    // orange coil1
int motorPin4 = 11;    // yellow coil 2
int delayTime = 500;

void setup() {
 pinMode(motorPin1, OUTPUT);
 pinMode(motorPin2, OUTPUT);
 pinMode(motorPin3, OUTPUT);
 pinMode(motorPin4, OUTPUT);
}

void loop() {
 digitalWrite(motorPin1, HIGH);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin4, LOW);
 delay(delayTime);
 digitalWrite(motorPin1, LOW);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin4, HIGH);
 delay(delayTime);
 digitalWrite(motorPin1, LOW);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin3, HIGH);
 digitalWrite(motorPin4, LOW);
 delay(delayTime);
 digitalWrite(motorPin1, LOW);
 digitalWrite(motorPin2, HIGH);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin4, LOW);
 delay(delayTime);
}





spookyrufus

#11
Jul 08, 2011, 11:38 am Last Edit: Jul 08, 2011, 11:56 am by spookyrufus Reason: 1
Come faccio a sapere a quale cavo corrisponde ciascun avvolgimento?
Ho provato a googlare il codice riportato sul dorso del motore 28BYJ-48 ma trovo solo roba in lingue a me non comprensibili.

Damanda: potrei avere altri stepper (negli anni ho sempre smontato tutte le stampanti che mi capitarono a tiro). E' sensato fare la prova con un altro motore, sperando che non abbia requisiti di corrente troppo elevati? Esiste un limite superiore alla corrente che posso tirare fuori dal driver o dipende solo dall'alimentatore che lo alimenta?
Inoltre, tutti gli altri stepper che ho, hanno 4 fili anziche' 5. Che ci faccio? Posso usarli con lo stesso driver?

grazie mille, e mi scuso se le mie domande riecheggiano per banalita'.

uwefed


Come faccio a sapere a quale cavo corrisponde ciascun avvolgimento?

Devi provare ; visto che il comune dei 2 avvolgimenti sono messi insieme non ci sono possibilitá di misurare.

Quote from: spookyrufus

Ho provato a googlare il codice riportato sul dorso del motore 28BYJ-48 ma trovo solo roba in lingue a me non comprensibili.

http://iteadstudio.com/store/index.php?main_page=product_info&products_id=300
Sullo schema vedi che il comune e il pin 5 del conettore. Quale é il pin 5 puoi capire perché sulla schedina va a +5V oppure con un tester é quello dove tutti gli altri hanno la stessa resistenza.
Un avvolgimento sono i pin 1 e 3 e l' altro i pin 2 e 4.

Quote from: spookyrufus

Damanda: potrei avere altri stepper (negli anni ho sempre smontato tutte le stampanti che mi capitarono a tiro). E' sensato fare la prova con un altro motore, sperando che non abbia requisiti di corrente troppo elevati? Esiste un limite superiore alla corrente che posso tirare fuori dal driver o dipende solo dall'alimentatore che lo alimenta?
Inoltre, tutti gli altri stepper che ho, hanno 4 fili anziche 5. Che ci faccio? Posso usarli con lo stesso driver?

Con il ULN2003 puoi usare solo motori unipolari e quelli hanno 5 o 6 cavetti.
Per i motori bidirezionali (quelli a  fili) hai bisogno di un altro circuito elettronico.
Il ULN2003 regge 0,5A. Il motore deve consumere di meno. Misura la resisteza del avolgimento e calcola la corrente per la tensione di aliemntazione che usi.

Ciao Uwe



spookyrufus

OK ho risolto.
Era sbagliata la configurazione dei pin, ed era sbagliato lo schema dal quale avevo copiato, ed ero sbagliato io quando pensavo di aver provato tutte le configurazioni per evitare di fare domande inutili.

Quindi, giusto per chiudere il topic, tutto risolto. Driver, stepper e libreria funzionano benissimo. Grazie a chiunque sia intervenuto.

Go Up