%% Convert Discrete-Time Dynamic System to Parallel-Form PID Controller
% Convert a discrete-time dynamic system that represents a PID controller with derivative filter to parallel pid form.
% Create a discrete-time zpk model that represents a PIDF controller (two zeros and two poles, including the integrator pole at z = 1).

sys = zpk([-0.5,-0.6],[1 -0.2],3,'Ts',0.1);

%
% When you convert sys to PID form, the result depends on which discrete integrator formulas you specify for the conversion. For instance, use the default, ForwardEuler, for both the integrator and the derivative.

Cfe = pid(sys)

%
% Now convert using the Trapezoidal formula.

Ctrap = pid(sys,'IFormula','Trapezoidal','DFormula','Trapezoidal')

% The displays show the difference in resulting coefficient values and functional form.
% For this particular dynamic system, you cannot write sys in parallel PID form using the BackwardEuler formula for the derivative filter. Doing so would result in Tf < 0, which is not permitted. In that case, pid returns an error.
% Copyright 2015 The MathWorks, Inc.