/*---------------------------------------------------------------------------- Modul: Main Inhalt: C Routine Prozessor: TSK3000A FPGA-Board: NB3000XN.04 Device: Xilinx Spartan-3AN - XC3S1400AN-4FG676C Projekt: Programmieren von Mikroprozessoren: Zweipunktregelung Datum: 18.09.2012 Version: 1.0 Author: xxx ----------------------------------------------------------------------------*/ /*============================================================================ Include Files ==========================================================================*/ #include //Standard Input/Output #include //Treiber DAC #include //Treiber AD-Wandler #include //Standart Input/Output #include //Standard #include //Mathe /*============================================================================ Prototypes ============================================================================*/ //Zeiger definieren adc084s021_t *ptrADC; dac084s085_t *ptrDAC; //Einstellgröße der Temperatur static const uint32_t temperaturSoll = 22; // °c //Wahl der Temperatur, die eingestellt werden soll //Konstante Größen static const uint32_t Strom_PT100 = 0.050; // A //Konstanter strom, der durch den PT100 fließt (50mA ist hier ein Fantasiewert...echter Wert Einstellbar oder technisch vorgegeben???herausfinden) //Variablendeklaration uint32_t Ausgabe_SP = 0; // V uint32_t temperaturMax = 0; // °C uint32_t temperaturMin = 0; // °C uint32_t temperaturIst = 0; // °C uint32_t Spannung_PT100 = 0; // V uint32_t Widerstand_PT100 = 0; // OHM /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Main Routine ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ void main (void) { //Öffnen der Schnittstellen zur Ausgabe ptrADC = adc084s021_open (ADC) ptrDAC = dac084s085_open (DAC); dac084s085_write(ptrDAC, 0, Ausgabe_SP, true); //genutzter Kanal (Ausgabe einer Spannung für an/aus) dac084s085_write(ptrDAC, 1, temperaturIst, true); //genutzter Kanal (Ausgabe der aktuellen Temperatur) dac084s085_write(ptrDAC, 2, Ausgabe, false); //ungenutzter Kanal dac084s085_write(ptrDAC, 3, Ausgabe, false); //ungenutzter Kanal adc084s021_read(ptrADC, 0, Spannung_PT100, true); //genutzter Kanal (Spannungswert über dem PT100) adc084s021_read(ptrADC, 1, Spannung_PT100, false); //ungenutzter Kanal adc084s021_read(ptrADC, 2, Spannung_PT100, false); //ungenutzter Kanal adc084s021_read(ptrADC, 3, Spannung_PT100, false); //ungenutzter Kanal temperaturMax=temperaturSoll+2.0; //Schwellwerte berechnen temperaturMin=temperaturSoll-2.0; //Schwellwerte berechnen for( ; ; ) //Endlosschleife { adc084s021_read(ptrADC, ADC084S021_IN1, Spannung_PT100, true); //Spannung über PT100 zur Masse messen Widerstand_PT100 = Spannung_PT100/Strom_PT100; //Berechnung des Widerstandes des PT100 temperaturIst = (Widerstand_PT100 - 100.0)/0.385; //Berechnung der Temperatur dac084s085_write(ptrDAC, DAC084S085_OUTB, temperaturIst, true); //Ausgabe der Temperatur an DAC_1 if(temperaturIsttemperaturMax) { do //Do Schleife für Hysterese { Ausgabe_SP = -5; //Symbolischer Wert für Heizung aus dac084s085_write(ptrDAC, DAC084S085_OUTA , Ausgabe_SP, true); //Ausgabe des Wertes -5 über DAC_0 adc084s021_read(ptrADC, ADC084S021_IN1, Spannung_PT100, true); //Spannung über PT100 zur Masse messen Widerstand_PT100 = Spannung_PT100/Strom_PT100; //Berechnung des Widerstandes des PT100 temperaturIst = (Widerstand_PT100 - 100.0)/0.385; //Berechnung der Temperatur dac084s085_write(ptrDAC, DAC084S085_OUTB, temperaturIst, true); //Ausgabe der Temperatur an DAC_1 }while (temperaturIst>temperaturMin); } } }