====== Mootorid ====== //Seotud mooduliga: [HW] [[et:hardware:homelab:motor]]// Mootorite teek võimaldab juhtida Kodulabori mootorite moodulit ja mootoreid, mis sinna ühenduvad. Olemas on alalisvoolu-, samm- ja servomootorite juhtimise funktsioonid. ===== Andmetüübid ===== * **//prescale//** \\ Taktijaguri valiku tüüp. Soovitav on kasutada kahte esimest taktijagurit. Väärtuste variandid: * //TIMER2_NO_PRESCALE// - Jagurit ei kasutata. * //TIMER2_PRESCALE_8// - Jagamistegur 8. * //TIMER2_PRESCALE_64// - Jagamistegur 64. * //TIMER2_PRESCALE_256// - Jagamistegur 256. * //TIMER2_PRESCALE_1024// - Jagamistegur 1024. ===== Funktsioonid ===== * **//void dcmotor_init(unsigned char index)//** \\ Ühe alalisvoolu mootorikontrolleri juhtviikude seadistamine väljundiks. Parameetrid: * //index// - Mootorikontrolleri number. Väärtus 1 kuni 4. * **//void dcmotor_drive(unsigned char index, signed char direction)//** \\ Alalisvoolu mootorikontrolleri juhtkäsk. Parameetrid: * //index// - Mootorikontrolleri number. Väärtus 1 kuni 4. * //direction// - Mootori polaarsus. Väärtus -1, 0 või +1. 0 puhul mootor seisab, muul juhul pöörleb vastavas suunas. * **//void dcmotor_drive_pwm_init(unsigned char index, timer2_prescale prescaler)//** \\ Ühe alalisvoolu mootorikontrolleri juhtviikude seadistamine väljundiks kiiruse reguleerimisega. Lisaks saab määrata sobiva taktijaguri, olenevalt sellest, kui suure sagedusega PWM-i on vaja. Parameetrid: * //index// - Mootorikontrolleri number. Väärtus 1 kuni 4. * //prescaler// - Taktijaguri valik. Vahel on mõistlik kasutada taktijagurit, kuna väga kiiresti toimuvad katkestused võivad häirida programmi tööd. Näiteks UH anduri kasutamise korral on vaja taktijaguriks määrata TIMER2_PRESCALE_8. * **//void dcmotor_drive_pwm(unsigned char index, signed char direction, unsigned char speed) //** \\ Ühe alalisvoolu mootorikontrolleri juhtkäsk. Mootor jääb etteantud suuna ja kiirusega pöörlema. Parameetrid: * //index// - Mootorikontrolleri number. Väärtus 1 kuni 4. * //direction// - Mootori polaarsus. Väärtus -1 või +1. * //speed// - Mootori kiirus. Väärtus 0 - 255. 0 puhul mootor seisab ja 255 on maksimaalne võimalik kiirus. * **//void unipolar_init(unsigned char index)//** \\ Unipolaarse mootorikontrolleri juhtviikude seadistamine väljundiks. Parameetrid: * //index// - Mootorikontrolleri number. Väärtus 0 või 1. (Kodulabor III puhul 1) * **//void unipolar_halfstep(unsigned char index, signed char direction, unsigned short num_steps, unsigned char speed)//** \\ Unipolaarse samm-mootori mootorikontrolleri poolsammumise juhtkäsk. Funktsioon on blokeeruv ehk seda täidetakse seni, kuni soovitud arv samme on tehtud. Parameetrid: * //index// - Mootorikontrolleri number. Väärtus 0 või 1. (Kodulabor III puhul 1) * //direction// - Pöörlemissuund. Väärtus -1 või +1. * //num_steps// - Poolsammude arv. * //speed// - Ühe sammu tegemise aeg millisekundites. * **//void bipolar_init(void)//** \\ Bipolaarse mootorikontrolleri juhtviikude seadistamine väljundiks. * **//void bipolar_halfstep(signed char direction, unsigned short num_steps, unsigned char speed)//** \\ Bipolaarse samm-mootori mootorikontrolleri poolsammumise juhtkäsk. Funktsioon on blokeeruv ehk seda täidetakse seni, kuni soovitud arv samme on tehtud. Parameetrid: * //direction// - Pöörlemissuund. Väärtus -1 või +1. * //num_steps// - Poolsammude arv. * //speed// - Ühe sammu tegemise aeg millisekundites. * **//void servomotor_init(unsigned char index)//** \\ Ühe servomootori juhtviikude väljundiks seadistamine ja taimer 1 seadistamine PWM režiimi. Parameetrid: * //index// - Servomootori number. Väärtus 0 või 1. (Kodulabor III puhul 1-4) * **//void servomotor_position(unsigned char index, signed short position)//** \\ Servomootori juhtkäsk. Kui juhitakse positsioneerivat servomootorit, siis muutub rootori asend, kui lõputult pöörlevat, siis muutub pöörlemise kiirus. Parameetrid: * //index// - Servomootori number. Väärtus 0 või 1. (Kodulabor III puhul 1-4) * //position// - Rootori asend või pöörlemiskiirus (olenevalt mootorist). Väärtus -100 kuni +100. 0 on keskasend või peatumine. ===== Näide ===== Järgnev näide demonstreerib kõiki teegi funktsioone. Järjest seadistatakse mootorikontrollerid ja liigutatakse mootoreid. #include int main(void) { // Alalisvoolu mootorikontrollerite 1 ja 2 seadistamine dcmotor_init(1); dcmotor_init(2); // Bipolaarse samm-mootori kontrolleri seadistamine bipolar_init(); // Servomootorite 0 ja 1 juhtsignaalide seadistamine servomotor_init(0); servomotor_init(1); // Üks alalisvoolu mootor pöörlema ühtpidi, teine teistpidi dcmotor_drive(1, -1); dcmotor_drive(2, +1); // Samm-mootori pööramine 100 kraadi ühele poole ja seejärel // 2 korda kiiremini teisele poole bipolar_halfstep(1, 100, 50); bipolar_halfstep(-1, 100, 25); // Servomootorite vastassuunda keeramine servomotor_position(0, -100); servomotor_position(1, +100); } Näide demonstreerib alalisvoolu mootori kiiruse etteandmist. #include int main(void) { unsigned char speed = 0; // Mootori initsialiseerimine dcmotor_drive_pwm_init(1, TIMER2_NO_PRESCALE); while(1) { speed = 100; // Mootorile valitud kiiruse etteandmine. dcmotor_drive_pwm(1, 1, speed); } }