This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:examples:sensor:encoder [2014/10/09 13:40] – raivo.sell | et:examples:sensor:encoder [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ~~PB~~ | + | < |
====== Kooder ====== | ====== Kooder ====== | ||
- | //Vajalikud teadmised: [HW] [[et: | + | //Vajalikud teadmised: |
+ | [HW] [[et: | ||
+ | [LIB] [[et: | ||
+ | [LIB] [[et: | ||
+ | [AVR] [[et: | ||
===== Teooria ===== | ===== Teooria ===== | ||
[{{ : | [{{ : | ||
- | [{{ : | ||
- | Kooder on elektro-mehaaniline seade, mis muundab võlli pöördenurga või nurkkiiruse analoogsignaaliks või digitaalkoodiks. Olemas on veel lineaarkoodrid, | + | Kooder on elektro-mehaaniline seade, mis muundab võlli pöördenurga või nurkkiiruse analoogsignaaliks või digitaalkoodiks. Olemas on veel lineaarkoodrid, |
- | Olemas on kahte peamist tüüpi koodreid: absoluutsed | + | Olemas on kahte peamist tüüpi koodreid: absoluutsed |
+ | [{{ : | ||
Suhtelise koodri väljund annab informatsiooni võlli liikumise kohta, mida saab edasi töödelda. Tüüpiliselt arvutatakse liikumise kiirus ja suund. Suhteline kooder ei võimalda peale toite kadumist võlli konkreetset asendit enam kindlaks teha. Suhteline kooder annab tsüklilist väljundsignaali ainult siis, kui võll pöörleb. | Suhtelise koodri väljund annab informatsiooni võlli liikumise kohta, mida saab edasi töödelda. Tüüpiliselt arvutatakse liikumise kiirus ja suund. Suhteline kooder ei võimalda peale toite kadumist võlli konkreetset asendit enam kindlaks teha. Suhteline kooder annab tsüklilist väljundsignaali ainult siis, kui võll pöörleb. | ||
- | Suhteline optiline kooder koosneb avade või lõhedega kettast ja optopaarist. Optopaar on IR-valgusdioodist ja fototransistorist koosnev süsteem, mille vahele on asetatud piludega kooderketas nii, et ketta pöörlemisel avad perioodiliselt katkestavad valguse ning seetõttu vastavalt lülitavad fototransistorit sisse ja välja. Selle tulemusena tekib fototransistori väljundis ristküliksignaal, | + | Suhteline optiline kooder koosneb avade või lõhedega kettast ja optopaarist. Optopaar on IR-valgusdioodist ja fototransistorist koosnev süsteem, mille vahele on asetatud piludega kooderketas nii, et ketta pöörlemisel avad perioodiliselt katkestavad valguse ning seetõttu vastavalt lülitavad fototransistorit sisse ja välja. Selle tulemusena tekib fototransistori väljundis ristküliksignaal, |
Võlli pöörlemissuuna kindlakstegemiseks on vaja lisada teine optopaar. Kui optopaarid on asetatud nii, et tekiks 90 kraadine faasinihe nende signaalide vahel on tegemist kvadratuur väljunditega. Optopaaride signaalide olekudiagramm on toodud juuresoleval pildil, kus optopaaride väljundeid on tähistatud A ja B. Väljundid loetakse tarkvaraliselt, | Võlli pöörlemissuuna kindlakstegemiseks on vaja lisada teine optopaar. Kui optopaarid on asetatud nii, et tekiks 90 kraadine faasinihe nende signaalide vahel on tegemist kvadratuur väljunditega. Optopaaride signaalide olekudiagramm on toodud juuresoleval pildil, kus optopaaride väljundeid on tähistatud A ja B. Väljundid loetakse tarkvaraliselt, | ||
- | [{{ : | + | [{{: |
^ ^ Kellaosuti liikumise \\ suunaline pöörlemine ^^ ^ Kellaosuti liikumise \\ vastassuunaline pöörlemine ^^ | ^ ^ Kellaosuti liikumise \\ suunaline pöörlemine ^^ ^ Kellaosuti liikumise \\ vastassuunaline pöörlemine ^^ | ||
Line 26: | Line 30: | ||
| 3 | 1 | 1 | | 0 | 1 | | | 3 | 1 | 1 | | 0 | 1 | | ||
| 4 | 1 | 0 | | 0 | 0 | | | 4 | 1 | 0 | | 0 | 0 | | ||
- | |||
- | Lisaks optilistele koodritele on laialt kasutusel Halli efektil põhinevad koodrid. Halli efekt seisneb eelpingestatud pooljuhis eelpingestusega ristisuunalise pinge indutseerimises magnetvälja mõjutusel, mille suurus sõltub magnetvälja tugevusest ja suund magnetvälja suunast. Kooder koosneb vahelduva magnetväljaga andurikettast või püsimagnetist, | ||
===== Praktika ===== | ===== Praktika ===== | ||
Line 43: | Line 45: | ||
#define NUM_ENCODERS 2 | #define NUM_ENCODERS 2 | ||
- | // Koodri | + | // Koodri |
#define ENCODER_TICKS (F_CPU / 8 / 256) | #define ENCODER_TICKS (F_CPU / 8 / 256) | ||
Line 68: | Line 70: | ||
// Katkestused | // Katkestused | ||
- | ISR(INT6_vect) | + | ISR(INT6_vect) { |
- | { | + | |
encoder_pulse(0); | encoder_pulse(0); | ||
} | } | ||
- | ISR(INT7_vect) | + | ISR(INT7_vect) { |
- | { | + | |
encoder_pulse(1); | encoder_pulse(1); | ||
} | } | ||
Line 82: | Line 82: | ||
void encoder_init(unsigned char index) | void encoder_init(unsigned char index) | ||
{ | { | ||
- | // Viigud sisendistamine väljundiks | + | // Viigu sisendiks seadistamine koos pull-up takistite lubamisega |
pin_setup_input_with_pullup(encoder_pins[index]); | pin_setup_input_with_pullup(encoder_pins[index]); | ||
- | // Väline | + | // Välise |
switch (index) | switch (index) | ||
{ | { | ||
Line 105: | Line 105: | ||
} | } | ||
- | // Valitud | + | // Valitud |
void encoder_reset_pulses(unsigned char index) | void encoder_reset_pulses(unsigned char index) | ||
{ | { | ||
Line 113: | Line 113: | ||
} | } | ||
- | // Koodri | + | // Koodri |
unsigned short encoder_get_pulses(unsigned char index) | unsigned short encoder_get_pulses(unsigned char index) | ||
{ | { | ||
Line 123: | Line 123: | ||
<code c> | <code c> | ||
- | // Kodulabori koodri kasutamise | + | // Kodulabori koodri kasutamise |
// LCD-le kuvatakse koodri pulsside arv | // LCD-le kuvatakse koodri pulsside arv | ||
#include < | #include < | ||
Line 137: | Line 137: | ||
char text[16]; | char text[16]; | ||
- | // Nupu seadmistamine | + | // Nupu seadistamine |
pin_setup_input_with_pullup(S2); | pin_setup_input_with_pullup(S2); | ||
Line 148: | Line 148: | ||
// LCD ekraani algseadistamine | // LCD ekraani algseadistamine | ||
lcd_gfx_init(); | lcd_gfx_init(); | ||
- | lcd_gfx_clear(); | + | lcd_gfx_clear(); |
- | lcd_gfx_backlight(true); | + | lcd_gfx_backlight(true); |
- | lcd_gfx_goto_char_xy(3, | + | lcd_gfx_goto_char_xy(3, |
lcd_gfx_write_string(" | lcd_gfx_write_string(" | ||
// Lõputu tsükkel | // Lõputu tsükkel | ||
- | while (true) | + | while (1) |
{ | { | ||
pulses = encoder_get_pulses(1); | pulses = encoder_get_pulses(1); | ||
// Teksti moodustamine. | // Teksti moodustamine. | ||
- | sprintf(text, | + | sprintf(text, |
lcd_gfx_goto_char_xy(0, | lcd_gfx_goto_char_xy(0, | ||
lcd_gfx_write_string(text); | lcd_gfx_write_string(text); | ||
- | // Nupp S2 alla vajutatud ? | + | // Nupp S2 alla vajutatud? |
if(button_read(S2)) | if(button_read(S2)) | ||
{ | { |