Praktikum DST – MRT – 4.Termin Inhalt 4.1. ADU (Analog – Digital

Werbung
Praktikum DST (MRT – Teil)
4. Termin
25.11.2016
Praktikum DST – MRT – 4.Termin
Inhalt
Praktikum HSMT – MRT – 4.Termin .......................................................................................................... 1
4.1. ADU (Analog – Digital – Umsetzer) ( 4_01_ADC) .................................................................. 1
4.2. Temperaturmessung mit NTC 10k (2-fach) (
4_02_Temperatur) .............................................. 2
4.3. Temperaturmessung mit TiefPass u. Trend-Anzeige ( 4_03_Temp_TP_T)............................... 4
!
ADC-, LCD- und V24- Software ist noch nicht auf Statemachines umgestellt =>
Aufrufe also nur von main() also nicht in Timerinterrupts benutzen !
4.1. ADU (Analog – Digital – Umsetzer) (
4_01_ADC)
Neues Projekt 4.01_ADC aus 3.2.
 Als Umsetzerkanäle stehen die 8 – Eingänge von PORTA zur Verfügung. Wird benutzen in
diesem Praktikum die beiden Eingänge an PA7 und PA6.
 Fügen Sie die Analog-Digital-Umsetzerdateien ADC.h und ADC.c in Ihr Projekt ein.
Es gibt nur zwei relevante Funktionen:
void ADC_init(void);
Init ADC – Hardware / Software
unsigned int ADC_get(unsigned char kanal_nr, unsigned char no_of_mes);
Liest den Analogwert von kanal_nr, no_of_mes mal als Summe ein. Ist no_of_mes auf eins,
wird ein digitalwert zwischen 0 (0Volt) und 1023 (2,55Volt) zurückgegeben (10-Bit ADC). Ist
z.B. no_of_mes 10, werden 10 Messungen gemacht, und so der 10-fache Wert zurückgegeben!
Die Umsetzung der Analogdaten sollte, da die ADC-Software noch immer im Aufbau ist, nicht mit dem
Timer-Interrupt, sondern als Aufruf über die Endlosschleife in main() jede Sekunde, erfolgen!
Scheiben Sie, da wir letztendlich Temperaturen messen möchten, sofort alle ADC- und TemperaturRoutinen in Temp.c und Temp.h. Die ADC-Werte sollten als int in ADC_7 und ADC_6 gespeichert
werden.
Für nur eine Messung wäre die Spannung
Bei 10 Messungen wäre die Spannung
Bei 20 Messungen wäre die Spannung
161125_Praktikum_4_DST_MRT.doc
Erg/4 oder Erg>>2 ( 10 mV Auflösung)!
Erg/4 oder Erg>>2 ( 1 mV Auflösung)!
Erg/8 oder Erg>>3 ( 1 mV Auflösung)! usw.
der Speicher hat einen 8 mal so großen Wert!
1 of 4
2012 .. 2016 © Zielinski
25.11.2016
Praktikum DST (MRT – Teil)
4. Termin
Schalten Sie die internen Pullup-Widerstände, von PORTA der beiden Analog-Ports PA7 und PA6, aus
(siehe 1. Aufgabe: Initialisierung von PORTA – müsste schon so sein!).
Deaktivieren Sie in der LCD_Ausgabe(); die letzten 3 Zeilen (nur mit //) *PI* und *Tasten*.
Fügen Sie die Funktion LCD_Ausgabe_ADC_Volt(); stattdessen ein.
Eine Spannungsausgabe (z.B. 2,0345 V) wäre mit (LCD_putif((ADC_7>>3),4,3); möglich.
Zur Kalibrierung der A/D-Umsetzer bitte den
2-Volt-Adapter an PORTA anschließen.
Geben Sie die beiden Spannungswerte
ADC_7 und ADC_6 in Volt auf der LCD-Anzeige
Zeile 3 aus (siehe rechts). Falls der Fehler > ± 2 mV
ist sollten wir eine Korrektur vornahmen.
Der Fehler, hier bei mir ~-34mV liegt hauptsächlich
an der Referenzspannung (Versorgungsspannung
(+5V)). Wir gehen jetzt einfach davon aus, dass am
ADC-Eingang 2V anliegen. Um diesen für mein System auszugleichen,
musste ich alle Werte mit 1,017 multiplizieren (wieso?).
Dazu steht das Programm C_Faktor_durch_schieben.vbs zur
Verfügung. Eingabe des Variablen-Namen dmy (für Dummy), Faktor
1,017 (nur positive Faktoren) und die gewünschte Genauigkeit 0,0005.
Das Ergebnis liegt in der Zwischenablage (hier blau inkl. Kommentar)
und kann sofort in den Code eingefügt werden.
dmy = (ADC_get(7,20));
ADC_7 = +(dmy)+(dmy>>5)-(dmy>>6)+(dmy>>9);
U(PA7)
U(PA6)
// ADC(V) < 20000 Faktor * 8
// 1,017 = (1,017578)
Für Kanal 7 ergibt sich dann (bei mir) eine Spannung zwischen 1,999V und 2,001 V.
Realisieren Sie die Korrekturen für beide Kanäle mit einer Genauigkeit von ~ ±1 mV.
4.2. Temperaturmessung mit NTC 10k (2-fach) (
4_02_Temperatur)
Neues Projekt aus 4.1: Schließen Sie die beiden
NTC-Temperatur-Widerstände an PORTA des
Microcontrollers an (Abb rechts). An den
Analogeingängen von PORTA sind
PA7 als interner (Ti) und
PA6 als externer (To) Temperatur-Sensor
angeschlossen.
Geben Sie die beiden Temperaturen in °C auf
dem LCD-Display (Abb. Links) jede Sekunde, und über
die V24_Schnittstelle, wahlweise jede Sekunde (Eingabe ‚s‘
oder Taste0) oder jede Minute (Eingabe ’m‘ oder Taste1),
aus.
ADC7(i)
2012 .. 2016 © Zielinski
ADC6(o)
2 of 4
161125_Praktikum_4_DST_MRT.doc
Praktikum DST (MRT – Teil)
4. Termin
25.11.2016
Falls innerhalb von 5 Sekunden keine Auswahl getroffen wurde, soll der Sekundentakt aktiv sein!
Das math. Verhalten des NTC berechnet sich aus:
~Lin. Kennlinie für
Raumtemperaturen
R[T] = 10* EXP(3100*(1/(273+T(x)-1/298))
11°C < T < 75°C
Messung:
11,48° = 2,000V
Mit einem Fehler, laut Hersteller, von bis zu 10%!
T [*100] = 10732 – (ADC [*2000] * 4,792 / 8)
= 10732 – ( 16000
* 0,599) = 10732 – 9584
= 1148 [*100] => 11,48 °C
// ADC in .5mV
// für 2V gilt also 11,48°C
dmy = ADC_7;
dmy = +(dmy>>1)+(dmy>>3)-(dmy>>5)+(dmy>>7)-(dmy>>8)+(dmy>>9)-(dmy>>10)+(dmy>>11)-(dmy>>13);
Temp_7 = 10732 - (dmy);
// ADCV max < 5000 * 2
// 0,599 = (0,598999)
// Temp * 100
Die Schaltung: Durch die hardware-mäßig realisierte Schaltung (Abb. rechts)
ist der Spannungsverlauf fast proportional zur Temperatur (violette Kennlinie
s.o.).
Schreiben Sie nun die Umrechnung (s.o.) für die Temperaturanzeige
mit einer Ausgabe von 1/100 °C.
Das ° Zeichen hat auf dem LCD-Display den Code (223).
161125_Praktikum_4_DST_MRT.doc
3 of 4
2012 .. 2016 © Zielinski
25.11.2016
Praktikum DST (MRT – Teil)
4. Termin
4.3. Temperaturmessung mit TiefPass u. Trend-Anzeige (
4_03_Temp_TP_T)
Schicken Sie die gemessenen Temperaturen, je nach
Meß-Takt, durch einen Tiefpass von 64 = 26
Messungen.
long Temp_7_TP, Temp_6_TP;
Bei der Initialisierung (also vor der main_whileSchleife) oder der ersten Messung muss der 64-fache
Temperaturwert (Temp << 6) in die Speicher geschrieben werden.
Bei jeder neuen Temperaturmessung muss nun von Temp_x_TP 1/64 abgezogen, und der
neue Temperaturwert aufaddiert werden.
LCD_Anzeige (o.r.)! Der Mittelwert über die letzten 64 Messungen steht links (LCD_putlf();), der Trend
wird durch „+“, „=“ oder „-“ und dann der aktuelle Wert rechts angezeigt.
Die Ausgabe über die serielle Schnittstelle (nur der TP_Wert) könnte z.B. so aussehen:
A4.3
Di 03.12.2013 13:40:50
Ti=
27,81 °C +
To=
24,905 °C -
Speichern sie über 1 - 2 Minuten die V24 Sekundendaten in eine Datei (mit Winterm
[Datei][Upload]) Messdaten.txt (in [utils]) und geben Sie in Excel den Temperaturverlauf
aus!
– Ende des Mikrorechnerpraktikums für das WS 2016 / 2017 –
2012 .. 2016 © Zielinski
4 of 4
161125_Praktikum_4_DST_MRT.doc
Herunterladen