Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:sensor:encoder [2014/10/09 13:40] raivo.sellet:examples:sensor:encoder [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~+<pagebreak>
 ====== Kooder ====== ====== Kooder ======
  
-//Vajalikud teadmised: [HW] [[et:hardware:homelab:digi]], [HW] [[et:hardware:homelab:combo]], [LIB] [[et:software:homelab:library:module:lcd_graphic]], [LIB] //+//Vajalikud teadmised:  
 +[HW] [[et:hardware:homelab:digi]], [HW] [[et:hardware:homelab:combo]], 
 +[LIB] [[et:software:homelab:library:module:encoder]], \\ 
 +[LIB] [[et:software:homelab:library:module:lcd_graphic]],  
 +[AVR] [[et:avr:timers]], [AVR] [[et:avr:interrupts]]//
  
 ===== Teooria ===== ===== Teooria =====
 [{{ :et:examples:sensor:kooder_optron.jpg?220|Optopaar}}] [{{ :et:examples:sensor:kooder_optron.jpg?220|Optopaar}}]
-[{{ :examples:sensor:encoder:kooder_kettad.png?300|Koodri ketas (vasakul suhteline, paremal absoluutne)}}] 
  
-Kooder on elektro-mehaaniline seade, mis muundab võlli pöördenurga või nurkkiiruse analoogsignaaliks või digitaalkoodiks. Olemas on veel lineaarkoodrid, mis erinevad pöördliikumisele mõeldud koodritest selle poolest, et koodri liikumine toimub mööda sirget. Muus osas on tööpõhimõte sarnane.+Kooder on elektro-mehaaniline seade, mis muundab võlli pöördenurga või nurkkiiruse analoogsignaaliks või digitaalkoodiks. Olemas on veel lineaarkoodrid, mis erinevad pöördliikumisele mõeldud koodritest selle poolest, et koodri liikumine toimub mööda sirget. Muus osas on tööpõhimõte sarnane. 
  
-Olemas on kahte peamist tüüpi koodreid: absoluutsed  ja suhtelised (loendavad). Absoluutse koodri väljund näitab jooksvat võlli asendit. Toite katkemise korral on asend peale toite sisselülitamist uuesti tuvastatav. Näitena on toodud lihtsa absoluutse koodri ketas, mida loetakse kolme anduri abil. Moodustuv binaarkood võimaldab ketta asendit mõõta 45 kraadiste sammude täpsusega.+Olemas on kahte peamist tüüpi koodreid: absoluutsed  ja suhtelised (loendavad). Absoluutse koodri väljund näitab jooksvat võlli asendit. Toite katkemise korral on asend peale toite sisselülitamist uuesti tuvastatav. Alloleval pildil olev parempoolne kooderketas on lihtne absoluutkoodri ketas, mida loetakse kolme anduri abil. Moodustuv binaarkood võimaldab ketta asendit mõõta 45 kraadiste sammude täpsusega.
  
 +[{{ :examples:sensor:encoder:kooder_kettad.png?300|Koodri ketas (vasakul suhteline, paremal absoluutne)}}]
 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, mida saab kasutada võlli nurkkiiruse leidmiseks. Ühe optopaariga koodrid võimaldavad impulsside sageduse järgi mõõta ainult pöörlemiskiirust. Pöörlemissuuna kohta informatsioon puudub.+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, mida saab kasutada võlli nurkkiiruse leidmiseks. Ühe optopaariga koodrid võimaldavad impulsside sageduse järgi mõõta ainult pöörlemiskiirust. Pöörlemissuuna kohta informatsioon puudub. Lisaks optilistele koodritele on laialt kasutusel Halli efektil põhinevad koodrid. Kooder koosneb vahelduva magnetväljaga andurikettast või püsimagnetist, mis pööreldes genereerib pooljuhis pingeimpulsse. Pingeimpulsid võimendatakse ja muudetakse kontrollerile saadetavaks digitaalseks signaaliks. Koodri signaalide lugemine on analoogne optiliste koodrite signaalide lugemise ja tõlgendamisega.
  
 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, tavaliselt katkestuste vahendusel, mis genereeritakse signaali tõusva või langeva frondi korral. Pöörlemissuuna saab määrata väljundkoodide võrdlemise abil. Näiteks, kui viimane väärtus on 00 ja uus väärtus 01, siis võll on pöördunud ühe poolsammu võrra kellaosuti liikumise suunas. 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, tavaliselt katkestuste vahendusel, mis genereeritakse signaali tõusva või langeva frondi korral. Pöörlemissuuna saab määrata väljundkoodide võrdlemise abil. Näiteks, kui viimane väärtus on 00 ja uus väärtus 01, siis võll on pöördunud ühe poolsammu võrra kellaosuti liikumise suunas.
  
-[{{ :et:examples:sensor:koodri_graafika.png?400|Koodri tööpõhimõte}}] +[{{:et:examples:sensor:koodri_graafika.png?350|Koodri tööpõhimõte}}] 
  
 ^ ^ 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, mis pööreldes genereerib pooljuhis pingeimpulsse. Pingeimpulsid võimendatakse ja muudetakse kontrollerile saadetavaks digitaalseks signaaliks. Koodri signaalide lugemine on analoogne optiliste koodrite signaalide lugemise ja tõlgendamisega. 
  
 ===== Praktika ===== ===== Praktika =====
Line 43: Line 45:
 #define NUM_ENCODERS 2 #define NUM_ENCODERS 2
  
-// Koodri pulside arvu määramine sekundis+// Koodri pulsside arvu määramine sekundis
 #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 katkestuse võimaldamine, mis genereeritakse langeva frondi tekkides+ // Välise katkestuse võimaldamine, genereeritakse langeva frondi tekkides
  switch (index)  switch (index)
  {  {
Line 105: Line 105:
 } }
  
-// Valitud kooderi nullimine+// Valitud koodri nullimine
 void encoder_reset_pulses(unsigned char index) void encoder_reset_pulses(unsigned char index)
 {  {
Line 113: Line 113:
 } }
  
-// Koodri pulside arvu loendamine+// Koodri pulsside arvu loendamine
 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 näide+// Kodulabori koodri kasutamise näidisprogramm
 // LCD-le kuvatakse koodri pulsside arv // LCD-le kuvatakse koodri pulsside arv
 #include <stdio.h> #include <stdio.h>
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, 1);+ lcd_gfx_goto_char_xy(3, 1);
  lcd_gfx_write_string("Kooder");  lcd_gfx_write_string("Kooder");
      
  // 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, "Pulsse: %d",pulses);+ sprintf(text, "Pulsse: %5d",pulses);
     
  lcd_gfx_goto_char_xy(0, 3);  lcd_gfx_goto_char_xy(0, 3);
  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))
  {  {
et/examples/sensor/encoder.1412862034.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0