Сделал в Hardella 1.7.2
Добрый день.
Нет ли возможности проверить в симуляторе за какое время STEPPER1_PRU1 исполнит, если задать:
accel_ramp := 5000000,
decel_ramp := 500000000,
max_speed := 300000,
min_speed := 300,
stepper_quantity := 800
Код не смотрел, в эмуляторе получается так:
2017-06-29_dwordacc.png
25 мс на всё про всё.
Ну, да.
Чёрные полосы это следствие того, что PRU цикл фиксирован. Каждый импульс отдельной точкой нарисован, но точек много и они наслоились.
Возьмём для примера, что PRU цикл указан в 1мкс.
Это значит, что переключение выхода будет выполняться не чаще, чем раз 1 мкс.
Например, если PRU переключает выход каждые 10 циклов (каждые 10 мкс), то частота меандра на выходе будет 1/(10мкс+10мкс) = 50.0кГц
Если же выход будет переключаться через каждые 9 циклов (каждые 9 мкс), то частота меандра на выходе будет 1/(9мкс+9мкс) = 55.5кГц
Если же 0 и 1 будут разной длительности (например, 10 тактов 1, потом 9 тактов 0), то частота меандра на выходе будет 1/(10мкс+9мкс) = 52.6кГц
Т.е. скачкИ по 2-3 кГц. Чтобы таких сильных изменений частоты не было, блок размазывает длительности импульсов. Например, для получения частоты 51кГц генерируются импульсы длительностью в 19 и 20 мкс вперемешку в нужной пропорции.
По формуле S = V0 * t + (a * t * t)/2 = 300 * 0,025 + (5000000 * 0,025 * 0,025)/2 = 1570 [импульсов]
Или я что-то не так считаю ? Может 1570 - это число импульсов + число пауз ?
Последний раз редактировалось Newcomer; 30.06.2017 в 14:20.
Всё так, это должно получаться количество импульсов. Иными словами, должно было получиться 800.
Во-первых, точная длительность всей последовательности -- 23мс (25 это я на глаз сказал, а вертикальная белая линия после 20мс это 22.5мс)
Во-вторых, фактическая достигнутая скорость на 23мс получилась где-то 70кГц, а должна была быть 115кГц (== 5000000 * 0,023)
Возможно, это погрешность того, что PRU вычисления идут в целых числах.
Возможно, формула с ошибкой.
Ну и не стоит забывать про то, что сама по себе формула приближенная. В точной формуле нужно было бы вычислять квадратный корень на каждом шаге, и приближения должно хватать.
Попробовал указать minSpeed=0 -- получается примерно 17.3мс:
2017-06-30-minspeed_0.png
minSpeed=1000 -- 18.3мс
2017-06-30_minspeed_1000.png
minSpeed=10000 -- 15.2мс
2017-06-30_minspeed_10000.png
Последний раз редактировалось Владимир Ситников; 30.06.2017 в 14:51.
800 и 1570 - это две большие разницы и тут явно не в погрешности дело.
С minSpeed то же не понятно. Чем больше minSpeed, тем меньше должно быть время.
Последний раз редактировалось Newcomer; 30.06.2017 в 15:10.