This is an old revision of the document!


Table of Contents

 

Kiirendusandur

Teooria

Kiirendusandur

Kiirendusandurit kasutatase peamiselt kiiruste muutuste mõõtmiseks. Samuti saab kiirendusanduriga mõõta anduri nurka maapinna suhtes.

Elektroonikas kasutatakse kiirenduse mõõtmiseks tihti MEMS (Microelectromechanical system e mikro elektomehaaniline seade) andureid. Järgnevalt kirjeldame Freescale MMA seeria andurite tööpõhimõtet.

Kiirendus anduri g-raku skeem

Andur koosneb mikrofreesitud mahtuvuslikust andurelemendist (g-rakk) ja mõõte ning töötluselektroonikast. Mõõ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 tekkiv mahtuvus muutub vastavalt kiirendusele.

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.

Praktika

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.

//
// Kiirendus anduri testkood
// Kiirendusanduri kanalid on ühendatud ADC1-3 portidesse
// 
#include <homelab/pin.h>
#include <homelab/adc.h>
#include <homelab/module/lcd_gfx.h>
#include <homelab/xmega/clksys_driver.h>
 
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
	return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
 
//
// Põhiprogramm
//
int main(void)
{
	//Käivitame LCD
	lcd_gfx_init();
	lcd_gfx_write_string("Accelerometer");
 
	adc_init(ADC_REF_AREF,ADC_PRESCALE_128);
	// Lõputu tsükkel
	while (true)
	{
		char buffer[60];
		uint16_t x = adc_get_value(1);
		uint16_t y = adc_get_value(2);
		uint16_t z = adc_get_value(3);
 
		uint16_t x_map = map(x,950,1300,128,0);
		uint16_t y_map = map(y,1000,1400,0,160);
 
		sprintf(buffer,"x: %4d\ny: %4d\nz: %4d\n",x,y,z);
		lcd_gfx_goto_char_xy(0,2);
		lcd_gfx_write_string(buffer);
 
		lcd_gfx_drawPixel(x_map, y_map);
		_delay_ms(10);
	}
}
et/examples/sensor/accelerometer.1411990305.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