Hotfix release available: 2026-07-14c "Mort".
upgrade now! [57.3] (what's this?)
Hotfix release available: 2026-07-14b "Mort".
upgrade now! [57.2] (what's this?)
Hotfix release available: 2026-07-14a "Mort".
upgrade now! [57.1] (what's this?)
New release available: 2026-07-14 "Mort".
upgrade now! [57] (what's this?)
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.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| users:prommisse [2017/04/05 20:45] – [Zařízení 1-Wire] prommisse | users:prommisse [2017/04/21 20:57] (current) – [Analog] prommisse | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~DISCUSSION: | ||
| + | |||
| + | |||
| + | ====== PELTIER ====== | ||
| + | {{ : | ||
| + | Pro ovládání je možné použít sériové rozhraní RS232 a mechanického rotačního enkodéru. | ||
| + | |||
| + | ===== Literatura ===== | ||
| + | |||
| + | *[[https:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * NORDIC nRF51822 mkit | ||
| + | |||
| + | |||
| + | |||
| + | ===== Zapojení a ovládání HW ===== | ||
| + | ==== 1-Wire ==== | ||
| + | Zapojení 1 - Wire | ||
| + | ^ Pin ^ Funkce ^ Poznámka | ||
| + | | P0_29 | ||
| + | |||
| + | 1 - Wire teploměry | ||
| + | Zapojení 1 - Wire | ||
| + | ^ Adresa | ||
| + | | 0x28, | ||
| + | | 0x28, 0xFF, 0x15, 0xe6, 0x64, 0x15, 0x03, 0x6c | DS18B20 | ||
| + | |||
| + | ==== 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 | ||
| + | | Vstupní napětí | ||
| + | | Hodnota měřícího resistoru | ||
| + | | Zesílení operačního zesilovače | < | ||
| + | |||
| + | <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é. | ||
| + | </ | ||
| + | |||
| + | Výpočet napětí na teplotním senzoru < | ||
| + | |||
| + | < | ||
| + | U_{PT} = \frac{V_{adc} \cdot U_{VCC}}{A} | ||
| + | </ | ||
| + | |||
| + | kde < | ||
| + | |||
| + | Výpočet elektrického odporu teplotního senzoru < | ||
| + | |||
| + | < | ||
| + | R_{T} = \frac{U_{PT} \cdot R_m }{U_{VCC} - U_{PT}} | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Ovládací prvky ==== | ||
| + | |||
| + | ^ Pin | ||
| + | | 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 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%. | ||
| + | </ | ||
| + | |||
| + | ^ Pin | ||
| + | | P0_24 (OUT) | Ovládání výkonu článku pomocí PWM | Žádný výkon | ||
| + | | ::: | ::: | Maximální výkon | 1 | | ||
| + | | P0_29 (OUT) | Přepínání polarity proudu | ||
| + | | ::: | ::: | Ohřev | ||
| + | | P0_30 (OUT) | Ovládání ventilátoru | ||
| + | | ::: | ::: | Vypnuto | ||
| + | |||
| + | ===== 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, | ||
| + | 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, | ||
| + | |||
| + | 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(" | ||
| + | } | ||
| + | |||
| + | int main( void ) | ||
| + | { | ||
| + | CQdec * QDec1 = Get_Instance(p21, | ||
| + | while(1); | ||
| + | } | ||
| + | </ | ||