Guy on Simulink

Simulink & Model-Based Design

Detecting Failures with Online Parameter Estimation

In R2014a, System Identification Toolbox has new online parameter estimation capabilities.

Let’s see how this works using a simple example!

The Problem

Let's say we have a setup where a DC motor is used to move a load between two positions. The position is measured using an encoder, and a PID is used to control the angle of the DC motor. The model looks like:

Simple Control Loop of a DC motor

And when it simulates, the load tracks the desired position in that manner:

Simple Control Loop of a DC motor, the Motion

How could we detect if something breaks in the motor, or if the dynamics of the load change?

Online Identification

When starting the system we will spend a few seconds to identify its dynamics online (while the system is running). Once we have a model estimated, we will compare the encoder reading with the output of the model. If the error between the real system and the model becomes too large, it's a sign something undesired is happening... and we want to detect that!

I wrapped the control loop shown above in a subsystem and connected to it the Recursive Polynomial Model Estimator block from the System Identification Toolbox library.

Simple Control Loop of a DC motor, with Online Estimation

Using the enable input port, we enable estimation for the first few seconds (only a few periods of the motor motion are necessary to get a good model). Once the estimation is completed, we monitor the estimation error, using very simple logic blocks to make a signal pass from zero to one as soon as the error level becomes larger than an acceptable level.

The Results

To test the logic in simulation, I faked the failure by doubling the friction in my DC motor model. As you can see, when the system dynamics change around 10 seconds, the error flag instantly signals the problem:

Simple Control Loop of a DC motor, with Online Estimation, the results

What's next?

The online estimation block also supports code generation. To see that in action, I recommend watching the video Online Fault Detection for a DC Motor by my colleague Karthik Srinivasan.

In this video, Karthik uses a model similar to the one I describe above, except that instead of a simulated DC Motor, he used driver blocks from the Arduino Simulink Suppport Package, to detect a failure using a real DC motor.

Now it's your turn

As you can imagine, fault detection is only one application of online parameters estimation. For example the identified model could be used in any sort of adaptive control.

Let us know what you think of the new online estimation features of the System Identification Toolbox by leaving a comment here.

  • print


To leave a comment, please click here to sign in to your MathWorks Account or create a new one.