Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
Hotfix release available: 2024-02-06b "Kaos". upgrade now! [55.2] (what's this?)
Hotfix release available: 2024-02-06a "Kaos". upgrade now! [55.1] (what's this?)
New release available: 2024-02-06 "Kaos". upgrade now! [55] (what's this?)
Hotfix release available: 2023-04-04b "Jack Jackrum". upgrade now! [54.2] (what's this?)
users:prommisse

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
users:prommisse [2014/09/25 16:18] – vytvořeno prommisseusers:prommisse [2017/04/21 20:57] (current) – [Analog] prommisse
Line 1: Line 1:
  
 +~~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í                 | <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ů.
 +<code cpp>
 +Serial s(p9, p11);
 +CSENSOR * sensor = new CDS18B20(p29, "DS18B20", & s);
 +float temperature = sensor -> Read();
 +</code>
 +
 +==== 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.
 +<code cpp>
 +//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);
 +}
 +</code>