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




Hit Counter by Digits
  Sinds 24 Maart 2013