xmega_tutorial.jpg

Bewertung:  / 1
SchwachSuper 
  • xmega_block_diagram3D

Der Thermoelement Sensor MAX31855 erzeugt eine Kaltstellenkompensation und digitalisiert das Signal von einem K-, J-, N-, T-, S-, R-oder E-Typ Thermoelement. Die verschiedenen Daten des Sensores kann man mit Hilfe eines der SPI Module des Xmegas relativ einfach auslesen. Der Sensor liefert die Informationen in einem signierten 14-Bit Format über eine Standard SPI Schnittstelle. Der Konverter hat eine Temperaturauflösung bis zu 0,25 °C und ermöglicht Messungen im Temperaturbereich von -270 °C bis zu 1800 °C. Speziell für Thermoelemente des Typs K weist der Sensor im Temperaturbereich von -200 °C bis +700 °C eine Genauigkeit von ± 2 °C.

Features

  • Cold-Junction Compensation    
  • 14-Bit, 0.25°C Resolution    
  • Versions Available for K-, J-, N-, T-, S-, R-, and E-Type Thermocouples   
  • Simple SPI-Compatible Interface (Read-Only)    
  • Detects Thermocouple Shorts to GND or VCC    
  • Detects Open Thermocouple     

Das folgende Beispiel zeigt Ausschnitte zum Auslesen des Sensors.

Xmega MAX31855 Example
#define sbi(ADDRESS,BIT) 	ADDRESS |= (1<<BIT)	// set Bit
#define cbi(ADDRESS,BIT) 	ADDRESS &= ~(1<<BIT)	// clear Bit
#define	toggle(ADDRESS,BIT)	ADDRESS ^= (1<<BIT)	// Bit umschalten
#define	bis(ADDRESS,BIT)	ADDRESS & (1<<BIT)	// bit is set?
#define	bic(ADDRESS,BIT)	!(ADDRESS & (1<<BIT))	// bit is clear?
 
//################################################## read_max31855
int read_max31855(void)
{ 	
unsigned char data[4] = {0xff, 0xff, 0xff, 0xff}; // 4 byte bitfield from MAX31855
 
// SPI SS low 
cbi(PORTD.OUT,4); 	
for (int i=0; i<4; i++) 
{
data[i] = SPI_MasterTransceiveByte(&spiMasterD,0xff);	 
}
 
// SPI SS high
sbi(PORTD.OUT,4); 
 
if	(bis(data[3],0)) {usart_puts(&USART_data,"Open Circuit\r");return 1000;}
else if (bis(data[3],1)) {usart_puts(&USART_data,"Short to GND\r");return 1001;}
else if (bis(data[3],2)) {usart_puts(&USART_data,"Short to VCC\r");return 1002;}		
 
else 
{		
double	tempCuple = 0;
double	tempDevic = 0;		
double	ganz	  = 0; 
double	komma	  = 0;
 
//##### Temp Thermocuple 
ganz	= (((data[0] << 8) | data[1])>> 4); 
komma	= ((data[1]>> 2) & 0x03)*0.25 ;
if (ganz>0)	tempCuple = ganz+komma;
else		tempCuple = ganz-komma;
 
//##### Temp device 
ganz	= data[2]; 
komma	= (data[3]>> 4)*0.0625; 		 
if (ganz>0)	tempDevic = ganz+komma;
else		tempDevic = ganz-komma;		
 
//##### Temperaturkompensation		
double vout	= 0.041276*(tempCuple-tempDevic);
double kompen	= tempDevic*100 
		  + 2508.355*vout 
		  + 7.860106*vout*vout
		  - 25.03131*vout*vout*vout
		  +  8.31527*vout*vout*vout*vout
		  - 1.228034*vout*vout*vout*vout*vout;	
// round into Integer and return value			
return (int)(kompen+0.005);		
}	
}		
 

Ein ausführliches Beispiel zum Testen der vorgestellten Funktionen findet ihr unter Downloads. Weiterhin findet ihr die von Atmel zu dem Thema zur Verfügung gestellte Appnote im Anhang des Artikels unter Links.

Viel Spass beim Testen.

Hinweis:
Das Tutorial wird nach und nach von mir ergänzt. Wenn ihr Fehler in dem Tutorial findet, würde ich mich freuen wenn ihr mir diese mitteilt, damit ich diese korrigieren kann. Wenn jemand eigene Tips, Informationen oder Code-Schnipsel hat, kann er mir diese gern zusenden damit ich sie anschließend in das Tutorial einbinden kann.

Links

 
Atmel Appnote
Xmega SPI
Datenblatt

Downloads

Kommentar hinzufügen
  • Keine Kommentare gefunden

Neuste Beiträge

30/08/2016
Es gibt nun endlich ein Update für die Tinyg CNC Controller Hardware und der dazu gehörenden PC Software...
03/09/2015
In den letzten Monaten habe ich lange das CAD Programm und meinen kleinen Ultimaker 3D Drucker gequält....
15/05/2015
Zuerst wurde eine kleine Katze am Computer konstruiert. Der erste Druck mit 0,3mm Schichtstärke war...
06/05/2015
Da beim Ultimaker keine Beleuchtung des Arbeitstisches vorgesehen ist, muss ich mir hier selber eine...