Projekt: Snímač teploty SMT160: Rozdiel medzi revíziami
Z SensorWiki
(→Zdrojový kód) |
|||
(13 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených) | |||
Riadok 1: | Riadok 1: | ||
− | |||
− | |||
− | |||
− | |||
*Vypracovali: | *Vypracovali: | ||
:::::'''Bc. Tivadar Solík''' | :::::'''Bc. Tivadar Solík''' | ||
Riadok 9: | Riadok 5: | ||
*Študijný odbor: '''Aplikovaná mechatronika''' | *Študijný odbor: '''Aplikovaná mechatronika''' | ||
− | *Ročník: '''2. Ing.''' | + | *Ročník: '''2. Ing.''' (2012) |
+ | |||
+ | |||
+ | === Zadanie: === | ||
+ | |||
+ | Zobrazte na LCD aktuálnu teplotu zmeranú snímačom teploty SMT 160 (meranie šírky impulzov). | ||
+ | [[Obrázok:SnimacTeplotySMT160.jpg]] | ||
− | + | '''Literatúra:''' | |
+ | |||
+ | * [http://www.smartec-sensors.com/en/products/temperature-en.html Product Page] (smartec.nl) | ||
+ | * [http://www.smartec.nl/pdf/DSSMT16030.PDF Datasheet] | ||
+ | * Ondřej Vitouš: ''[http://www.hw.cz/Teorie-a-praxe/Programovani/ART387-Jak-na-prevodnik-SMT160-30-92.html Jak na převodník SMT160-30-92]''. (hw.cz) | ||
+ | * Jan Řehák: ''[http://www.hw.cz/Produkty/Nove-soucastky/ART391-Prevodnik-teplota-strida-SMT160-30-92.html Převodník teplota/střída SMT160-30-92]''. (hw.cz) | ||
− | |||
Riadok 23: | Riadok 29: | ||
===Snímač teploty SMT160=== | ===Snímač teploty SMT160=== | ||
− | Snímač Smatrec SMT160 je kremíkový teplotný snímač s digitálným PWM výstupom. Jeho veľkou výhodou je možnosť priamého pripojenia k rôznym typom mikropočítačov bez potreby použitia A/D prevodu. | + | Snímač Smatrec SMT160 je kremíkový teplotný snímač s digitálným PWM výstupom. <br /> |
+ | Jeho veľkou výhodou je možnosť priamého pripojenia k rôznym typom mikropočítačov <br /> | ||
+ | bez potreby použitia A/D prevodu. | ||
− | ====Vlastnosti | + | ====Vlastnosti==== |
− | *Merací rozsah snímača: ''od -45°C do 150°C'' | + | * Merací rozsah snímača: ''od -45°C do 150°C'' |
− | *Absolútna presnosť: ''+-0.7°C'' | + | * Absolútna presnosť: ''+-0.7°C'' |
− | *Lineárný výstup v rámci: ''0.2°C'' | + | * Lineárný výstup v rámci: ''0.2°C'' |
− | *Maximalné rozlíšenie: ''0.005°C'' | + | * Maximalné rozlíšenie: ''0.005°C'' |
− | ====Typy púzdier | + | ====Typy púzdier==== |
V našom prípade išlo o typ TO 92 | V našom prípade išlo o typ TO 92 | ||
− | + | ::[[Súbor:1_housing.jpg]] | |
− | |||
− | |||
+ | :::'''Obr. 1: Typy zapúzdrení snímača SMT160''' | ||
+ | ====Zapojenie==== | ||
+ | Snímač sme priamo pripojili pomocou kontaktného poľa dosky ACROB a vodičov na port D mikroradiča ATmega 328P bez potreby ďalších komponentov resp. filtrácie. | ||
+ | ::[[Súbor:2 SMT 160 WIRE.jpg]] | ||
+ | :::'''Obr. 2: Zapojenie snímača do dosky ACROB''' | ||
+ | |||
====Výstupný signál snímača==== | ====Výstupný signál snímača==== | ||
− | *Výstupom je obdlžníkový signal s definovanou šírkou periódy v závislosti od meranej teploty. | + | * Výstupom je obdlžníkový signal s definovanou šírkou periódy v závislosti od meranej teploty. |
− | *Perióda výstupu je lineárne závislá od teploty podľa tejto rovnice: | + | * Perióda výstupu je lineárne závislá od teploty podľa tejto rovnice: |
− | + | ::::::'''D.C. = 0.320+0.00470*t''' | |
− | + | :::''D.C. = perióda signálu'' | |
− | + | :::''t = teplota v °C'' | |
− | *Príklad: | + | * Príklad: |
Výstup pri 0°C | Výstup pri 0°C | ||
− | + | :::''D.C. = 0.32 alebo 32%'' | |
+ | === LCD Modul Parallax=== | ||
+ | Dvojriadkový 8-znakový LDC display bez podsvietenia so štyrmi užívateľskými tlačidlami | ||
+ | |||
+ | ::[[Obrázok:ParallaxLCDAppMod.jpg]] | ||
+ | |||
+ | :::'''Obr. 3: LCD Terminal AppMod''' | ||
+ | |||
+ | ====Vlastnosti==== | ||
+ | |||
+ | * 2x8 LCD Displej bez podsvetlenia | ||
+ | * 4 Tlačítka | ||
+ | * Trimer na zmenu kontrastu | ||
+ | |||
+ | ====Technické parametre==== | ||
+ | |||
+ | * Napájanie: 5 V @ 15 mA | ||
+ | * Pripojenie: 4-Bit parallel interface (Hitachi HD44780 compatible) | ||
+ | * Rozmery: 60 x 50 x 20 mm | ||
+ | * Pracovná teplota: 0 až +70 °C | ||
+ | |||
+ | ====Zapojenie==== | ||
+ | [[Obrázok:Acrob_LCD_Schematic.png]] | ||
+ | :::'''Obr. 4: Zapojenie radiča Hitachi HD44780 pre LCD Terminal AppMod na mikroradič ATmega328P''' | ||
== Zdrojový kód == | == Zdrojový kód == | ||
− | Potrebné súbory: [[ | + | '''Potrebné súbory:''' <br /> |
+ | |||
+ | [[Médiá: ProjektSMT160.c | ProjektSMT160.c]] <br /> | ||
+ | [[Médiá: lcd_SMT160.c | lcd.c]] <br /> | ||
+ | [[Médiá: lcd_SMT160.h | lcd.h]] <br /> | ||
+ | [[Médiá: serial.c | serial.c]] <br /> | ||
+ | [[Médiá: serial.h | serial.h]] <br /> | ||
+ | ''Stiahnuť ako zip archív a so zdrojovým súborom:'' <br /> | ||
+ | [[Médiá: Source_files.zip | Source_files.zip]] <br /> | ||
− | Kód v jazyku C: | + | '''Kód v jazyku C:''' <br /> |
<source lang="c"> | <source lang="c"> | ||
#include <avr\io.h> | #include <avr\io.h> | ||
Riadok 102: | Riadok 145: | ||
if ( (desatina>3 & desatina<7) ) // podmienka na vypis desatinnej hodnoty a zaokruhlenie na | if ( (desatina>3 & desatina<7) ) // podmienka na vypis desatinnej hodnoty a zaokruhlenie na | ||
− | // pol stupna (kat. hod. | + | // pol stupna (kat. hod. presnosti merania -30 az 100 je 0.7) |
− | { | + | |
− | + | ||
+ | { // pri rozsahu 0 az 100 ratame presnost 0.5 | ||
+ | desatina = 5; //oblast najvacsej linearity prevodu - najvyssia pri 20°C | ||
} | } | ||
else { | else { | ||
Riadok 127: | Riadok 172: | ||
TCCR1A = 0b00000000; // T1 v mode timera | TCCR1A = 0b00000000; // T1 v mode timera | ||
TCNT1 = 0x0000; // inicializacia pocitadla (16-bit spodne+vrchne bity) | TCNT1 = 0x0000; // inicializacia pocitadla (16-bit spodne+vrchne bity) | ||
− | TIFR1 = (1<<ICF1); // | + | TIFR1 = (1<<ICF1); // navestie ICF1 bude automaticky zmazane po vykonani prerusenia |
− | |||
TIMSK1 = 0b00100000; // povolenie ICR preruseni | TIMSK1 = 0b00100000; // povolenie ICR preruseni |
Aktuálna revízia z 14:01, 18. november 2013
- Vypracovali:
- Bc. Tivadar Solík
- Bc. Pavol Šnyr
- Študijný odbor: Aplikovaná mechatronika
- Ročník: 2. Ing. (2012)
Obsah
Zadanie:
Zobrazte na LCD aktuálnu teplotu zmeranú snímačom teploty SMT 160 (meranie šírky impulzov).
Literatúra:
- Product Page (smartec.nl)
- Datasheet
- Ondřej Vitouš: Jak na převodník SMT160-30-92. (hw.cz)
- Jan Řehák: Převodník teplota/střída SMT160-30-92. (hw.cz)
Riešenie
Snímač teploty SMT160
Snímač Smatrec SMT160 je kremíkový teplotný snímač s digitálným PWM výstupom.
Jeho veľkou výhodou je možnosť priamého pripojenia k rôznym typom mikropočítačov
bez potreby použitia A/D prevodu.
Vlastnosti
- Merací rozsah snímača: od -45°C do 150°C
- Absolútna presnosť: +-0.7°C
- Lineárný výstup v rámci: 0.2°C
- Maximalné rozlíšenie: 0.005°C
Typy púzdier
V našom prípade išlo o typ TO 92
- Obr. 1: Typy zapúzdrení snímača SMT160
Zapojenie
Snímač sme priamo pripojili pomocou kontaktného poľa dosky ACROB a vodičov na port D mikroradiča ATmega 328P bez potreby ďalších komponentov resp. filtrácie.
Výstupný signál snímača
- Výstupom je obdlžníkový signal s definovanou šírkou periódy v závislosti od meranej teploty.
- Perióda výstupu je lineárne závislá od teploty podľa tejto rovnice:
- D.C. = 0.320+0.00470*t
- D.C. = perióda signálu
- t = teplota v °C
- Príklad:
Výstup pri 0°C
- D.C. = 0.32 alebo 32%
LCD Modul Parallax
Dvojriadkový 8-znakový LDC display bez podsvietenia so štyrmi užívateľskými tlačidlami
- Obr. 3: LCD Terminal AppMod
Vlastnosti
- 2x8 LCD Displej bez podsvetlenia
- 4 Tlačítka
- Trimer na zmenu kontrastu
Technické parametre
- Napájanie: 5 V @ 15 mA
- Pripojenie: 4-Bit parallel interface (Hitachi HD44780 compatible)
- Rozmery: 60 x 50 x 20 mm
- Pracovná teplota: 0 až +70 °C
Zapojenie
- Obr. 4: Zapojenie radiča Hitachi HD44780 pre LCD Terminal AppMod na mikroradič ATmega328P
Zdrojový kód
Potrebné súbory:
ProjektSMT160.c
lcd.c
lcd.h
serial.c
serial.h
Stiahnuť ako zip archív a so zdrojovým súborom:
Source_files.zip
Kód v jazyku C:
#include <avr\io.h>
#include "serial.h"
#include <stdio.h>
#include "lcd.h"
#include <avr/interrupt.h>
FILE mystdout = FDEV_SETUP_STREAM(sendchar, NULL, _FDEV_SETUP_WRITE);
volatile int nova_Zmena = 0; // premenna pre novu zmenu hrany signalu
volatile int predosla_Zmena = 0; // premenna pre staru zmenu hrany signalu
volatile char navestie_Zmeny = 0; // premenna pre urcenie spustenia vypisu teploty na display
unsigned int strieda = 0; // premenna na vypocet striedy signalu
unsigned int sirka = 0; // energeticka sirka PWM signalu
unsigned int perioda = 0; // perioda PWM signalu
int teplota; // premenna pre realnu teplotu
int desiatky,jednotky,desatina; // premenne pre vypis na display
ISR(TIMER1_CAPT_vect) // Timer 1 rutina na zachytenie prerusenia
{
TCCR1B = (TCCR1B ^ 0b01000000); // nastavenie sledovania hrany signalu
nova_Zmena = ICR1; // zapis zmeny hrany signalu do pomocneho registra ICR1
navestie_Zmeny = 1; // informacia o zmene hrany pre vypis a display
if (TCCR1B & 0b01000000) // nastavenie merania sirky pasma a periody signalu
sirka = (nova_Zmena - predosla_Zmena); // meranie sirky pri prechode z nabeznej hrany na dobeznu
else
{
perioda = (nova_Zmena - predosla_Zmena); // meranie periody pri prechode z nabeznej hrany na dalsiu
predosla_Zmena = nova_Zmena; // navestie na dalsiu zmenu
}
strieda = ((sirka*200)/perioda); // strieda v percentach x2
teplota = (((strieda -64)*2000)/47)/4; // vypocet vyslednej teploty pri refencii 0°C
desiatky = teplota / 100; // teplota po deleni 100, vypise na display (desiatky)
jednotky = (teplota/10) % 10; // teplota po delení 10 a modulo 10, tj po deleni 10 a zvysok
// po deleni 10, dostanem druhe cislo na display (jednotky)
desatina = teplota % 10; // teplota zvysok po deleni 10 ziskam desatinnu hodnotu
if ( (desatina>3 & desatina<7) ) // podmienka na vypis desatinnej hodnoty a zaokruhlenie na
// pol stupna (kat. hod. presnosti merania -30 az 100 je 0.7)
{ // pri rozsahu 0 az 100 ratame presnost 0.5
desatina = 5; //oblast najvacsej linearity prevodu - najvyssia pri 20°C
}
else {
desatina = 0;
}
};
int main(void)
{
inituart();
//stdout = &mystdout; // Odteraz funguje printf();
DDRD = 0b00001110; // inicializaci portu a prislusnych pinov
lcdInit4(); // inicializacia display-a
_delay_ms(10);
DDRB = 0x00; // Set ICR - Port B, pin0 na Vstup
TCCR1B = 0b00000010; // nastavene na dobeznu hranu a preddelicky 8-bit FAST PWM.
TCCR1A = 0b00000000; // T1 v mode timera
TCNT1 = 0x0000; // inicializacia pocitadla (16-bit spodne+vrchne bity)
TIFR1 = (1<<ICF1); // navestie ICF1 bude automaticky zmazane po vykonani prerusenia
TIMSK1 = 0b00100000; // povolenie ICR preruseni
sei(); // povolenie globalneho prerusenia
lcdControlWrite(0b01000000);
_delay_us(10);
lcdControlWrite(0x00+0x80); // zapis na prvy riadok display-a
_delay_ms(10);
lcdDataWrite('T');
lcdDataWrite('e');
lcdDataWrite('p');
lcdDataWrite('l');
lcdDataWrite('o');
lcdDataWrite('t');
lcdDataWrite('a');
lcdDataWrite(':');
while(1)
{
if(navestie_Zmeny)
{
lcdControlWrite(0x40+0x80); //zapis na druhy riadok display-a
_delay_ms(10);
lcdDataWrite('0'+desiatky); //desiatky
lcdDataWrite('0'+jednotky); //jednotky
lcdDataWrite('.'); //desatinna ciara
lcdDataWrite('0'+desatina); //desatinne cislo
lcdDataWrite(0b11011111); //binarny kod stupna (°)
lcdDataWrite('C');
_delay_ms(1000); // oneskorenie, vypis na druhy riadok display-a každých 5 sec
navestie_Zmeny = 0; // vynulovanie navestia zmeny
}
}
return 0;
}