miercuri, 5 februarie 2014

DRIVER MOTOR CU MOS FET PENTRU ARDUINO


     Pentru ca n-am mai pus mana de ceva vreme pe letcon si pentru ca vreau sa incep sa fac ceva experimente cu motoare m-am gandit sa le combin pe amandoua realizand un driver simplu pentru un motor de curent contiuu, driver pe care  doresc sa vi-l prezint. Cablajul, schema si amplasarea componentelor se pot descarca de aici.

     Montajul dupa cum se poate vedea in schema de mai jos este unul simplu. Am folosit pentru realizarea sa piese pe care le aveam prin "cutia cu maimute", deci nu este nimic pretentios. Ideea cu optocuplorul nu este asa de "florile marului" ci a fost implementata pentru a izola motorul de Arduino. Eu unul am patit-o la un montaj cu PIC : motorul era atat de zgomotos incat uneori pic-ul se reseta. 
    Pentru a functiona corect MOS-ul trebuie alimentat la o tensiune de minim 9V. Ideea este sa ducem tranzistorul in zona de "saturatie" pentru ca acolo rezistenta dintre drena si sursa este foarte mica iar caldura disipata de MOS este foarte mica, pe romaneste nu se incinge.

Schema electronica


    MOS FET-ul este blocat atat timp cat Q2 este blocat iar Q2 este blocat atat timp cat tranzistorul din optocuplor este blocat. Odata aplicat semnalul PWM la pinul 2 (si la pinul 3 vom vedea de ce unii pini sunt dubli ) Q3 intra in saturatie. In acest moment daca pe pinul 7 cu ajutorul Arduino se aplica 5V(digitalWrite())
se vor intampla urmatoarele: catodul ledului din optocuplor este pus la masa la fel cum anodul acestuia este adus la un potential de 5V, tranzistorul din optocuplor se deschide si intra in saturatie,urmeaza saturarea lui Q2  care are ca efect deschiderea MOS-ului si mai departe pornirea motorului.
     Deci:

  • PWM-ul este aplicat contiuu;
  • motorul porneste numai daca pe pinul 7 se aplica 5V;            

    Pinii ARDUINO GROUND, ARDUINO PWM, SI ARDUINO VCC au fost dublati deoarece daca se doreste utilizarea mai multor motoare aceste semnale sa poata fi transferate de la un modul  la altul prin fire.

    In ceea ce priveste Arduino codul este simplu si intuitiv: pentru fiecare apasare a unui buton se incrementeaza factorul de umplere de la 0 pana la o valoare stabiliata in linia de cod 22. Trebuie avut in vedere faptul ca daca utilizati un motor care functioneaza la o tensiune mai mica de 9V atunci va trebui sa limitati facorul de umplere al PWM-ului. Eu am testat montajele cu un motor de 4.5V asa ca nu am trecut de ~4.5V.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int pwm =8;
int buton=5;
int rate=0;
int led =24;
int ctrl =26;
boolean test;
void setup(){
  //pinMode(pwm,OUTPUT);
  pinMode(buton,INPUT);
  pinMode(led,OUTPUT);
  pinMode(ctrl,OUTPUT);
  digitalWrite(ctrl,HIGH);
  Serial.begin(9600);
}

void loop(){
  analogWrite(pwm,rate);
  while(!digitalRead(buton)){
    digitalWrite(led,HIGH);
    test=true;
  }
  if(test&&rate!=125){
    digitalWrite(led,LOW);
    rate=rate+5;
    test=false;
    Serial.println(rate);
  }
}

   La final sa vedem ceva poze cu montajele si procesul de fabricatie :) :



MASINA MEA DE FACUT CABLAJE



CABLAJUL PRINTAT PE COALA LUCIOASA GATA SA FIE TRECUT PRIN CUPTOR


PROCESUL PROPRIU-ZIS

CE A IESIT ! (M-AM GRABIT, DE OBICEI IESE PERFECT)

DUPA CURATARE TONNER

MASINA DE GAURIT :)
PRODUSUL FINIT!

    Spor la mesterit !!

Un comentariu: