This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:motor:stepper [2014/09/15 09:01] – rellermaa | et:examples:motor:stepper [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | < | ||
| ====== Samm-mootor ====== | ====== Samm-mootor ====== | ||
| - | //Vajalikud teadmised: [HW] [[et: | + | //Vajalikud teadmised: |
| + | [HW] [[et: | ||
| + | [AVR] [[et: | ||
| + | [LIB] [[et: | ||
| + | [LIB] [[et: | ||
| ===== Teooria ===== | ===== Teooria ===== | ||
| Line 15: | 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, | 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, | ||
| - | 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, | + | 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, |
| - | + | ||
| - | ~~PB~~ | + | |
| **Unipolaarne samm-mootor** | **Unipolaarne samm-mootor** | ||
| - | |||
| - | [{{ : | ||
| 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** | ||
| - | |||
| - | [{{ : | ||
| 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). | ||
| + | [{{ : | ||
| + | [{{ : | ||
| 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. | ||
| - | < | + | |
| ^ ^ | ^ ^ | ||
| ^ Samm ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^ | ^ Samm ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^ | ||
| Line 50: | Line 51: | ||
| | 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + | | | 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + | | ||
| + | ~~CL~~ | ||
| ===== Praktika ===== | ===== Praktika ===== | ||
| - | Harjutuse eesmärk | + | Kombomoodulil |
| - | Bipolaarse samm-mootori | + | Samm-mootorite |
| <code c> | <code c> | ||
| - | // | + | // Viikude seadistamine väljundiks |
| - | // Bipolaarse samm-mootori juhtimise ettevalmistamine | + | |
| - | // | + | |
| void bipolar_init(void) | void bipolar_init(void) | ||
| { | { | ||
| Line 66: | 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 100: | Line 98: | ||
| </ | </ | ||
| - | Funktsioonide kasutamist demonstreerib näiteprogramm, | + | Funktsioonide kasutamist demonstreerib näiteprogramm, |
| - | + | ||
| - | <code c> | + | |
| - | // | + | |
| - | // Kodulabori mootorite mooduli bipolaarse | + | |
| - | // samm-mootori testprogramm | + | |
| - | // | + | |
| - | #include < | + | |
| - | + | ||
| - | // | + | |
| - | // 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, | + | |
| - | + | ||
| - | // Pööramine teisele poole 200 poolsammu kiirusega 30 ms/samm | + | |
| - | bipolar_halfstep(-1, | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Kodulabor III puhul on kasutusel vaid unipolaarne samm-mootor, | + | |
| - | <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; | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Funktsioonide kasutamist demonstreerib näiteprogramm, | + | |
| <code c> | <code c> | ||
| - | // | + | // Kodulabori samm-mootorite näidisprogramm |
| - | // Kodulabori | + | |
| - | // samm-mootori testprogramm | + | |
| - | // | + | |
| #include < | #include < | ||
| - | // | ||
| // Põhiprogramm | // Põhiprogramm | ||
| - | // | ||
| int main(void) | int main(void) | ||
| { | { | ||
| Line 201: | Line 111: | ||
| // Lõputu tsükkel | // Lõputu tsükkel | ||
| - | while (true) | + | while (1) |
| { | { | ||
| - | // Pööramine ühele poole 200 poolsammu kiirusega 30 ms/samm | + | // Pööramine ühele poole 2000 poolsammu kiirusega 30 ms/samm |
| - | unipolar_halfstep(0, | + | unipolar_halfstep(0, |
| - | // Pööramine teisele poole 200 poolsammu kiirusega 30 ms/samm | + | // Pööramine teisele poole 2000 poolsammu kiirusega 30 ms/samm |
| - | unipolar_halfstep(0, | + | unipolar_halfstep(0, |
| } | } | ||
| } | } | ||
| </ | </ | ||