UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET KATEDRA ZA ELEKTRONIKU SMER: EMT PREDMET: SISTEMI ZA AKIVIZICIJU PODATAKA PROJEKAT SISTEM ZA MERENJE TEMPERATURE POMOĆU NTC OTPORNIKA PROFESOR Prof. Dr Branislav Petrović ASISTENT STUDENTI Mr Goran Nikolić Dušan Petrović 13509 Aleksandar Zlatković 13510 u Nišu 24.6.2013 godine
Sadržaj 1. Zadatak... 3 2. Blok šema i princip rada sistema... 4 3. Električna šema sistema... 5 3 Linearizacija prenosne funkcije NTC otpornika... 9 4 Procedeure za izračunavanje temperature na osnovu odmerenih vrednosti sa ADC... 14 4.1. Konfiguracija kontrolera... 14 4.2. Glavni program... 17 2 P a g e
1. Zadatak Projektovati sistem za akviziciju podataka koji treba da omogući merenje do osam temperature, prikaz rezultata merenja na LCD displeju I vezu ka drugim sistemima preko dva nezavisna RS485 komunikaciona kanala. SIstem prijektovati na bazi mikrokotrolera C8051F545. Temperaturni merni opseg treba da iznosi najmanje 25+/-55 stepeni a rezolucija merenja 0.1 stepen. Rezultate merenja treba ažurirati na svaku sekundu. Kao temperaturne senzore koristiti NTC otpornike nominalne otpornosti 2.2k i koeficienta B =3900. Otporna mreža za polarizaciju NTC otpornika treba da se napaja stabilnim izvorom od 5V. Obezbediti prenaponsku zaštitu senzorskih ulaza od napona većih od 5V i manjih od 0V. Multipleksiranje analognih signala realizovati pomoću kola CD4051. AD konverziju vršiti pomoću ugrađenog 12-bitnog ADC u mikrokontroleru, koji ima merni opseg od 0-2.5V. Koristiti unutrašnji izvor referentnog napona Vref=2.5V. Kao rezultat, projekat sadrži: 1. Električnu šemu sistema 2. Linearizaciju NTC otpornika 3. Osnovne procedure za izračunavanje temperature na osnovu odmerenih vrednosti sa ADC 3 P a g e
2. Blok šema i princip rada sistema Senzor 1 Senzor 2. AMUX Kondicioner ADC.. Senzor 8 LCD uc C8051F545 Slika 1. Blok šema sistema Sistem koji projektujemo meri temperature pomoću senzora. U našem slučaju imamo 8 NTC otpornika koji predstavljaju senzore. Svaki od njih je povezan na jedan od analognih ulaza multipleksera. Selektorski ulazi multipleksera su povezani sa mikrokontrolerom tako da on određuje koji će senzor biti selektovan. Svakih 100ms se čita po jedan senzor, što je realizovano tajmerom koji se nalazi u mikrokontroleru. Svakih 100ms čita se jedan ulaz multipleksera, tj napon na jednom senzoru. Izlaz multipleksera vodi se preko kondicionera na AD konvertor. Kondicioner podešava nivo napona na granicu referentnog napona AD konvertora. AD konvertor vrši konverziju analognog ulaza u 12 bitnu digitalnu reč. Ova reč se nakon određenih transformacija vodi na LCD displej gde se prikazuje kao krajnji rezultat merenja temperature. 4 P a g e
3. Električna šema sistema U nastavku će biti data detaljna šema sistema i objašnjeni njeni delovi. Slika 2. Šema zaštite jednog senzora Senzor se može direktno povezati na multiplekser, ali postoji mogućnost da dodje do njegovog pregorevanja u slučaju da je na njega doveden napon veći od 5V, ili manji od 0V. Ukoliko se takav napon javi, može da se desi da ne pregori samo senzor već i neke druge komponente kao što su multiplekser, kondicioner ili čak i mikrokontroler. Zbog toga moramo obezbediti adekvatnu zaštitu, kako od napona većih od 5V, tako i od onih manjih od 0V. Ta zaštita se sastoji od dve diode i otpornika. Ako na ulaz dodje napon veći od 5V, provodi dioda D1, jer je njena katoda povezana na 5V. Time će sprečiti da visok napon stigne do ostalih komponenata i uništi ih. Sa druge strane, ako se javi negativan napon, provešće dioda D2, jer je njena anoda povezana na masu. Otpornik R2 služi da ograniči vrednost struje ukoliko dodje do napona dosta većeg od 5V (reda veličine 12V), i time zaštiti diode od pregorevanja. 5 P a g e
Slika 3. Senzori sa zaštitom, multiplekser, I kondicioner Na Slici 3 prikazana je detaljna električna šema ulaznog stepena sa multiplekserom, otpornicima za polarizaciju senzora i zaštitnim diodama. Svaki senzor povezan je na jedan od analognih ulaza multipleksera. Između izlaza multipleksera i ulaza AD konvertora nalazi se kolo za kondicioniranje. Kolo za kondicioniranje u ovom slučaju ima funkciju da prilagodi dinamički opseg signala sa izlaza senzora, odnosno multipleksera, na merni opseg AD konvertora. Dinamički opseg na izlazu senzora, na osnovu šeme sa Sl. 2, iznosi od 0 do 5 V. Merni opseg AD konvertora definisan je referentnim naponom ugrađenog ADC i iznosi 2.5 V. Kondicioner se sastoji od operacionog pojačavača (neinvertujućeg) i od dva otpornika vrednosti 2.2K, koji predstavljaju prosti razdelnik napona i na izlazu obezbeđuju napon od 2.5V. Ispred razdelnika neophodno je staviti operacioni pojačavač čija je ulazna impedansa beskonačna, da bi se sprečio uticaj otpornosti prethodnog stepena na otpornike razdelnika napona. 6 P a g e
Slika 4. Mikrokontroler, napajanje, LCD displej I blok za serijski prenos Na Slici 4 prikazan je mikrokontroler C8051F545 sa svim svojim periferijama. Pin P2.2 predstavlja analogni ulaz AD konvertora. Pinovi P2.5-P2.7 su selektorski izlazi koji su povezani na selektorske ulaze multipleksera. Ovim pinovima se kontroliše koji će senzor biti selektovan. Sistem se napaja preko dvopinskog konektora. Kako se mikrokontoler napaja sa 5V, potreban nam je stabilan napon od 5V. Upravo u te svrhe koristimo kolo stabilizatora napona LM7805. Dioda D1, postavljena je kao test dioda. Ona služi za proveru napajanja. Kada je napajanje uključeno, dioda svetli. Mikrokontroler vrši neka podešavanja displeja pre samog početka rada. Potrebno je izvršiti odredjenu inicijalizaciju, slanjem odredjenih vrednosti na RS(Register Select), E(Enable) i RW(Read/Write). Pinovi RS i E povezani sun a pinove kontrolera P0.6 i P0.7, respektivno. Displeju se podaci šalju preko pinova DB0-DB7, koji su povezani na pinove kontrolera P1.0-P1.7. Displej takodje ima pin za podešavanje pozadinskog osvetljenja. Pozadinsko osvetljenje se podešava potenciometrom. Na ovoj šemi P1 ne predstavlja sam displej, već konektor na ploči na koji se postavlja displej. Header 4 je konektor za programiranje kontrolera. 7 P a g e
Kolo MAX485 se koristi za serijsku komunikaciju RS485 ili RS422. Povezano je na pinove UART0RX i UART0TX mikrokontrolera. To je ustvari primopredajnik male snage. Svako kolo poseduje drajver i jedan prijemnik. Slew Rate drajvera ovog kola nije ograničen, i dozvoljava prenos brzinom i do 2,5 Mbps. Svi delovi kola koriste napajanje od 5V. Zaštićena su od preterane potrošnje snage mogućnošću termalnog gašenja kola. Uglavnom se koriste za poludupleks komunikaciju. Ovo kolo ustvari predstavlja interfejs ka fizičkom sloju za prenos podataka pri RS485 komunikaciji. RS485 interfejs se sastoji iz upredene parice s oznakama A i B i zajedničkog uzemljenja GND. Kondenzator se koristi za filtriranje napona i eliminisanje smetnji na napajanju. Opcioni otpornik R3 koji se nalazi na priključnim krajevima RS485 interfejsa služi za prilagodjenje impedanse. On se stavlja u slučaju da se sistem nalazi na kraju komunikacionog interfejsa. 8 P a g e
3 Linearizacija prenosne funkcije NTC otpornika Neki tipovi senzora imaju tipičnu nelinearnu karakteristiku, koja se može objasniti na osnovu fizičkog modela. U ovom slučaju kalibracija se može upotrebiti tako što se najpre primeni sistemska linearizacija. Zaostale slučajne varijacije nelinearnosti se onda mogu kalibrisati korišćenjem neke generalne linearizacione metode. Postojeća sistemska greška lakše će biti korigovana sistemskom linearizacijom nego interpolacijom zasnovanom na višesturkim kalibracionim merenjima. U našem slučaju koristićemo Piece-wise metodu za linearizaciju koja se vrši na sledeći način: Umesto pamćenja kompletne prenosne karakteristike senzora u velikoj memoriji, može se koristiti manja memorija i pamtiti samo koeficijenti modela koje opisuje senzor. Možemo izvršiti merenja izlaznog signala senzora za mali skup poznatih ulaznih signala. Ovim merenjima dobijamo čvorove prenosne karakteristike senzora. Između susednih čvorova se povlače prave linije definisane sa y = a n *x+b n. Ovim linijama vršimo Piece-wise linearnu interpolaciju (PW), i dobijamo f pwl (x). Na osnovu ovih linearnih segmenata može se izvršiti jednostavno procesiranje da bi se dobila linearna prenosna kriva. U svakom podopsegu se primenjuje korekcija pojačanja i ofseta. Sada je potrebno samo upamtiti tačke koje definišu granice podopsega. MEMORIJA Izlazni signal senzora PWL Detektovani ospeg ofset i pojacanje Kalibrisani izlazni signal f(x) Ulazni signal ADC ASP ili DSP DAC Ulazni signal Slika 5. Piece wise linearni metod za kalibraciju linearnosti Kao senzor temperature koristi se NTC otpornik. 9 P a g e
Slika 6. Zavisnost otpornost NTC otpornika od temperature Zavisnost otpornosti NTC otpornika od temperature data je sledećom formulom: R T R N e 1 B( T 1 T N ) R T : otpornost NTC termistora na temperaturi T R N : otpornost NTC termistora na relativnoj temperaturi TN B : konstanta koja predstavlja nagib R/T krive i koja zavisi od materijala od koga je napravljen NTC otpornik. e : osnova prirodnog logaritma ( e = 2.71828) T1 T 2 B ln T 2 T1 R1 R2 dt dr R 1 10 P a g e
Slika 7. Zavisnost napona NTC otpornika od temperature Zavisnost napona NTC otpornika od temperature data je sledećom formulom(rx je polarizacioni otpornik): Rt Vo Vcc Rt Rx 11 P a g e
Slika 8. Zavisnost temperature od napona koji je predstavljen kao 12-bitni ceo broj Grafici na slikama 6, 7 i 8, dobijeni su u Matlab-u, pomoću sledećeg koda. U zadatku su date vrednosti R 0, opseg temperatura, B, T c0, T 0 i T, ostale vrednosti su dobijene su pomoću gore navedenih formula. Rp=6000; t=(-30:0.1:80); Ro=2200; Tco=25; To=273.15+Tco; T=273.15+t; B=3900; Rt=Ro.*exp(B.*((1./T)-(1./To))); plot(t,rt); xlabel ('Temperatura(C)'); ylabel ('Otpornost(kOhm)'); Vo=5*(Rt./(Rp+Rt)); figure; plot(t,vo); xlabel ('Temperatura(C)'); ylabel ('Napon(V)'); Do = round(4096*(vo./5)); figure; plot(t,do); xlabel ('Temperatura(C)'); ylabel ('Do'); 12 P a g e
Zavisnost temperature od napona koji je predstavljen kao 12-bitni ceo broj nam je od značaja jer je koristimo za dobijanje vrednosti temperature na osnovu izlaza AD konvertora. Međutim, vrednost temperature nije moguće direktno odrediti na osnovu D o, već je potrebna određena linearizacija. Nju vršimo gore pomenutom Piece-Wise metodom, pravimo određeni broj podopsega koje aproksimiramo pravama čije su jednačine y = a n *x+b n. U ovoj jednačini x je vrednost očitana sa AD konvertora, a y krajnja vrednost temperature. Tačke (-30, y 1 ), (-15, y 2 ), (15, y 3 ), (20, y 4 ), (30, y 5 ), (45, y 6 ), (60, y 7 ), (80, y 8 ) predstavljaju granice izabranih podopsega a vrednosti y su vrednosti D o za određene temperature očitane sa grafika sa Slike 8. Drugi, lakši način za dobijanje ovih vrednosti je preko formule za y napisane u ko du. Koeficijenti a n i b n se dobijaju tako što se iz jednačine prave kroz dve tačke računa inverzna funkcija po x. U ovoj jednačini y predstavlja vrednost D o, a x vrednost temperature. Pošto je nama potrebna vrednost temperature na osnovu očitanog D o sa AD konvertora, moramo naći inverznu zavisnost. Sledeći deo koda sadrži konačne izraze za a n i b n, kao i granične tačke izabranih podopsega. Koeficijenti su pomnoženi sa vrednošću 2560 da bi bili celi brojevi i time smo omogućili izračunavanja sa integer brojevima. Temp = [-30, -15, 15, 20, 30, 45, 60, 80]; for i=1:8 y(i) = Do((Temp(i) - Temp(1))*10 + 1); end for j=1:7 a(j) = round(((temp(j+1)-temp(j))/((y(j+1)-y(j))))*2560); b(j) = round(temp(j)*2560 - y(j) * a(j)); end S obzirom na nesavršenosti prilikom linearizacije javlja se određena greška. Najveća greška se javlja na sredinama opsega pa smo uzeli proizvoljne vrednosti temperatura iz tih delova, i za njih izračunali vrednost dobijene temperature na osnovu formule, a ne sa grafika. Na taj način smo uvideli razliku između vrednosti temperatura računatih na ova dva načina. Sledeći kod to predstavlja: Temp1 = (a(1)*3314 + b(1))/256; % -22 stepena, izračunato -22.82 stepeni Temp2 = (a(2)*2246 + b(2))/256; % 0 stepeni, izračunato 0,28 stepena Temp3 = (a(3)*1390 + b(3))/256; % 17.5 stepeni, izračunato 17,54 stepena Temp4 = (a(4)*1099 + b(4))/256; % 25 stepeni, izračunato 25,36 stepeni Temp5 = (a(5)*717 + b(5))/256; % 38 stepeni, izračunato 38,90 stepeni Temp6 = (a(6)*437 + b(6))/256; % 53 stepena, izračunato 53,95 stepeni Temp7 = (a(7)*253 + b(7))/256; % 70 stepeni, izračunato 71,8 stepeni 13 P a g e
4 Procedeure za izračunavanje temperature na osnovu odmerenih vrednosti sa ADC Najpre je potrebno izvršiti konfiguraciju kontrolera, i to: konfiguracija oscilatora, tajmera, i AD konvertora. Treba podesiti da frekvencija takta procesora bude 3MHz, dozvoliti rad AD konvertora, i podesiti da tajmer odbrojava 100ms. 4.1. Konfiguracija kontrolera Konfiguraciju vršimo pomoću programa Configuration Wizzard. Na sledećim slikama su prikazana podešavanja za AD konvertor, tajmer i oscilator. Vrednost frekvencije oscilatora treba podesiti na 3MHz. Slika 9. Podašavanje oscilatora 14 P a g e
Potrebno je omogućiti rad AD konvertora i podesiti da analogni ulaz mikrokontrolera za AD konvertor bude pin P2.2. Slika 10. Podašavanje AD konvertora. Tajmer treba da odbrojava 100ms, jer na svakih 100ms treba čitati vrednost sa NTC otpornika. Tajmer može biti podešen u jedan od više mogućih režima rada. Za naš projekat, odabrali smo 16-bitni auto reload mode. Dakle, on će početi da broji od 0000h, brojaće do FFFFh, zatim će fleg TF2 postaviti na jedinicu, i time obavestiti da je odbrojao do kraja, i da kreće opet od 0000h. Medjutim, nama treba obaveštenje na 100ms. Kako to podesiti? U podešavanjima za tajmer, postoji opcija odabira takta za tajmer. U projektu, odabrana je frekvencija SYSCLK/12, što znači da je naš sistemski takt podeljen sa 12. 1. Dakle imamo frekvenciju takta: 3MHz/12 = 250KHz 2. Perioda takta je: 1/250KHz = 4us 15 P a g e
3. Nama treba 100ms, dakle: 100ms/4us = 25*10 3 = 25000 taktova potrebno za 100ms. Dakle, kada brojač odbroji do FFFFh, on bi se po rutini vratio na 0000h. Medjutim, postoji mogućnost zadavanja početne vrednosti brojača(slika 11.). U ovom slučaju, za 100ms, mi ćemo mu zadati 65545-25000 = 40535 = 9E57h. Slika 11. Zadavanje početne vrednosti brojaču u auto reload režimu rada. Slika 12. Konfiguracija tajmera. 16 P a g e
4.2. Glavni program U glavnom programu, na svakih 100ms čita se vrednost AD konvertora, funkcijom Read_ADC. Nakon čitanja 12-bitne vrednosti sa AD konvertora, vrši se ispitivanje u kom opsegu se nalazi pročitana vrednost. Opseg se određuje u for petlji tako što se vrednost očitana sa AD konvertora poredi sa graničnim vrednostima svakog opsega. Promenljiva index se inkrementira u svakom prolasku kroz petlju ako je vrednost na AD konvertoru manja od granične vrednosti Do za taj opseg. Ove granične vrednosti su prethodno izračunate u Matlab-u i unete u niz y. Posle prepoznavanja opsega, očitana vrednost se ubacuje u inverznu funkciju x=a n *y+b n, gde su koeficijenti a i b u Matlab-u unapred određeni za svaki opseg i uneti u nizove a i b respektivno. X predstavlja konačnu vrednost očitane temperature, a y vrednost sa AD konvertora. Nakon izračunavanja, dobijena vrednost temperature se smešta na određenu poziciju niza Temp. Kada se čita vrednost sa senzora, potrebno je vratiti fleg TF na nulu, da bi on mogao da broji od početka. Ako ne bismo vratili ovaj fleg na nulu, tajmer bi se ukocio i fleg bi ostao na jedinici, pa bi se pri svakom prolasku kroz petlju očitavala vrednost senzora, što nam nije potrebno. Potrebno je ispitivati fleg TF2H jer je specifikacija tajmera takva da ima dva marker TF2L, koji će se postaviti kada nižih 8 bitova brojača dostignu vrednost FFh(tajmer dostigne vrednost 00FFh), i marker TF2H, koji će se postaviti kada viših i nižih 8 bitova brojača dostignu vrednost FFh, odnosno kada brojač dostigne vrednost FFFFh. S obzirom na to da se na svakih 100ms čita vrednost jednog senzora, tj čita se vrednost sa jednog ulaza AMUX-a, potrebno je uvesti brojač koji će se inkrementirati na svakih 100ms. Brojač broji od 0-7, jer ima 8 senzora. Naime, pošto su nam selektorski signali povezani na pinove P2.5-P2.7, u svakom ciklusu treba postaviti određenu vrednost na te pinove, tj vrednost selektorskih signala. Na primer, pri čitanju trećeg senzora treba postaviti vrednost 010 na ove pinove. Postavljanje ovih vrednosti na selekcione signale postižemo određenim and i or logičkim operacijama. Najpre maskiramo port P2 vršeći nad njim and operaciju sa vrednošću 00011111 da bismo sačuvali vrednosti pinova od P2.0-P2.4. To pamtimo u promenljivoj prom nad kojom nakon toga vršimo or operaciju sa vrednošću promenljive selekcija šiftovane za pet pozicija ulevo. Promenljiva selekcija predsavlja gore pomenuti brojač. U zadatku je definisano da rezolucija merenja temperature bude 0.1 o C. Kao što smo već pomenuli, u Matlab-u se vrednosti koeficijenata množe sa 2560 da bi dobili cele brojeve, a ovde ćemo vrednost temperature podeliti sa 256, i time podesiti traženu rezoluciju. Na primer, za vrednost temperature od 30 o C, u programu ćemo dobiti vrednost 300, a na ekranu će biti prikazano 30.0 stepeni. 17 P a g e
18 P a g e