Electrical – How to perform System Identification on DC motor

arduinocontrolMATLABsystem

I'm taking a class on control theory, and for our final project we've been assigned to choose whichever system we want and develop a controller for it. I've choosen to perform RPM control on a simple brushed DC motor. I have a pair of those motors and I want to set them running at the same speed using an Arduino and PID control.

The problem is: everything I've worked on this class has been very theoretical, and I'm stuck with the System Identification. I know the basics of it: if we don't have a mathematical model for the system (which is my case) we can see how the system responds to different inputs and deduce it's parameters from it.

How do generate a 'plant' model for a DC motor?

Best Answer

First you need to gather data from the system under normal operating conditions by feeding your motor sine sweep or white noise inputs (there are other ways, but these are most common). After you provide a sine sweep, for example, with frequencies of say 0-1000Hz, you record the data, and then load it into MATLAB. From here you can use the System Identification Toolbox to import and prepare the data.

Take a look here for help with getting up and running with System Identification Toolbox:

https://www.mathworks.com/company/newsletters/articles/motor-control-with-arduino-a-case-study-in-data-driven-modeling-and-control-design.html

https://www.mathworks.com/products/sysid/