Go Down

Topic: Alimentatore (Read 167 times) previous topic - next topic

1oniudra2

Salve

Ho a disposizione un alimentatore da 30 ampere con il quale alimento 6 driver (microdriver professionali)  collegati a  6 motori passo passo da 1 ampere. Se ne avvio uno noto che la sua velocita' ha un certo valore ma se simultaneamente ne faccio partire altri la velocita' dei motorini diminuisce pur essendo la stessa per tutti.
Mi chiedevo se e' normale in quanto ho un alimentatore da 30 ampere.
Grazie.

Vespamike

I driver li piloti con segnali pwm? In ogni caso la prova del 9 che puoi fare è fare partire 1 motore. Dopo di che, mentre gira, gli colleghi in parallelo un secondo driver e vedi se collegando il secondo motore, cambia la velocità del primo...mentre fai questa prova magari con tutti e 6 i motori contemporaneamente, puoi collegare un voltmetro all'uscita dell'alimentatore per vedere se si crea una caduta significativa oppure no man mano che colleghi tutti e 6 i motori..

1oniudra2

 Salve


I pin che utilizzo sono:
1) 3,4.
2) 5,6.
3) 8,9.
4) 10,11.
5) 12,52.
6) 48,46.

 Aggiungendo motorini passopasso c'e' probabilmente una caduta di tensione, forse e'  l'alimentatore che non
"alimenta" a dovere.La cosa che mi sembra strana e' che avendo terminato un progetto con 5 motori c.c.
(ricavati da tergicristallo della panda) questi non risentono di caduta di tensione e le velocita' non calano.


Vespamike

#3
Nov 07, 2019, 11:04 pm Last Edit: Nov 07, 2019, 11:20 pm by Vespamike
Allora essendo motori stepper la caduta di tensione eventualmente non dovrebbe influire sulla velocità (cosa che noteresti su un motore a spazzole) ma nella coppia. La velocità è data dagli impulsi che il micro fornisce ai driver. Per quello ti ho detto di fare la prova del nove,  collegando i segnali di controllo tutti in parallelo al primo stepper, nel tuo caso pin 3, 4. In questa maniera escludi (se i giri non variano come penso) sia l'alimentatore che i motori e il problema sta nel codice che hai scritto che riporta troppi passaggi e loop che fanno "perdere tempo" al micro e quindi ti rallentato i giri degli stepper...

1oniudra2

Dal punto di vista pratico mi spieghi come posso procedere.
Cioe' dovrei collegare ai pin 3 e 4 i cavetti che sono negli altri  pin(facendo attenzione  alla posizione del DIR e  del Pul) e poi attivarli? E in questo modo controllare se la velocita' del primo stepper varia.
Se varia e' un problema di alimentatore e o di stepper.

 
Il codice e' semplice in quanto al premere di un tasto i comandi vengono mandati via seriale.

 

uwefed

La velocitá dei motori passo passo dipende solo dalla velocitá degli impulsi di pilotaggio del driver. Se l'alimentazione non é sufficente al limite si bloccano ma non vanno mai troppo lentamente.

Visto i sintomi che descrivi dirrei che lo sketch di pilotaggio é scritto male e la frequenza di pilotaggio dipende dal numero di motori pilotati.

Ciao Uwe

1oniudra2

Salve

La situazione e' questa:

Alimentatore che puo' erogare fino a 30 ampere.
Ci sono tre uscite logicamente in parallelo per i 12 volt.Queste uscite alimentano 6 microstep driver,2 driver per uscita.
Ho provato con il voltmetro vedere se ci fosse qualche caduta di tensione ma non risulta.Per maggior sicurezza potrei utilizzare
una uscita sola alla quale collegare i 6 driver e fare un controllo forse piu' accurato ma lo ritengo inutile.
I valori di uscita dell'alimentatore sono 12 volt non stabilizzati perche' a volte scendono un po'tipo 11,8.
Nello skech di arduino in seriale ho provato a mettere step differenti per vedere se il voltmetro poteva cambiare il valore in quanto quelli che terminavano prima la corsa lasciavano "liberi" gli altri che pero' aumentavano la velocita'.

Ti allego lo skech che francamente non mi convince molto anche perche' a parte tutto le velocita' sono sempre basse pur cercando di variare
i tre parametri velocita' accelerazione e v. massima.
Code: [Select]


#include<AccelStepper.h>
AccelStepper primomotore(AccelStepper::FULL2WIRE, 3, 4);
AccelStepper secondomotore(AccelStepper::FULL2WIRE, 5, 6);
AccelStepper terzomotore(AccelStepper::FULL2WIRE, 8, 9);
AccelStepper quartomotore(AccelStepper::FULL2WIRE, 10, 11);
AccelStepper quintomotore(AccelStepper::FULL2WIRE, 12, 52);
AccelStepper sestomotore(AccelStepper::FULL2WIRE, 48, 46);  
 int leggi;
  
 void setup()
 {
 
 Serial.begin(9600);
primomotore.setSpeed(10000);
primomotore.setAcceleration(5000);
primomotore.setMaxSpeed(20000);
secondomotore.setSpeed(10000);
secondomotore.setAcceleration(5000);
secondomotore.setMaxSpeed(20000);
terzomotore.setSpeed(10000);
terzomotore.setAcceleration(5000);
terzomotore.setMaxSpeed(20000);
quartomotore.setSpeed(10000);
 quartomotore.setAcceleration(5000);
 quartomotore.setMaxSpeed(20000);
 quintomotore.setSpeed(10000);
 quintomotore.setAcceleration(5000);
 quintomotore.setMaxSpeed(20000);
sestomotore.setSpeed(10000);
 sestomotore.setAcceleration(5000);
 sestomotore.setMaxSpeed(20000);

  }

  void loop()
  {
    if(Serial.available()>0);
    
 
    leggi=Serial.read();
    if (leggi=='A')
    
    {
     primomotore.move(50000);//360 GRADDI 12800  
      
     Serial.println("MOVIMENTO ORARIO PRIMO MOTORE A");
      
       }

       if (leggi=='B')

     {
        primomotore.move(-12800);
        Serial.println("MOVIMENTO ANTIORARIO PRIMO MOTORE B");
         }

         if(leggi=='C')
         {
          
        secondomotore.move(30000);
         Serial.println("MOVIMENTO ORARIO SECONDO MOTORE C");
          }
          if(leggi=='D')
         {
          
        secondomotore.move(-12800);
         Serial.println("MOVIMENTO ANTIORARIO SECONDO MOTORE D");
          }
        
         if(leggi=='E')
         {
          
        terzomotore.move(30000);
         Serial.println("MOVIMENTO ORARIO TERZO MOTORE E");
          }
          if(leggi=='F')
         {
          
        terzomotore.move(-3000);
         Serial.println("MOVIMENTO ANTIORARIO TERZO MOTORE F");
          }

         if(leggi=='G')
         {
          
        quartomotore.move(60000);
         Serial.println("MOVIMENTO ORARIO QUARTO MOTORE G");
          }
          if(leggi=='H')
         {
          
        quartomotore.move(-12800);
         Serial.println("MOVIMENTO ANTIORARIO QUARTO MOTORE H");
          }

        if(leggi=='I')
         {
          
        quintomotore.move(30000);
         Serial.println("MOVIMENTO ORARIO QUINTO MOTORE I");
          }
          if(leggi=='L')
         {
          
        quintomotore.move(-12800);
         Serial.println("MOVIMENTO ANTIORARIO QUINTO MOTORE L");
          }

        if(leggi=='M')
         {
          
        sestomotore.move(70000);
         Serial.println("MOVIMENTO ORARIO SESTO MOTORE M");
          }
          if(leggi=='N')
         {
          
        sestomotore.move(-12800);
         Serial.println("MOVIMENTO ANTIORARIO SESTO MOTORE N");
          }
          
   primomotore.run();
   secondomotore.run();
   terzomotore.run();
   quartomotore.run();
   quintomotore.run();
   sestomotore.run();    
 }
      
    

Go Up