Transfer Function to go from a Step Input to a Linear Ramp between the two step values
A simple moving average with a rectangular window will turn a step into a ramp, but no linear filter can give you a constant slope, because linearity implies that scaling the input (step) will scale the output (slope). Instead, what you want is a non-linear slew-rate limiter that steps towards the target at constant rate (eg. take the minimum of the &quot;distance to target&quot; and your allowable rate, then accumulate).
If you never want to move &quot;too slowly&quot; then you likely need a state-machine. If you are in steady-state and the target has moved &quot;far enough&quot; from your current value, then transition to moving state immediately. When you reach the target, transition back to steady-state. If you are in steady-state but the target only moved slightly, then transition into a timer-state where you still check if the target is far enough to start moving immediately, but also start moving when the timer expires. The downside is that small steps (or shallow ramps) will cause you to wait for the timer, but this is unavoidable unless you want to constantly (in the worst case every time-step) switch between moving and not moving (at which point you are basically doing PWM).
If you want to smooth the acceleration, then this can be done by taking the output of the slew-rate limiter and filtering it further. One (or two if you also want to avoid jerk) passes of moving average with short rectangular window often works well for this and will give you symmetric acceleration vs. deceleration and will still reach the target in finite time. Exponential moving averages (aka. one-pole low-pass filters) can also be used, but in that case you will only reach your target asymptotically.