Table of Contents
~~DISCUSSION:off~~
PELTIER
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
- 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í | <math>U_{VCC}</math> | 2,9 V |
Hodnota měřícího resistoru | <math>R_m</math> | 4600 Ω |
Zesílení operačního zesilovače | <math>A</math> | 23 |
<WRAP center round info 60%> 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é. </WRAP>
Výpočet napětí na teplotním senzoru <math>U_{PT}</math> provedeme následujícím vztahem
<math> U_{PT} = \frac{V_{adc} \cdot U_{VCC}}{A} </math>
kde <math>V_{adc}</math> je hodnota z AD převodníku mezi 0 a 1.
Výpočet elektrického odporu teplotního senzoru <math>R_T</math>:
<math> R_{T} = \frac{U_{PT} \cdot R_m }{U_{VCC} - U_{PT}} </math>
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
<WRAP center round important 60%> 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. </WRAP>
<WRAP center round alert 60%> 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%. </WRAP>
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); }