Motore Passo passo 1.7A in standby vibra e fa rumori leggeri

Ciao a tutti vorrei capire dove sbaglio con il vostro aiuto ringraziandovi in anticipo! :slight_smile:

Dunque devo far scorrere una slitta montata su un carello tramite vite senza fine per controllare direzione velocità pause e posizione.
Ho accoppiato per prima un motore passo passo da 1,7A con un Bigeasydriver

Ho risolto ma rimangono delle vibrazioni

aggiornato

La tensione nominale del primo motore é 4,5V ( 4,5Ohm *1A) quella del secondo é 6,8V.
Per fare gli microstep la corrente sul motore non deve essere limitato dal impedenza (resistenza e induttanza) del motore ma limitata dal driver A4983. Per questo la tensione di alimentazione del motore deve essere abbastanza alta da poter impartire la corrente voluta anche a fronte di una limitazione imposta dalla induttanza del motore. Una application note della Allegro (che adesso non trovo piú) indicano come tensione di alimentazione del motore una tensione 4 volte la tensione nominale del motore. per i 2 motori sarebbe 18 e 27,1V. Siccuramente 12V sono troppo poco.
proposte di soluzione:

  • Prova con un tensione di alimemtazione da 24V o perfino 30V e almeno 1,4A per il primo motore e 2,4A per il secondo.
  • regola il limite di corrente sulla scheda Easydriver / Pollolu su valori opportuni.
  • controlla come hai collegato il motore al driver. I dati tecnici non danno chiare indicazioni. Misura cn un tester il motore per capire quali cavetti corrispondono a quale avvolgimento e metti un avvolgimento sulle uscite "1A" e "1B" del Pololu (o "A" sul Easydriver) e l' altro avvolgiemnto sulle uscite "2A" e "2B" del Pololu (o "B" sul easydriver). Se dovesse girare nel senso sbagliato inverti un avvolgimento .

In fine con la Pololu A4983 come faccio a usare MS1 MS2 MS3 per le varie microstep?Devo collegare alla 5 volt di arduino MS che voglio o c'è un altro sistema?

li colleghi con una resistenza da 1kOhm a maso o a +5V aa secondo di quale modalitá di microstepping vuoi usare.

La logica prende i 5 volt da arduino
Arduino prende i 12 volt da usb e o da batteria 12v
il motore prende 12 v da pololu via batteria
Non è che devo aumentere i volt del motore diciamo a 24?

Spero che la Tua USB va a 12V :wink: :wink: :wink:
Che batteria stai usando?

...e quando lo fermo con le mani cambia direzione.

È una cosa impossibile con un motore passo passo collegato in modo giusto al driver; non é che hai collegato male il motore, nel senso che hai messi gli avolgimenti tra i 2 ponti H del A4983?

Ciao Uwe

Risolto!

Allora vi aggiorno e chiedo altri aiuti :roll_eyes:

Dunque ho risolto il pilotaggio sostituendo la scheda Pololu con la Bigeasydrive la quale ha lo stesso integratoA4983 ma questa a differenza dell'altra funzia!! :wink:

Ora mi rimane un problema fastidioso e cioè quando il motore è in standby ci sono delle correnti vaganti che lo fanno leggermente vibrare con dei micro scattini ma non sempre se il motore gira va perfettamente se gli faccio fare pause ad ogni pausa cambia vibrazioni e a volte non le fa cosa può essere?
Leggendo la guida del A4983 ci sarebbe il modo Sleep

Microstep Select (MS1, MS2, and MS3). Selects the microstepping format, as shown in table 1. MS2 and MS3 have a 100 k? pull-down resistance. Any changes made to these inputs do not take effect until the next STEP rising edge.
If the MSx pins are pulled up to VDD, it is good practice to use a high value pull-up resistor in order to limit current to these pins, should an overvoltage event occur.

Se è quello che penso io quando il drive è in standbay blocca tutte le tensioni.Basta collegarlo ad un 5 V con resistenza?

Altro aiuto
io uso questo codice

int shutter_on = 200; //tempo di pressione per attivare la cam, da settare intorno i 100 e 300
int shutter_off = 1500; // tempo di attesa prima di attivare il motorino

int wakeup = 3000; //Tempo fuoco acceso
int wakewait =200; //time between wake and shutter

int outpin = 13; //uscita per lo scatto
int wakepin = 12; //uscita per la messa a fuoco

// init motorino
int DIR_PIN =7;
int STEP_PIN =5;

int delayTime = 500;

void setup() {
// init dei pin per lo scatto
pinMode(outpin, OUTPUT); //outpin gives output
pinMode(wakepin, OUTPUT); //wakepin gives output

// Tempo scatto Otturatore
shutter_on = 4000;

// init dei pin per il motorino
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);


}

/////////// Loop ////////////

void loop(){


  
digitalWrite(wakepin, HIGH); //turn wakeup/focus on
delay(wakeup); //keep focus
digitalWrite(wakepin, LOW); //turn wakeup off
delay(wakewait); //wait
digitalWrite(outpin, HIGH); //press the shutter
delay(shutter_on); //wait the shutter release time
digitalWrite(outpin, LOW); //release shutter
delay(shutter_off); //wait for next round


 

  //rotate a specific number of microsteps (8 microsteps per step)
  //Avanti a 200 step 
  rotate(-5000, 1);
  delay(2000); 

}

void rotate(int steps, float speed){
  //rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
  //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  int dir = (steps > 0)? HIGH:LOW;
  steps = abs(steps);

  digitalWrite(DIR_PIN,dir); 

  float usDelay = (1/speed) * 70;

  for(int i=0; i < steps; i++){
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(usDelay); 

    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(usDelay);
  }
} 

void rotateDeg(float deg, float speed){
  //rotate a specific number of degrees (negitive for reverse movement)
  //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  int dir = (deg > 0)? HIGH:LOW;
  digitalWrite(DIR_PIN,dir); 

  int steps = abs(deg)*(1/0.225);
  float usDelay = (1/speed) * 70;

  for(int i=0; i < steps; i++){
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(usDelay); 

    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(usDelay);
  }
}

va alla perfezione solo che vorrei aggiungere un altro motore dove posso trovare una guida per scrivere il nuovo codice per guidare il secondo motore?Sarebbe possibile usare un // init motorino
int DIR2_PIN =2;
int STEP2_PIN =3 in modo da far distinguere i due init?
Ho visto che ci sono altri che hanno fatto la stessa cosa ma senza easydriver e quindi con un codice motore diverso che non si applica al mio.
Chiedo gentilmente un nuovo aiuto ringraziandovi in anticipo!! :wink:

marcotroi:
Leggendo la guida del A4983 ci sarebbe il modo Sleep

Microstep Select (MS1, MS2, and MS3). Selects the microstepping format, as shown in table 1. MS2 and MS3 have a 100 k? pull-down resistance. Any changes made to these inputs do not take effect until the next STEP rising edge.
If the MSx pins are pulled up to VDD, it is good practice to use a high value pull-up resistor in order to limit current to these pins, should an overvoltage event occur.

Se è quello che penso io quando il drive è in standbay blocca tutte le tensioni.Basta collegarlo ad un 5 V con resistenza?

Non capisco dove vedi in queste righe una modalitá di standby o sleep. La modalitá sleep é un entrata aposita e disattiva tutte le uscite. Un motore passo passo per rimanere in posizione ha bisogno di essere alimentato. Questo vale per un motore che viene pilotato com passi interi e ancora di piú per uno pilotato in microstep.
Le entrate MS1,MS2 e MS3 devono essere polarizzate con una resistenza pullup e non lasciate libere. Se guardi lo schema elettrico del BigEasyDriver http://www.schmalzhaus.com/BigEasyDriver/v1_2/BigEasyDriver_v12_sch.pdf vedi che sono presenti delle resistenze di pullup da 20kOhm.

Ciao Uwe

uwefed:
Non capisco dove vedi in queste righe una modalitá di standby o sleep. La modalitá sleep é un entrata aposita e disattiva tutte le uscite. Un motore passo passo per rimanere in posizione ha bisogno di essere alimentato. Questo vale per un motore che viene pilotato com passi interi e ancora di piú per uno pilotato in microstep.
Le entrate MS1,MS2 e MS3 devono essere polarizzate con una resistenza pullup e non lasciate libere. Se guardi lo schema elettrico del BigEasyDriver http://www.schmalzhaus.com/BigEasyDriver/v1_2/BigEasyDriver_v12_sch.pdf vedi che sono presenti delle resistenze di pullup da 20kOhm.

Ciao Uwe

Allora diciamo che io voglio gli step interi quindi non mi interessano i microstep mi sembrava di capire che bastasse lasciar liberi MS1 2 e 3
Mi spiegheresti cosa devo fare per polarizzare con una resistenza pullup in parole povere?
Ho guardato lo schema ma non sono molto ferreo con i simboli se ti va spiegami cosa devo fare per risolvere il problema.
Ho controllato meglio le tensioni del motore la cosa strana è che fa un giro di 360° e si ferma per 3 secondi il primo durante la pausa non vibra e ha una tensione vicina a 12v nel secondo giro vibra e ha una tensione di 14v e va avanti così 1 pausa non vibra a 12v 1 pausa con vibrazioni a 14v facendo quello che dici polarizzando le MS.. si risolve?
e perchè in una pausa ci sono 12v e in un altra 14v?
Grazie

Per passi interi devi mettere MS1,MS2 e MS3 a massa.
Non conoscendo ne il circuito che hai realizzato, ne i componenti usati, ne il codice posso solo indovinare.
Quello che mi viene in mente é che il motore si ferma non nella stessa posizione rispetto i microstepps. Ciao Uwe

uwefed:
Per passi interi devi mettere MS1,MS2 e MS3 a massa.
Non conoscendo ne il circuito che hai realizzato, ne i componenti usati, ne il codice posso solo indovinare.
Quello che mi viene in mente é che il motore si ferma non nella stessa posizione rispetto i microstepps. Ciao Uwe

Ok li metto a massa!

Allora ho un arduino1 e una Bigeasydrive ed ho seguito questo schema:

Con questo codice

//////////////////////////////////////////////////////////////////
//©2011 bildr
//Released under the MIT License - Please reuse change and share
//Using the easy stepper with your arduino
//use rotate and/or rotateDeg to controll stepper motor
//speed is any number from .01 -> 1 with 1 being fastest - 
//Slower Speed == Stronger movement
/////////////////////////////////////////////////////////////////

#define DIR_PIN 2
#define STEP_PIN 3

void setup() {
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
} 

void loop(){ 

  //rotate a specific number of degrees 
  rotateDeg(360, 1);
  delay(1000);

  rotateDeg(-360, .1);  //reverse
  delay(1000); 

  //rotate a specific number of microsteps (8 microsteps per step)
  //a 200 step stepper would take 1600 micro steps for one full revolution
  rotate(1600, .5);
  delay(1000); 

  rotate(-1600, .25); //reverse
  delay(1000);
}

void rotate(int steps, float speed){
  //rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
  //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  int dir = (steps > 0)? HIGH:LOW;
  steps = abs(steps);

  digitalWrite(DIR_PIN,dir); 

  float usDelay = (1/speed) * 70;

  for(int i=0; i < steps; i++){
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(usDelay); 

    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(usDelay);
  }
} 

void rotateDeg(float deg, float speed){
  //rotate a specific number of degrees (negitive for reverse movement)
  //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  int dir = (deg > 0)? HIGH:LOW;
  digitalWrite(DIR_PIN,dir); 

  int steps = abs(deg)*(1/0.225);
  float usDelay = (1/speed) * 70;

  for(int i=0; i < steps; i++){
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(usDelay); 

    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(usDelay);
  }
}

di questo link:
http://bildr.org/2011/06/easydriver/

Per aiutarmi hai bisogno di sapere altro?Ti prego fammi sapere perchè sono ad un passo per finire il mio progetto ma con questo incoveniente sono bloccato.
Grazie mille in anticipo!!!! XD

Chiedi del aiuto ma tralasci le informazioni utili.
Quale motore stai usando e che tensione e corrente massima ha l'alimentatore.
Ciao Uwe

uwefed:
Chiedi del aiuto ma tralasci le informazioni utili.
Quale motore stai usando e che tensione e corrente massima ha l'alimentatore.
Ciao Uwe

Scusami ma non ho idea di cosa sia essenziale come informazioni :drooling_face:

allora
alimentazione da batteria 12v 100A tramite accendisigari

il motore e:
Product Description
This NEMA-23 stepper motor that has fine resolution and high torque.
Motor Controller and Connection
The 3308 stepper motor connects to the 1063 - PhidgetStepper Bipolar 1-Motor.
The following table shows how to connect the motor wires to the board connectors to produce a clockwise rotation in the stepper motor when increasing position. To wire for counter-clockwise rotation when increasing position, reverse the red and blue wires.
Wire Color Black Green Red Blue
Board Connector A B C D
Note: Make sure to unplug the power cord from the 1063 before switching wires around.
Resources
Wantai Data Sheet
Mechanical Drawing

Warning
Connecting the motor directly to a power supply will destroy the motor and void the warranty. If you want to check your motor make sure it is connected to a constant current / chopper drive controller. Item Details (Right Column)
Product Specifications
Characteristic Value
Step Angle 0.9°
Step Accuracy 5%

Holding Torque 9 kg-cm / 7.81 lb-in
Coil Resistance 4 Ohms
Rated Current 1.7A

Motor Length 50mm
Mounting Plate Size NEMA-23
Shaft Diameter 6.35mm
Weight 580g
Number of Leads 4
Product Specifications
Characteristic Value
Step Angle 0.9°
Step Accuracy 5%

Holding Torque 9 kg-cm / 7.81 lb-in
Coil Resistance 4 Ohms
Rated Current 1.7A

Motor Length 50mm
Mounting Plate Size NEMA-23
Shaft Diameter 6.35mm
Weight 580g
Number of Leads 4
?
Product Features
Fine Resolution and High Torque
NEMA-23 Bipolar 4-wire
Step angle: 0.9°
Holding Torque: 9 Kg-cm @ 1.7 Amps
?

La batteria da macchina ha forse 100Ah ma non 100A. Comunque non é quello il problema.
Il problema é, come Ti scrissi in una risposta precedente, che la tensione é tropo piccola. 12V con un motore che ha una tensione nominale di (4 Ohm per 1,7A) 6,8V. Devi usare un alimentazione almeno da 24V meglio 30V che puó dare 3A. La spiegazione Ti ho scritto in: Motore Passo passo 1.7A in standby vibra e fa rumori leggeri - #3 by uwefed - Generale - Arduino Forum
Ciao Uwe

uwefed:
La batteria da macchina ha forse 100Ah ma non 100A. Comunque non é quello il problema.
Il problema é, come Ti scrissi in una risposta precedente, che la tensione é tropo piccola. 12V con un motore che ha una tensione nominale di (4 Ohm per 1,7A) 6,8V. Devi usare un alimentazione almeno da 24V meglio 30V che puó dare 3A. La spiegazione Ti ho scritto in: Motore Passo passo 1.7A in standby vibra e fa rumori leggeri - #3 by uwefed - Generale - Arduino Forum
Ciao Uwe

Grazie per la pazienza Uwe proverò il 24 e poi ti faccio sapere. :slight_smile:

ok ci sentiamo
Ciao Uwe

ciao a tutti :smiley:

aspettate un secondo, io ho una grande esperienza pluriennale sulla gestione di motori stepper NEMA23, ho dato una rapida occhiata a questo post...
il problema maggiore che mi salta all'occhio è che l'alimentazione del circuito di potenza che alimenta gli stepper NON DEVE rispettale la legge di homs (v=ri), si tratta di alimentazioni completamente differenti, per utilizzare al meglio un motore stepper, esso dev'essere alimentato ALMENO a V=10(R*I).

quindi, se il tuo motore NEMA23 ha una resistenza di fase di 4,5hom ed una corrente di fase di 1A, dovrai alimentare il tutto con una tensione pari a 10 volte la tensione nominale, ossia 45V

ok, secondo il Tuo calcolo allora 4 Ohm 1,7A sono 68V
ma il A4988 regge al massimo 35V.

Ciao Uwe

:smiley:

infatti ho dovuto optare per elettroniche di controllo dedicate: http://www.combatprofile400.it/forum/showthread.php?t=368&page=3&pp=10

Salve, scusate se mi intrometto,
ma dato che si parla di microstepping e BigEasyDriver,
ne approfitto...

Quando si parla di microstepping, ci si può aspettare che
effettivamente il motore esegua dei microstep precisi,
mantenendo la posizione ad ogni step?

Sto facendo delle prove usando BigEasyDriver, uno stepper economico da 48 passi,
e alimentando il driver con circa 29V, ma l'unica cosa che sono riuscito ad ottenere
è un sintetizzatore musicale XD

In sostanza, posso sperare di ottenere dei REALI 768 passi dal mio stepper,
oppure ho frainteso completamente il senso del microstepping?

Grazie.

ciao,

io ho effettuato dei video Alessandro Migliorini - YouTube effettivamente più si sale con il numero di step utilizzati, più il motore "canta"...

le possibilità che hai di utilizzare un motore stepper a 48passi/giro sono:

full step = 48passi/giro
1/2 step = 96passi/giro
1/4 step = 192passi/giro
1/8 step = 384passi/giro
1/16step = 768passi/giro

ovvio che a full step avrai un rumore minore, un numero di step inferiore ed una potenza maggiore della versione a 1/16 (768passi/giro)

la coppia massima di un motore stepper si ha utilizzandolo in full step, ma tale scelta spesso è poco consigliabile
gli stepper funzionano a meraviglia da 1/4step fino a microstep (oltre 1/16) ma devono poi essere dimensionati in base alla coppia massima che devono erogare durante il loro funzionamento ed in base al microstep che vuoi utilizzare.

di fatto, più si sale con la selezione della divisione del passo (microstep) più il motore sibila in modo dolce, ma attenzione alla capacità del microcontrollore nell'invio degli impulsi al driver stepper, potrebbe non essere abbastanza veloce e perdere dei passi con il risultato di posizionamenti errati.

un'altra cosa, maggiore è il numero delle divisioni di step che sceglierai, minore sarà la velocità massima e la coppia massima/statica che ti può offrire il motore, guarda i miei video, troverai una differenza abissale dal primo video di due anni fa con motori stepper non corretti per il tipo di meccanica/elettronica utilizzata, ed i video dell'anno scorso con elettronica dimensionata in modo corretto e motori nettamente superiori ai precedenti.

saluti
kattivik76

trementina:
Salve, scusate se mi intrometto,
ma dato che si parla di microstepping e BigEasyDriver,
ne approfitto...

Quando si parla di microstepping, ci si può aspettare che
effettivamente il motore esegua dei microstep precisi,
mantenendo la posizione ad ogni step?

Sto facendo delle prove usando BigEasyDriver, uno stepper economico da 48 passi,
e alimentando il driver con circa 29V, ma l'unica cosa che sono riuscito ad ottenere
è un sintetizzatore musicale XD

In sostanza, posso sperare di ottenere dei REALI 768 passi dal mio stepper,
oppure ho frainteso completamente il senso del microstepping?

Grazie.

Dipende tutto dal motore e dalla resistenza /tensone nominale dei avvolgimenti se 29 V sono abbastanza.

Se funziona sono realmente 768 passi per 360 gradi.

Comunque un motore pilotato a microstepping dovrebbe essere piú silenzioso di uno pilotato con passi interi.

Ciao Uwe