Upload
hoangtuyen
View
220
Download
1
Embed Size (px)
Citation preview
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
2 | P a g e
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
3 | 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
4 | P a g e
LCD
2. Blok šema i princip rada sistema
Senzor 1
Senzor 2
. AMUX Kondicioner ADC
.
.
Senzor 8
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.
5 | 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.
6 | 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.
7 | 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.
8 | 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.
9 | P a g e
MEMORIJA
ADC
Detektovani ospeg
ofset
i
pojacanje
DAC
Ulazni signal
Izlazni signal
senzora
f(x)
Ulazni signal
Kalibrisani
izlazni signal
ASP ili DSP
PWL
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 = an*x+bn. Ovim
linijama vršimo Piece-wise linearnu interpolaciju (PW), i dobijamo fpwl(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.
Slika 5. Piece wise linearni metod za kalibraciju linearnosti
Kao senzor temperature koristi se NTC otpornik.
10 | P a g e
Slika 6. Zavisnost otpornost NTC otpornika od temperature
Zavisnost otpornosti NTC otpornika od temperature data je sledećom formulom:
RT : otpornost NTC termistora na temperaturi T
RN : 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)
)11
(NTT
B
NT eRR
2
1ln
12
21
R
R
TT
TTB
dT
dR
R
1
11 | 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):
VccRxRt
RtVo
12 | 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
R0, opseg temperatura, B, Tc0, T0 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');
13 | 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 Do, 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 = an*x+bn. U ovoj jednačini x je vrednost očitana sa AD konvertora, a y
krajnja vrednost temperature. Tačke (-30, y1), (-15, y2), (15, y3), (20, y4), (30, y5), (45, y6), (60, y7), (80,
y8) predstavljaju granice izabranih podopsega a vrednosti y su vrednosti Do 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 an i bn 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 Do, a x vrednost temperature.
Pošto je nama potrebna vrednost temperature na osnovu očitanog Do sa AD konvertora, moramo naći
inverznu zavisnost. Sledeći deo koda sadrži konačne izraze za an i bn, 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.
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:
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
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
14 | 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
15 | 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
16 | P a g e
3. Nama treba 100ms, dakle:
100ms/4us = 25*103 = 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.
17 | 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=an*y+bn, 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.1oC. 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 30oC, u programu ćemo dobiti vrednost 300, a na ekranu će biti prikazano 30.0 stepeni.
18 | P a g e