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/08 14:09] – Links to et:software:library:adc changed to et:software:homelab:library:adc 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 | + | Servomootori juhtsignaaliks on spetsiifiline |
| 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~~ | ||
| ===== Praktika ===== | ===== Praktika ===== | ||
| - | Kodulabori | + | Kodulabori |
| - | Taimer | + | Taimer tuleb seadistada PWM signaali |
| <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 52: | 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]); | ||
| + | |||
| // Taimer 1 seadistamine | // Taimer 1 seadistamine | ||
| Line 75: | Line 67: | ||
| } | } | ||
| - | // | + | // Servomootori positsiooni määramine |
| - | // Servomootori positsiooni määramine. | + | // Positsiooni parameeter on -100 kuni 100 % |
| - | // Positsiooni parameeter on -100 kuni 100 protsenti. | + | |
| - | // | + | |
| void servomotor_position(unsigned char index, signed short position) | void servomotor_position(unsigned char index, signed short position) | ||
| { | { | ||
| Line 96: | 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 // |
| <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 117: | 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.1265630944.txt.gz · Last modified: (external edit)
