This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:motor:stepper [2014/10/13 14:11] – raivo.sell | et:examples:motor:stepper [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ~~PB~~ | + | < |
| ====== Samm-mootor ====== | ====== Samm-mootor ====== | ||
| - | //Vajalikud teadmised: [HW] [[et: | + | //Vajalikud teadmised: |
| + | [HW] [[et: | ||
| + | [AVR] [[et: | ||
| + | [LIB] [[et: | ||
| + | [LIB] [[et: | ||
| ===== Teooria ===== | ===== Teooria ===== | ||
| Line 13: | Line 17: | ||
| * püsimagnetiga (madal täpsus, kõrge pöördemoment, | * püsimagnetiga (madal täpsus, kõrge pöördemoment, | ||
| * hübriidne (suur täpsus, kõrge pöördemoment, | * hübriidne (suur täpsus, kõrge pöördemoment, | ||
| - | |||
| - | [{{ : | ||
| - | [{{ : | ||
| 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, | ||
| Line 29: | Line 30: | ||
| 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. | ||
| Line 48: | Line 51: | ||
| | 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + | | | 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + | | ||
| + | ~~CL~~ | ||
| ===== Praktika ===== | ===== Praktika ===== | ||
| Line 94: | Line 98: | ||
| </ | </ | ||
| - | Sarnased funktsioonid unipolaarse samm-mootori juhtimise realiseerimiseks Kodulabor III (ATxmega) teegis. | + | Funktsioonide kasutamist demonstreerib näiteprogramm, |
| - | <code c> | + | |
| - | // Viikude seadistamine väljundiks | + | |
| - | void unipolar_init(uint8_t index) | + | |
| - | { | + | |
| - | PORTJ.DIRSET = 0x0F; | + | |
| - | } | + | |
| - | + | ||
| - | // Unipolaarse samm-mootori liigutamine poolsammudega | + | |
| - | 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> | ||
| Line 156: | 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 | ||