Mikrokontroléry rady AVR – analógový komparátor

Táto časť bude taká odľahčená. Popíšem v nej analógový komparátor, ktorý obsahujú MCU tejto rady. Analógový komparátor sa hodí všade tam kde treba porovnávať dve hodnoty napätia, kde jedna je referenčná (nemení sa – podľa nej sa porovnáva) a druhá hodnota sa mení a v ich závislosti sa mení výstup komparátora. U klasických analógových komparátoroch zostavených z OZ je výstupom hodnota saturačného napätia OZ (buď kladná alebo záporná), tu nás ako výstup bude zaujímať buď log1 alebo log0.

Analógový komparátor (ďalej AK) v MCU AVR porovnáva vstupné hodnoty napätia na (neinvertujúcom) vstupe AIN0 (PB2) a (invertujúcom) vstupe AIN1 (PB3). Ak je napätie na vstupe AIN0 väčšie ako napätie na vstupe AIN1 je výstup komparátora nastavený do log1.

Výstup komparátora môžeme nasmerovať na:
-> funkciu č/č1 Input Capture
-> prerušenie od AK

Prerušenie sa môže uskutočniť na dobežnú alebo nabežnú hranu alebo na zmenu stavu.

Vstup AIN1 (invertujúci) môžeme presmerovať aj na ADC multiplexor – podmienkou je aby bol vypnutý AD prevodník a zapísaný bit ACME v registri SFIOR do log1.

Ako referenčný vstup sa využíva neinvertujúci (AIN0) a ten môžeme nastaviť aj na vnútornú referenciu – BANDGAP REFERENCE – zápisom bitu ACBG do registra ACSR. Hodnotu tohto napätia som v datasheet-e nenašiel, ale nameral som ju cca 1.2 V (keď dochádzalo k prehodení stavov na výstupe komparátora – viď príklad).

obr1

Obr. 1 Bloková schéma analógového komparátora

Vstupno-výstupné register AK

obr2

Obr. 2 Register ACSR – Analog Comparator Control and Status Register

ACD – Analog Comp Disable – log1 -> AK je vypnutý
ACBG – Analog Comparator Bandgap Select – log1 -> vnútorná bandgap referencia je pripojená na neinvertujúci vstup AK
ACO – Analog Comparator Output – výstup AK
ACI – Analog Comparator Interrupt Flag – log1 -> ak došlo k prerušeniu
ACIE – Analog Comparator Interrupt Enable – log1 -> aktivácia prerušenia od AK
ACIC – Analog Comparator Input Capture Enable – log1 -> zapína funkciu Input Capture v č/č1 na zachytenie hodnoty časovača od signálu AK
ACIS1:0 – Analog Comparator Interrupt Mode Select – vyber typu prerušenia – viac v tabuľke

obr3

Obr. 3 Nastavenie typu prerušenia od AK

Nasledujúca tabuľka ukazuje nastavenie ADC multiplexora ako vstup do invertujúceho vstupu AK.

obr4

Obr. 4 Multiplexor pre AK

Príklad

Ako príklad som zostavil jednoduchy program, ktorý testuje výstup AK a stav zobrazuje na LED PC0. Ako referenciu som použil vnútornu BANDGAP (na fotkach vidno jej zmeranie, ako som spomínal cca 1.2V). Vstupom na invertujúci vstup AK je ADC1 na ktorý je pripojený trimer (ako delič napätia) teda jeho točením sa mení vstupné napätie na ADC1 a vyhodnocuje sa. Schému sem nejdem dávať keďže sa jedna iba o trimer na ADC1 a led na pine PC0.

#include <avr/io.h>
#include <avr/interrupt.h>

int main()
{
	SFIOR |= (1<<ACME);	// ADC multiplexor na AIN1
	ADCSRA = (0<<ADEN);	// vypnutie ADC kvoli presmerovanie MUX
	ADMUX |= (1<<MUX0);	// nastavenie ADC1 na AIN1

	ACSR = (1<<ACBG);	// nastavenie BANDGAP referencie na AIN0

	DDRC = 1;			// PC0 vystupny
	PORTC = 0;

	sei();

	while(1)
	{
		if (ACSR & (1<<ACO))	// ak je vystup AK log1 LED PC0 svieti
		{
			PORTC = 1;
		}
		else PORTC = 0;
	}

	return 0;
}

rsz_1foto1

Obr. 5 Foto1

rsz_1foto2

Obr. 6 Foto2

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

Môžete použiť tieto HTML značky a atribúty: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>