et:examples:motor:servo
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:motor:servo [2010/02/12 17:18] – mikk.leini | et:examples:motor:servo [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | < | ||
| ====== Servomootor ====== | ====== Servomootor ====== | ||
| - | //Vajalikud teadmised: [HW] [[et: | + | //Vajalikud teadmised: |
| + | [HW] [[et: | ||
| + | [AVR] [[et:avr:timers]], [AVR] [[et: | ||
| + | [LIB] [[et: | ||
| ===== Teooria ===== | ===== Teooria ===== | ||
| Line 9: | Line 13: | ||
| [{{ : | [{{ : | ||
| - | RC (lühend, | + | RC (inglise keeles // |
| Servomootori juhtsignaaliks on spetsiifiline pulsilaiusmodulatsiooni (PWM) signaal, kus pulsi laius määrab ära rootori asendi. Signaali perioodiks on 20 ms (sagedus 50 Hz) ja kõrge poolperioodi laiuseks 1-2 ms. 1 ms tähistab rootori üht äärmist asendit ja 2 ms teist rootori äärmist asendit. 1,5 ms tähistab rootori keskasendit. | Servomootori juhtsignaaliks on spetsiifiline pulsilaiusmodulatsiooni (PWM) signaal, kus pulsi laius määrab ära rootori asendi. Signaali perioodiks on 20 ms (sagedus 50 Hz) ja kõrge poolperioodi laiuseks 1-2 ms. 1 ms tähistab rootori üht äärmist asendit ja 2 ms teist rootori äärmist asendit. 1,5 ms tähistab rootori keskasendit. | ||
| Traditsiooniline RC servomootor kannab ka analoog-servomootori nime. Põhjus on selles, et viimasel kümnendil tekkisid ka nii-öelda digitaalsed servomootorid. Nende kahe vahe seisneb selles, et analoog-servomootoris juhitakse mootorit sellesama 50 Hz PWM sisendsignaaliga, | Traditsiooniline RC servomootor kannab ka analoog-servomootori nime. Põhjus on selles, et viimasel kümnendil tekkisid ka nii-öelda digitaalsed servomootorid. Nende kahe vahe seisneb selles, et analoog-servomootoris juhitakse mootorit sellesama 50 Hz PWM sisendsignaaliga, | ||
| - | |||
| - | ~~CL~~ | ||
| - | ~~PB~~ | ||
| ===== Praktika ===== | ===== Praktika ===== | ||
| - | Kodulabori | + | Kodulabori |
| - | Taimer | + | Taimer tuleb seadistada PWM signaali tekitamise režiimi, kus taimeri maksimaalne väärtus on määratud ICR registriga. Taimeri taktijaguri ja programmis muudetava maksimaalse väärtusega saab täpselt ära määrata servomootori juhtimiseks vajaliku PWM signaali sageduse. Taimeri võrdlusregistriga saab määrata kummagi PWM signaali kõrge poolperioodi pikkuse. Taimeritel on nimelt spetsiaalsed võrdlusüksused, |
| <code c> | <code c> | ||
| - | // | + | // Taimeri väärtus PWM täisperioodi (20 ms) saavutamiseks |
| - | // Taimeri väärtus PWM täisperioodi (20 ms) saavutamiseks. | + | // F_CPU on mikrokontrolleri taktsagedus, |
| - | // F_CPU on mikrokontrolleri taktsagedus, | + | |
| - | // ja 50 hertsiga. | + | |
| - | // | + | |
| #define PWM_PERIOD | #define PWM_PERIOD | ||
| - | // | ||
| // PWM servo keskasend (1,5 ms / 20 ms) | // PWM servo keskasend (1,5 ms / 20 ms) | ||
| // Keskasend saadakse täisperioodist 15/200 võtmisega | // Keskasend saadakse täisperioodist 15/200 võtmisega | ||
| - | // | ||
| #define PWM_MIDDLE_POS | #define PWM_MIDDLE_POS | ||
| - | // | + | // Kordamistegur, |
| - | // Kordamistegur, | + | |
| // +1 liidetakse selleks, et poolperiood kindlasti ulatuks 1 ja 2 ms | // +1 liidetakse selleks, et poolperiood kindlasti ulatuks 1 ja 2 ms | ||
| - | // piiridesse või siis natuke üle. | + | // piiridesse või siis natuke üle |
| - | // | + | |
| #define PWM_RATIO | #define PWM_RATIO | ||
| - | // | + | // Viikude |
| - | // Viikude | + | |
| - | // | + | |
| static pin servo_pins[2] = | static pin servo_pins[2] = | ||
| { | { | ||
| Line 53: | Line 45: | ||
| }; | }; | ||
| - | // | + | // Määratud servomootori |
| - | // Määratud servomootori | + | |
| - | // | + | |
| void servomotor_init(unsigned char index) | void servomotor_init(unsigned char index) | ||
| { | { | ||
| - | // PWM signaali | + | // PWM signaali |
| pin_setup_output(servo_pins[index]); | pin_setup_output(servo_pins[index]); | ||
| Line 77: | Line 67: | ||
| } | } | ||
| - | // | ||
| // Servomootori positsiooni määramine | // Servomootori positsiooni määramine | ||
| - | // Positsiooni parameeter on -100 kuni 100 protsenti | + | // Positsiooni parameeter on -100 kuni 100 % |
| - | // | + | |
| void servomotor_position(unsigned char index, signed short position) | void servomotor_position(unsigned char index, signed short position) | ||
| { | { | ||
| Line 98: | Line 86: | ||
| </ | </ | ||
| - | Näiteprogramm kasutab kirjeldatud Kodulabori teegi funktsioone. Programmi alguses pannakse esimese servomootori PWM signaali genereeriv taimer tööle // | + | Näiteprogramm kasutab kirjeldatud Kodulabori teegi funktsioone. Programmi alguses pannakse esimese servomootori PWM signaali genereeriv taimer tööle // |
| - | + | ||
| - | ~~PB~~ | + | |
| <code c> | <code c> | ||
| - | // | + | // Kodulabori mootorite mooduli servomootori |
| - | // Kodulabori mootorite mooduli servomootori | + | |
| - | // testprogramm. | + | |
| - | // | + | |
| #include < | #include < | ||
| #include < | #include < | ||
| - | // | ||
| // Põhiprogramm | // Põhiprogramm | ||
| - | // | ||
| int main(void) | int main(void) | ||
| { | { | ||
| Line 121: | Line 102: | ||
| // Mootori seadistamine | // Mootori seadistamine | ||
| - | servomotor_init(0); | + | servomotor_init(1); |
| // Lõputu tsükkel | // Lõputu tsükkel | ||
| - | while (true) | + | while (1) |
| { | { | ||
| - | // Potentsiomeetrist positsiooni lugemine ja servo- | + | // Potentsiomeetrist positsiooni lugemine ja servomootori |
| - | // mootori | + | // piirkonda teisendamine |
| - | position = ((short)adc_get_value(3) - (short)512) / (short)5; | + | // Kodulabor II puhul tuleb lugeda vastavat ADC kanalit ning kasutada |
| + | // järgmist valemit: | ||
| + | // | ||
| + | | ||
| - | // Servomootori positsiooni määramine | + | // Servomootori positsiooni määramine |
| - | servomotor_position(0, position); | + | servomotor_position(1, position); |
| } | } | ||
| } | } | ||
| </ | </ | ||
et/examples/motor/servo.1265987880.txt.gz · Last modified: (external edit)
