====== Samm-mootor ======
//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 =====
[{{ :examples:motor:stepper:stepper.jpg?220|Samm-mootor}}]
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, ilma tagasisideta. Siit avaldub ka üks samm-mootorite puudus - mehhaanilise ülekoormuse korral, kui rootor ei pöörle, lähevad sammud sassi ja liikumine muutub ebatäpseks. Mähiste järgi eristatakse kahte liiki samm-mootoreid: unipolaarsed- ja bipolaarsed samm-mootorid. Ehituse järgi jaotatakse neid veel kolmeks:
* muutuva magnetilise takistusega (suur täpsus, madal pöördemoment, madal hind)
* püsimagnetiga (madal täpsus, kõrge pöördemoment, madal hind)
* hübriidne (suur täpsus, kõrge pöördemoment, kõrge hind)
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.
**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).
[{{ :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.
^ ^ Unipolaarne ^^^^ Bipolaarne ^^^^
^ Samm ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^
^ Täissamm ^^^^^^^^^
| 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - |
| 2 | 0 ^ 1 | 0 | 0 | - ^ + | - | - |
| 3 | 0 | 0 ^ 1 | 0 | - | - ^ + | - |
| 4 | 0 | 0 | 0 ^ 1 | - | - | - ^ + |
^ Poolsamm ^^^^^^^^^
| 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 //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.
// 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, 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.
// 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,+1, 2000, 30);
// Pööramine teisele poole 2000 poolsammu kiirusega 30 ms/samm
unipolar_halfstep(0,-1, 2000, 30);
}
}