Table of Contents

 

Potentsiomeeter

Vajalikud teadmised: [HW] Kasutajaliidese moodul, [ELC] Pingejagur, [AVR] Analoog-digitaalmuundur, [LIB] Analoog-digitaalmuundur, [LIB] 7-segmendiline LED indikaator

Teooria

Potentsiomeetri elektriline tähis

Potentsiomeeter on kolme kontaktiga muuttakisti, mille kahe äärmise kontakti vahel on fikseeritud takistus ja äärmiste ning keskmise kontakti vahel muutuv takistus. Potentsiomeeter on põhimõtteliselt ka pingejagur, kus takistid moodustuvad äärmiste kontaktide ja keskmise kontakti vahel. Potentsiomeetri (inglise keeles potentiometer) sünonüüm on reostaat (inglise keeles rheostat).

Tüüpiline potentsiomeeter koosneb voolu juhtiva pinnaga takistist ja sellel liuglevast liikuvast kontaktist ehk liugurist. Mida lähemal on liugur takisti servale, seda väiksem on liuguri ja selle serva vaheline takistus ning vastupidi. Takisti rolli võib täita kas suure eritakistusega materjal või takistustraadist keritud mähis. Potentsiomeetreid on olemas nii lineaarse kui ka logaritmilise takistuse ja positsiooni suhtega. Suurem osa potentsiomeetritest on pööratavad (näide kõrvaloleval pildil), kuid eksisteerib ka liugtakisteid. Potentsiomeetrite eriliik on digitaalsed potentsiomeetrid, milles takistuse reguleerimine toimub mikroskeemi sees vastavalt juhtsignaalidele.

Praktika

Pööratav potentsiomeeter

Kodulabori moodulil asub pööratav 10 kΩ potentsiomeeter. Potentsiomeeter on ühendatud maa ja mikrokontrolleri toite potentsiaalide vahele ning liugur ühendub mikrokontrolleri analoog-digitaalmuunduriga (inglise keeles analog digital converter, lühend ADC). Selliselt ühendatuna saab potentsiomeetri väljundpinget reguleerida vahemikus 0 V kuni toitepinge. Kui ka AVR-i analoog-digitaalmuunduri võrdluspinge võtta AVCC viigult, saab potentsiomeetri väljundpinge digitaalse väärtuse kogu selle reguleerimispiirkonna ulatuses. Kodulabor III puhul on maksimaalseks pingeks AVCC viigul 2,7 V kuid sisenditesse võib lasta kuni 3,3 V pinget. AVR ADC kasutamiseks on Kodulabori teegis kirjutatud järgmised funktsioonid:

Funktsioon adc_init tuleb välja kutsuda programmi alguses, millega seatakse AVR-i ADC töövalmis. Valida tuleb võrdluspinge kas AREF või AVCC viigult või hoopis sisemine pinge. Lisaks tuleb määrata muunduri töötakt, täpsemalt sagedusjaguri tegur, millega jagatakse läbi mikrokontrolleri töötakt. Kõrgema taktiga käib muundamine kiiremini, kuid võib kannatada mõõtmistäpsus. Mõõtmiseks on adc_get_value funktsioon, millega saab valida kanali ja mis tagastab 16-bitise täisarvuna 10-bitise (Kodulabor III puhul 11-bitise) mõõtmistulemuse. Mõõtmisfunktsioon on blokeeruv ehk see jääb ootama muundamise lõppu ja tagastab väärtuse alles siis, kui mõõtmine on tehtud.

Järgnevad teegifunktsioonide näited on toodud ATmega2561 ADC muunduri kohta.

// ADC käivitamine
void adc_init(adc_reference reference, adc_prescale prescale)
{
	// ADC töötamise lubamine, sagedusjaguri valimine
	ADCSRA = bit_mask(ADEN) | (prescale & 0x07);
 
	// Võrdluspinge valimine
	ADMUX = (reference & 0x03) << REFS0;
}
 
// ADC määratud kanali väärtuse muundamine
unsigned short adc_get_value(unsigned char channel)
{	
	// Kanali määramine
	ADMUX = (ADMUX & 0xF0) | (channel & 0x0F);
 
	// Muundamise alustamine
	bit_set(ADCSRA, ADSC);
 
	// Muundamise lõpu ootamine
	while (bit_is_set(ADCSRA, ADSC))
	{
		asm volatile ("nop");
	}
 
	// Tulemuse tagastamine
	return ADCW;
}

Näiteprogrammis kasutatakse äsja selgitatud analoog-digitaalmuunduri ja 7-segmendilise LED numberindikaatori teeki. Analoog-digitaalmuunduri väärtus korrutatakse kümnega ja jagatakse 2048-ga, et saada väärtus vahemikus 0 kuni 9. Väärtus 10 ei saa tekkida, sest C-keeles arvutatakse jagatises täisosa väärtus, mitte ümardatud tulemus. Täpsema mõõtetulemuse saamiseks kasutatakse muunduri tulemuse keskmistamise funktsiooni. Tulemusena näitab töötav programm vastavalt potentsiomeetri asendile indikaatoril numbreid 0 kuni 9.

Tähele tuleks panna seda, kuhu konkreetsel riistvaral potentsiomeetri analoogsisend on ühendatud. Näiteks on Kodulabor II Andurimoodulil see ühendatud analoogkanalisse 3, aga Kodulabor III Kasutajaliidese moodulil analoogkanalisse 15.

// Kodulabori potentsiomeetri näidisprogramm
// 7-segmendilisel numberindikaatoril kuvatakse potentsiomeetri asend
#include <homelab/adc.h>
#include <homelab/module/segment_display.h>
 
// Robootika Kodulabor II
//#define ADC_CHANNEL 3
 
// Robootika Kodulabor III
#define ADC_CHANNEL 15
 
// Põhiprogramm
int main(void)
{
	int value;
 
	// 7-segmendilise numberindikaatori seadistamine
	segment_display_init();
 
	// ADC muunduri seadistamine
	adc_init(ADC_REF_AVCC, ADC_PRESCALE_16);
 
	// Lõputu tsükkel
	while (1)
	{
		// Kanali 4-kordselt ümardatud väärtuse lugemine
		value = adc_get_average_value(ADC_CHANNEL, 4);
 
		// Näidu sajandike näitamine
		// Kodulabor II
		//segment_display_write(value * 10 / 1024);
		// Kodulabor III
		segment_display_write(value * 10 / 2048);
	}
}