This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:motor:stepper [2010/02/08 14:29] – mikk.leini | et:examples:motor:stepper [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | < | ||
| + | ====== Samm-mootor ====== | ||
| + | //Vajalikud teadmised: | ||
| + | [HW] [[et: | ||
| + | [AVR] [[et: | ||
| + | [LIB] [[et: | ||
| + | [LIB] [[et: | ||
| + | |||
| + | ===== Teooria ===== | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Samm-mootoreid kasutatakse laialdaselt täpsust nõudvates rakendustes. Erinevalt alalisvoolumootorist puuduvad samm-mootoris harjad ja kommutaator - selleks on seal mitu eraldiseisvat mähist, mida kommuteeritakse välise elektroonikaga (ajuriga). Rootori pööramine toimub mähiseid sammhaaval kommuteerides, | ||
| + | |||
| + | * muutuva magnetilise takistusega (suur täpsus, madal pöördemoment, | ||
| + | * püsimagnetiga (madal 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, | ||
| + | |||
| + | 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, | ||
| + | |||
| + | **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. | ||
| + | |||
| + | **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). | ||
| + | |||
| + | [{{ : | ||
| + | [{{ : | ||
| + | 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 ^ | ||
| + | ^ | ||
| + | | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | | ||
| + | | 2 | 0 ^ 1 | 0 | 0 | - ^ + | - | - | | ||
| + | | 3 | 0 | 0 ^ 1 | 0 | - | - ^ + | - | | ||
| + | | 4 | 0 | 0 | 0 ^ 1 | - | - | - ^ + | | ||
| + | ^ | ||
| + | | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | | ||
| + | | 2 ^ 1 ^ 1 | 0 | 0 ^ + ^ + | - | - | | ||
| + | | 3 | 0 ^ 1 | 0 | 0 | - ^ + | - | - | | ||
| + | | 4 | 0 ^ 1 ^ 1 | 0 | - ^ + ^ + | - | | ||
| + | | 5 | 0 | 0 ^ 1 | 0 | - | - ^ + | - | | ||
| + | | 6 | 0 | 0 ^ 1 ^ 1 | - | - ^ + ^ + | | ||
| + | | 7 | 0 | 0 | 0 ^ 1 | - | - | - ^ + | | ||
| + | | 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + | | ||
| + | |||
| + | ~~CL~~ | ||
| + | ===== Praktika ===== | ||
| + | |||
| + | Kombomoodulil on olemas H-sillad bipolaarsete samm-mootorite juhtimiseks ning transistormaatriks unipolaarse samm-mootori juhtimiseks. | ||
| + | |||
| + | Samm-mootorite juhtimiseks on Kodulabori teegis olemas funktsioonid // | ||
| + | |||
| + | <code c> | ||
| + | // Viikude seadistamine väljundiks | ||
| + | void bipolar_init(void) | ||
| + | { | ||
| + | DDRB |= 0x0F; | ||
| + | PORTB &= 0xF0; | ||
| + | } | ||
| + | |||
| + | // Bipolaarse samm-mootori liigutamine poolsammudega | ||
| + | void bipolar_halfstep(signed char dir, | ||
| + | unsigned short num_steps, unsigned char speed) | ||
| + | { | ||
| + | unsigned short i; | ||
| + | unsigned char pattern, state1 = 0, state2 = 1; | ||
| + | |||
| + | // Suuna kindlustamine +- 1 | ||
| + | dir = ((dir < 0) ? -1 : +1); | ||
| + | |||
| + | // Poolsammude teostamine | ||
| + | for (i = 0; i < num_steps; i++) | ||
| + | { | ||
| + | state1 += dir; | ||
| + | state2 += dir; | ||
| + | |||
| + | // Mustri loomine | ||
| + | pattern = (1 << ((state1 % 8) >> 1)) | | ||
| + | (1 << ((state2 % 8) >> 1)); | ||
| + | |||
| + | // Väljundi määramine | ||
| + | PORTB = (PORTB & 0xF0) | (pattern & 0x0F); | ||
| + | |||
| + | // Pausi tegemine sammu teostamise ootamiseks | ||
| + | sw_delay_ms(speed); | ||
| + | } | ||
| + | |||
| + | // Mootori peatamine | ||
| + | PORTB &= 0xF0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Funktsioonide kasutamist demonstreerib näiteprogramm, | ||
| + | |||
| + | <code c> | ||
| + | // Kodulabori samm-mootorite näidisprogramm | ||
| + | #include < | ||
| + | |||
| + | // Põhiprogramm | ||
| + | int main(void) | ||
| + | { | ||
| + | // Mootori seadistamine | ||
| + | unipolar_init(0); | ||
| + | |||
| + | // Lõputu tsükkel | ||
| + | while (1) | ||
| + | { | ||
| + | // Pööramine ühele poole 2000 poolsammu kiirusega 30 ms/samm | ||
| + | unipolar_halfstep(0, | ||
| + | |||
| + | // Pööramine teisele poole 2000 poolsammu kiirusega 30 ms/samm | ||
| + | unipolar_halfstep(0, | ||
| + | } | ||
| + | } | ||
| + | </ | ||