§ 22. Подключение датчика KTS-1 к входу АЦП
|
Дмитрий Иванов, 20 Декабря 2012
|
У некоторыхз модулей KernelChip не предусмотрено прямое подключения датчика температуры KTS-1. Однако иммется возможность подключения этого датчика ко входу АЦП и самостоятельного расчета температуры по показаниям АЦП.
|
При подключении датчика через вход АЦП потребуется использование дополнительного схемного элемента - резистора. Также потребуется рассчитать значение температуры по показаниям АЦП используя специальную формулу, представленную ниже.
|
Рис.1 Схема подключения датчика температуры KTS-1 к входу АЦП модулей KernelChip
|
Величина сопротивления Rm, показанного на схеме ниже: порядка 3 кОм, хотя вполне допустимо выбрать любое доступное сопротивление из диапазона 2 - 10 кОм. Настоятельно рекомендуется использовать прецензионное сопротивление с точностью 1 %. Порядок (полярность) подключения выводов датчика KTS-1 к входу АЦП значения не имеет. Vпит - источник постоянного опорнго напряжения. Его величина не должна выходить за границы допустимого входного напряжения для АЦП конкретного модуля.
Для расчета температуры датчика в градусах Цельсия необходимо воспользоваться формулой, приведенной ниже.
где: |
Vadc - показания АЦП в вольтах к которому подключен датчик |
β - коэффициент температурной чувствительности датчика, равен 3988 |
Ro - сопротивление датчика при 25 oC, равно 3 кОм |
Рассмотсрим пример подключения датчика KTS-1 к модулю Ke-USB24A. На рисунке ниже представлена схема подключения датчика к модулю:
|
Рис.2 Схема подключения датчика температуры KTS-1 к модулю Ke-USB24A
|
В качестве источника опорного напряжения для датчика выбрано напряжение питания USB величиной 5 В. Ниже представлен листинг простой консольной программы, написанной на языке С++, иллюстрирующий процесс рассчета значения температуры по показаниям АЦП. В данном примере значение сопростивления Rm выбрано равным 4.3 кОм.
#include <iostream>
#include "windows.h"
#include <conio.h>
#include <math.h>
// Параметры датчика и схемы его подключения
double betta = 3988;
double Rm = 4300;
double R0 = 3000;
int main(int argc, char *argv[])
{
if( argc < 2 )
{
printf("Error! No arguments.");
return 0;
}
// Входной аргумент - цифровое значение АЦП в диапазоне 0-1023
int ADC_Value = atoi(argv[1]);
// Расчет напряжения АЦП в вольтах
double inVolt = (((double)ADC_Value)/1023.0)*5.09; // 5.09 - см. Дополнения ниже
printf("InVolt: %f\r\n", inVolt);
// Расчет сопротивления терморезистора
double RT = (Rm*inVolt)/(5.0 - inVolt);
printf("RT: %f\r\n", RT);
// Расчет температуры в градусах Цельсия
double Temper = (betta/(log(RT/R0) + betta/298.0)) - 273;
printf("Temperature: %f\r\n", Temper);
return 0;
}
Дополнения:
- В качестве Rm рекомендуется применять прецензионный резистор с точностью 1 %. Использование резистора обычной штатной точности (5%) может оказать ощутимое влияние на результирующую точность измерений температуры. Ошибка в таком случае может достигать 1-2 oC.
- При использовании шины USB в качестве источника питания цепи термодатчика необходимо обратить внимание на тот факт, что номинально напряжения питания USB не равно 5 В а несколько больше или меньше этой величины. Обычно оно составляет 5.09 В для PC с внешним питанием и 4.8 - 4.9 В для ноутбука, работающего от внутренней батареи. Рекомендуется учитывать это в формуле для расчета напряжения АЦП. Пренебрежение этой особенностью может повлиять на точность измерения температуры (ошибка может достигать 0.5 - 1.0 oC)
© Дмитрий Иванов
20 Декабря 2012 года
http://www.kernelchip.ru