LM35 Temperatuur Sensor
De LM35 is een analoge temperatuur sensor. Het is een temperatuur afhankelijke spannings bron.
De uitgang is bij 0° Celsius 0 Volt, bij 100° Celsius is de uitgang precies 1 Volt.
De LM 35 is ideaal in combinatie met een 10 bits AD ingang van een microcontroller met een referentie spanning van 1.024 Volt.
De waarde van de AD converter is dan precies een factor 10 hoger als de gemeten temperatuur. Bijkomend voordeel is dat het temperatuursbereik ook precies overeenkomt met het aantal beschikbare bits. (maximale resolutie)
De resolutie die zo bereikt wordt is 0,1° Celsius.
De Micorchip 18F25K22 controller is in dit geval zeer geschikt daar deze een ingebouwde 1,024V spannings referentie heeft.
De LM35 kan ook temperaturen meten beneden de 0°, hiervoor moet de uitgang van de LM35 dan belast worden met een negatieve stroom van minimaal 50uA zodat de uitgang ook negatief kan worden.
AD converter ingangen kunnen echter weinig met negatieve spanningen, ook zijn negatieve spannings bronnen om de negatieve belasting mogelijk te maken vaak niet voorhanden in microcontroller schakelingen.
Hier hebben we de volgende oplossing voor bedacht.
We verbinden de ground pin van de LM35 niet direct met ground maar via een weerstand van 100 Ohm (R1). We kunnen nu wanneer de spanning uit de LM35 negatief dreigt te worden, het potentiaal van de LM35 ground verhogen. Dit wordt gedaan via een weerstand die verbonden is met een uitgang van de microcontroller en de ground van de LM35 (R2), de uitgang wordt hoog wanneer dit het geval is.
Op deze manier creëren we een negatieve spanning (de echte ground) ten opzichte van de LM35 ground. We moeten de uitgang van de LM35 belasten met een weerstand (R3) naar ground zodat er altijd een minimale stroom van 50uA loopt op het bereik dat we willen meten. Door nu de spanning op de LM35 ground te meten op een 2e AD ingang kan de microcontroller door deze waarde van de waarde van de eerste AD ingang af te trekken toch exact de uitgang-spanning van de LM35 t.o.v. de LM35 ground meten (de temperatuur x10).
Wanneer de temperatuur weer hoger wordt moet de LM35 ground potentiaal verhoging weer ongedaan gemaakt worden, omdat we ander bij hoge temperaturen boven het maximale bereik van de AD converter uit kunnen komen (1.024 Volt).
Datasheet: LM35.pdf
LM35 Temperatuur Sensor bestellen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | '**************************************************************************** '* Name : Demo LM35 Temperatuur sensor met 18F25K22 * '* Author : Knutselaar.eu * '* Notice : Copyright (c) 2013 Knutselaar.eu * '* : All Rights Reserved * '* Date : 06-Apr-2013 * '* Version : 1.1 * '* (1.0 naar 1.1 : negatieve temperatuur uitlezing * '* Compiler: Proton Basic of Amicus18 * '* Notes : standaard 16x2 display (proton defaults aansluitingen * '**************************************************************************** Device 18F25K22 CONFIG_START FOSC = INTIO67 ;interne oscillator A6, A7 poortfuntie FCMEN = OFF ;Fail-Safe Clock Monitor disabled IESO = OFF ;internal external switchover mode PWRTEN = On ;power-up timer (18F25K22) BOREN = On ;brown-out reset BORV = 285 ;brown-out reset value (2,85V) (18F25K22) WDTEN = OFF ;watchdog timer WDTPS = 128 ;1:128 WDT prescalar PBADEN = OFF ;analog port B<4:0> STVREN = On ;;stack overflow reset LVP = OFF ;low voltage programming XINST = OFF ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode) Debug = OFF ;no debug CONFIG_END XTAL = 64 '76543210 OSCCON = %01111100 ;x,16 mhz,int osc,FOSC osc OSCTUNE= %01000000 ;4x PLL enable TRISA = %11011011 ;A5(led)en A2 output, A0 en A1 Input ANSELA = %00000011 ;Poort A.0 en A.1 Analoog voor AD reading (als voorbeeld de rest op digitaal) ANSELC = %00111111 ;Poort C.6 en C.7 op digitaal voor serieele communicatie (als voorbeeld de rest op analoog) ANSELB = %00000000 ;Poort B alles digitaal (voor display) VREFCON0= %10010000 ; set 1,024V internal reference ADCON1 = %00001000 ;VREF+ internal reference(AD reading) ADCON2 = %10010111 ;Right Justified, 4 TAD, FRC AD clock (AD reading settings) Declare HSERIAL_BAUD = 9600 ;Transmissiesnelheid van de data over de bus Declare HSERIAL_RCSTA = %10010000 ;Bit7:Enable serial port / Bit4:Continu ontvangen Declare HSERIAL_TXSTA = %00100000 ;Bit5:Transmitpin ingeschakeld (TXEN (Transmit ENable) = 1) Declare HSERIAL_CLEAR On Declare LCD_DATAUS 75 ;LCD timing voor wat oudere 16x2 displays (default = 50) Symbol LED LATA.5 ; LED op poort A5 Symbol Offset LATA.2 ; Offset voor de LM35 wanneer deze in de buurt van 0 graden komt Dim ADRead1 As SWord ; Signed Word om met negatieve getallen te kunnen rekenen. Dim ADRead2 As SWord Dim temperatuur As Word Dim minusSign[1] As Byte Cls ; display init Low Offset Print At 1,1, "Knutselaar.eu" loop: DelayMS 500 If ADRead1 < 100 And Offset = 0 Then High Offset ;Offset (ongeveer 0,42V bij R2 1K) schakelt in bij 10 graden If ADRead1 > 570 And Offset = 1 Then Low Offset ;Offset schakelt uit bij 15 graden (0,15 + 0,42 = 0,57 Volt) ADRead1 = ADIn 0 ; AD read op AN0 (poort A.0) DelayUS 100 ADRead2 = ADIn 1 If ADRead1 - ADRead2 >= 0 Then temperatuur = ADRead1 - ADRead2 Str minusSign = " " Else temperatuur = ADRead2 - ADRead1 Str minusSign = "-" End If Toggle LED HSerOut [Dec ADRead1,20,Dec ADRead2,20,Str minusSign,DEC3 temperatuur,13] Print At 2,1, DEC4 ADRead1, " ",DEC4 ADRead2," ",Str minusSign,DEC2 temperatuur/10,".",DEC1 temperatuur GoTo loop End |