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:stepper [2014/09/29 11:34] raivo.sellet:examples:motor:stepper [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~+<pagebreak>
 ====== Samm-mootor ====== ====== Samm-mootor ======
  
-//Vajalikud teadmised: [HW] [[et:hardware:homelab:motor]], [AVR] [[et:avr:io]], \\ [LIB] [[et:software:homelab:library:module:motor]], [LIB] [[et:software:homelab:library:delay]]//+//Vajalikud teadmised:  
 +[HW] [[et:hardware:homelab:combo]],  
 +[AVR] [[et:avr:io]],  
 +[LIB] [[et:software:homelab:library:module:motor]], \\ 
 +[LIB] [[et:software:homelab:library:delay]]//
  
 ===== Teooria ===== ===== Teooria =====
Line 16: Line 20:
 Muutuva magnetilise takistusega samm-mootorites on hambulised mähised ja hambuline rauast rootor. Suurim tõmbejõud tekib mõlema poole hammaste kattumisel. Püsimagnetiga samm-mootorites on, nagu nimigi ütleb, püsimagnet, mis orienteerub vastavalt mähise polaarsusele. Hübriidides on kasutusel mõlemad tehnoloogiad. Muutuva magnetilise takistusega samm-mootorites on hambulised mähised ja hambuline rauast rootor. Suurim tõmbejõud tekib mõlema poole hammaste kattumisel. Püsimagnetiga samm-mootorites on, nagu nimigi ütleb, püsimagnet, mis orienteerub vastavalt mähise polaarsusele. Hübriidides on kasutusel mõlemad tehnoloogiad.
  
-Sõltuvalt samm-mootori mudelist läheb mootori võlli ühe täispöörde (360 kraadi) tegemiseks vaja sadu kommuteerimissamme. Stabiilse ja sujuva liikumise tagamiseks kasutatakse sobivat juhtelektroonikat, mis juhib mootorit vastavalt selle parameetritele (rootori inerts, pöördemoment, resonants jne.). Lisaks võib juhtelektroonikas rakendada erinevaid kommuteerimise meetodeid. Järjest ühe mähise kaupa kommuteerimist nimetatakse täissammuks, kuid vaheldumisi ühe ja kahe mähise kommuteerimist nimetatakse poolsammuks. Kasutatakse ka sinusoidaalset mikrosammu, mis annab eriti täpse ja sujuva juhtimise. +Sõltuvalt samm-mootori mudelist läheb mootori võlli ühe täispöörde (360 kraadi) tegemiseks vaja sadu kommuteerimissamme. Stabiilse ja sujuva liikumise tagamiseks kasutatakse sobivat juhtelektroonikat, mis juhib mootorit vastavalt selle parameetritele (rootori inerts, pöördemoment, resonants jne). Lisaks võib juhtelektroonikas rakendada erinevaid kommuteerimise meetodeid. Järjest ühe mähise kaupa kommuteerimist nimetatakse täissammuks, kuid vaheldumisi ühe ja kahe mähise kommuteerimist nimetatakse poolsammuks. Kasutatakse ka sinusoidaalset mikrosammu, mis annab eriti täpse ja sujuva juhtimise.
- +
-~~PB~~+
  
 **Unipolaarne samm-mootor** **Unipolaarne samm-mootor**
- 
-[{{  :examples:motor:stepper:motor_stepper_unipolar.png?250|Unipolaarse samm-mootori mähised}}] 
  
 Unipolaarne samm-mootor on viie või kuue juhtmega. Vastavalt ajami skeemile käivitatakse korraga ainult üks neljandik mähistest. //Vcc// liinid on tavaliselt ühendatud mootori positiivse toitepingega. Mähiste otsad 1a, 1b, 2a, ja 2b ühendatakse kommuteerimisel läbi transistoride ainult maaga, mistõttu nende juhtelektroonika on suhteliselt lihtne. Unipolaarne samm-mootor on viie või kuue juhtmega. Vastavalt ajami skeemile käivitatakse korraga ainult üks neljandik mähistest. //Vcc// liinid on tavaliselt ühendatud mootori positiivse toitepingega. Mähiste otsad 1a, 1b, 2a, ja 2b ühendatakse kommuteerimisel läbi transistoride ainult maaga, mistõttu nende juhtelektroonika on suhteliselt lihtne.
  
 **Bipolaarne samm-mootor** **Bipolaarne samm-mootor**
- 
-[{{  :examples:motor:stepper:motor_stepper_bipolar.png?250|Bipolaarse samm-mootori mähised}}] 
  
 Bipolaarne samm-mootor erineb unipolaarsest samm-mootorist selle poolest, et mähiste polaarsust muudetakse kommutatsiooni ajal. Korraga aktiveeritakse pooled mähised, mis tagab võrreldes unipolaarse samm-mootoritega suurema efektiivsuse. Bipolaarsetel samm-mootoritel on neli juhet, mis ühendatakse kõik eraldi poolsillaga. Kommuteerimisel rakendavad poolsillad mähiste otstele kas positiivset või negatiivset pinget. Unipolaarseid samm-mootoreid saab käivitada ka bipolaarse ajuri abil: selleks tuleb ühendada vaid mähiste liinid 1a, 1b, 2a ja 2b (//Vcc// jääb ühendamata). Bipolaarne samm-mootor erineb unipolaarsest samm-mootorist selle poolest, et mähiste polaarsust muudetakse kommutatsiooni ajal. Korraga aktiveeritakse pooled mähised, mis tagab võrreldes unipolaarse samm-mootoritega suurema efektiivsuse. Bipolaarsetel samm-mootoritel on neli juhet, mis ühendatakse kõik eraldi poolsillaga. Kommuteerimisel rakendavad poolsillad mähiste otstele kas positiivset või negatiivset pinget. Unipolaarseid samm-mootoreid saab käivitada ka bipolaarse ajuri abil: selleks tuleb ühendada vaid mähiste liinid 1a, 1b, 2a ja 2b (//Vcc// jääb ühendamata).
  
 +[{{  :examples:motor:stepper:motor_stepper_unipolar.png?250|Unipolaarse samm-mootori mähised}}]
 +[{{  :examples:motor:stepper:motor_stepper_bipolar.png?250|Bipolaarse samm-mootori mähised}}]
 Mõlemat liiki mähisega samm-mootori juhtimiseks vajalikku kommutatsiooni täissammu ja poolsammu režiimis kujutab järgnev tabel. Kuna unipolaarsete samm-mootorite ajurite puhul toimub vaid transistoride avamine, siis nende samme on kujutatud loogiliste arvudega 0 ja 1. Bipolaarse samm-mootori juhtimine võib vajada rohkem signaale, ja selle samme on kujutatud ajuri väljundite polaarsusega. Mõlemat liiki mähisega samm-mootori juhtimiseks vajalikku kommutatsiooni täissammu ja poolsammu režiimis kujutab järgnev tabel. Kuna unipolaarsete samm-mootorite ajurite puhul toimub vaid transistoride avamine, siis nende samme on kujutatud loogiliste arvudega 0 ja 1. Bipolaarse samm-mootori juhtimine võib vajada rohkem signaale, ja selle samme on kujutatud ajuri väljundite polaarsusega.
-<note> Lisada siia sammmootorite ühendamise skeemi ühispilt </note>+
 ^ ^   Unipolaarne   ^^^^   Bipolaarne   ^^^^ ^ ^   Unipolaarne   ^^^^   Bipolaarne   ^^^^
 ^ Samm ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^ ^ Samm ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^
Line 51: Line 51:
 | 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + | | 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + |
  
 +~~CL~~
 ===== Praktika ===== ===== Praktika =====
  
-Harjutuse eesmärk on tööle panna bipolaarne samm-mootor, mille asemel saab eespool nimetatud meetodil kasutada ka unipolaarset samm-mootorit. Mootorite mooduli plaadil on olemas kaks ajurit L293D, mida tuleb mikrokontrollerist nelja sisendviiguga juhtida. Iga viik tähistab ühe mähise otsa polaarsust. Mähiseotsa pinge on positiivne, kui viik on kõrge, ja negatiivne, kui viik on madal. Otstele 1A, 1B, 2A ja 2B vastavad mikrokontrolleri viigud on PB0, PB1, PB2 ja PB3+Kombomoodulil on olemas H-sillad bipolaarsete samm-mootorite juhtimiseks ning transistormaatriks unipolaarse samm-mootori juhtimiseks.
  
-Bipolaarse samm-mootori juhtimiseks on Kodulabori teegis olemas funktsioon //bipolar_init//, mis seadistab viigud väljundiks ja funktsioon //bipolar_halfstep//, mis teostab pöörlemist määratud arvu poolsammude võrra. Kommuteerimine toimub poolsammude tabeli järgi, mille tekitamiseks kasutatakse keerukamaid bitioperatsioone.+Samm-mootorite juhtimiseks on Kodulabori teegis olemas funktsioonid //bipolar_init// ja //unipolar_init//, mis seadistab viigud väljundiks ja funktsioonid //bipolar_halfstep// ja //unipolar_halfstep//, mis teostab pöörlemist määratud arvu poolsammude võrra. Kommuteerimine toimub poolsammude tabeli järgi, mille tekitamiseks kasutatakse keerukamaid bitioperatsioone. Unipolaarne samm-mootori ühendatakse eraldi samm-mootori pistikusse //Unipolar Stepper//, bipolaarne samm-mootor ühendatakse alalisvoolumootorite pistikutesse, kus ühele bipolaarsele mootorile kulub kahe alalisvoolumootori juhtviigud. Järgnev koodilõik on Kodulabor II (ATmega2561) bipolaarse samm-mootori teegifunktsioonid.
  
 <code c> <code c>
-// +// Viikude seadistamine väljundiks
-// Bipolaarse samm-mootori juhtimise ettevalmistamine +
-//+
 void bipolar_init(void) void bipolar_init(void)
 { {
Line 67: Line 66:
 } }
  
-// 
 // Bipolaarse samm-mootori liigutamine poolsammudega // Bipolaarse samm-mootori liigutamine poolsammudega
-// 
 void bipolar_halfstep(signed char dir, void bipolar_halfstep(signed char dir,
  unsigned short num_steps, unsigned char speed)  unsigned short num_steps, unsigned char speed)
Line 101: Line 98:
 </code> </code>
  
-Funktsioonide kasutamist demonstreerib näiteprogramm, mis pöörab mootorit vaheldumisi ühele ja teisele poole 200 poolsammu. Mootori pöörlemise kiiruse määrab sammude vahel tehtava pausi pikkus. Kui paus liiga väikeseks seada, ei jõua mootor rootori intertsi tõttu pööret teostada ja võll ei liigu. +Funktsioonide kasutamist demonstreerib näiteprogramm, mis pöörab mootorit vaheldumisi ühele ja teisele poole 200 poolsammu. Mootori pöörlemise kiiruse määrab sammude vahel tehtava pausi pikkus. Kui paus liiga väikeseks seada, ei jõua mootor rootori inertsi tõttu pööret teostada ja võll ei liigu.
- +
-<code c> +
-// +
-// Kodulabori mootorite mooduli bipolaarse +
-// samm-mootori testprogramm +
-// +
-#include <homelab/module/motors.h> +
- +
-// +
-// Põhiprogramm +
-// +
-int main(void) +
-+
- // Mootori seadistamine +
- bipolar_init(); +
-  +
- // Lõputu tsükkel +
- while (true) +
-+
- // Pööramine ühele poole 200 poolsammu kiirusega 30 ms/samm +
- bipolar_halfstep(+1, 200, 30); +
- +
- // Pööramine teisele poole 200 poolsammu kiirusega 30 ms/samm +
- bipolar_halfstep(-1, 200, 30); +
-+
-+
-</code> +
- +
-Kodulabor III puhul on kasutusel vaid unipolaarne samm-mootor, mida juhitakse läbi Kombo plaadil asuva transistormaatriksi ULN2004. Unipolarse samm-mootori juhtimiseks on Kodulabori teegis olemas funktsioon //unipolar_init//, mis seadistab viigud väljundiks ja funktsioon //unipolar_halfstep//, mis teostab pöörlemist määratud arvu poolsammude võrra.  +
-<code c> +
-// +
-// Initialize specified unipolar stepper motor +
-// +
-void unipolar_init(uint8_t index) +
-+
- // Set control pins as output +
- PORTJ.DIRSET = 0x0F; +
-+
- +
-// +
-// Unipolar stepper motor half-step +
-// +
-void unipolar_halfstep(unsigned char index, signed char direction, unsigned short num_steps, unsigned char speed) +
-+
- uint8_t state1 = 0, state2 = 1; +
- uint8_t pattern; +
- uint8_t timeout; +
- +
- // Ensure +-1 +
- direction = ((direction < 0) ? -1 : +1); +
- +
- // Ensure speed <= 100 +
- speed = (speed > 100 ? 100 : speed); +
- +
- // Complete steps +
- for (uint16_t i = 0; i < num_steps; i++) +
-+
- state1 += direction; +
- state2 += direction; +
- +
- // Make pattern +
- pattern = +
-     (1 << ((state1 % 8) >> 1)) | +
-     (1 << ((state2 % 8) >> 1)); +
- +
- // Set output +
- PORTJ.OUT = (PORTJ.OUT & 0xF0) | (pattern & 0x0F); +
- +
- // Wait for the motor to complete the step +
- timeout = speed; +
- +
- while (timeout-- > 0) +
-+
- _delay_ms(1); +
-+
-+
- +
- // Turn off motor +
- PORTJ.OUTCLR = 0x0F; +
-+
-</code> +
- +
-Funktsioonide kasutamist demonstreerib näiteprogramm, mis pöörab mootorit vaheldumisi ühele ja teisele poole 200 poolsammu. Mootori pöörlemise kiiruse määrab sammude vahel tehtava pausi pikkus. Kui paus liiga väikeseks seada, ei jõua mootor rootori intertsi tõttu pööret teostada ja võll ei liigu.+
  
 <code c> <code c>
-// +// Kodulabori samm-mootorite näidisprogramm
-// Kodulabori mootorite mooduli bipolaarse +
-// samm-mootori testprogramm +
-//+
 #include <homelab/module/motors.h> #include <homelab/module/motors.h>
  
-// 
 // Põhiprogramm // Põhiprogramm
-// 
 int main(void) int main(void)
 { {
Line 202: Line 111:
   
  // Lõputu tsükkel  // Lõputu tsükkel
- while (true)+ while (1)
  {  {
  // Pööramine ühele poole 2000 poolsammu kiirusega 30 ms/samm  // Pööramine ühele poole 2000 poolsammu kiirusega 30 ms/samm
et/examples/motor/stepper.1411990494.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