Testing KTY10-6 on AnalogIn

 

The KTY10-6 is a low cost PTC that I found in my stock. So I thought, why not use it to control temperature of some rooms.

 

First some calculations:

In the Handbook of mbed, I found,that the resolution of  a analog/digital converter is 12Bit. This gives us  4095 possible results for one sample.

3,3V / 4096 = 0,81 mV/div. The function we use to get a sample is input.read_u16() and gives us a result of 16Bit. This means, that for every 0,81mV that we have more on the entry of the analog/digital converter, we will get a a 16 bit greater result.

mV Result of AnalogIn
0 0
0.8 16
0.16 32
.... ....
3300 .65535

 



 

 

 

 

By Datasheet, KTY10-6 has (around 20 degrees Celsius) about 15 Ohms per Kelvin and seems to be nearly linear between ~10 and 20 deg. Celsius, which will be enough for our needs. The resistances for 10, 20 and 30 degrees, I found in the datasheet of the KTY10-6. So I calculated a table with the resistances and the samples between.

 

The difference of the resistance between two samples:

Diff = (R20-R10) / n

Diff = (1922-1772) / 10 =15 (between 10 and 20 degrees).

When we want to show 0,5 degrees difference, we use n = 20.

Between 20 and 30, Diff = 15,8. (Remember, KTY10 is not exactly linear)

 

The voltage  at KTYcalculated:

U(KTY) = U(Ref) - U(Rv)

U(KTY) = U(Ref) - Rv * I(temp)

U(KTY) = U(Ref) - Rv * U(Ref) / (R(KTY)+Rv))

U(KTY)=3.3V-(Rv*3.3V/(Rv+R(KTY))

Temp. R(KTY) [Ohms] Approx. Linear U(KTY) [V] AD
10 1772 1772 1,47220544 29216
11
1787 1,47908202 29360
12
1802 1,48590705 29488
13
1817 1,49268111 29632
14
1832 1,49940476 29760
15
1847 1,50607858 29888
16
1862 1,5127031 30032
17
1877 1,51927888 30160
18
1892 1,52580645 30288
19
1907 1,53228634 30416
20 1922 1922 1,53871907 30544
21
1937,8 1,54544444 30672
22
1953,6 1,55211864 30816
23
1969,4 1,55874227 30944
24
1985,2 1,56531587 31072
25 2000 (!) 2001 1,57184004 31200
26
2016,8 1,57831531 31328
27
2032,6 1,58474224 31456
28
2048,4 1,59112136 31584
29
2064,2 1,59745322 31712
30 2080 2080 1,60373832 31840

 

 

 

Here my first try:

 

 

In the forum, we can see, that there are problems with the analog inputs.

I tried to solved it by reading 255 samples and just showing the one that appears most.

 

/*

Testing low cost temperature sensor KTY10-6 on analog in.

*/


#include "mbed.h"

// Serial over USB (need driver for Windoes)
Serial pc(USBTX, USBRX); // tx, rx
// AnalogIn
AnalogIn input(p20);
DigitalOut led1(LED1);


int main() {
    unsigned short samples[255] , mostsample; // 16 bit 0-65535
    unsigned int appears, count;
    pc.printf("\r\n\r\n");
    pc.printf(" ==================================================\r\n"); // I need CR (\r) in HyperTerminal
    pc.printf(" = Michel`s KTY10-6 Temperature Measuring System. =\r\n");
    pc.printf(" ==================================================\r\n");
    pc.printf("\r\n\r\n");  
    while (1) {
        // wait for a certain time between measurements
        wait_ms(300000);
        
        // flash Led1
        led1 = 1;
        wait_ms(250);
        led1 = 0;

        // get analog in
        for(int i=0; i<255; i++) {
            samples[i] = input.read_u16();
            wait_ms(10);
        }
        // Find the most appearing sample
        mostsample=0;
        appears=0;
        for(int i=0; i<255; i++) {
            count = 0;
            for(int j=0; j<255; j++) {
                    if(samples[i] == samples[j]) { 
                        count++;
                    }    
            
            }
            if (count > appears) {
                mostsample = samples[i];
                appears = count;
            }
        } 
        
        
        // put to serial
        pc.printf("Analog In on Pin20: %d \r\n", mostsample);
       
    }
}

 

2. Using constant current for measuring:

Fixing current to 1mA with R1=1250.

 

R(Temp) =U(KTY10) / 1mA

U measured on AIN ; I = Const. we can calculate R, and then Temperature with the formula from datasheet:


0 comments

You need to log in to post a comment