CONTROLLO MOTORE HARD DISK

Schema utile a far Girare il Motore di un Hard Disk e Controllare la sua Velocità e la sua Rotazione grazie ad un Microcontrollore…

 

 

 

 



 

INTRO

Il motore usato all’interno degli hard disk è un motore brushless a tre fasi detto BLDC con configurazione a stella, dove BLDC vuol dire BrushLess a Corrente Diretta e la configurazione a stella fa riferimento alla connessione degli avvolgimenti. Offre vari vantaggi come una maggiore coppia, alta efficienza e maggiore velocità. Lo schema generale di un motore BLDC a stella è il seguente:

Vi è uno statore con tre poli e per ogni polo vi è un avvolgimento. Grazie ai magneti permanenti e al campo generato dagli avvolgimenti  il rotore gira. I tre avvolgimenti  possono essere schematizzati come tre induttori come da figura. Si hanno quindi 4 contatti di cui tre sono gli avvolgimenti e uno il comune che serve per eseguire varie misure.

Quando si smonta un hard disk si nota che sul motore vi sono 4 contatti, bisogna identificare i tre contatti degli avvolgimenti. Serve un multimetro. Si mette un puntale sul primo pin e si misura la resistenza con gli altri tre, poi sul secondo pin e si misura la resistenza con gli altri due e infine sul terzo pin e si misura la resistenza con il quarto pin. Si avranno sei misure di resistenza, 3 avranno un valore n Ohm mentre 3 avranno un valore 2n Ohm. Le misure di valore n Ohm sono tra il comune e i tre poli degli avvolgimenti, mente le misure di valore 2n Ohm sono i poli dei tre avvolgimenti, quindi bisogna saldare tre fili sui pin dei poli per poi inviarli al circuito di controllo.

Con il seguente circuito si può accendere o spegnere la rotazione del motore, scegliere se farlo ruotare in senso orario o antiorario e modificare la velocità.

 





 

CODICE

Il codice è il seguente:

#define onoff PORTC.F7
#define direzione PORTC.F6                     //Definizione ingressi
unsigned int velocita;                         //Definizione variabili
char i;

Vdelay(unsigned int Velocita){                 //Ritardo programmabile
for(i = 0; i < Velocita; i++) Delay_us(500);   //esegui "velocita" volte 100us di ritardo
}                                              //Modificare valore delay per + velocità

void main() {                                  //Programma principale
  TRISB = 0b00000000;                          //PORTB uscite
  TRISC = 0b11000000;                          //PORTA ingressi
  ADC_Init();                                  //Inizializza ADC

  while(1){                                    //Ciclo infinito
    if(onoff){                                 //Se tasto accensione on allora
     Velocita = ADC_Get_Sample(0);            //Leggi ADC
      Velocita = Velocita >> 5;                //Dividi il valore per 32
      PORTC = Velocita;
      Velocita = Velocita + 10;                //Aggiugi 10 per avere ritardo minimo 1ms
      if(direzione){                           //Se la direzione è 1

        PORTB = 0b01101000;                    //sequenza logica per girare in senso orario
        Vdelay(Velocita);                      //Ritardo per settare la velocità
        PORTB = 0b01100100;                    //P-mos1, P-mos2, P-mos3, N-mos1, N-mos2, N-mos3, nc, nc
        Vdelay(Velocita);
        PORTB = 0b10100100;
        Vdelay(Velocita);
        PORTB = 0b10110000;
        Vdelay(Velocita);
        PORTB = 0b11010000;
        Vdelay(Velocita);
        PORTB = 0b11001000;
        Vdelay(Velocita);
      }
      else{                                    //Se la direzione è 0
        PORTB = 0b11001000;                    //sequenza logica giro antiorario
        Vdelay(Velocita);
        PORTB = 0b11010000;
        Vdelay(Velocita);
        PORTB = 0b10110000;
        Vdelay(Velocita);
        PORTB = 0b10100100;
        Vdelay(Velocita);
        PORTB = 0b01100100;
        Vdelay(Velocita);
        PORTB = 0b01101000;
        Vdelay(Velocita);
      }
    }
    else PORTB = 0b11100000;                   //Se spento spegni tutti i mosfet
  }
}

Si vanno a definire gli ingressi di controllo di rotazione e poi si inizializzano due variabili che si usano nel programma. Si inizializzano ingressi e uscite e l’ADC che si usa per variare la velocità. Nel ciclo infinito si controlla se la rotazione è attiva o no e se attiva si legge l’ADC, si divide il valore convertito e si somma 10, tutto questo per avere un valore di ritardo con valore opportuno  che poi viene poi inserito tra gli step di controllo.

In base alla direzione di rotazione si va ad eseguire un pattern o un altro in uscita e ogni pattern accende o spegne determinati mosfet  nel driver. In base alla velocità  si va ad inserire un ritardo tra le sequenze del pattern. Se il motore è spento si ha in uscita una configurazione che spegne tutti i mosfet.

Per avere un delay programmabile si usa un delay con valore di 100uS e poi si va a ripetere per “i” volte, dove le volte che viene ripetuto dipende dal valore di velocità. Maggiore è il delay tra le sequenze del pattern minore è la velocità.
 
SCHEMA

Lo schema del controllore è il seguente:

La tensione di alimentazione e a 5V stabilizzati e continui con una corrente di almeno 2A. Il microcontrollore PIC18F252 è alimentato tramite i pin 20 (tensione positiva), 19 e 8 (terminale negativo o GND), viene mantenuto in funzione tramite la resistenza R3 e genera la frequenza di funzionamento grazie al cristallo di quarzo da 4MHz e i condensatori da 22pF.

I controlli sono rispettivamente collegati a RA0 per il controllo della velocità, RC= per il controllo di accensione, spegnimento mentre per la direzione si ha uno switch con R4 come resistenza di pull-up connesso al pin RC1.

Le uscite RB2, RB3 ed RB4 sono connesse rispettivamente ai GATE degli N-MOS del primo, secondo e terzo ramo mentre RB5, RB6 ed RB7 sono connessi ai P-MOS rispettivamente del primo secondo e terzo ramo del driver. Il driver è così fatto:

I source degli N-MOS sono connessi tutti a massa mente i drain sono connessi ognuno ad un polo degli avvolgimenti mentre i source dei P-MOS sono connessi alla tensione positiva VCC e i drain ai poli del motore. Si forma quindi un ponte trifase per motori brusheless .

Lo schema montato su breadboard e il video dimostrativo sono i seguenti:

Si potrebbe usare una alimentazione a 12V per avere una coppia maggiore, solo che il microcontrollore non può essere alimentato a 12V. Gli N-MOS possono essere pilotati da una tensione logica 0-5V mente i P-MOS no, serve un driver per avere tensioni di controllo 0-12V.

 

DOWNLOAD

Potete scaricare la simulazione il codice scritto con MIKROC e la simulazione con Proteus al seguente LINK!!!



 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook