Martin Kotol,106550, UREL, FEEC, VUT Brno
xkotol00@ stud. feec.vutbr.cz
V tomto
projektu se budu zabívat regulací jasu LED diod. Tato regulace bude realizována
pomocí mikroprocesoru AT MEGA 644, který bude generovat PWM modulaci a v závislosti
na střídě této modulace budu regulovat jas LED diod jejich rozsvěcováním a
zhasínáním.
Napájení je realizováno jednoduchým stabilizátorem s LM7805 a jeho katalogovým zapojením. Pro ochranu jsou zde ještě přidány diody D5 a D4. Kondenzátor C4, který je na vstupu obvodu pro lepší vyhlazení vstupního napětí. Já jsem zvolil vstupní napětí 12V. Toto napětí může být samozřejmě jiné, ale v rozmezí vstupních napětí obvodu 7805 to nejčastěji bývá do +35V.
Obr.1:Schéma
zapojení napájecího obvodu
Samotné řízení
svitu LED diod je realizováno mikrokontrolérem AT MEGA 644. Jako zdroj
hodinového kmitočtu jsem použil externí krystalový oscilátor s kmitočtem 16
MHz. Pro univerzálnost zapojení jsem vyvedl vetšinu pinů mikrokontroléru na
konektory a mikrokontrolér jsem osadil do patice. Pro napájení nizkoodběrových
zařízení jsem umístil na desku plošných spojů ještě konektor s výstupným
napětím +5V. Programování mikrokontroléru je řešeno přes SPI sběrnici.
Na vstup A/D převodníku ( PA7) jsem přivedl napětí z fotodiody, která snímá okolní osvětlení a toto osvětlení převádí na napětí. Na základě tohoto napětí mikrokontrolér zvolí střídu PWM signálu. Je-li okolní osvětlení dostatečně velké tak LED diody svítí maximálně a pokud je tma tak LED diody svítí jen málo. Výstup PWM je na portu D ( PD6). Tento signál řídí spínání MOS-FET tranzistoru, který následné rozsvěcuje a zhasíná LED diody. Toto zhasínání a rozsvěcování musí být alespoň 100 krát za vteřinu aby se to oku jevilo jako kontinuální svit, jinak bude zřetelné blikání a to je velice nepříjemné.
Obr.2:
Zapojení řídící čísti obvodu
Obr.3:
Zapojení tranzistoru a LED diod
Zdrojový kod
pro mikrokontrolér
#include<avr/io.h> // hlavičkový soubor pro mikrokontrolér
ATmega644
#include <stdio.h>
#define F_CPU 16000000UL // frekvence hodinového signálu
#include<avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>
int i; //proměná
pro smičku for
int prevedena_hodnota_osvetleni;
int max_porovnavaci_konstanta=65;
int min_porovnavaci_konstanta=30;
//---- Inicializece AD
prevodniku--------------------------------------------
void AD_init (void)
{
ADCSRA|=(1<<ADEN)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0);
ADMUX
|=
(1<<REFS1)|(0<<REFS0)|(1<<ADLAR)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0);//
nastavení pinu PD7 a referenčního napětí 1,1V
}
//---------------------------------------------------------------------------
//----AD_převod--------------------------------------------------------------
void AD_prevod (void)
{
ADCSRA|=
(1<<ADSC); //start
AD prevodu
loop_until_bit_is_set(ADCSRA,ADIF); //cekam dokud prevod neskonci
prevedena_hodnota_osvetleni=0;
prevedena_hodnota_osvetleni=ADCH; //prevedena hodnota osvetleni na napeti
}
//---------------------------------------------------------------------------
int main( void )
{
// nastavení casovace pro system
TCNT1 = 0;
TCCR1A |= 0;
TCCR1B |= _BV(CS10);
DDRD = 0xff; // nastaveni portu D
jako vystupni
DDRA = 0x00; // nastaveni
portu A jako vstupni
for(;;)
{
AD_init(); //inicializace AD prevodniku
AD_prevod (); // AD prevod
for (i=25;i<=70;i++)
{
if(((i<=prevedena_hodnota_osvetleni)
& (i<max_porovnavaci_konstanta))|
//svítí za normálního
osvětlení funguje PWM
((prevedena_hodnota_osvetleni<min_porovnavaci_konstanta)&(i<min_porovnavaci_konstanta))| //svítí minimálně při minimálním
osvětlení
(prevedena_hodnota_osvetleni>max_porovnavaci_konstanta)) //svítí maximálně za
maximálního osvětlení
{
PORTD=0b10000000;
//rozsvit LED
}
else
{
PORTD=0b00000000;
//zhasni LED
}
}
}
}
Tento řídící
program je velice jednoduchý. Nejprve se nastaví časování pro systém dále se nastaví
port D jako výstupní a port A jako vstupní následně program skočí do nekonečné
smyčky kde se inicializuje A/D převodník provede se A/D převod. V následném
cyklu je porovnávána hodnota cyklu for s hodnotou převedenou v A/D převodníku a
podle výsledku se bud LED rozsvítí nebo zhasne.
Zadaný úkol se podařilo splnit. Při běžném denním osvětlení LED diody svítí maximálně, jakmile se začne stmívat a intenzita osvětlení klesne tak se LED diody začnou postupně zhášet, až klesne osvětlení pod určitou mez tak se zhášení zastaví a zůstane nastavené jen minimální osvětlení. Podstatného vylepšení by se docílilo přepsáním cyklu for, který porovnává svoji hodnotu s hodnotou z A/D převodníku. Případně by se dal využit PWM generátor zabudovaný přímo v mikrokontroléru. Další vylepšení by se docílilo tím, že by se dopsaly do programu další cykly pro další fotodiody. Mohly by jich být až 8, protože mikrokontrolér má 8 vstupů pro A/D převodník. Tím by bylo možno regulovat až 8 LED osvětlení nezávisle.
[1] Datasheed obvodu LM7805 dostupné na WWW :
http://www.datasheetarchive.com/LM7805-datasheet.html
[2] Datasheed obvodu AT MEGA 644 dostupné na WWW :
http://www.atmel.com/products/microcontrollers/avr/megaavr.aspx?tab=documents
Obr.3:Řídící část s mikrokontrolérem
Obr.4:Řídící část a LED diody