Electronic – Transfer Function Identification from Impulse Response

controlpython

I'm working on a system involving a stepper motor that is used for moving a carriage back and forth in a linear motion. I have recorded the response (i.e. carriage position vs. time) corresponding to a single motor step. This, I believe, is what one would call the impulse response of the system:

enter image description here

In order to simulate the response to several consecutive steps, and to develop speed control strategies, I'm looking for a way to convert this time-domain impulse response into a frequency-domain (Laplace) transfer function of the form num(s) / den(s), if possible using open-source tools like Scilab or Python. What's a pragmatic way to do that?

Best Answer

What you call the response depends on what you decide the input to the system is. You can't treat the SM in isolation as it needs a driver, and that will have logic-level direction and 'pulse' inputs. So if, e.g., you define the input to the system to be a required displacement of 50um, the steady-state output will be 50um and your graph will be a step response. From this graph, the system has unity steady state gain and you can work out the transfer function from the overshoot and time to 1st peak etc.

This Laplace transfer function represents the unit impulse reponse of the system (i.e., the inverse LT of the transfer function is the unit impulse response).

There will be, inevitably, a computer somewhere in the loop and this will take care of the change of variables between actual displacements in um and the logic-level signals needed to control the SM driver.

From your graph, %overshoot=50%, Tp = time to 1st peak =5ms, therefore damping coeff is about 0.2, and Wn approx =640 rad/s (=about 100Hz); hence approx TF:

G(s)=411200/(s^2 + 256s + 411200)