venerdì 7 dicembre 2012

Motorino bipolare

Motorino bipolare comandato con arduino

Descrizione pratica di prova con motorino passo passo bipolare.

Ho trovato questo motorino smontando un obbiettivo per fotocamera digitale.






Sabato  sono andato alla fiera di Forlì, nella speranza di trovare materiale interessante per esperimenti con arduino.



In effetti la mostra  ha in parte deluso le aspettative, molti banchi proponevano materiale nuovo di largo consumo oppure gadget natalizi e non.

In un banco con tutto materiale difettoso ho visto una scatola piena di obbiettivi difettosi o guasti a due euro l'uno.

Non sapendo bene come fossero fatti ne ho presi qualcuno.

Ho provveduto allo smontaggio con piccoli cacciaviti, ed ho fatto una serie di foto per condividere con chi mi legge questa esperienza.

Purtroppo le foto non rendono bene i dettagli.

Ho trovato tutto l'insieme ben progettato e realizzato, ho potuto smontare ogni pezzo senza dover rompere o staccare colla.

Interessanti sono i piccoli connettori del cavetto flessibile ma resistente sono dei piccoli attacchi a baionetta che si sbloccano alzando la chiusura e quindi si sfila con facilità il cavetto con i contatti.

Il cavetto che porta al sensore contiene sulla sua superficie dei componenti smd una miniaturizzazione notevole.

Poi ho trovato un motore passo passo probabilmente addetto allo zoom (con questo farò la prova di controllo con arduino).

Sempre collegati con lo stesso cavetto ci sono altri piccoli componenti ma non so dirvi cosa siano anzi chi sa commenti pure è benvenuto.

In fondo al cavetto un motorino in cc di tipo normale che sarà incaricato di aprire l'obbiettivo.

Altri due piccolissimi motorini muovono in x e y il telaietto dove era fissato il sensore e questi sono piccoli davvero. ( una specie di mini plotter).

Una cosa bellissima è il diaframma ci sono tre piccole elettrocalamite che muovono altrettante piccole levette che azionano l'apertura e chiusura del diaframma.

ecco qui sotto il video.



Adesso proviamo ad usare il piccolo motore.

 

Per prima cosa devo ringraziare Mauro Alfieri per i sui post sui motori passo passo ed i motori bipolari. Consiglio a chi come me non sa molto di questi motori di leggersi i suoi post.

La prima cosa dopo la lettura di cui sopra è stato di cercare di capire che motorino avevo trovato.

Ricerche su internet non erano possibili in quanto non si vedeva alcun numero o sigla.

Ma visto che erano 4 i collegamenti, con l'ommetro ho individuato due avvolgimenti e quindi ho pensato che doveva essere un bipolare.

Con una batteria da 3 V ho alimentato le bobine ad una ad una invertendo le polarità come indicato anche da Mauro ed ho avuto conferma ... si muove!

Quindi saldato 4 fili di colore diverso ho nominato le varie fasi. 








A+ A- B+ B- ed ho quindi steso la tabella per il movimento:




A + A - B + B -
Step 1 1 0 0 0
Step 2 0 0 1 0
Step 3 0 1 0 0
Step 4 0 0 0 1



Sul blog di Mauro Alfieri si fa riferimento ad un integrato  SN754410NE ma nel caso del motore in mio possesso era veramente sprecato.

Ho quindi scelto di utilizzare un ponte con 4 transistor per bobina. 

Arduino genera il codice 0 or 1 sulla base del transistor BC547 che andrà in conduzione gli altri vengono interdetti.
Effettivamente saranno due i transistor da attivare seguendo quindi la seguente tabella ( vedi schema più sotto.



A + A - B + B -
Step 1 1 (Q1 e Q4) 0 0 0
Step 2 0 0 1 (Q5 e Q8) 0
Step 3 0 1 (Q2 e Q3) 0 0
Step 4 0 0 0 1 ( Q6 e Q7)


scarica il file pdf dello schema

schema ponte con 8 transistor





sketch per arduino controllo bipolare

Il software è la semplice attuazione della tabella più sopra per il senso orario.

Si inverte la sequenza per il senso antiorario.

i commenti inseriti dovrebbero essere sufficienti




/* Sergio & Adriano Prenleloup
  4 Dicembre 2012
 
  Prova motore bipolare
 
  si usa piccolo circuito ponte con 8 transistor BC547
 
  versione 1.1
 
  */


// corrispondenza basi dei transistor con pin arduino

// TA sono i 4 transistor bobina A+ A-

// TB sono i 4 transistor bobina B+ B-

int TA_1 = 0;
int TA_2 = 1;
int TA_3 = 2;
int TA_4 = 3;

int TB_5 = 4;
int TB_6 = 5;
int TB_7 = 6;
int TB_8 = 7;

int velocita = 100;


void setup() {
  pinMode(TA_1, OUTPUT);
  pinMode(TA_2, OUTPUT);
  pinMode(TA_3, OUTPUT);
  pinMode(TA_4, OUTPUT);
  pinMode(TB_5, OUTPUT);
  pinMode(TB_6, OUTPUT);
  pinMode(TB_7, OUTPUT);
  pinMode(TB_8, OUTPUT);

 // STOP
  digitalWrite(TA_1, LOW);
  digitalWrite(TA_4, LOW);
 
  digitalWrite(TA_2, LOW);
  digitalWrite(TA_3, LOW);
 
  digitalWrite(TB_5, LOW);
  digitalWrite(TB_8, LOW);
 
  digitalWrite(TB_6, LOW);
  digitalWrite(TB_7, LOW);
 
 
}



void gira_Orario()
{
  // STEP 1
  digitalWrite(TA_1, HIGH);
  digitalWrite(TA_4, HIGH);
 
  digitalWrite(TA_2, LOW);
  digitalWrite(TA_3, LOW);
 
  digitalWrite(TB_5, LOW);
  digitalWrite(TB_8, LOW);
 
  digitalWrite(TB_6, LOW);
  digitalWrite(TB_7, LOW);
 
  delay(velocita);
 
  // STEP 2
  digitalWrite(TA_1, LOW);
  digitalWrite(TA_4, LOW);
 
  digitalWrite(TA_2, LOW);
  digitalWrite(TA_3, LOW);
 
  digitalWrite(TB_5, HIGH);
  digitalWrite(TB_8, HIGH);
 
  digitalWrite(TB_6, LOW);
  digitalWrite(TB_7, LOW);

  delay(velocita);
 
  //STEP 3
 
  digitalWrite(TA_1, LOW);
  digitalWrite(TA_4, LOW);
 
  digitalWrite(TA_2, HIGH);
  digitalWrite(TA_3, HIGH);
 
  digitalWrite(TB_5, LOW);
  digitalWrite(TB_8, LOW);
 
  digitalWrite(TB_6, LOW);
  digitalWrite(TB_7, LOW);
  delay(velocita);
 
  // STEP 4
 
  digitalWrite(TA_1, LOW);
  digitalWrite(TA_4, LOW);
 
  digitalWrite(TA_2, LOW);
  digitalWrite(TA_3, LOW);
 
  digitalWrite(TB_5, LOW);
  digitalWrite(TB_8, LOW);
 
  digitalWrite(TB_6, HIGH);
  digitalWrite(TB_7, HIGH);
  delay(velocita);
  }
 
 
  void gira_Antiorario()
  {
 
  // STEP 1 antiorario
 
  digitalWrite(TA_1, LOW);
  digitalWrite(TA_4, LOW);
 
  digitalWrite(TA_2, LOW);
  digitalWrite(TA_3, LOW);
 
  digitalWrite(TB_5, LOW);
  digitalWrite(TB_8, LOW);
 
  digitalWrite(TB_6, HIGH);
  digitalWrite(TB_7, HIGH);
  delay(velocita);
 
   //STEP 2 antiorario
 
  digitalWrite(TA_1, LOW);
  digitalWrite(TA_4, LOW);
 
  digitalWrite(TA_2, HIGH);
  digitalWrite(TA_3, HIGH);
 
  digitalWrite(TB_5, LOW);
  digitalWrite(TB_8, LOW);
 
  digitalWrite(TB_6, LOW);
  digitalWrite(TB_7, LOW);
  delay(velocita);
 
   // STEP 3 antiorario
  digitalWrite(TA_1, LOW);
  digitalWrite(TA_4, LOW);
 
  digitalWrite(TA_2, LOW);
  digitalWrite(TA_3, LOW);
 
  digitalWrite(TB_5, HIGH);
  digitalWrite(TB_8, HIGH);
 
  digitalWrite(TB_6, LOW);
  digitalWrite(TB_7, LOW);

  delay(velocita);
 
    // STEP 4 antiorario
  digitalWrite(TA_1, HIGH);
  digitalWrite(TA_4, HIGH);
 
  digitalWrite(TA_2, LOW);
  digitalWrite(TA_3, LOW);
 
  digitalWrite(TB_5, LOW);
  digitalWrite(TB_8, LOW);
 
  digitalWrite(TB_6, LOW);
  digitalWrite(TB_7, LOW);
 
  delay(velocita);
 
  }
 
void giraStop()
{
  // STOP
  digitalWrite(TA_1, LOW);
  digitalWrite(TA_4, LOW);
 
  digitalWrite(TA_2, LOW);
  digitalWrite(TA_3, LOW);
 
  digitalWrite(TB_5, LOW);
  digitalWrite(TB_8, LOW);
 
  digitalWrite(TB_6, LOW);
  digitalWrite(TB_7, LOW);
  }
 
 
 
 
void loop() {
  for ( int i = 0; i<= 10; i++)
  {
  gira_Orario();
  }
  delay (100);
  giraStop();
 
  for ( int i = 0; i<= 10; i++)
  {
    gira_Antiorario();
  }
  giraStop();
  delay (100);
}



ecco qui sotto nel filmato il risultato.



Ringrazio tutti gli autori di articoli sui motori passo passo e tutti coloro che invieranno un commento su questo post.

   Buon lavoro a tutti 
Sergio


Attenzione!!

L'autore di queste pagine non si ritiene responsabile per eventuali danni diretti o indiretti causati a persone o cose.

Prendete ogni precauzione per evitare anche il minimo rischio di scosse elettriche.
Si avverte che:
Tensioni alternate maggiori di 25 V sono pericolose.
Tensioni continue maggiori di 50 V sono pericolose.

Warning!

The author of these pages will not be liable for any direct or indirect damage caused to persons or property.

Take any precaution to avoid even the slightest risk of electric shock.
Please be aware that:
AC voltages greater than 25 V are dangerous.
CC Voltages greater than 50 V are dangerous.


2 commenti:

  1. Sergio, che ne pensi di questo?
    http://forum.camperonline.it/Arduino-voltmetro-amp-watt-livelli_173603?whichpage=1&#3061825
    ciao
    paolo

    RispondiElimina
    Risposte
    1. Ciao!

      Ho letto il forum.

      La lettura sul display a 4 o più righe è semplice da relizzare e forse sono d'accordo con chi pensa che arduino sia un po sprecato ma dato comunque il basso costo è da valutare.

      Molto più interessante è utilizzare un display a colori e simulare a video i vari strumenti necessari.

      In ogni caso un progetto puo partire dalla fase 1 ( relizzare un primo strumentino con display a caratteri alfanumerici)

      fase 2 realizzare il display grafico. ( arduino potrebbe inviare i dati anche attraverso una seriale )

      Ci studio un poco e ti farò sapere

      Anche Adriano potrebbe essere interessato.

      Sergio

      Elimina

Vi ringrazio per la lettura e vi invito al prossimo post.
Se il post vi è stato utile, vi è piaciuto oppure no, scrivete un commento.

Un saluto a tutti.
Sergio

Copyright - Condizioni d’uso - Disclaimer
http://avventurarduino.blogspot.it/2012/10/inizia-lavventura-arduino-12-settembre.html