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:accelerometer [2014/09/26 07:40] – Homelab clock_init eemaldatud heikopikneret:examples:sensor:accelerometer [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Kiirendusandur ====== ====== Kiirendusandur ======
 +//Vajalikud teadmised:
 +[HW] [[et:hardware:homelab:digi]], [HW] [[et:hardware:homelab:combo]], \\
 +[AVR] [[et:avr:adc]], 
 +[LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:lcd_graphic]]//
  
 ===== Teooria ===== ===== Teooria =====
-[{{  :examples:sensor:accelerometer:kiirendusandur.png?100|Kiirendusandur}}] +[{{ :examples:sensor:accelerometer:kiirendusandur.png?180|Kiirendusandur}}] 
-Kiirendusandurit kasutatase peamiselt kiiruste muutuste mõõtmiseks. Samuti saab kiirendusanduriga mõõta anduri nurka maapinna suhtes.+Kiirendusandurit kasutatakse peamiselt kiiruste muutuste mõõtmiseks. Samuti saab kiirendusanduriga mõõta anduri nurka maapinna suhtes. Kiirendusandurid on konstrueeritud ja valmistatud mikroelektromehaanika tehnoloogial (inglise keeles //Microelectromechanical system//, lühend MEMS), kus elektroonika ja mehaanika komponendid on integreeritud mikrotasandil.
  
-Elektroonikas kasutatakse kiirenduse mõõtmiseks tihti MEMS (//Microelectromechanical system// e mikro elektomehaaniline seadeandureidJärgnevalt kirjeldame Freescale MMA seeria andurite tööpõhimõtet.+Tüüpiline kiirendusandur koosneb mikrofreesitud mahtuvuslikust andurelemendist (g-rakkja mõõte- ning andmetöötluselektroonikastMõõteelement koos elektroonikaga on suletud vee ja õhukindlalt anduri korpusesse. G-rakk on mikrokiipi söövitatud polüsilikooni kiht, mis koos kahe fikseeritud mahtuvusliku plaadiga moodustab kaks kondensaatorit. Kui andurile rakendada mingi kiirendus, siis g-raku keskmine kiht liigub vastavalt ühe või teise fikseeritud plaadi poole ning kondensaatorite mahtuvus muutub proportsionaalselt kiirendusele. Andurisse sisse ehitatud elektroonika tegeleb g-rakkude mõõtmisega ning analüüsimisega. Elementidest tulev informatsioon võimendatakse, filtreeritakse ning teisendatakse pingeks, mida saab otse ühendada mikrokontrolleri sisendiga. Tavaliselt lisatakse anduritesse ka 0G väljund, millega on võimalik kontrollerisse tekitada katkestus juhul kui andur tuvastab 0G ehk kukkumise.
  
-[{{  :examples:sensor:accelerometer:mems.jpg?200|Kiirendus anduri g-raku skeem}}]+===== Praktika =====
  
-Andur koosneb mikrofreesitud mahtuvuslikust andurelemendist (g-rakk) ja mõõte ning töötluselektroonikastMõõteelement koos elektroonikaga on suletud vee ja õhukindlalt anduri korpusesseG-rakk on mikrokiipi söövitatud polüsilikooni kihtmis koos kahe fikseeritud mahtuvusliku plaadiga moodustab kaks kondensaatorit. Kui andurile rakendada mingi kiirendussiis g-raku keskmine kiht liigub vastavalt ühe või teise fikseeritud plaadi poole ning tekkiv mahtuvus muutub vastavalt kiirendusele.+Kodulabori lisakomplektiga on kaasas lihtne 3-teljeline MMA7361L kiibil põhinev kiirendusandurKiirendusandur võimaldab valida kahe erineva mõõtepiirkonna vahel, milleks on ±1.5g ja ±6gAnduril on sisseehitatud temperatuuri kompensatsioonmadalpääsu filtertestfunktsioon ja madala voolutarbega puhkeoleku režiim.
  
-Andurisse sisse ehitatud elektroonika tegeleb g-rakkude mõõtmisega ning analüüsimisega. Elementidest tulev informatsioon võimendatakse, filtreeritakse ning teisendatakse pingeks, mida saab kasutaja mikrokontrolleriga mõõta. Tavaliselt lisatakse anduritesse ka 0G väljund, millega on võimalik kontrollerisse tekitada katkestus juhul kui andur tuvastab 0G e kukkumise.+[{{ :examples:sensor:accelerometer:mma7361l_pinout.png?250|Kiirendusanduri viigud}}]
  
-===== Praktika =====+^ Tähis plaadil ^ Signaali tüüp ^ Kirjeldus ^  
 +| 0GD | Digitaalväljund | 0G tuvastamise \\ signaal | 
 +| X   | Analoogväljund | X-telje väljundsignaal | 
 +| Y   | Analoogväljund | Y-telje väljundsignaal | 
 +| Z   | Analoogväljund | Z-telje väljundsignaal | 
 +| G   | Toide | Maa | 
 +| +   | Toide | Toide 3.0-3.6 V | 
 +| G   | Toide | Maa | 
 +| SLEEP | Digitaalsisend | Puhkerežiim, \\ madal olek: aktiivne | 
 +| GS| Digitaalsisend | Režiimi valik | 
 +| ST| Digitaalsisend | Enesetesti funktsioon |
  
-MMA7361L 3-teljelise kiirendusanduri lugemiseks on vaja kasutada kontrolleril kolme ADC sisendit (1 iga kanali jaoks). Näitekood näitab kanalitest mõõdetud ADC väärtust ning joonistab kiirendusanduri kanalite info ka graafilisele LCDle.+Kiirendusanduri lugemiseks on vaja kasutada kontrolleril kolme ADC sisendit (1 iga telje jaoks). Teiste anduri funktsioonide jaoks saab kasutada digitaalsignaale. Näitekood näitab kanalitest mõõdetud ADC väärtust ning joonistab kiirendusanduri lugemid ka punktidena LCD-le.
  
 <code c> <code c>
-// +// Kodulabori kiirendusanduri näidisprogramm 
-// Kiirendus anduri testkood +// Loetakse kiirendusanduri kolme telje väärtused ja kuvatakse need ekraanil 
-// Kiirendusanduri kanalid on ühendatud ADC1-3 portidesse +// X ja Y telje näidud  visualiseeritakse tingliku punktina ekraanil
-// +
 #include <homelab/pin.h> #include <homelab/pin.h>
 #include <homelab/adc.h> #include <homelab/adc.h>
 #include <homelab/module/lcd_gfx.h> #include <homelab/module/lcd_gfx.h>
-#include <homelab/xmega/clksys_driver.h> 
  
 +// Väärtuste teisendusfunktsioon
 long map(long x, long in_min, long in_max, long out_min, long out_max) long map(long x, long in_min, long in_max, long out_min, long out_max)
 { {
Line 32: Line 45:
 } }
  
-// 
 // Põhiprogramm // Põhiprogramm
-// 
 int main(void) int main(void)
 { {
- //Käivitame LCD+ // LCD ekraani algseadistamine
  lcd_gfx_init();  lcd_gfx_init();
- lcd_gfx_write_string("Accelerometer");+ lcd_gfx_write_string("Kiirendusandur"); 
 + 
 + // ADC muunduri algseadistamine 
 + adc_init(ADC_REF_AVCC,ADC_PRESCALE_128);
  
- adc_init(ADC_REF_AREF,ADC_PRESCALE_128); 
  // Lõputu tsükkel  // Lõputu tsükkel
- while (true)+ while (1)
  {  {
  char buffer[60];  char buffer[60];
 +
 + // x, y, z telgede analoogväärtuse lugemine
  uint16_t x = adc_get_value(1);  uint16_t x = adc_get_value(1);
  uint16_t y = adc_get_value(2);  uint16_t y = adc_get_value(2);
  uint16_t z = adc_get_value(3);  uint16_t z = adc_get_value(3);
  
 + // Kiirendusanduri telgede lugemite teisendamine ekraani
 + // mõõtkavasse, et neid saaks punktidena ekraanil kuvada
  uint16_t x_map = map(x,950,1300,128,0);  uint16_t x_map = map(x,950,1300,128,0);
  uint16_t y_map = map(y,1000,1400,0,160);  uint16_t y_map = map(y,1000,1400,0,160);
  
 + // Lugemite teisendamine tekstiks ja LCD ekraanile kuvamine
  sprintf(buffer,"x: %4d\ny: %4d\nz: %4d\n",x,y,z);  sprintf(buffer,"x: %4d\ny: %4d\nz: %4d\n",x,y,z);
  lcd_gfx_goto_char_xy(0,2);  lcd_gfx_goto_char_xy(0,2);
  lcd_gfx_write_string(buffer);  lcd_gfx_write_string(buffer);
  
 + // Punktide joonistamine
  lcd_gfx_drawPixel(x_map, y_map);  lcd_gfx_drawPixel(x_map, y_map);
- _delay_ms(10);+ sw_delay_ms(10);
  }  }
 } }
 </code> </code>
et/examples/sensor/accelerometer.1411717209.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