Такая формула будет справедлива: f(t) = f0 + a*t; ?
Такая формула будет справедлива: f(t) = f0 + a*t; ?
Последний раз редактировалось Вольд; 11.03.2017 в 21:41.
Значит такая то же имеет право быть: 1/T(t) = 1/T0 + a*t; ? Если так, то что мне мешает вычислять T(t) и корректировать период следования импульсов при каждом вызове моего ФБ ? а (ускорение) можно вычислить в программе CoDeSys и передать при обращении к программе PRU.
Последний раз редактировалось Вольд; 11.03.2017 в 21:51.
Вопрос в том, сколько умножений/делений хотите делать за такт. Насколько я помню, умножение и деление требуют примерно по 1мкс.
Для справки: PRU_STEPPER на этапах разгона и торможения использует несколько сложений-вычитаний и одно единственное деление.
И, да, не забывайте, что REAL типов в PRU нет, т.е. вычисления через DWORD с округлением
Мою формулу можно свести в итоге к такой: T = T0 + ΣdT. Приращение dT можно вычислить в программе CoDeSys и передать при обращении к программе PRU. В итоге все сведется к суммированию заранее известного числа раз. Или я не прав ?
Последний раз редактировалось Вольд; 11.03.2017 в 22:04.
Да я не верно написал. Должно быть так: 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.