Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:motor:dc [2015/02/26 13:49] raivo.sellet:examples:motor:dc [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~+<pagebreak>
 ====== Alalisvoolumootor ====== ====== Alalisvoolumootor ======
  
 //Vajalikud teadmised: //Vajalikud teadmised:
 [HW] [[et:hardware:homelab:digi]], [HW] [[et:hardware:homelab:combo]], [HW] [[et:hardware:homelab:digi]], [HW] [[et:hardware:homelab:combo]],
-[AVR] [[et:avr:adc]], [AVR] [[et:avr:timers]], +[AVR] [[et:avr:timers]], [AVR] [[et:avr:adc]], 
 [LIB] [[et:software:homelab:library:module:motor]], [LIB] [[et:software:homelab:library:adc]]// [LIB] [[et:software:homelab:library:module:motor]], [LIB] [[et:software:homelab:library:adc]]//
  
Line 20: Line 20:
  
 H-sillas tüürivad mootori pöörlemiseks vajalikku voolu neli transistori (või nende gruppi). H-silla elektriskeem meenutab H-tähte - sellest ka nimi. H-silla eripära seisneb mootorile mõlemat pidi polaarsuse rakendamise võimaluses. Kõrvaloleval pildil on toodud H-silla põhimõtteskeem lülitite näitel. Kui selles skeemis sulgeda kaks diagonaalis asetsevat lülitit, hakkab mootor tööle. Mootori pöörlemissuund sõltub aga sellest, kummas diagonaalis lülitid suletakse. Reaalses H-sillas on lülitite asemel muidugi transistorid, mis on valitud vastavalt mootori voolule ja pingele.  H-sillas tüürivad mootori pöörlemiseks vajalikku voolu neli transistori (või nende gruppi). H-silla elektriskeem meenutab H-tähte - sellest ka nimi. H-silla eripära seisneb mootorile mõlemat pidi polaarsuse rakendamise võimaluses. Kõrvaloleval pildil on toodud H-silla põhimõtteskeem lülitite näitel. Kui selles skeemis sulgeda kaks diagonaalis asetsevat lülitit, hakkab mootor tööle. Mootori pöörlemissuund sõltub aga sellest, kummas diagonaalis lülitid suletakse. Reaalses H-sillas on lülitite asemel muidugi transistorid, mis on valitud vastavalt mootori voolule ja pingele. 
- 
-H-sillaga saab peale pöörlemissuuna muuta ka mootori pöörlemiskiirust - selleks tuleb transistore pulsilaiusmodulatsiooniga (PWM) pidevalt avada ja sulgeda, nii et summaarne mootorile antav energia on midagi seismise ja täisvõimsuse vahepealset. Avatud aega kogu PWM perioodist nimetatakse ka töötsükliks (inglise keeles //duty cycle//), mida tähistatakse protsentidega. 0% tähendab, et transistor on pidevalt suletud, ehk ei juhi voolu, 100% tähendab, et transistor on pidevalt avatud, ehk juhib voolu. PWM sagedus peab olema piisavalt kõrge, et vältida mootorivõlli vibreerimist. Madalal sagedusel tekitab mootor lisaks ka müra ja seepärast kasutatakse enamasti üle 20 kHz moduleerimissagedust. Samas kannatab väga suurtel sagedustel H-silla efektiivsus. Mootorivõlli vibreerimist vähendavad ka rootori inerts ja mootori mähiste induktiivsus.  
  
 [{{ :examples:motor:dc:motor_h_bridge_principle.png?150|H-silla tööprintsiip lülitite näitel}}] [{{ :examples:motor:dc:motor_h_bridge_principle.png?150|H-silla tööprintsiip lülitite näitel}}]
  
-Väiksemate voolude juhtimiseks leiab H-sildu integreeritud komponendina ehk ajurina, suuremate voolude jaoks kasutatakse spetsiaalseid võimsustransistore (//Power MOSFET//). H-silda koos sinna kuuluva elektroonikaga nimetatakse ka mootorikontrolleriks. +H-sillaga saab peale pöörlemissuuna muuta ka mootori pöörlemiskiirust. Väiksemate voolude juhtimiseks leiab H-sildu integreeritud komponendina ehk ajurina, suuremate voolude jaoks kasutatakse spetsiaalseid võimsustransistore (//Power MOSFET//). H-silda koos sinna kuuluva elektroonikaga nimetatakse ka mootorikontrolleriks. 
  
-Kuigi alalisvoolumootori kiirust on lihtne juhtida, siis puudub garantii, et soovitud kiirus siiski saavutatakse. Tegelik kiirus sõltub paljudest faktoritest, põhiliselt jõumomendist mootori väljundvõllil, töövoolust ja muudest mootori karakteristikutest. Mootori ja kiiruse ning väljundmomendi suhe on ideaalsel mootoril lineaarses suhtes, st mida suurem on väljundmoment, seda madalam on kiirus ning seda rohkem tarbib mootor voolu, kuid reaalsete mootorite puhul sõltub see täpse mootori tüübist.+Kuigi alalisvoolumootori kiirust on lihtne juhtida, siis puudub garantii, et soovitud kiirus siiski saavutatakse. Tegelik kiirus sõltub paljudest faktoritest, põhiliselt jõumomendist mootori väljundvõllil, töövoolust ja muudest mootori karakteristikutest. Kiiruse ning väljundmomendi suhe on ideaalsel mootoril lineaarses suhtes, st mida suurem on väljundmoment, seda madalam on kiirus ning seda rohkem tarbib mootor voolu, kuid reaalsete mootorite puhul sõltub see täpse mootori tüübist.
  
 Alalisvoolu mootorit saab juhtida nii analoog kui digitaal signaalidega. Alalisvoolu mootorit saab juhtida nii analoog kui digitaal signaalidega.
Line 39: Line 37:
 Robootikas juhitakse alalisvoolumootoreid mikrokontrolleritega ning kuna need on digitaalsed seadmed, siis on mõistlik ka mootoreid digitaalselt juhtida. See saavutatakse pulsilaiusmodulatsiooni (inglise keeles //Pulse With Modulation//, lühend PWM) abil transistoreid kiiresti sisse - välja lülitades. Kogu energia, mis mootorile antakse jääb seisva mootori ja täiskiirusel pöörleva mootori vahepeale. Avatud oleku aja kirjeldamiseks kasutatakse töötsükli mõistet, mida mõõdetakse protsentides. 0 % tähendab, et transistor on pidevalt suletud asendis ning mootor seisab, 100 % tähendab, et transistor on pidevalt avatud ning mootor pöörleb nominaalkiirusel. PWM-i sagedus peab olema piisavalt kõrge, et mootori pöörlemine oleks võimalikult sujuv ning väljundvõlli katkendlik pöörlemine ei tekitaks lisavibratsioone. Samuti tekitab mootori mähis madalatel sagedustel müra. Seetõttu kasutatakse tavaliselt modulatsioonisagedusi üle 20 kHz. Sagedust piirab transistoride efektiivsus, mis kõrgemate sageduste puhul langeb. Robootikas juhitakse alalisvoolumootoreid mikrokontrolleritega ning kuna need on digitaalsed seadmed, siis on mõistlik ka mootoreid digitaalselt juhtida. See saavutatakse pulsilaiusmodulatsiooni (inglise keeles //Pulse With Modulation//, lühend PWM) abil transistoreid kiiresti sisse - välja lülitades. Kogu energia, mis mootorile antakse jääb seisva mootori ja täiskiirusel pöörleva mootori vahepeale. Avatud oleku aja kirjeldamiseks kasutatakse töötsükli mõistet, mida mõõdetakse protsentides. 0 % tähendab, et transistor on pidevalt suletud asendis ning mootor seisab, 100 % tähendab, et transistor on pidevalt avatud ning mootor pöörleb nominaalkiirusel. PWM-i sagedus peab olema piisavalt kõrge, et mootori pöörlemine oleks võimalikult sujuv ning väljundvõlli katkendlik pöörlemine ei tekitaks lisavibratsioone. Samuti tekitab mootori mähis madalatel sagedustel müra. Seetõttu kasutatakse tavaliselt modulatsioonisagedusi üle 20 kHz. Sagedust piirab transistoride efektiivsus, mis kõrgemate sageduste puhul langeb.
  
-Digitaalseljuhtimisel on võrreldes analoogjuhtimisega mitmed eelised. Peamine eelis mikrokontrolleriga juhitavate süsteemide puhul on see, et vaja on vaid ühte digitaalväljundit ning puudub vajaduse keerulise digitaal-analoog muunduri järele. Samuti on digitaalne juhtimine efektiivsem, kuna energiat muundatakse vähem soojuseks.+Digitaalsel juhtimisel on võrreldes analoogjuhtimisega mitmed eelised. Peamine eelis mikrokontrolleriga juhitavate süsteemide puhul on see, et vaja on vaid ühte digitaalväljundit ning puudub vajadus keerulise digitaal-analoog muunduri järele. Samuti on digitaalne juhtimine efektiivsem, kuna energiat muundatakse vähem soojuseks.
  
 Lihtsustatud juhtimisskeem on näidatud kõrvalasuval joonisel. Lihtsustatud juhtimisskeem on näidatud kõrvalasuval joonisel.
 Juhtpinge Vc tuleb mikrokontrolleri väljundviigult ning lülitab transistori Q sisse-välja umbes 20 kHz sagedusel. Kui transistor Q on sisse lülitatud, liigub kogu vool I läbi mootori M. Sellisel juhul käitub transistor kui suletud lüliti ja pingelang Vq on 0-i lähedane ning mootorile jääb kogu sisendpinge Vdd. Juhtpinge Vc tuleb mikrokontrolleri väljundviigult ning lülitab transistori Q sisse-välja umbes 20 kHz sagedusel. Kui transistor Q on sisse lülitatud, liigub kogu vool I läbi mootori M. Sellisel juhul käitub transistor kui suletud lüliti ja pingelang Vq on 0-i lähedane ning mootorile jääb kogu sisendpinge Vdd.
-~~PB~~+<pagebreak>
 Transistori läbiva koguvõimsuse saab arvutada valemiga: Transistori läbiva koguvõimsuse saab arvutada valemiga:
  
Line 58: Line 56:
 ===== Praktika ===== ===== Praktika =====
  
-Kodulaboris kasutatakse alalisvoolumootorite juhtimiseks kombineeritud kiipi, mis sisaldab endas kahte integreeritud H-silda ja kaitsedioode. Mootorit juhitakse kolme digitaalse signaaliga, millest üks on üldine tööd lubav signaal (inglise keeles //enable//). Teised kaks signaali määravad H-silla transistoride oleku. Kunagi ei tohi olla avatud kaks vertikaalset transistorit, sest see lühistaks toiteallika. Selline olek on ajuri juhtimisel ellimineeritud ja valida saab madala või kõrge väärtusega vaid seda, kumb transistor (kas ülemine või alumine) ühest H-silla poolest ehk poolsillast avatud on. Teisisõnu valitakse kahe juhtsignaaliga polaarsust, mis mootori mähise otstele rakendatakse.+Kodulaboris kasutatakse alalisvoolumootorite juhtimiseks kombineeritud kiipi, mis sisaldab endas kahte integreeritud H-silda ja kaitsedioode. Mootorit juhitakse kolme digitaalse signaaliga, millest üks on üldine tööd lubav signaal (inglise keeles //enable//). Teised kaks signaali määravad H-silla transistoride oleku. Kunagi ei tohi olla avatud kaks vertikaalset transistorit, sest see lühistaks toiteallika. Selline olek on ajuri juhtimisel elimineeritud ja valida saab madala või kõrge väärtusega vaid seda, kumb transistor (kas ülemine või alumine) ühest H-silla poolest ehk poolsillast avatud on. Teisisõnu valitakse kahe juhtsignaaliga polaarsust, mis mootori mähise otstele rakendatakse.
  
 Kodulabori Kombomoodulil on võimalus kuni nelja alalisvoolumootori ühendamiseks. Sisuliselt on iga mootori jaoks H-sild, mida juhitakse kahe mikrokontrolleri digitaalse väljundviiguga, sest lubav viik on konstantselt kõrge. Kui mõlemal juhtviigul on sama väärtus, siis mootor ei liigu, kui erinev, siis mootor pöörleb vastavas suunas. H-silla olekut iseloomustab järgmine tabel: Kodulabori Kombomoodulil on võimalus kuni nelja alalisvoolumootori ühendamiseks. Sisuliselt on iga mootori jaoks H-sild, mida juhitakse kahe mikrokontrolleri digitaalse väljundviiguga, sest lubav viik on konstantselt kõrge. Kui mõlemal juhtviigul on sama väärtus, siis mootor ei liigu, kui erinev, siis mootor pöörleb vastavas suunas. H-silla olekut iseloomustab järgmine tabel:
Line 71: Line 69:
 Iga mootorit, mis on ühendatud H-silla külge juhitakse kahe mikrokontrolleri digitaalväljundiga. Mootori kiirust juhitakse taimeritega, mis genereerivad pideva PWM signaali H-sillale, teise viiguga juhitakse mootori pöörlemise suunda. Mootori kiirust juhitakse suhteliste väärtustega 0 - 255, kus 0 tähendab seisvat mootorit ning 255 maksimaalsel kiirusel liikuvat mootorit. Järgnev koodilõik kirjeldab Kodulabor II (ATmega2561) teegis realiseeritud alalisvoolumootorite juhtfunktsioone. Iga mootorit, mis on ühendatud H-silla külge juhitakse kahe mikrokontrolleri digitaalväljundiga. Mootori kiirust juhitakse taimeritega, mis genereerivad pideva PWM signaali H-sillale, teise viiguga juhitakse mootori pöörlemise suunda. Mootori kiirust juhitakse suhteliste väärtustega 0 - 255, kus 0 tähendab seisvat mootorit ning 255 maksimaalsel kiirusel liikuvat mootorit. Järgnev koodilõik kirjeldab Kodulabor II (ATmega2561) teegis realiseeritud alalisvoolumootorite juhtfunktsioone.
  
-~~PB~~+<pagebreak>
 <code c> <code c>
 // Mootorite ühendusviigud // Mootorite ühendusviigud
Line 102: Line 100:
   for(i=0 ; i<CHMAX ; i++)   for(i=0 ; i<CHMAX ; i++)
   {   {
-      // PWM-i alväärtustamine+      // PWM-i algväärtustamine
       compare[i] = pwm;                  compare[i] = pwm;           
       compbuff[i] = pwm;                 compbuff[i] = pwm;          
   }   }
  
- // Timer 2 normaal režiimis käivitamine +  // Timer 2 normaalrežiimis käivitamine 
- timer2_init_normal(prescaler);+   timer2_init_normal(prescaler);
   // Timer 2 katkestuste lubamine   // Timer 2 katkestuste lubamine
- timer2_overflow_interrupt_enable(true);+  timer2_overflow_interrupt_enable(true);
  
-  // Globaalse katkestuste lubamine +  // Globaalsete katkestuste lubamine 
- sei();+   sei();
 } }
 // PWM-i genereerimine valitud mootorile // PWM-i genereerimine valitud mootorile
Line 134: Line 132:
 Mootorite teegi maatriksis //dcmotor_pins// määratakse ära viigud, kuhu on ühendatud mootorite juhtsignaalid. Enne mootori juhtimist tuleb see algväärtustada, kutsudes välja funktsiooni //dcmotor_drive_pwm_init// vastava mootori parameetriga (0-3). See funktsioon seab vastavad viigud väljunditeks. Samuti tuleks seadistada taimeri jagur, Kodulabor II puhul //timer2_prescale// ning Kodulabor III puhul //timer_prescale//, mis määrab PWM signaali sageduse. Kodulabor II puhul, kui programmis ei kasutata rohkem taimerit kasutavaid funktsioone, siis on sobilik väärtus TIMER2_NO_PRESCALE. Kui aga kasutatakse näiteks ka ultraheliandurit, siis tuleks valida TIMER2_PRESCALE_8, muidu võib kontrolleri jõudlust väheks jääda ja anduri lugemitesse võib tekkida viga. Kodulabor III puhul seda jälgima ei pea. Suuremaid jaguri väärtuseid pole soovitatav kasutada, sest see muudab mootori pöörlemise katkendlikuks ja tekitab vibratsiooni. Mootorite teegi maatriksis //dcmotor_pins// määratakse ära viigud, kuhu on ühendatud mootorite juhtsignaalid. Enne mootori juhtimist tuleb see algväärtustada, kutsudes välja funktsiooni //dcmotor_drive_pwm_init// vastava mootori parameetriga (0-3). See funktsioon seab vastavad viigud väljunditeks. Samuti tuleks seadistada taimeri jagur, Kodulabor II puhul //timer2_prescale// ning Kodulabor III puhul //timer_prescale//, mis määrab PWM signaali sageduse. Kodulabor II puhul, kui programmis ei kasutata rohkem taimerit kasutavaid funktsioone, siis on sobilik väärtus TIMER2_NO_PRESCALE. Kui aga kasutatakse näiteks ka ultraheliandurit, siis tuleks valida TIMER2_PRESCALE_8, muidu võib kontrolleri jõudlust väheks jääda ja anduri lugemitesse võib tekkida viga. Kodulabor III puhul seda jälgima ei pea. Suuremaid jaguri väärtuseid pole soovitatav kasutada, sest see muudab mootori pöörlemise katkendlikuks ja tekitab vibratsiooni.
  
-Mootorite kiiruse juhtimiseks kasutatakse funktsiooni //dcmotor_drive_pwm//. See funktsioon vajab kolme väärtust: esiteks mootori numbrit, mille kiirust reguleeritakse, teiseks suunda (-1, 0, +1), kus -1 tähistab pöörlemist ühes suunas, +1 teises ning 0 tähistab seismist ning kolmandaks kiirust vahemikus 0 - 255. Kiiruse väärtus ei ole seotud mingi kindla pöörlemiskiirusega vaid on suhteline väärtus mootori maksimaalse pöörlemiskiiruse ja seisva mootori vahel. Mootori reaalne pöörlemiskiirus sõltub mootorist, toitepingest ning koormusest. Mootori kiiruse täpsus on 8-bitti, mis tähendab, et minimaalne jutimistäpsus on 1/255 mootori maksimaalsest kiirusest.+Mootorite kiiruse juhtimiseks kasutatakse funktsiooni //dcmotor_drive_pwm//. See funktsioon vajab kolme väärtust: esiteks mootori numbrit, mille kiirust reguleeritakse, teiseks suunda (-1, 0, +1), kus -1 tähistab pöörlemist ühes suunas, +1 teises ning 0 tähistab seismist ning kolmandaks kiirust vahemikus 0 - 255. Kiiruse väärtus ei ole seotud mingi kindla pöörlemiskiirusega vaid on suhteline väärtus mootori maksimaalse pöörlemiskiiruse ja seisva mootori vahel. Mootori reaalne pöörlemiskiirus sõltub mootorist, toitepingest ning koormusest. Mootori kiiruse täpsus on 8-bitti, mis tähendab, et minimaalne juhtimistäpsus on 1/255 mootori maksimaalsest kiirusest.
  
 Järgnevalt on toodud näiteprogramm, mis paneb esimese mootori pöörlema poolel kiirusel ja teise mootori kiirust juhitakse potentsiomeetriga. Järgnevalt on toodud näiteprogramm, mis paneb esimese mootori pöörlema poolel kiirusel ja teise mootori kiirust juhitakse potentsiomeetriga.
Line 140: Line 138:
 <code c> <code c>
 // Kodulabori mootori juhtimise näidisprogramm // Kodulabori mootori juhtimise näidisprogramm
-#include <homelab/delay.h> 
 #include <homelab/module/motors.h> #include <homelab/module/motors.h>
 #include <homelab/adc.h> #include <homelab/adc.h>
  
-//Põhiprogramm+// Põhiprogramm
 int main(void) int main(void)
 { {
Line 155: Line 152:
  // Mootorite DC1 ja DC2 eelseadistamine (ilma taimeri jagurita)  // Mootorite DC1 ja DC2 eelseadistamine (ilma taimeri jagurita)
  // Kodulabor II  // Kodulabor II
- // dcmotor_drive_pwm_init(1, TIMER2_NO_PRESCALE); + //dcmotor_drive_pwm_init(1, TIMER2_NO_PRESCALE); 
- // dcmotor_drive_pwm_init(2, TIMER2_NO_PRESCALE);+ //dcmotor_drive_pwm_init(2, TIMER2_NO_PRESCALE);
  // Kodulabor III  // Kodulabor III
  dcmotor_drive_pwm_init(1, TIMER_NO_PRESCALE);  dcmotor_drive_pwm_init(1, TIMER_NO_PRESCALE);
Line 162: Line 159:
  
  // Lõputu tsükkel  // Lõputu tsükkel
- while(true)+ while (1)
   {   {
-    // Potensiomeeteri 4 keskmise lugemi võtmine ja salvestamine muutujasse +           // Potentsiomeetri 4 keskmise lugemi võtmine ja salvestamine muutujasse 
-    speed = adc_get_average_value(15, 4); +            
-    // Kuna potentsiomeetri väärtus on 10-bitine kuid DC mootori +           // Kodulabor II 
-    // funktsioon on 8-bitine, tuleb ADC väärtus muundada 8-bitiseks  +     // Kuna potentsiomeetri väärtus on 10-bitine kuid DC mootori 
-    // jagades ADC väärtus neljaga või nihutades bitinihutustehtega +     // funktsioon on 8-bitine, tuleb ADC väärtus muundada 8-bitiseks  
-    // ADC väärtust paremale kohta (>>4) +     // jagades ADC väärtus neljaga või nihutades bitinihutustehtega 
-    dcmotor_drive_pwm(1, 1, speed/8);+     // ADC väärtust paremale 2 kohta (>>2) 
 +    // speed = adc_get_average_value(3, 4)/4; 
 + 
 +    // Kodulabor III 
 +     // Kuna potentsiomeetri väärtus on 12-bitine kuid DC mootori 
 +     // funktsioon on 8-bitine, tuleb ADC väärtus muundada 8-bitiseks  
 +     // jagades ADC väärtus kaheksaga või nihutades bitinihutustehtega 
 +     // ADC väärtust paremale kohta (>>3) 
 +       speed = adc_get_average_value(15, 4)/8; 
 + 
 +         //DC mootori juhtimine saadud potentsiomeetri väärtuse kaudu 
 +    dcmotor_drive_pwm(1, 1, speed);
     dcmotor_drive_pwm(2, 1, 128);     dcmotor_drive_pwm(2, 1, 128);
   }   }
 } }
 </code> </code>
et/examples/motor/dc.1424958567.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0