Uživatel:Vicarpet

Z MAM wiki

Přejít na: navigace, hledání

petr vičar


Obsah

vybrana semestralni prace:

- možnost kalibrace na lokálni teplotu


Ovládání ventilátoru teplovzdušného rozvodu

Myslenka: k mikroprocesoru pripojen dvojmistny sedmisegmentovy displey - zobrazuje stridave nastavenou teplotu vs. teplotu skutecnou pomoci dvou tlacitek regulace nastavene teploty vetrak spinan tranzistorem mereni teploty: nejspise zdroj referencniho napeti + delic termistor, resistor(mozna vymyslim i neco presnejsiho) pri prekladu definovana konstanta tolerance k odchylkam(pri odchylce 1 stupen chladit na 0%...100% vykonnu vetraku)

nejaky zakladni nastrel, viz schema (schema je priblizne, popisuje myslenku, ne presne zapojeni, to budu muset upravit podle dostupnych soucastek) schema 3,3V bude realizovano nejspise stabilizatorem zakmity od tlacitek reseny softwarove zdrovak do Eagle



Ukoly

funkce void nastav(int uroven)
nastavi uroven 0 az N-1 na pcm vystupu (zaklady na jednom cviceni)

zjisteni teploty - precteni hodnoty z A/D prevodniku+nejaka korekce
int zjistiteplotu()
<b>korekci zdiskutovat</b>

probouzeni
jednoduse jednou za x ms + pri stisku tlacitka

ovladani tlacitkama
inkrementace/dekrementace nejake hodnoty, bacha na zakmity, (asi udelam ja)
void xyz () // edituje promenou nastavena teplota

funkce zobrazeni teploty
prevod binarni cislo na dve binarni hodnoty (mod,div) a zobrazeni
void zobrazteplotu(int)

Myslenka systému zobrazeni

 void zobraz(int cislo)
 {
 //prvni cislo
 PORTA=mod(cislo,10);
 _delay_ms(1);
 PORTD=PORTD|0x01;
 _delay_ms(1);
 PORTD=PORTD&0xFE;
 _delay_ms(1);
 //druhy cislo
 PORTA=div(cislo,10);
 _delay_ms(1);
 PORTD=PORTD|0x02;
 _delay_ms(1);
 PORTD=PORTD&0xFD;
 _delay_ms(1);
 }

Myslenka systému regulace chlazeni (pseudokod)

nejmensi rozlisitelna jednotka je pro nase potreby jeden stupen.

nastaveni:

Kzahrivani - (0-chladi,1-zahryva)- nastavuje zda ovladany prvek snizuje nebo zvysuje teplotu
n - pocet urovni intenzity aktivity prvku (napriklad vetrak sepnut pomoci pcm 0-9 pulzu z doby 9->n=10)
K - odchylka o jeden stupen zpusoby zapnuti na uroven 1*K (v pripade o n stupnu udela n*K az do hodnoty n)
Tnastavena - udrzovana teplota
Treal - zmerena teplota

funkce nastavuroven - nastavi uroven predanou v parametru 0-vypnuto, N-1 maximalni vykon

deltaT=(Treal-Tnastavena)*(-1)^Kzahrivani;
if(deltaT>0)
 {
   uroven_chlazeni_tmp=deltaT*K;
   if(uroven_chlazeni_tmp>N-1)
   {
     uroven_chlazeni_tmp=N-1;
   }
   nastavuroven(uroven_chlazeni_tmp);
 }
else
 {
   nastavuroven(0);//(vypnuto)
 }

Zakmity

Proste tlačítko neudelá normální prechod 0-1, ale párkrát zakmitá, takze se objevi cca neco takovýdleho ..01000110010001111111... Vyresíme jednoduse, pokud prijde interup pockame cca 20ms a pak teprve prectem hodnotu, jde to resit i hw, ale tohle je jednodussí.

První nástřeli tlačítek v C

- jsou to dvě tlačítka, jedno má teplotu o stupeň snížit a druhé zvýšit, porty jsou podle schématu


#include <avr/io.h> 
#include <avr/iom168.h> 
#include <util/delay.h> 

volatile unsigned char teplota;

void main (void){ 

// nastaveni portu D na vstupy

  PORTD=0x00;
  DDRD=0x00; 

....zde jsou draci

  }

void preruseni (void)
 { //jen osetruji aby jsme nepodtekli/nepretekli
//sem jeste zakazani preruseni
       _delay_ms(10); 
   	if(PIND.2==0&&teplota!=100)teplota++;
	if(PIND.3==0&&teplota!=0)teplota--;
//sem povoleni preruseni
  } 

Měření teploty

Tady bych se přikláněl k měření přes A/D převodník s teploměrem LM35

Řeší problém kalibrace (vnitřní kompenzací teploty) sám o sobě (dokonce je kalibrován na °C, má velmi malou spotřebu, rozlišení 10mV/°C), tak uvidíme, jak se k tomu vyjádří případně vedoucí cvičení. Pouzdro asi ještě doladíme, zatím LM35DZ v TO-92 (pakliže nebude třeba měřit záporné teploty), vychází nejlevněji.

Jiří Zikmund 19. 4. 2010, 17:16 (UTC)

Tým

Petr Vičar
Jachym Simak - simakjac@fel.cvut.cz
Jiří Zikmund
Osobní nástroje