A PID controller appears easy, requiring you to find just three values: proportional, integral, and derivative gains. In fact, safely and systematically finding the set of gains that ensures the best performance of your control system is a complex task. Traditionally, PID controllers are tuned either manually or using rule- based methods.
Manual methods are iterative and time-consuming, and if used on the hardware, can cause damage. Rule- based methods also have serious limitations: they do not support certain types of plant models, such as unstable plants, high-order plants, or plants with little or no time delay.
In addition to tuning, PID control involves design and implementation challenges, such as discrete-time implementation and fixed-point scaling.
Using a four-bar linkage system as an example, this article describes a method that simplifies and improves the design and implementation of PID controllers.
This method is based on two R2009b product features: the PID Controller blocks in Simulink and the PID tuning algorithm in Simulink Control Design.
Control design goals
Four-bar linkage is used in a wide range of applications, including car suspensions, robot actuators and aircraft landing gears. The control system consists of two elements: feedforward control and feed back PID control.
Feedforward control inverts plant dynamics — it handles the major motion of the mechanism by taking into account the nonlinear behaviour. Feedback PID control keeps positioning errors small in the face of modelling uncertainties and external disturbances. This article focuses on the design of feedback PID control.
The PID controller takes the error signal between the desired and actual rotation angle of one of the links and creates a torque request. This request is added to the torque request from the feedforward controller, and the sum signal is used to drive a DC motor that actuates rotation of the joint connecting the links.
The controller must stabilise the operation of the plant. It must also provide fast response time and little overshoot. Because the controller will be implemented on a fixed-point processor with 16 bits, it needs to be in discrete- time form, and the gains and calculated signals must be scaled accordingly.
Tuning the controller
The plant model consists of a four-bar linkage mechanism modelled in SimMechanics and a DC motor modelled in SimElectronics. To create the controller architecture, we simply add a discrete-time PID Controller block from the Simulink Discrete library. With the closed-loop system configured, we are ready to tune the controller.
To do that, we open the PID Controller block dialog, specify controller sampling time, and press “Tune” to open the PID Tuner GUI.
Before displaying the GUI, Simulink Control Design linearises the plant at the current operating point and derives the linear time invariant (LTI) plant model seen by the PID Controller block in this feedback control loop. Computational delay associated with sampling is automatically taken into account. Using an automatic tuning method, Simulink Control Design then generates the initial gains of the PID controller. This tuning method imposes no limits on plant order or time delay, and it works in both continuous and discrete time domains.
If the controller performance is satisfactory, we press “Apply” to update the values of P, I, D, and N gains in the PID Controller block dialog. We can then test the perform ance of our design by simulating the nonlinear model and looking at the results. We can also tune our design interactively using a simple slider to make the controller faster or slower.
Prepare for implementation
To prepare the controller for implemen tation on a 16-bit microprocessor we scale it for the fixed-point arithmetic supported by the chip. Using “Data Types” tab in the block dialog, we apply the settings required for fixed-point design. Obtain these settings automatically using the Fixed-Point Tool in Simulink. We then run the simula tion using fixed-point settings to verify that the fixed-point design results closely match the results we obtained when the controller gains and signals were imple mented as double-precision values.
Generating production code
With the PID controller prepared for implementation, the final step is to use Real-Time Workshop Embedded Coder to generate C code. To test this code, we replace the PID Controller block with the generated C code and run the code in closed-loop simulation. We can do that by using Real-Time Workshop Embedded Coder to auto matically create a Simulink block that invokes the generated C code.
We can now run the simulation using the C code that will run on the actual processor. Simulation shows that the generated code produces results that closely match the results obtained with our PID Controller block with double-precision values. We can now deploy this code to the processor and start controlling our four-bar linkage in real time.
[Murad Abu-Khalaf and Rong Chen are Senior Software Developers; Arkadiy Turevskiy is Technical Marketing Manager — all three are with MathWorks.]