~~DISCUSSION:off~~
====== PELTIER ======
{{ :škola:předměty:mi-aak:final.jpg?nolink&300|}}Přípravek MI-PVS-PELT představuje jednoduchý regulační obvod pro regulaci teploty kapaliny. Tato kapalina je umístěna uvnitř v hliníkové nádobě a její teplota je ovlivňována pomocí peltiérova článku. Po přípravku jsou rozmístěny tři druhy teplotních senzorů, které pomáhají kontrolovat teplotu článku a samotné kapaliny.
Pro ovládání je možné použít sériové rozhraní RS232 a mechanického rotačního enkodéru.
===== Literatura =====
*[[https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf|DS18B20 - Programmable Resolution 1-Wire Digital Thermometer]]
* [[http://www.nxp.com/documents/data_sheet/LM75A.pdf|LM75A - Digital temperature sensor and thermal watchdog]]
* [[https://www.gme.cz/data/attachments/dsh.530-109.1.pdf|PT100 - Specification of PT Thermal Sensor]]
* NORDIC nRF51822 mkit
===== Zapojení a ovládání HW =====
==== 1-Wire ====
Zapojení 1 - Wire
^ Pin ^ Funkce ^ Poznámka ^
| P0_29 (IN/OUT) | DATA | Žádné zařízení není napájené z datového vodiče |
1 - Wire teploměry
Zapojení 1 - Wire
^ Adresa ^ Zařízení ^ Specifikace ^ Umístění ^
| 0x28,0xee,0x63, 0x73, 0x1f,0x16, 0x02, 0xb4 | DS18B20 | spec | Peltiérův článek, uvnitř boxu |
| 0x28, 0xFF, 0x15, 0xe6, 0x64, 0x15, 0x03, 0x6c | DS18B20 | spec | Uvnitř kapaliny |
==== I2C ====
Zapojení I2C
^ Pin ^ Funkce ^
| P0_22 (IN/OUT) | SDA |
| P0_20 (IN/OUT) | SCL |
| P0_12 (IN/OUT) | Výstup teplotního hlídače LM75A umístěného na chladiči |
^ Adresa ^ Zařízení ^ Specifikace ^ Umístění ^
| 0x48 | LM75A | spec | Chladič |
| 0x49 | LM75A | spec | DPS (není osazen) |
==== Analog ====
Zapojení analogových zařízení
^ Pin ^ Zařízení ^ Specifikace ^ Umístění ^
| P0_1 (ANALOG IN) | PT100 | spec | Peltérův článek, vně boxu |
| P0_3 (ANALOG IN) | PT100 | spec | Chladič |
Hodnoty nutné k výpočtu elektrického odporu teplotního senzoru:
^ Název ^ Značení ^ Hodnota ^
| Vstupní napětí | | 2,9 V |
| Hodnota měřícího resistoru | | 4600 Ω |
| Zesílení operačního zesilovače | | 23 |
Pro korekci případného offsetu operačního zesilovače byly na DPS umístěny dva trimry. Měřící piny offsetu jsou umístěny pod mini usb konektorem. Pro správnou funkčnost by napětí na pinech PT1 a PT1- (PT2 a PT2-) mělo být stejné.
Výpočet napětí na teplotním senzoru provedeme následujícím vztahem
kde je hodnota z AD převodníku mezi 0 a 1.
Výpočet elektrického odporu teplotního senzoru :
==== Ovládací prvky ====
^ Pin ^ Funkce ^^
| P0_9 | TX | Sériové rozhraní RS232 |
| P0_11 | RX | ::: |
| P0_21 | Kanál A | Kvadraturní dekodér |
| P0_23 | Kanál B | ::: |
==== Řízení Peltiérova článku ====
**Pozor na přehřívání článku!**
V módu chlazení dojde k přehřátí článku přibližně za 10 minut, pokud není zapnutý ventilátor. Při módu ohřevu může dojít k přehřátí už po několika sekundách, pokud nebude uvnitř vložená hliníková nádoba na vodu.
**Nikdy nezapínejte ohřev na 100 % výkon.** Dojde k přehřátí článku, které by mohlo vést k jeho zničení. Bezpečný výkon v režimu ohřevu je pro ladění 40%.
^ Pin ^ Funkce ^ Ovládání ^^
| P0_24 (OUT) | Ovládání výkonu článku pomocí PWM | Žádný výkon | 0 |
| ::: | ::: | Maximální výkon | 1 |
| P0_29 (OUT) | Přepínání polarity proudu | Chlazení | 0 |
| ::: | ::: | Ohřev | 1 |
| P0_30 (OUT) | Ovládání ventilátoru | Zapnuto | 0 |
| ::: | ::: | Vypnuto | 1 |
===== API =====
==== Čtení senzorů ====
Pro ovládání senzorů byla vytvořen abstraktní třída CSensor a třídy reprezentující teplotní senzory z této třídy dědí.
Jedná se o:
* CDS18B20
* CLM75A
* CPT100
Ukázka použití API pro čtení ze senzorů.
Serial s(p9, p11);
CSENSOR * sensor = new CDS18B20(p29, "DS18B20", & s);
float temperature = sensor -> Read();
==== Kvadraturní Dekodér ====
Kvadraturní dekodér je reprezentován třídou CQdec. Tato třída je vytořena pomocí návrhového vzoru singleton. Tím je zajištěno, že nedojde k výskytu dvou instancí této třídy v jednom kódu. Její inicializace probíhá pomocí metody CQdec * Get_Instance( PinName channel_A, PinName channel_B, uint32_t prescaler, void (* callback)( int ) = NULL)); Jedná se o tzv. singleton konstruktor. Při druhém zavolání této funkce v jednom programu bude vrácen nulový ukazatel.
Dekodér je reprezentován pomocí vnitřního čítače. Při otáčení napravo hodnota v čítači roste, nalevo zase klesá. Jelikož enkodér vygeneruje při otočení o jednu pozici více pulsů, je třeba v singleton konstruktoru předat také hodnotu předděličky pulsů.
V signleton konstruktoru je předáván také ukazatel na callback funkci, která se zavolá v přerušovací rutině od dekodéru při otočení.
Jako parametr je této funkci předána změněná hodnota vnitřního čítače.
//callback pro udalost na kvadraturnim dekoderu.
Serial s(p9, p11);
void event( int counter_value );
{
s.printf("Hodnota citace dekoderu je: %d\r\n", counter_value);
}
int main( void )
{
CQdec * QDec1 = Get_Instance(p21, p23, 2, event);
while(1);
}