Тогда за дело. ;)
Вид для печати
Такой вопрос к В.Ситникову. Как максимально точно оценить за какое время ФБ Steper сгенерирует заданное количество импульсов ?
Например, запустить блок на эмуляторе.
Вот, например: https://github.com/vlsi/pru-emulator...Test.java#L182 указываем параметры, запускаем, смотрим на время.
Сейчас нужно скачать проект, открыть его в Java IDE (например, IntelliJ IDEA), указать параметры, запустить тест.
Вот как оно выглядит:
Вложение 34385
Думаю, точность будет порядка 5-10нс. Осциллографом же проверяли ШИМ генераторы на основе Hardella -- теоретическая частота совпадает с практической.
STEPPER блок не зависит от основного цикла, поэтому там время работы весьма и весьма точное.
Если запуск выполняется из "основного цикла ПЛК", то, конечно, время реакции тоже нужно учитывать (+сколько-то миллисекунд).
Если же запуск выполняется из PRU, то нужно учитывать и время PRU цикла (+сколько-то микросекунд)
Вот тут вопрос целесообразности.
С одной стороны, встроить можно. С другой вопрос того, насколько часто оно нужно. Как-никак, встраивание это время на разработку.
Прямо нужен инструмент?
Если вопрос в обсчёте нескольких вариантов -- могу запустить.
Тут периодически возникает вопрос о смене подхода. Так, чтобы можно было менять параметры движения на ходу (например, менять количество импульсов или "внезапно" уменьшать-увеличивать скорость).
Разумеется, в случае "изменения скорости на ходу" и инструмент "нажимаешь кнопку Start и получаешь на выходе это самое время" будет несколько другим, ведь тогда будет зависеть не только от PRU, но и от того, в какой момент будут эти команды на смену режима работы.
ФБ Steper для PRU, который меняет параметры движения на ходу бы очень интересен.
Такая утилита была бы очень полезна. Желательно бы было выводить:
1) время и число импульсов (n) при разгоне;
2) время и число импульсов при работы с постоянной скоростью;
3) время и число импульсов при торможении;
4) общее время и число импульсов.
Также хорошо бы было видеть графики f=F(t) и n=F(t).
Делать или нет решать вам. По хорошему фирме "ОВЕН" давно пора обратить внимание на Hardela и оплатить ваш труд. Инструментарий весьма добротный, ничего лучшего пока нет.
Еще один вопрос. Как узнать сколько памяти занимает программа для PRU ? Размер памяти - 1 кБ, так ?
Максимальный размер программы -- 1024 PRU команды (4096 байт). Суммарно может быть 2 программы одновременно (одна для PRU0, вторая для PRU1)
Размер занимаемой памяти видно в коде генерируемой ..._PruXInit программы.
Например:
Это означает (см объявление переменной pruCode), что программа BlinkningLeds занимает 38 из 1024 команд в PRU1.Код:...
PROGRAM BlinkningLeds_Pru1Init
(* Generated by Hardella IDE 1.8.0: https://hardella.com *)
VAR_INPUT
enable : BOOL := TRUE; (* PRU is reset on the R_TRIG(enable) *)
END_VAR
VAR_OUTPUT
running : BOOL := FALSE; (* TRUE when PRU is running *)
END_VAR
VAR
initDone : BOOL := FALSE;
enTrg : R_TRIG;
xx, yy : POINTER TO DWORD;
x, i : DWORD;
pruCode : ARRAY[1..38] OF DWORD :=
16#51000102, 16#15012121, 16#01002141, 16#15012161, 16#24f08082, 16#2402fac2, 16#91000303, 16#51000306, 16#51020301, 16#51030302
, 16#91040301, 16#24000003, 16#81000303, 16#24780ce3, 16#f1002383, 16#013ce3e3, 16#66e2e3f6, 16#00e2e0e0, 16#24780ce3, 16#f1002384
, 16#010ae4e4, 16#48e4e203, 16#240000e5, 16#21001ee1, 16#04e4e2e5, 16#c900e502, 16#1501e5e5, 16#5100e503, 16#0502e5e5, 16#6f00e5ff
, 16#e1002385, 16#11ffde82, 16#090841c2, 16#12c28282, 16#090961c2, 16#12c28282, 16#010082de, 16#210000e1;
END_VAR
...
Значит общая память 1024 команды для двух PRU. А деление памяти между PRU произвольное? Например 30% для PRU1 и 70% для PRU2.