Да я не верно написал. Должно быть так: 1/T(t) = 1/T0 + a * t;
1/T0 - это константа, она вычисляется однажды в основной программе и передается в PRU.
Последний раз редактировалось Вольд; 12.03.2017 в 15:41.
T(t) = T0/(1+T0*a*t); или T(t) = T0/(1+T0*aΣdt);
Если делать вычисления в лоб, то на каждом шаге надо будет суммировать, умножать, и делить. Не фонтан.
Надо попробовать разложить функцию в степенной ряд, возможно полегчает.
Если ограничиться двумя членами, то в окрестности точки 133 мкс (7500 Гц) получается так:
T(t) = T0/(1+T0*a*t) = 200/(1+200*0,000000833*t) = 196 - 0,0325*(t-133)
Вроде не плохо получилось. Только что делать с коэффициентом 0,0325 ? Владимир, что скажите ?
Последний раз редактировалось Вольд; 12.03.2017 в 14:52.
Блок PRU_CURRENT_TIME: https://hardella.com/docs/pru/standa...u_current_time
Владимир, операция целочисленного деления сколько у вас времени занимает ?
С коэффициентом 0,0325 в степенном ряду что делать ? Как с дробными числами работать ?
Может так избавиться от дробного числа: 196 - 0,0325*(t-133) = 196 - (t-133)/31
Тогда погрешность при целочисленном делении будет большая.
Может так сделать T(t)*31 = 196*31 - (t-133), т.е. в результате вычислений получить T(t)*31, а потом результат поделить на 31.
Последний раз редактировалось Вольд; 12.03.2017 в 15:40.
А оператор CASE в Hardella есть ?