Проверили на железе этот вариант:
accel_ramp = 51492.89 + 7560.61*q - 65000*EXP(-(q-16)/100.0);
decel_ramp = accel_ramp*32
При числе импульсов 16...25 удается уложиться в промежуток от 15 до 16 мс. При 26 импульсах и более не получается уложиться в промежуток от 15 до 16 мс. Чем большее количество импульсов генерируется тем хуже результат.
Если считать accel_ramp = (2 * q)/(0,016 * 0,016); (классическая формула), а decel_ramp = 500000000;, то в для 16 <= q <= 160 все нормально. При q > 160 генерация пачки импульсов перестает укладываться в промежуток от 15 до 16 мс.
Возможно, ваша формула для accel_ramp более точна (она дает большее значение чем классическая формула) и надо просто увеличить decel_ramp.
Попробуем на железе так:
accel_ramp = 51492.89 + 7560.61*q - 65000*EXP(-(q-16)/100.0);
decel_ramp = 500000000;