Krmiljenje enosmernega, DC motorčka

DC motorček je enosmerni motorček. Ko nanj priključimo enosmerno napetost, se zaradi menjavanja smeri magnetnega polja vrti. Zgrajen je iz mirujočega, statorskegaželeznega jedra, na katerem se nahaja vzbujalno navitje za ustvarjanje magnetnega polja. Med magnetnimi poli statorja se nahaja rotor z navitjem, povezanim preko komutatorja in ščetk na zunanji vir enosmerne napetosti. Če menjamo polariteto priključene enosmerne napetosti, se motorček vrti v drugo smer.

Za spreminjanje polaritete priključene napetosti in s tem spreminjanje smeri vrtenja DC motorčka uporabimo H-mostiček v integriranem vezju L293.

H-mostiček:

Princip delovanja vezja, po katerem ima ime H-mostiček vidimo na sliki 1.

Slika 1: Prikaz vezja za spreminjanje polaritete napetosti na priključkih DC motorčka, H-mostiček.


Vezje H-mostička vsebuje štiri stikala: A, B, C in D. S preklapljanjem teh stikal motorček krmilimo na različne načine:

H-mostiček lahko izdelamo z različnimi elementi kot so releji, MOSFET, FET ali bipolarnimi BJT tranzistorji. Če pa naše zahteve po tokovni porabi niso prevelike, če želimo krmiliti majhne DC motorčke, ki ne potrebujejo večjih tokov, lahko enostavno uporabimo integrirano vezje L293.

Integrirano vezje L293:

Integrirano vezje L293 je namenjeno za krmiljenje dveh enosmernih motorčkov, da se lahko vrtita v obe smeri. Mi bomo krmilili en motorček. Nanj lahko priključimo motorček, ki za svoje delovanje ne potrebuje večjega toka od 1 A (L293D 600 mA) in za napetosti od 4,5 V do 36 V. Vsi vhodi so združljivi s TTL signali. Za zaščito ima L293 vgrajene hitre diode, ki ščitijo integrirano vezje pred napetostnimi konicami, ki nastanejo pri vklopu in izklopu motorčka (predvsem pri izklopu). Če se L293 segreje čez mejo 70°C, vgrajeni senzorji ustavijo delovanje motorčka.

Slika 2: Priključitev DC motorčkov na L293 (vir: Texas Instruments)

Motorček bomo priključili na pina 3 in 6, krmilili pa ga bomo s pini 1, 2 in 7. Na pin 8 (Vcc2) priključimo napetost, ki jo potrebuje DC motorček za delovanje, na pin 16 (Vcc1) pa napetost za gonilnik L293, ki znaša 5 V.

Pina 1 in 9 sta enable pina. Povezana morata biti na +5 V (logična 1), če želimo da se bosta motorčka vrtela. Ker imamo mi priključen le en motorček, priključen na levo stran, poglejmo način krmiljenja motorčka (enako velja za drugi motorček):

Spreminjanje smeri vrtenja DC motorčka preizkusimo s priključitvijo tipk. S prvo tipko spreminjamo logično stanje na pinu 2, z drugo tipko pa spreminjamo logični stanje na pinu 7. Načrt priključitve prikazuje slika 3. Upora R1 in R2 sta pull down upora vrednosti 10 kohm in skrbita za to, da sta pina 2 in 7 v stanju logične 0, ko tipki nista sklenjeni. Če pritisnemo na katero od tipk, pošljemo na ustrezni pin napetost +5 V (logična 1).

Slika 3: Krmiljenje smeri vrtenja DC motorčka s tipkama

Krmiljenje DC motorčka z Arduino Uno:

Smer vrtenja DC motorčka spreminjamo s pritiskom na eno oziroma drugo tipko, s potenciometrom pa spreminjamo hitrost vrtenja DC motorčka.

 /*

   Krmiljenje DC motorčka.

   S tipkama krmilimo smer vrtenja, s potenciometrom pa hitrost vrtenja DC motorčka (spreminjamo PWM).

   Avtor: Milan Ivič

   sept. 2015

 */

 int Tipka1 = A0;               //Tipka za smer vrtenja levo (proti smeri urinega kazalca).

 int Tipka2 = A1;               //Tipka za smer vrtenja desno (v smeri urinega kazalca).

 int Potenciometer = A2;   //Porenciometer za spreminjanje hitrosti vrtenja.

 int Motor_Pin2 = 5;          //Krmilni pin 2 na gonilniku L293.

 int Motor_Pin7 = 6;          //Krmilni pin 7 na gonilniku L293.

 int Vrednost;                  //Spremenljivka, kamor se shranjuje vrednost potenciometra.

 void setup()

 {

   //Nastavitev vhodnih in izhodnih pinov:

   pinMode(Tipka1, INPUT);

   pinMode(Tipka2, INPUT);

   pinMode(Potenciometer, INPUT);

   pinMode(Motor_Pin2, OUTPUT);

   pinMode(Motor_Pin7, OUTPUT);

 

   //Nastavimo Timer0 na frekvenco 61 Hz (Če naslednji dve vrstici izpustimo, imamo frekvenco 970 Hz).

   //Pri frekvenci 61 Hz lažje reguliramo nizke vrtljaje DC motorčka.

   TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM01) | _BV(WGM00);

   TCCR0B = _BV(CS00) | _BV(CS02);

 }

 void loop()

 {

   if(digitalRead(Tipka1) == HIGH)              //Preverjamo ali je Tipka1 sklenjena.

   {

     Vrednost = analogRead(Potenciometer);    //Preberemo vrednost potenciometra.

     Vrtenje_proti_smeri_urinega_kazalca();     //Klicanje funkcije.

   }

    if(digitalRead(Tipka2) == HIGH)             //Preverjamo ali je Tipka2 sklenjena.

    {

      Vrednost = analogRead(Potenciometer);

      Vrtenje_v_smeri_urinega_kazalca();

    }

    if((digitalRead(Tipka1) == LOW) && (digitalRead(Tipka2) == LOW))       //Ali ni nobena tipka sklenjena?

    {

      Motor_stop();

    }

 }

 void Vrtenje_proti_smeri_urinega_kazalca()

 {

   //Na pin 2 gonilnika L293 pripeljemo PWM signal, na pin 7 gonilnika L293 pa logično 0:

   analogWrite(Motor_Pin2, map(Vrednost, 0, 1023, 0, 255));        //Vrednost iz območja 0 - 1023 v območje 0 - 255.

   analogWrite(Motor_Pin7, 0);                                     //Pin 7 gonilnika L293 postavimo na 0.

 }

 void Vrtenje_v_smeri_urinega_kazalca()

 {

   //Na pin 7 gonilnika L293 pripeljemo PWM signal, na pin 2 gonilnika L293 pa logično 0:

   analogWrite(Motor_Pin7, map(Vrednost, 0, 1023, 0, 255));       //Vrednost iz območja 0 - 1023 v območje 0 - 255.

   analogWrite(Motor_Pin2, 0);                                    //Pin 2 gonilnika L293 postavimo na 0.

 }

 void Motor_stop()

 {

   //Oba krmilna pina  na gonilniku L293 (pin 2 in pin 7) postavimo na 0 => vrtenje DC motorčka se ustavi:

   analogWrite(Motor_Pin7, 0);

   analogWrite(Motor_Pin2, 0);

 }

Tipki in potenciometer so priključeni na analogne vhode razvojne plošče Arduino Uno. Krmilna pina gonilnika L293, ki določata smer vrtenja, pa sta priključena na pin 5 in na pin 6 razvojne plošče Arduino Uno. Ta dva pina sta izhodna PWM pina časovnika Timer0. Z ustrezno nastavitvijo registrov TCCR0A in TCCR0B smo spremenili frekvenco PWM signala na teh dveh pinih na 61 Hz (glej Timerji v Arduino Uno).

V odvisnosti od stanja tipk iz glavne zanke kličemo funkcije:

V vezju uporabimo pull-down upora vrednosti 10 kohm in potenciometer vrednosti 10 kohm.

Slika 4: Priključitev elementov vezja na razvojno ploščo Arduino Uno

Krmiljenje DC motorčka z LabVIEW in Arduino Uno:

Na razvojno ploščo Arduino Uno naložimo LIFA_Base, kjer pod void setup() dodamo spremenjene lastnosti časovnika Timer0, da dosežemo frekvenco PWM signala na pinu 5  v vrednosti 61 Hz. Na pin 5 razvojne plošče Arduino Uno namreč priklopimo Enable pin gonilnika L293.

Slika 5: Nastavitev registrov časovnika Timer0 za frekvenco PWM 61 Hz

V odvisnosti od stanja pina Enable in kontrolnih pinov 2 in 7 gonilnika L293, krmilimo DC motorček. Elemente priključimo na Arduino Uno kot prikazuje slika 6.

Slika 6: Priključitev elementov vezja na razvojno ploščo Arduino Uno

Poglejmo še Blok diagram in Čelno ploščo programa za krmiljenje enega DC motorčka, izdelanega v okolju LabVIEW. Krmilimo lahko smer vrtenja ter hitrost vrtenja DC motorčka.

Slika 6: Priključitev elementov vezja na razvojno ploščo Arduino Uno

Slika 8: Čelna plošča krmiljenja DC motorčka

V levem okvirju Flat sekvence nastavimo začetne nastavitve, COM vrata, hitrost prenosa in tip razvojne plošče Arduino.

V sredinske okvirju Flat sekvence imamo dve zanki While, eno za algoritem programa krmiljenja DC motorčka in drugo za Web kamero. Obe zanki While se izvajata neodvisno, za zaustavitev izvajanja obeh hkrati pa uporabimo le en gumb Stop. V ta namen uporabimo lokalno spremenljivko gumba Stop. Z miško se postavimo nad gumb Stop in v njegovem priročnem meniju izberemo Create > Local Variable. Lokalni spremenljivki v priročneem meniju izberemo Change To Read in jo nadomestimo z gumbom Stop v drugi zanki While. Če želimo z gumbom Stop ustaviti izvajanje obeh zank While, moramo gumbu Stop v priročnem meniju spremeniti privzeto nastavitev Operation na Switch until released.

Druga zanka While se nam je avtomatsko kreirala, ko smo na paleti Functions izbrali Vision Acquisition (Functions > Vision and Motion > Vision Express > Vision Acquisition). V kolikor palete Vision and Motion ni na paleti Functions, jo prenesemo iz spleta, razširimo in instaliramo.

Krmilna pina 2 in 7 gonilnika L293 sta priključena na pina 7 in 6 razvojne plošče Arduino Uno, Enable pin 1 gonilnika L293 pa je priključen na pin 5 razvojne plošče Arduino Uno. Zato te pine (5, 6 in 7) z bloki Set Digital Pin Mode.vi določimo kot izhodne. Z gumbama Vrtenje desno in Vrtenje levo spreminjamo digitalno stanje na pinu 6 in pinu 7 Arduino ploščice, zato uporabimo dva bloka Digital Write Pin.vi. Ta dva pina sta povezana z gonilnikom L293, pin 6 Arduino s pinom 7 gonilnika in pin 7 Arduino s pinom 2 gonilnika L293. V odvisnosti od logičnega stanja teh dveh pinov krmilimo smer vrtenja DC motorčka (glej tabelo zgoraj). Na pinu 5 Arduino, ki je povezan z Enable pinom 1 gonilnika L293, generiramo PWM signal (PWM Write Pin.vi), pin 5 Arduino je izhodni PWM pin 8-bitnega časovnika Timer0 Arduino Uno. V odvisnosti od Duty Cycle tega PWM signala se spreminja hitrost vrtenja DC motorčka. Da lahko spremljamo PWM signala na grafu (Waveform Graph) uporabimo virtualni instrument Simulate Signal, ki ga najdemo na paleti Functions > Express > Input > Simulate Signal. V njegovem priročnem meniju izberemo pravokotne signale (Square) in amplitudo 5.

Desni okvir Flat sekvence se izvede po pritisku na gumb Stop. Postavimo Duty Cycle PWM signala na 0, ustavimo komunikacijo z Arduino Uno (Close) ter inicializiramo gumba za izbiro smeri vrtenja DC motorčka, prikaz hitrosti vrtenja DC motorčka in grafični prikaz PWM signala. V priročnih menijih obeh gumbov in indikatorju hitrosti vrtenja izberemo Create > Property Node > Value, jih odložimo v desni okvir Flat sekvence in jim v priročnem meniju parameter Change All To Read spremenimo v Change All To Write. Gumboma na terminalu Value dodelimo vrednost False, indikatorju hitrosti vrtenja pa 0. Tudi grafu Waveform Graph v priročnem meniju izberemo Property Node in mu na vhodnem terninalu Value dodelimo vrednost konstante (Constant). Tej v celoti ali v notranjem večjem okvirju (naš primer) spremenimo pogled v View Cluster As Icon. Prikaz PWM signala na grafu se bo v tem primeru po izklopu virtualnega instrumenta s pritiskom na gumb Stop izbrisal. Če želimo, da se po pritisku na gumb Stop postavi drsnik kontrole Regulacija hitrosti vrtenja na nič, kontroli izberemo lokalno spremenljivko in ji v desnem okvirju Flat sekvence dodelimo vrednost 0.

PID regulacija hitrosti vrtenje DC motorčka:

Regulacija je zaprtozančno vodenje procesa, ki na osnovi primerjave dejanske in želene regulirane veličine na proces vpliva tako, da je napaka čim manjša. Poznamo dva načina delovanja regulacij: sledilno in regulacijsko. Pri sledilnem mora regulacijski sistem zagotoviti, da regulirana veličina dobro sledi referenci, spremembi nastavitvene točke (npr. primerno odzivanje DC motorčka ob spremembah nastavitvene točke). Pri regulacijskem delovanju pa je pomembno predvsem to, da regulator učinkovito odpravlja motnje.

Slika 9: Potek referenčne U(t) in regulirane y(t) veličine pri sledilni regulaciji

SProporcionalno-integralno-diferencialna regulacija ali regulacija PID je najbolj razširjena metoda v procesni industriji. Regulacija je izvedena kot vsota proporcionalnega (P), integralnega (I) in diferencialnega (D) člena. Člen P je neposredno odvisen od trenutne velikosti napake, člen I je odvisen od integrala preteklih napak, člen D pa od hitrosti spreminjanja napake, s katerim lahko deloma predvidimo prihodnje delovanje sistema.

Slika 10: Blok shema regulacije PID

KP = proporcionalni prirastek

KI = integralni prirastek

KD = diferencialni prirastek

e(t) = napaka, ki predstavlja razliko med nastavitveno vrednostjo in vrednostjo procesa, y(t)

Spodnja enačba opisuje delovanje regulacije PID:

Regulator PID ima tri nastavljive parametre: ojačanje KP, integralno časovno konstanto TI in konstanto diferenciranja TD. Referenčno veličino predstavlja nastavitvena vrednost (Set point), to je vrednost, ki jo želimo v našem procesu.

Slika 11: Proporcionalno, integralno in diferencialno delovanje

Pri regulatorju PID delujejo vsi trije členi istočasno, zato je odziv regulacije na spremembo nastavitvene točke rezultanta vseh treh členov.

Slika 12: Blok diagram PID regulacije hitrosti vrtenja DC motorčka

Slika 13: Čelna plošča PID regulacije hitrosti vrtenja DC motorčka.


Median filter: Functions > Programming > Signal Processing > Filters > Median Filter.vi

PID.vi je spodaj v priloženi datoteki pod imenom simplepid.vi, od koder si jo lahko prenesete.