PDA

Просмотр полной версии : Датчики температуры Ni



starmos
08.11.2024, 07:30
В настройках аналогового входа ПР205 можно выбрать датчик температуры Ni1000, есть в менеджере компонентов и макрос с таким названием. Но у меня датчик Ni1000TK5000 - из Инета следует, что он по характеристикам отличается от просто Ni1000. Каким образом я смогу его использовать? Можно ли стандартные средства как-то адаптировать? Чем эти датчики различаются вообще, я понять не могу, ТК5000 везде в Инете, а что это?

Рогов Алексей
08.11.2024, 07:45
Может это Вам требуется?
https://owen.ru/product/npt

starmos
08.11.2024, 08:10
Может это Вам требуется?
https://owen.ru/product/npt

Нет, это не требуется. У датчика сопротивление 1кОм, это вполне попадает в измеряемый контроллером диапазон, так что измерить сопротивление датчика контроллер сможет, вопрос как из этого получить температуру, с учетом ТК5000. Но понятно что делать это нужно программой, поэтому я сюда и написал.

Королев Кирилл
08.11.2024, 09:27
В настройках аналогового входа ПР205 можно выбрать датчик температуры Ni1000, есть в менеджере компонентов и макрос с таким названием. Но у меня датчик Ni1000TK5000 - из Инета следует, что он по характеристикам отличается от просто Ni1000. Каким образом я смогу его использовать? Можно ли стандартные средства как-то адаптировать? Чем эти датчики различаются вообще, я понять не могу, ТК5000 везде в Инете, а что это?

Добрый день. Макросов для работы с Ni1000TK5000 у нас нет. От обычного Ni1000 они отличаются по НСХ (другая зависимость сопротивления от температуры). Можете реализовать его самостоятельно, нужно только найти формулу преобразования сопротивления в температуру. В таком случае следует перевести аналоговый вход в режим 0..300 кОм и уже к нему подключить созданный Вами макрос.

kondor3000
08.11.2024, 09:32
Надо снять график зависимости сопротивления от температуры (или взять табличные, если найдёте), не менее 10 точек и применить функцию Petera для 10 точек.
https://owen.ru/forum/showthread.php?t=35489&page=5

Dimensy
08.11.2024, 10:17
Вот, взял у Сигнетика

capzap
08.11.2024, 10:22
возможно и такой код сгодится


function Solver: real;
var_input
res : real;
end_var
var
W1, W2, W3, W4, W5, W6, W7, W8 : real;
end_var

W1 := res * 1.3831139433862618 + -12.448275642218118;
W2 := res * 6.682846489888407 + -14.392748820599467;
W3 := res * -0.005676395436096994 + 8.019474677893733;
W4 := res * -0.008025928784169988 + 8.575139053897809;
W5 := res * -7.220669806960443 + 5.095049994395068;
W6 := res * -0.012837643004405222 + 0.32252865727557123;
W7 := res * 7.69970012369386 + -7.2486377046058985;
W8 := res * 2.4572149965952743 + -1.8149306383777304;
if W1 <= 0.0 then W1 := 0.0; end_if
if W2 <= 0.0 then W2 := 0.0; end_if
if W3 <= 0.0 then W3 := 0.0; end_if
if W4 <= 0.0 then W4 := 0.0; end_if
if W5 <= 0.0 then W5 := 0.0; end_if
if W6 <= 0.0 then W6 := 0.0; end_if
if W7 <= 0.0 then W7 := 0.0; end_if
if W8 <= 0.0 then W8 := 0.0; end_if

Solver := W1 * 9.82132213698798 + W2 * -4.321266935905112 + W3 * -5.233147887271718 + W4 * -4.576704842022764 +
W5 * 7.149600577059545 + W6 * 0.0505727397095359 + W7 * 2.0184721920501922 + W8 * -0.031374647564338706 + -14.392748820599467;
end_function


PS была ошибка одна и та же переменная затесалась в два места, поэтому функция считала не верно, постараюсь по новой собрать с не меньшей точностью

kondor3000
08.11.2024, 10:44
Один из блоков явно врёт на 1000 Ом 79915
на 1200 Ом расхождение 60 градусов уже 79916

capzap
08.11.2024, 12:38
Один из блоков явно врёт
сейчас не должен


function Solver: real;
var_input
res : real;
end_var
var
W1 : real;
W2 : real;
W3 : real;
W4 : real;
W5 : real;
W6 : real;
W7 : real;
W8 : real;
end_var

W1 := res * 0.13878908745962965 + -11.169647158936789;
W2 := res * -0.705290296164642 + -0.49852562738434325;
W3 := res * -0.12242029107039004 + -0.41234795849720013;
W4 := res * 0.009448343410483588 + -10.07187851154708;
W5 := res * 0.40872556066351257 + 7.926780715730983;
W6 := res * -0.14062452668260786 + -0.014881062272203267;
W7 := res * -0.007041981194077907 + 9.971070083280027;
W8 := res * -0.0201389901625474 + -0.38648060746547913;
if W1 <= 0.0 then W1 := 0.0; end_if
if W2 <= 0.0 then W2 := 0.0; end_if
if W3 <= 0.0 then W3 := 0.0; end_if
if W4 <= 0.0 then W4 := 0.0; end_if
if W5 <= 0.0 then W5 := 0.0; end_if
if W6 <= 0.0 then W6 := 0.0; end_if
if W7 <= 0.0 then W7 := 0.0; end_if
if W8 <= 0.0 then W8 := 0.0; end_if

Solver := W1 * 13.259300412601876 + W2 * -0.09680719090111181 + W3 * -0.6471391858393304 + W4 * -3.772583236036509 + W5 * -4.00162988810079 + W6 * -0.28310643866597995 + W7 * -4.494375283061582 + W8 * -0.573359836329579 + -11.711165689542185;
end_function

Dimensy
08.11.2024, 13:41
Еще вариант

unction fNi1000_TK5000: real;
var_input //объявление входных переменных
R : real;
end_var

var //объявление локальных переменных
A : real := 5.585e-9;
B : real := 5.172e-6;
C : real := 4.427e-3;
p, q, d, y : real;
end_var

fNi1000_TK5000 := -9999;
if R > 790 and R < 1630 then
p := (3 * A * C - B * B) / (3 * A * A);
R := 1 - R / 1000;
q := (2 * pow(B,3) - 9 * A * B * C + 27 * A * A * R) / (27 * pow(A,3));
d := q * q / 4 + pow(p,3) / 27;
y := pow((-q/2 + pow(d,0.5)),1/3) - pow((q/2 + pow(d,0.5)),1/3);
fNi1000_TK5000 := y - B / (3 * A);
end_if

end_function

здесь я тупо решил уравнение 3-го порядка
79920