| (%i2) | kill(all)$load(coma)$ratprint:false$ |
1 Desenho de Controladores (Relações de afinação)
Ziegler-Nichols, Tyreus-Luyben e ganho óptimo do Maxima-COMA.
Estes métodos podem aplicar-se a qualquer sistema desde que se possa fazer uma experiência para determinar
o ganho último,
Neste caso, o sistema escolhido foi um de 2ª ordem (criticamente amortecido, ξ=1) com um atraso de 1 unidade de tempo (τ=2 e θ=1).
O Maxima não tem tratamento exacto do atraso, por isso aplicamos uma aproximação de Padé.
| (%i3) | Gp:1/(4*s^2+4*s+1)*(1-0.5*s)/(1+0.5*s)$ /* <=> Gp:1/(4*s^2+4*s+1)*time_delay(1,2)$*/; |
1.1 Determinação do ganho e periodo últimos (kU e pU)
| (%i5) |
sysF:create_list(closed_loop(Gp*Kc),Kc,[4.9,5,5.1])$ step_response(sysF,xrange=[29,109])$ |

Estes parâmetros dependem da aproximação utilizada para o atraso.
Por exemplo se for de 5ª ordem (time_delay(1,5)) kU=4,7 e pU=5,5
1.1.1 Vê-se que kU=5 e tira-se que pU= (110-30)/13 = 6,67
| (%i7) | kU:5$pU:6.67$ |
1.2 Ziegler Nichols Proporcional - Gc = 0,5.kU
Resposta a perturbação em degrau na carga e no set-point de um controlador Ziegler-Nichols
| (%i10) |
Gc:0.5*kU$ GpP:Gp/(1+Gp*Gc)$ step_response([closed_loop(Gp*Gc),GpP],xrange=[0,50])$ |

1.3 Comparação de Controladores PI
obtidos por Ziegler-Nickols, Tyreus-Luyben e de ganho óptimo do "COMA"
1.3.1 PI -> Z-N kc=0.45kU ; τi=pU/1.2
T-L kc=0.31kU ; τi=2.2pU
A uma perturbação em degrau unitário à carga e ao set-point
| (%i19) |
kill(k,τd,τi)$ GcZN:kU*0.45*(1+1.2/pU/s)$ cfPZN:Gp/(1+Gp*GcZN)$ GcTL:kU*0.31*(1+1/pU/s/2.2)$ cfPTL:Gp/(1+Gp*GcTL)$ [k,τi]:gain_optimum(Gp,k*(1+1/(τi*s)))$ /* Controlador óptimo do COMA */ GGO:rhs(k)*(1+1/(rhs(τi)*s))$ cfGGO:Gp/(1+Gp*GGO)$ step_response([closed_loop(Gp*GcZN),closed_loop(Gp*GcTL),closed_loop(Gp*GGO),cfPZN,cfPTL,cfGGO], xrange=[0,50],key=["ZN","TL","Op","ZN","TL","Op"])$ |

1.4 Comparação de Controladores PID
obtidos por Ziegler-Nickols, Tyreus-Luyben e de ganho óptimo do "COMA"
1.4.1 PID -> Z-N kc=0.6kU ; τi=pU/2 ; τd=pU/8
T-L kc=0.45kU; τi=2.2PU; τd=pU/6.3
A uma perturbação em degrau unitário à carga e ao set-point
| (%i28) |
kill(k,τi,τd)$ GcZN:kU*0.6*(1+1/(pU/2)/s+pU/8*s)$ cfPZN:Gp/(1+Gp*GcZN)$ GcTL:kU*0.45*(1+1/(pU*2.2)/s+pU/6.3*s)$ cfPTL:Gp/(1+Gp*GcTL)$ [k,τd,τi]:gain_optimum(Gp,k*(1+1/(τi*s)+τd*s))$ GGO:rhs(k)*(1+1/(rhs(τi)*s)+rhs(τd)*s)$ cfGGO:Gp/(1+Gp*GGO)$ step_response([closed_loop(Gp*GcZN),closed_loop(Gp*GcTL),closed_loop(Gp*GGO),cfPZN,cfPTL,cfGGO], xrange=[0,50],key=["ZN","TL","Op","ZN","TL","Op"])$ |

1.5 Bibliografia
Process Dynamics and Control 2e
Dale E. Seborg, Duncan A. Mellichamp, Thomas F. Edgar, Francis J. Doyle III
COMA - Control Engineering with Maxima
Wilhemlm Haagern @ HTL St. Polten (2011)