MÉTODOSDECONTROLELINEARAPLICADOSAUMAUNIDADEDE...
Transcript of MÉTODOSDECONTROLELINEARAPLICADOSAUMAUNIDADEDE...
MÉTODOS DE CONTROLE LINEAR APLICADOS A UMA UNIDADE DE
DEMONSTRAÇÃO INTERATIVA
Eduardo Ferreira Vieira d’Almeida
Projeto de Graduação apresentado ao Curso
de Engenharia Mecânica da Escola Politécnica,
Universidade Federal do Rio de Janeiro, como
parte dos requisitos necessários à obtenção do
título de Engenheiro.
Orientador: Thiago Gamboa Ritto
Rio de Janeiro
Fevereiro de 2017
d’Almeida, Eduardo Ferreira Vieira
Métodos de Controle Linear Aplicados a uma Unidade
de Demonstração Interativa/ Eduardo Ferreira Vieira
d’Almeida. – Rio de Janeiro: UFRJ/Escola Politécnica,
2017.
X, 53 p.: il.; 29, 7cm.
Orientador: Thiago Gamboa Ritto
Projeto de Graduação – UFRJ/ Escola Politécnica/
Curso de Engenharia Mecânica, 2017.
Referências Bibliográficas: p. 31 – 31.
1. Controlador Linear. 2. Análise Dinâmica. 3.
Validação Experimental. I. Ritto, Thiago Gamboa. II.
Universidade Federal do Rio de Janeiro, UFRJ, Curso de
Engenharia Mecânica. III. Métodos de Controle Linear
Aplicados a uma Unidade de Demonstração Interativa.
iii
Eu dedico este projeto à minha fa-
mília, em especial à minha ma-
drinha e avó, Nelsa, e à minha
namorada, Daniella, por todo seu
apoio.
E a minha avó de coração Ivete
( in memoriam).
iv
Agradecimentos
Agradeço ao meu orientador Thiago Ritto por sua infatigável dedicação e constante
apoio, sendo parte fundamental deste projeto. Eu gostaria de expressar minha
gratidão sincera e profunda apreciação ao meu supervisor da University of Bristol
Dr. Guido Herrmann, por seus valiosos comentários e incentivo constante durante
todo o projeto. Eu também gostaria de agradecer ao Dr. Jeremy Burn e ao Dr. Tim
Help por fornecer as especificações técnicas do projeto original do equipamento usado
no laboratório de Mecatrônica da University of Bristol e o código-fonte original para
o controlador.
v
Resumo do Projeto de Graduação apresentado à Escola Politécnica/UFRJ como
parte dos requisitos necessários para a obtenção do grau de Engenheiro Mecânico
MÉTODOS DE CONTROLE LINEAR APLICADOS A UMA UNIDADE DE
DEMONSTRAÇÃO INTERATIVA
Eduardo Ferreira Vieira d’Almeida
Fevereiro/2017
Orientador: Thiago Gamboa Ritto
Programa: Engenharia Mecânica
O objetivo deste trabalho é projetar e implementar diferentes métodos lineares
de controle em uma unidade eletromecânica de modo a desenvolver um protótipo
interativo e demonstrativo para ser usada durante as aulas de controle de sistemas
do segundo ano do curso de engenharia mecânica da University of Bristol. Um con-
trole proporcional integral (PI) e um controle proporcional integral derivativo (PID)
são implementados como controladores de velocidade, e um controle proporcional
derivativo (PD) juntamente com um controle proporcional derivativo em feedback
(PDFB) são aplicados como controladores de posição. Para as simulações numéri-
cas dos controles lineares, um modelo matemático foi desenvolvido. A associação
do método de diferenças finitas com o método indireto de projeto de controle são
aplicadas de forma a converter o controle desenvolvido para um tempo contínuo em
um controle com um tempo discreto equivalente. As simulações numéricas revelam
que algumas hipóteses consideradas no modelo matemático diferem dos resultados
esperados. Os dados experimentais dos controles de posição parecem indicar que o
atrito estático tem uma grande influência na dinâmica do sistema.
vi
Abstract of Undergraduate Project presented to POLI/UFRJ as a partial fulfillment
of the requirements for the degree of Mechanical Engineer
LINEAR CONTROL METHODS APPLIED TO AN INTERACTIVE
DEMONSTRATION UNIT
Eduardo Ferreira Vieira d’Almeida
February/2017
Advisor: Thiago Gamboa Ritto
Department: Mechanical Engineering
The objective of this project is to design and implement different linear control
methods to an electromechanical rig in order to develop an interactive demonstra-
tion unit to be used during the system and control lectures in second year classes
in the mechanical engineering course at the University of Bristol. A proportional
integral controller (PI) and a proportional integral derivative controller (PID) are
implemented as velocity controllers and a proportional derivative controller (PD)
and a proportional derivative feedback controller (PDFB) are applied as position
controllers. For the numerical simulations of the linear controllers, a mathematical
model of the system is developed. With the aid of the finite difference method, the
Indirect Method of control design is applied to translate the continuous-time de-
signed controller into a discrete-time equivalent. The numerical simulations reveal
that some hypothesis considered in the mathematical model does not represent the
real system. The experimental data from the position controllers seems to indicate
that the static friction have a great influence in the system dynamics.
vii
Sumário
Lista de Figuras ix
1 Introdução 1
2 Métodos e Materiais 3
2.1 Projeto e Implementação do Protótipo . . . . . . . . . . . . . . . . . 3
2.2 Modelagem Matemática . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Projeto de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Controladores de Velocidade . . . . . . . . . . . . . . . . . . . 10
2.3.2 Controladores de Posição . . . . . . . . . . . . . . . . . . . . . 12
2.4 Implementação Discreta . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 Resultados 16
3.1 Simulações Numéricas . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Implementação Experimental . . . . . . . . . . . . . . . . . . . . . . 20
4 Discussão 26
5 Conclusão 29
Referências Bibliográficas 31
A Código Fonte PID 32
B Código Fonte PI 38
C Código Fonte PD 44
D Código Fonte PDFB 49
viii
Lista de Figuras
2.1 Esboço do modelo do projeto original do equipamento desenvolvido
por Tim Helps e Jeremy Burn utilizado no laboratório de mecatrônica
do curso de engenharia mecânica da UoB. . . . . . . . . . . . . . . . 4
2.2 Esboço representativo do circuito elétrico da armadura do motor de
corrente contínua. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 Esquemática do controlador PI aplicado em um feedback loop fechado
como um controlador de velocidade do modelo. . . . . . . . . . . . . . 11
2.4 Esboço do modelo do controlador PID aplicado em um feedback loop
fechado como um controlador de velocidade. . . . . . . . . . . . . . . 11
2.5 Esquemática do controlador PD aplicado em um feedback loop fechado
como um controlador de posição do modelo. . . . . . . . . . . . . . . 12
2.6 Esboço do modelo do controlador PDFB aplicado em um feedback
loop fechado como um controlador de posição. . . . . . . . . . . . . . 13
3.1 Simulação do modelo matemático do controlador PI aplicado como
um controlador de velocidade. . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Simulação numérica do controle de velocidade do sistema utilizando
um controlador PID. . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3 Simulação numérica do sistema aplicando o controlador PD como um
controlador de posição. . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4 Simulação numérica do controle de posição do sistema utilizando um
controlador PDFB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.5 Dados do controle de posição obtidos em experimentos feitos com os
controladores PD e PDFB aplicados ao braço giratório. . . . . . . . . 20
ix
3.6 Dados do sinal de controle obtidos nos experimentos feitos com os
controladores PD e PDFB aplicados ao braço giratório. . . . . . . . . 21
3.7 Dados de controle de posição obtidos nos experimentos feitos com os
controladores PD e PDFB aplicados ao braço giratório com os ganhos
modificados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.8 Dados do sinal de controle obtidos nos experimentos feitos com os
controladores PD e PDFB aplicados ao braço giratório com os ganhos
modificados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.9 Dados experimentais coletados da aplicação do controle PI com o
braço giratório como controlador de velocidade. . . . . . . . . . . . . 24
3.10 Dados experimentais coletados da aplicação do controle PID com o
braço giratório como controlador de velocidade. . . . . . . . . . . . . 25
x
Capítulo 1
Introdução
Por diversas vezes, é incomum observar completa compreensão sobre a abordagem da
engenharia propriamente dita em problemas estritamente teóricos, principalmente
quando se leva em consideração alunos estudantes de engenharia, que ainda não
possuem a experiência da prática de um engenheiro inserido no mercado de trabalho.
Com isso em mente e inspirado no modelo utilizado pelo laboratório de Mecatrô-
nica da University of Bristol, uma unidade de demonstração interativa é projetada
para ser usada durante o segundo ano do curso de engenharia mecânica da University
of Bristol e durante as aulas de dinâmica de sistemas lineares do curso de engenha-
ria mecânica da Universidade Federal do Rio de Janeiro. A principal razão para o
direcionamento aos alunos da disciplina de dinâmica de sistemas lineares é proporci-
onar uma melhor compreensão sobre a abordagem de engenharia para um problema
teórico. Dessa forma, o aluno será capaz de correlacionar a teoria que é ensinada
em classe com os dados experimentais mostrados por experimentos em laboratório.
Ademais, a consistência do modelo teórico em relação aos dados experimentais deve
ser avaliada durante as aulas.
Como engenheiro, é importante reavaliar o modelo teórico utilizado para des-
crever o sistema e discutir as premissas propostas para a dinâmica do mesmo. Por
exemplo, pode ser relevante discutir os efeitos de diferentes fenômenos, tais como a
fricção e stiction, que não são considerados no modelo matemático devido a questões
de modelagem ou à simplificação.
Em geral, este tipo de análise promove o desenvolvimento de uma grande habili-
dade necessária em engenharia, a análise qualitativa de um sistema simples. Assim,
1
os alunos devem ser incentivados a propor soluções ou explicações possíveis para as
diferenças entre a resposta dinâmica da simulação numérica do sistema e os dados
experimentais reais adquiridos do sistema real.
A disciplina de dinâmica de sistemas lineares foca em sistemas de primeira e
segunda ordem. Nesse sentido, a unidade de demonstração tem que ser capaz de re-
criar e reproduzir as mesmas condições observadas nestes sistemas. Assim, o modelo
matemático de um motor de corrente contínua (CC) acoplado a um elemento que
insira uma inércia rotacional deve ser capaz de emular um sistema de primeira or-
dem, se a variável analisada for a velocidade angular deste elemento. Para o sistema
de primeira ordem, o principal objetivo é desenvolver um controlador proporcional
integral (PI) e um controlador proporcional integral derivativo (PID) que sejam
capazes de controlar a velocidade do rotor em um valor desejado.
Alternativamente, um controle de posição também pode ser aplicado para a uni-
dade de demonstração. A este respeito, o ângulo do braço giratório é definido como
o parâmetro de controle, portanto esta análise representa um sistema de segunda
ordem, conforme descrito em [1]. No que se refere este controle de posição, o ob-
jetivo é projetar um controlador proporcional derivativo (PD) e um controlador
proporcional derivativo em feedback (PDFB).
Nesse sentido, um modelo matemático do sistema em questão será desenvolvido,
simulado computacionalmente, e, em seguida comparado com os dados experimen-
tais do sistema real. Com isso, será demonstrado que é possível correlacionar, através
de uma análise qualitativa, os métodos teóricos ensinados em classe com os dados
experimentais obtidos.
2
Capítulo 2
Métodos e Materiais
Esta seção contém as especificações do projeto do equipamento da unidade de de-
monstração, uma descrição do modelo matemático desenvolvido para o sistema e as
restrições de projeto aplicados aos controladores de velocidade e posição.
2.1 Projeto e Implementação do Protótipo
O design escolhido e os componentes presentes na unidade de demonstração intera-
tiva são muito semelhantes a um equipamento utilizado no laboratório de mecatrô-
nica do programa de engenharia mecânica da University of Bristol (UoB), conforme
representado na figura 2.1. O projeto atual da unidade é composto por um motor
de corrente contínua (CC) Canon FN30 acoplado a um potenciômetro 157 Spectrol
Vishray, que é usado para medir o deslocamento angular do eixo do rotor, montado
em uma peça obtida por um processo de prototipagem rápida. Um microcontrolador
Arduino Uno, com um Arduino Motor Shield anexado, está conectado ao potenci-
ômetro e ao motor através de uma placa de circuito Bud industries BB-32621 Sol-
derless Breadboard. O braço acrílico utilizado, que foi cortado de uma placa acrílica
com 8 mm de espessura, é acoplado ao motor CC através de um conector fabricado
por um processo de prototipagem rápida. Além disso, os valores dos parâmetros
eletromecânicos do motor CC e as especificações do braço do robô são descritos na
tabela 2.1.
3
Figura 2.1: Esboço do modelo do projeto original do equipamento desenvolvido
por Tim Helps e Jeremy Burn utilizado no laboratório de mecatrônica do curso de
engenharia mecânica da UoB.
O projeto original foi concebido de modo a utilizar um sensor do tipo encoder
magnético incremental Avagos AEAT-601B Incremental Magnetic Encoder ao invés
do potenciômetro. A principal razão desta substituição se baseia no fato de que
o potenciômetro 157 Spectrol Vishray possui um ângulo elétrico efetivo de 340o,
resultando em uma região em que o sensor é incapaz de medir o real deslocamento
do eixo do motor. Portanto, isso resulta em uma maior imprecisão ao aplicar o
controle de velocidade à unidade, dado que, a cada rotação, o sensor não vai ser
capaz de medir uma faixa angular específica.
4
Canon FN30
Parâmetros Valores Unidades
Jmot 3,2 x 10−6 [kg.m2]
kt 2,48 x 10−2 [N.m/A]
ke 2,48 x 10−2 [V.s/rad]
cr 10−6 [N.m.s/rad]
Ra 5, 3 [Ω]
Braço de Acrílico
Parâmetros Valores Unidades
w 8 x 10−3 [m]
l 2 x 10−1 [m]
marm 15 x 10−3 [kg]
Jarm 200 x 10−6 [kg.m2]
Tabela 2.1: Valores dos parâmetros eletromecânicos fornecidos na folha de especifi-
cações técnicas do motor Canon FN30 DC, juntamente com o valor calculado para
o momento de inércia do braço giratório.
2.2 Modelagem Matemática
De forma a descrever a dinâmica do sistema através de um modelo matemático,
alguns pressupostos são necessários para estabelecer uma correlação entre o sistema
real e a descrição matemática proposta. O sistema analisado é composto de um
motor CC, acoplado a um braço giratório.
5
Figura 2.2: Esboço representativo do circuito elétrico da armadura do motor de
corrente contínua.
Uma vez que o motor CC é um atuador eletromecânico, o princípio de conversão
de energia elétrica em trabalho mecânico e o efeito do movimento mecânico na
tensão elétrica podem ser expressos por meio da lei de motores e da lei de geradores,
respectivamente, como descrito por [1]. Dessa forma, aplicando ambas as leis ao
circuito elétrico da armadura do motor CC, dado em 2.2, alcança-se as equações
(2.1) e (2.2) que representam o torque do motor e a força eletromotriz inversa do
motor, respectivamente.
T = ktia (2.1)
onde T é o torque aplicado no rotor do motor, kt é a constante do torque e ia é a
corrente elétrica da armadura.
e = keθm (2.2)
onde e é a força eletromotriz, ke é a constante elétrica e θm é a velocidade rotacional
do eixo do motor.
Portanto, a aplicação da lei de Newton para o diagrama de corpo livre do sistema,
composto de eixo rotativo do motor, acoplado a um braço giratório, gera a equação
(2.3) que descreve a dinâmica dos componentes mecânicos do motor. Vale ressaltar
que, a fim de simplificar a dinâmica de todos os fenômenos dissipativos do sistema,
presume-se que os efeitos de todas as forças dissipativas podem ser modelados através
6
de uma única força equivalente de amortecimento viscoso.
(Jmot + Jarm)θm + crθm = ktia (2.3)
onde Jmot é a inércia rotacional do motor, Jarm é a inércia rotacional do braço
giratório e cr é o coeficiente de amortecimento viscoso.
Adicionalmente, aplicando as leis de Kirchhoff para o circuito elétrico da arma-
dura, conforme descrito por [1], é possível obter a equação elétrica do motor, dada
pela equação (2.4).
Ladiadt
+Raia = va − keθm (2.4)
onde La representa a indutância do circuito, Ra é a resistência efetiva do circuito e
va é a tensão motriz.
A combinação das equações anteriores (2.3) e (2.4) resulta na equação eletrome-
cânica dinâmica do sistema, como indicado na equação (2.5). É pertinente salientar
que o efeito relativo da indutância é considerado negligenciável quando comparado
com o movimento mecânico.
(Jmot + Jarm)θm +
(cr +
ktkeRa
)θm =
ktRa
va (2.5)
Com a dinâmica do modelo definida, é possível obter a função de transferência do
sistema linearizado através da utilização da transformada de Laplace, como afirmado
por [1]. Portanto, a função de transferência que descreve a relação entre a velocidade
angular, θ, e a tensão motriz aplicada ao motor CC, va, é dada pela equação (2.6).
θ(s)
va(s)=
a
s+ b(2.6)
onde as constantes a e b são funções dos parâmetros do sistema descritos pelas
equações (2.7) e (2.8), respectivamente.
a =crRa + ktke
Ra(Jmot + Jarm)(2.7)
b =kt
Ra(Jmot + Jarm)(2.8)
7
Adicionalmente, aplicando o mesmo método para correlacionar a posição angular,
θ e a tensão de entrada no motor, va, é possivel obter a função de transferência dada
pela equação (2.9).
θ(s)
va(s)=
a
s2 + bs(2.9)
Como um meio para calcular o valor de Jarm, o braço do robô é modelado como
um braço de acrílico com a geometria de um paralelepípedo. Consequentemente, o
momento de inércia do braço giratório é dado pela equação (2.10) conforme descrito
por [2].
Jarm =marmw
2
12+marml
2
3(2.10)
ondemarm é a massa do braço de acrílico, w é a largura do braço e l é o comprimento
do braço.
A aplicação dos valores dos parâmetros dados na tabela 2.1 nas funções de trans-
ferência obtidas para a velocidade angular e a posição angular, dadas nas equações
(2.6) e (2.9), respectivamente, produzem as seguintes equações (2.11) e (2.12).
θ(s)
va(s)=
23
s+ 0.576(2.11)
θ(s)
va(s)=
23
s2 + 0.576s(2.12)
2.3 Projeto de Controle
De acordo com [3], o desempenho do controlador do sistema pode ser especificado
através de alguns parâmetros dinâmicos, como o tempo de assentamento da resposta
(ts) e a razão de amortecimento do sistema (ξ). Vale ressaltar que esta escolha de
parâmetros e restrições resultam em um controlador linear simplificado. A este res-
peito, como afirmado por [1], esta análise faz referência a uma função de transferência
característica de segunda ordem, tal como expresso na equação (2.13).
y(s)
r(s)=
ω2n
s2 + 2ξωns+ ω2n
(2.13)
8
onde y(s) é o output do sistema, r(s) é o input do sistema e ωn é a frequência natural
amortecida.
Presume-se que a equação (2.13), como uma função de transferência de segunda
ordem, é suficiente para descrever o modelo matemático para o controle de posição
e de velocidade com seus respectivos controladores aplicados a um sistema fechado
em feedback loop. Desse modo, como afirmado por [1], a determinação dos polos
do sistema é dada pelas raizes do denominador da equação (2.13), resultando na
equação (2.14).
s2 + 2ξωns+ ω2n = 0 (2.14)
De forma a simplificar ainda mais a equação (2.14), a frequência natural amorte-
cida (ωn) pode estar relacionada ao tempo de assentamento do sistema se a entrada
fornecida ao sistema for uma função do tipo degrau, conforme descrito por [3]. A
fim de obter as posições desejadas dos polos do modelo, algumas restrições de pro-
jeto são consideradas. Assim, presume-se que a razão de amortecimento do sistema
seja igual a 1, ou seja, o sistema é considerado criticamente amortecido. Partindo
do princípio que o objetivo da unidade de demonstração é a utilização como uma
ferramenta de ensino para estudantes, a aproximação assumida para o tempo de
assentamento é dada segundo a equação (2.15), como descrito por [1].
ts =4
ωn
(2.15)
Além disso, definiu-se como condição de projeto que o tempo de assentamento
desejado para o modelo é de 0,5 s. Portanto, os polos do modelo matemático são
descritos pelas raízes da equação (2.16).
s2 + 16s+ 64 = 0 (2.16)
Utlizando-se de produtos notáveis, como descrito por [4], é possivel reduzir a
equação caracteristica (2.16) à equação (2.17).
(s+ 8)2 = 0 (2.17)
As restrições dinâmicas impostas ao sistema são as mesmas para todos os con-
troladores. Desse modo, os requisitos do projeto de controle para cada um dos con-
9
troladores estão descrito na tabela 2.2, juntamente com os ganhos obtidos a partir
do modelo matemático para cada controlador, que é descrito posteriormente nesta
seção. Vale ressaltar que, devido ao maior número de incógnitas perante o número
de variáveis, o projeto do controlador PI necessita da definição do valor de um de
seus ganhos de modo a calcular o valor dos outros parâmetros. Aliado a este fato,
como os outros parâmetros do sistema são função do ganho proporcional, define-se
o valor deste parâmetro como 10. É importante salientar que a escolha deste valor
se baseia no princípio de evitar que os valores dos ganhos integral e derivativo sejam
desproporcionalmente elevados ou pequenos de forma a afetar a dinâmica de todos
os parâmetros deste controlador.
Ganhos
Método de Controle kp ki k∗d
PI 0.67 2.78 —
PID 10 40.1 0.058
PD 2.78 — 0.24
PDFB 2.78 — 0.24
Polos desejados ξ ts Entrada
(s+ 8)2 1 0.5 s Degrau
Tabela 2.2: Ganhos obtidos para cada método de controle juntamente com as ca-
racterísticas dinâmicas desejadas do sistema.
2.3.1 Controladores de Velocidade
Os métodos de controle selecionados para serem aplicados como controladores de
velocidade da unidade de demonstração são os controladores PI e PID, pois, dentro
do curso de engenharia mecânica da Universidade Federal do Rio de Janeiro e da
University of Bristol, ambos os métodos são usados como exemplos de controlado-
res de velocidade de um modelo matemático simplificado de um motor de corrente
contínua. Ademais, o controlador PI, aplicado em um feedback loop fechado é repre-
sentado na figura 2.3.
10
Figura 2.3: Esquemática do controlador PI aplicado em um feedback loop fechado
como um controlador de velocidade do modelo.
Além disso, a função de transferência de malha fechada do controlador PI apli-
cado como um controlador de velocidade é dada pela equação (2.18), conforme
descrito por [1].
θ(s)
va(s)=
a(kps+ ki)
s2 + (b+ kpa)s+ kia(2.18)
onde θ(s) é a velocidade de saída, va(s) é a tensão de entrada, kp é o ganho pro-
porcional, ki é o ganho integral e as constantes a e b são funções de parâmetros do
sistema.
O esquema do controlador PID em um feedback loop fechado é descrito na figura
2.4.
Figura 2.4: Esboço do modelo do controlador PID aplicado em um feedback loop
fechado como um controlador de velocidade.
Com isso, de acordo com [1], a função de transferência do sistema em um feed-
back loop fechado do controlador PID exercendo a função de controlar a velocidade
sistema é dada através da equação (2.19).
θ(s)
va(s)=
a(kds2 + kps+ ki)
(kda+ 1)s2 + (b+ kpa)s+ kia(2.19)
11
onde θ(s) é a velocidade de saída, va(s) é a tensão de entrada, kp é o ganho propor-
cional, ki é o ganho integral e kd é o ganho derivativo.
2.3.2 Controladores de Posição
Os métodos de controle escolhidos como controladores de posição a serem introdu-
zidos na unidade de demonstração são os controladores PD e PDFB. É importante
mencionar que a seleção dos controladores de posição possui as mesmas restrições
dinâmicas que as consideradas durante a escolha dos controladores de velocidade.
Portanto, o controlador PD aplicado em um feedback loop fechado é representado
na figura 2.5.
Figura 2.5: Esquemática do controlador PD aplicado em um feedback loop fechado
como um controlador de posição do modelo.
A função de transferência de malha fechada do controlador PD aplicado como
um controlador de posição é dada na equação (2.20), conforme descrito por [1].
θ(s)
va(s)=
kpa(s+ k∗d)
s2 + (b+ kpk∗da)s+ kpa(2.20)
onde θ(s) é o ângulo de saída, va(s) é a tensão de entrada, kp é o ganho proporcional,
kd é o ganho integral e kd é o ganho derivativo.
Em relação ao controlador PDFB como um controlador de posição, o esquema
deste controlador aplicado em um feedback loop fechado é representado na figura
2.6.
12
Figura 2.6: Esboço do modelo do controlador PDFB aplicado em um feedback loop
fechado como um controlador de posição.
A partir disso, de acordo com [1], a função de transferência do sistema com a
introdução do controlador PDFB em um feedback loop fechado é indicado na equação
(2.21).
θ(s)
va(s)=
kpa
s2 + (b+ kpk∗da)s+ kpa(2.21)
onde θ(s) é o ângulo de saída, va(s) é a tensão de entrada, kp é o ganho proporcional
e k∗d é definido como o ganho derivativo dividido pelo ganho proporcional.
2.4 Implementação Discreta
A aplicação dos métodos de controle desejados para o sistema real requer a adap-
tação do modelo matemático contínuo, considerando que a amostragem de dados
do microcontrolador é discreta por natureza. Como resultado, a velocidade angu-
lar do eixo do motor é aproximada utilizando o método de diferenças finitas, como
descrito por [5]. Desse modo, a derivada da posição angular em relação ao tempo é
obtida através do método de diferenças finitas aplicado em uma diferença atrasada
no tempo, utilizando dois pontos, como representado pela equação (2.22).
θm(to) =θm(to) − θm(to−1)
∆t+O(∆t) (2.22)
onde θm é o ângulo medido em um determinado momento, to é um ponto de referência
no tempo, to−1 é o tempo de amostra anterior em relação ao tempo de referência,
∆t é o tempo de amostragem entre as duas medições de tempo e O(∆t) representa
o erro de truncamento de primeira ordem.
A unidade de demonstração interativa é projetada para comportar-se como um
sistema discreto no tempo com somente uma entrada e uma saída. Por conseguinte,
13
o método indireto de projeto de controle, como visto durante o curso de engenharia
mecânica da University of Bristol e conforme descrito por [6], pode ser usado para
transpor um controlador contínuo no tempo em um projeto equivalente de tempo
discreto. Destarte, as equações do controlador aplicadas em um tempo discreto
para o controlador PI e o controlador PID são dadas pelas equações (2.23) e (2.24),
respectivamente.
u(to) = u(to−1) + kpe(to) − (kp − ki∆t)e(to−1) (2.23)
onde u(t) é o sinal de controle, e(t) é o erro de controle, to é um ponto de referência
no tempo, to−1 é o tempo de amostra anterior em relação ao tempo de referência, ∆t
é o tempo de amostragem entre o tempo de duas medições, kp é o ganho proporcional
e ki é o ganho integral.
u(to) = kpe(to) + ui(to) +kd(e(to) − e(to−1))
∆t(2.24)
onde kd é o ganho derivativo e ui(t) é um termo integrante, dado na equação (2.25).
ui(to) = ui(to−1) + (ki∆t)e(to−1) (2.25)
Acerca dos controladores de posição, as equações de controle obtidas através
da discretização temporal aplicadas ao controlador PD e ao controlador PDFB são
dadas pelas equações (2.26) e (2.27), respectivamente.
u(to) = kpe(to) +kd(e(to) − e(to−1))
∆t(2.26)
u(to) = kpe(to) −kd(y(to) − y(to−1))
∆t(2.27)
onde y(t) é o sinal de saída.
De acordo com [6], a determinação do tempo de amostragem exigida pelo método
indireto baseia-se na localização das raízes de decaimento mais rápido presentes na
equação característica de um circuito em feedback fechado, embora o fenômeno de
aliasing também deva ser considerado. Assim, o valor máximo para o tempo de
assentamento com base na equação característica desejada do sistema, dado pela
14
equação (2.16), é de 50 ms. Portanto, o tempo de amostragem selecionada de 10
ms para o microcontrolador está dentro do intervalo adequado.
15
Capítulo 3
Resultados
Para melhor exibir os resultados, esta seção é dividida em duas subseções que contêm
as simulações numéricas e os dados experimentais.
3.1 Simulações Numéricas
O programa utilizado para a análise numérica dos desempenhos dos diferentes con-
troladores é o MATLAB, com o auxílio do pacote de extensão gráfica SIMULINK.
Em relação às condições iniciais e às configurações finais desejadas, os controlado-
res de posição são forçados a realizar um deslocamento angular de 180o, iniciando-se
em π/2. Os controladores de velocidade, por sua vez, possuem o objetivo de manter
uma velocidade angular de 6,28 rad/s, ou seja, 2π rad/s.
Os resultados da simulação do método de controle PI aplicado como um con-
trolador de velocidade estão representados na figura 3.1. Como esperado, a solução
apresenta um comportamento de resposta amortecida. No entanto, os dados exibem
o fenômeno de overshoot, com um valor de amplitude máxima de 6,41 rad/s em
0,76 s. Após 0,5 segundo, o valor da amplitude é de 5,92 rad/s, significando que a
resposta alcança aproximadamente 95% da amplitude desejada neste tempo.
16
0 1 2 3 4Tempo (s)
0
1
2
3
4
5
6
7
Vel
ocid
ade
Ang
ular
(ra
d/s)
Figura 3.1: Simulação do modelo matemático do controlador PI aplicado como um
controlador de velocidade.
Em relação ao controlador PID, representado na figura 3.2, a simulação do mo-
delo matemático, também, indica um comportamento amortecido da resposta. Além
disso, a solução não apresenta overshoot, embora haja um ligeiro aumento do tempo
de assentamento. Dessa forma, o sistema alcança 87% da amplitude final após 0,5
segundo de simulação, indicando uma aproximação razoável obtida por este mo-
delo matemático, uma vez que a amplitude é de aproximadamente 5,46 rad/s neste
tempo selecionado. O real tempo de assentamento é de 0,73 s, assumindo uma razão
de cerca de 95% entre a amplitude real e a amplitude desejada.
17
0 1 2 3 4Tempo (s)
0
1
2
3
4
5
6
7
Vel
ocid
ade
Ang
ular
(ra
d/s)
Figura 3.2: Simulação numérica do controle de velocidade do sistema utilizando um
controlador PID.
Os dados coletados da simulação numérica do método de controle PD aplicado
como um controle de posição, representada pela Figura 3.3, apresentam um compor-
tamento semelhante ao resultado do controlador PI, Figura 3.1. Ambas as soluções
apresentam uma resposta amortecida e o fenômeno de overshoot é observado nas
duas soluções. Desse modo, a amplitude máxima observada é 4,76 rad em 0,78 s.
Após 0,5 segundo, o valor de amplitude é aproximadamente 4,53 rad, alcançando,
assim, aproximadamente 95% da amplitude desejada.
18
0 1 2 3 4Tempo (s)
1.5
2
2.5
3
3.5
4
4.5
5
Am
plitu
de A
ngul
ar (
rad)
Figura 3.3: Simulação numérica do sistema aplicando o controlador PD como um
controlador de posição.
Os resultados da simulação do método de controle PDFB, dada na figura 3.4,
exibem uma resposta amortecida. Além disso, após 0,5 segundo, o valor da ampli-
tude da solução é 3,37 rad, portanto apenas 72% da amplitude desejada é alcançada.
O tempo de assentamento real é aproximadamente 1,02 s, o que denota um aumento
considerável, quando comparado com o valor esperado de 0,5 s.
0 1 2 3 4Tempo (s)
1.5
2
2.5
3
3.5
4
4.5
5
Am
plitu
de A
ngul
ar (
rad)
Figura 3.4: Simulação numérica do controle de posição do sistema utilizando um
controlador PDFB.
19
3.2 Implementação Experimental
O experimento projetado para o controlador de posição consiste de um deslocamento
angular positivo em 180o, começando em π/2. Esse valor de condição inicial é
escolhido de forma que o braço da unidade se restrinja à região de ângulo elétrico
do potenciômetro. Desse modo, a implementação dos métodos de controle de PD
e PDFB no sistema real é representada pela Figura 3.5. Os dados obtidos a partir
das respostas de ambos os controladores indicam um comportamento amortecido
sem a presença de um overshoot e um considerável erro em regime permanente.
Em relação a isso, as soluções destes controladores apresentam aproximadamente o
mesmo valor em regime permanente, sendo 3,63 rad para o controlador PD e 3,62
rad para o controlador PDFB.
0 0.5 1 1.5 2Tempo (s)
1.5
2
2.5
3
3.5
4
Am
plitu
de A
ngul
ar (
rad)
PDPDFB
Figura 3.5: Dados do controle de posição obtidos em experimentos feitos com os
controladores PD e PDFB aplicados ao braço giratório.
De forma a investigar uma possível origem dos valores elevados do erro em regime
permanente, o esforço de controle exigido por ambos os controladores de posições no
experimento anterior é representado na Figura 3.6. Os dados coletados indicam uma
flutuação da tensão de entrada introduzida no sistema. Vale ressaltar que, apesar
das flutuações de tensão, ambas as tensões de entrada tem um valor final semelhante
de aproximadamente 3 V . É importante salientar que o limite máximo da tensão de
entrada aplicada ao motor é restrito pela tensão de saída do microcontrolador, que
20
no caso do Arduino UNO é de 5 V .
0 0.5 1 1.5 2Tempo (s)
0
1
2
3
4
5
Am
plitu
de d
o Si
nal d
e C
ontr
ole
(V)
PDPDFB
Figura 3.6: Dados do sinal de controle obtidos nos experimentos feitos com os con-
troladores PD e PDFB aplicados ao braço giratório.
Os dados experimentais revelam que os controladores de posição aplicados ao
sistema real não são capazes de reter o desempenho dinâmico da simulação numérica.
Assim, de modo a replicar os resultados de simulação numérica, uma reformulação do
projeto dos controladores de posição e de velocidade é necessária. O novo conjunto
de valores de parâmetros para cada controlador é descrito na tabela 3.1.
Ganhos Modificados
Método de Controle kp ki k∗d
PI 0,8 7 —
PID 10 40,1 0,058
PD 7 — 0,114
PDFB 7 — 0,114
Tabela 3.1: Ganhos modificados obtidos para cada controlador.
Os resultados dos dados experimentais dos métodos de controle de PD e PDFB
com os ganhos modificados são apresentados na Figura 3.7. Os resultados de ambos
os controladores de posição apresentam uma resposta amortecida, embora nenhuma
ocorrerência do fenômeno de overshoot seja observada. Adicionalmente, há uma
21
grande redução do erro em regime permanente quando comparado com o projeto
original, uma vez que os valores de amplitude final para os controladores PD e
PDFB são 4,91 rad e 4.88 rad respectivamente, e a amplitude desejada é 4.71 rad.
Ademais, o tempo de assentamento para cada controlador é de aproximadamente
750 ms para o controlador PD e de 820 ms para o controlador PDFB.
0 0.2 0.4 0.6 0.8 1 1.2Tempo (s)
1.5
2
2.5
3
3.5
4
4.5
5
Am
plitu
de A
ngul
ar (
rad)
PDPDFB
Figura 3.7: Dados de controle de posição obtidos nos experimentos feitos com os
controladores PD e PDFB aplicados ao braço giratório com os ganhos modificados.
A tensão de entrada introduzida no motor de corrente contínua no experimento
anterior é representada na Figura 3.8. Os dados de ambos os controladores ainda
apresentam uma flutuação de tensão de entrada. Além disso, os dados do contro-
lador PDFB exibem algumas oscilações de tensão mais elevadas em torno de 0,9
s, as quais podem ser correlacionadas com as pequenas oscilações de amplitude em
torno do mesmo intervalo temporal observados na Figura 3.7. Adicionalmente, seme-
lhante aos resultados do primeiro experimento, a tensão de entrada atinge um valor
diferente de zero e se mantém constante após o braço do robô entrar em repouso.
22
0 0.2 0.4 0.6 0.8 1 1.2Tempo (s)
-5
0
5
Am
plitu
de d
o Si
nal d
e C
ontr
ole
(V) PD
PDFB
Figura 3.8: Dados do sinal de controle obtidos nos experimentos feitos com os con-
troladores PD e PDFB aplicados ao braço giratório com os ganhos modificados.
Em relação ao controle de velocidade, a análise original dos controladores envol-
veria a mesma abordagem usada para o controle de posição, que tem como foco a
resposta transitória do sistema. Infelizmente, devido ao fato do sensor utilizado para
o controle de velocidade ter sido, forçadamente, alterado de um encoder incremental
para um potenciometro, a análise transitória dos dados teve que ser descartada. A
razão para essa decisão se baseia no fato de que o ângulo elétrico limitado do po-
tenciômetro provoca uma interrupção na coleta de dados pelo potenciômetro, que
afeta a atuação do controlador no sistema. Para minimizar este efeito, quando o
braço do robô sai da região de ângulo elétrico, ambos os controladores passam a
desconsiderar a súbita mudança de ângulo, portanto a descontinuidade angular em
cada rotação não é transmitida para o motor de corrente contínua.
O experimento projetado para os controladores de velocidade envolve o fato de
o sistema alcançar e manter uma velocidade angular de 6,28 rad/s, ou seja, realizar
uma volta a cada segundo. Assim, a implementação dos métodos de controle PI e
PID para o sistema real é representada nas Figuras 3.9 e 3.10, respectivamente.
O comportamento periódico exposto nos dados recolhidos dos controladores PI
e PID é uma consequência do braço giratório sair do intervalo angular elétrico do
potenciômetro. Ademais, isto pode ser observado em ambos os dados dos controla-
dores através de reduções repentinas na velocidade para valores próximos de zero,
23
indicando que o sensor não é capaz de medir o ângulo do braço de acrílico naquela
região.
0 0.5 1 1.5 2 2.5 3Tempo (s)
0
2
4
6
8
10
12
Vel
ocid
ade
Ang
ular
(ra
d/s)
Figura 3.9: Dados experimentais coletados da aplicação do controle PI com o braço
giratório como controlador de velocidade.
Em relação ao controlador PI, representado na Figura 3.9, os resultados mos-
tram que, após o potenciômetro reiniciar as medições, há um aumento repentino da
velocidade de saída, seguido de um decaimento de aproximadamente 0,35 s até que
o controlador seja capaz de atingir a velocidade desejada. Supondo que depois de
2 segundos, o sistema já tenha atingido um comportamento de regime permanente,
a velocidade média do sistema é dada pelo deslocamento angular efetuado em cada
rotação, 2π, dividido pelo tempo necessário para realizar cada rotação. Assim, a na-
tureza periódica da resposta indica que o período de rotação é dado pela diferença
de tempo entre dois mínimos de cada oscilação. Portanto, a velocidade média de
saída do sistema, iniciando após 2 s e finalizando em 2,89 s, é de aproximadamente
7,06 rad/s.
24
0 0.5 1 1.5 2 2.5 3Tempo (s)
0
1
2
3
4
5
6
7
8
Vel
ocid
ade
Ang
ular
(ra
d/s)
Figura 3.10: Dados experimentais coletados da aplicação do controle PID com o
braço giratório como controlador de velocidade.
Os dados experimentais obtidos para o controlador PID, dados na Figura 3.10,
apresentam flutuações de velocidade de saída similares às do comportamento do
controlador PI em regime permanente. No entanto, os resultados do controlador PID
indicam uma menor variação de velocidade quando comparados com os resultados
experimentais do controlador PI. Adicionalmente, não há nenhum aumento súbito
observável na velocidade de saída quando as medições do sensor são restabelecidas.
Além disso, aplicando a mesma suposição sobre a realização de um comportamento
em regime permanente usado no controlador PI, a velocidade média de saída do
controlador PID é de 6,35 rad/s, considerando uma rotação completa entre 1,45 s
e 2,44 s. Por conseguinte, o controlador PID pode ser considerado capaz de atingir
os requisitos de velocidade desejados em uma rotação, se a velocidade média for
considerada.
25
Capítulo 4
Discussão
As simulações numéricas dos controladores PI e PD, Figuras 3.1 e 3.3 respectiva-
mente, denotam um comportamento semelhante, apesar de o segundo ser projetado
para ser um controlador de posição e o outro para ser um controlador de velocidade.
A razão para este comportamento é baseada no fato de que a função de transferência
de segunda ordem para o sistema de circuito fechado do controlador PD, equação
(2.20), e do controlador PI, equação (2.18), são estruturalmente semelhantes. Além
disso, o overshoot observado em ambas as simulações numéricas dos controladores
é uma consequência da introdução de um zero na função de transferência de malha
fechada, como afirmado por [1].
Em relação à simulação numérica do controle de posição, o controlador PDFB é
proposto como uma possível solução para a dinâmica do fenômeno de overshoot ob-
servada no controlador PD. Portanto, nas soluções numéricas, o controlador PDFB
não exibe nenhum overshoot, embora haja um aumento do tempo de assentamento,
conforme descrito na Figura 3.4. Uma análise semelhante é observada nas simulações
numéricas dos controladores de velocidade, de modo que a aplicação do controlador
PID, dado na Figura 3.4, também resultou em um aumento do tempo de assenta-
mento, quando comparado com a resposta do controlador PI, e, além disso, removeu
a dinâmica do overshoot da resposta.
O experimento feito com o controlador de posição projetado com os parâmetros
originais usados na simulação numérica, Figura 3.5, indica que o sistema não é
capaz de representar a dinâmica da simulação numérica devido a um erro em regime
permanente considerável. Uma possível explicação para esta discrepância entre as
26
simulações numéricas e sua contraparte experimental se baseia em uma influência
do efeito de forças dissipativas, como fricção e stiction, que não são consideradas
no modelo matemático do sistema. Adicionalmente, os dados de tensão de entrada
para os dois experimentos, dados na Figura 3.6, mostram uma alta tensão vestigial
quando o braço do robô já está em repouso. Consequentemente, isso pode indicar
que os esforços de controle de ambos controladores não são suficientes para superar
o efeito das forças dissipativas de modo a atingir o ângulo desejado.
Tendo como base o sinal de controle dos controladores de posição, adotando
parâmetros originais - descritos na Figura 3.6 -, quando se compara o mesmo ao sinal
de controle dos controladores de posição, agora adotando os ganhos modificados -
representados na figura 3.8 -, obtêm-se o resultado de que o segundo projeto resulta
em um controlador mais agressivo. Este comportamento pode ser explicado pela
quantidade de energia introduzida no sistema em 0,5 segundo após o início dos
experimentos. O segundo grupo de controladores mantém a tensão de entrada no
valor máximo de 5 V , que é suficiente para o sistema superar o atrito estático, pelo
dobro do tempo quando comparado aos dados do projeto original do controlador.
Assim, a aplicação de uma tensão maior média nesse período de tempo se traduz
em mais energia cinética, representada pela rotação do braço robótico.
É importante observar que os dados do segundo experimento da tensão de entrada
dos controladores de posição, dados na Figura 3.8, também indicam que quando o
controlador inverte a tensão de entrada, a fim de forçar o braço do robô a chegar
em repouso no ângulo projetado, o sistema entra em repouso antes da tensão ser
capaz de atingir seu valor projetado, que seria zero. Além disso, este comporta-
mento aparentemente se traduz em um erro em regime permanente do controlador,
conforme representado na Figura 3.7, já que o controlador é incapaz de retornar à
posição desejada. Dessa forma, após o braço do robô entrar em repouso, os efeitos
do atrito estático impedem o movimento do sistema causando um erro em regime
permanente. Ademais, se a tensão de entrada indica que os controladores são de
fato incapazes de retornar ao valor original, sendo menor do que o ângulo final de
ambos os controladores, o sistema exibe na verdade um overshoot durante a ação dos
controladores PD e o PDFB, mas, no entanto a dinâmica do sistema é restringida
pelas forças dissipativas.
27
Em relação aos dados experimentais coletados nas experiências do controle de
posição, feitas com os ganhos modificados, os resultados mostram uma correlação se-
melhante entre o tempo de assentamento do controlador PD e do controlador PDFB,
como observado nas simulações numéricas. A partir deste fato, os controladores ex-
perimentais com os ganhos modificados, em uma análise qualitativa, são capazes de
recriar satisfatoriamente as características dinâmicas desejadas propostas pela simu-
lação numérica. No entanto, as experiências reais não são capazes de reproduzir o
comportamento de overshoot observado na simulação numérica do controlador PD,
embora parte da dinâmica do sistema seja restrita pelas forças dissipativas.
Os resultados experimentais dos controles de velocidade indicam uma quantidade
considerável de erro nos dados coletados dos controladores PI e PID. Este fenômeno
pode ser consequência do método de diferenciação aplicado para as medições coleta-
das com o potenciômetro para obter a velocidade de saída do braço do robô. Como
o potenciômetro só é capaz de medir deslocamentos angulares, o erro introduzido
nos dados do sensor, como um erro de medição, afeta o erro da aplicação do método
das diferenças finitas. Além disso, o erro associado ao método de aproximação de
primeira ordem para a derivada também pode aumentar a margem de erro, pois a
ordem do erro associado com método de diferenças atrasada utilizando dois pontos
é de mesma ordem que a escala temporal, como afirmado por [5].
O erro em regime permanente do controlador PI, considerando-se a velocidade
média em cada rotação, pode ser uma consequência do súbito aumento de velocidade
introduzido após o braço do robô retornar à região de ângulo elétrico do sensor. Esse
fenômeno parece introduzir uma nova etapa transitória em cada rotação, incluindo
um novo tempo de assentamento. Assim, a resposta do sistema exibe um comporta-
mento qualitativo semelhante à dinâmica de overshoot em um sistema criticamente
amortecido, embora as condições possam ser diferentes.
28
Capítulo 5
Conclusão
As simulações numéricas do modelo matemático desenvolvido para descrever a di-
nâmica da unidade de demonstração interativa revelam que algumas hipóteses con-
sideradas no modelo matemático não representam o sistema real. Os dados experi-
mentais dos controladores de posição parecem indicar que o atrito estático tem uma
grande influência na dinâmica do sistema. Assim, o modelo matemático do sistema,
uma vez que pressupõe que as forças dissipativas podem ser aproximadas para uma
única força de amortecimento viscosa, não é capaz de recriar totalmente a dinâmica
real do sistema.
Apesar dos problemas com a precisão do modelo matemático, os experimentos de
controle de posição com os ganhos modificados indicam que, em uma análise qualita-
tiva, algumas propriedades dinâmicas fundamentais da resposta de cada controlador
também são descritas pelo mesmo modelo matemático. Por exemplo, as simulações
numéricas e os experimentos dos controles de posição mostram que a implementação
de um controlador de PDFB com as mesmas restrições de projeto de um controlador
PD equivalente resultam em um aumento do tempo de assentamento do sistema.
Sobre o controle de velocidade, as margens de erro observadas nos dados de ambos
os controladores não favorecem uma análise comparativa entre a resposta transitória
dos resultados experimentais e as soluções numéricas de ambos os controladores,
portanto, uma análise em regime permanente do sistema é discutida. Por exemplo, os
dados experimentais do controlador PID indicam que o controlador é capaz de atingir
a velocidade projetada se a velocidade média for considerada em cada rotação. Além
disso, os ganhos do controlador PID implementados no sistema real são os mesmos
29
que os ganhos obtidos na simulação numérica.
Por fim, a unidade de demonstração interativa é capaz de implementar os con-
troladores PD e PDFB como controladores de posição e os controladores PI e PID
como controladores de velocidade usando o mesmo conhecimento ensinado durante
os cursos de engenharia mecânica da Universidade Federal do Rio de Janeiro e da
University of Bristol. A partir deste fato, os alunos são capazes de correlacionar os
métodos teóricos aprendidos em sala de aula com os dados experimentais obtidos
a partir da unidade de demonstração através de uma análise qualitativa. Ademais,
o envolvimento dos alunos na análise da unidade deve traduzir em feedback para
o professor, o que poderia ser usado como uma fonte de inspiração para trabalhos
futuros. Por exemplo, a adição de uma análise qualitativa simplificada de contro-
ladores não-lineares, tais como o controle adaptativo ou o slide mode control, pode
ser útil para os alunos comparararem com a dinâmica dos controladores lineares
tradicionais.
30
Referências Bibliográficas
[1] FRANKLIN, G. F., POWELL, J. D., EMAMI-NAEINI, A., Feedback control of
dynamics systems . Addison-Wesley, Reading, MA, 1994.
[2] TENENBAUM, R. A., Dinâmica aplicada. Editora Manole Ltda, 2006.
[3] INMAN, D. J., Engineering vibrations . Prentice-Hall, 2010.
[4] STEWART, J., Cálculo, vol. 1 . Pioneira Thomson Learning, 2001.
[5] SMITH, G. D., Numerical solution of partial differential equations: finite diffe-
rence methods . Oxford University Press, 1985.
[6] DORF, R. C., BISHOP, R. H., Modern control systems . Addison-Wesley, 1998.
31
Apêndice A
Código Fonte PID
//PID CONTROL CODE
//Author: Eduardo Ferreira Vieira d’Almeida
//Date: 7.2015
// Declare pins used as constant value integers
const int speedPin = 3;
const int directionPin = 12;
const int vishayPotPin = A3;
// Declare variables
int vishayPotValue; // integer precision (values from 0 to 1023)
float angle; // float precision since we want a decimal
float angleError; // float precision since we want a decimal
const float speedTarget =2*3.14; // this is the target arm angular velocity
float voltage; // float precision since we want a decimal
float speedValue; // float precision since we want a decimal
// PID variables
unsigned long lastTime; // unsigned long ranges from 0 to 4,294,967,295 that
corresponds to the previous loop time
float sampleTime = 0.01; // 0.01 s or 10 ms
float iTerm = 0; // This is the integral term
float lastError; // This is the error from the previous loop
32
float lastAngle; // This is the angle from the previous loop
float lastSpeed; // This is the angular velocity from the previous loop
unsigned long Time;
float speednow; // Variable that corresponds to the arm angular velocity at the
iteration
float dangle; // Variable that represents the derivative of the angular displacement
float dError ; // Variable that represents the error of the derivative of the angular
displacement
// PID gains
float kp = 10; // Proportional gain
float ki = 40; // Integral gain
float kd = 0.6; // Derivative gain
// The setup routine runs once when you press reset:
void setup()
// in Arduino, digitalRead and digitalWrite require that the
// pin is declared as an INPUT or OUTPUT pin.
pinMode(directionPin, OUTPUT);
Serial.begin(9600); // Starts the serial communication via USB
// account for sampleTime in gains. Since a PID loop’s
// integral term is ki * error * sampleTime and its integral
// term is kd * (error - lastError) / sampleTime, we may
// simplify our PID loop by simply applying that
// multiplication with or division by sampleTime to ki and kd
// directly.
ki = ki * sampleTime;
kd = kd / sampleTime;
// convert sample time to milliseconds (since the function we
// use to measure time works in ms
33
sampleTime = sampleTime * 1000;
// the loop routine repeates indefinitely
void loop()
// read vishay potentiometer
Time = millis(); // Introduce a timer in miliseconds
float vishayPotValue = analogRead(vishayPotPin);
// read the input on analog pin 3:
// convert vishay potentiometer value to an angle.
// this requires an expression using the map() function.
vishayPotValue = map(vishayPotValue, 0, 1023, 593, 0);
angle = vishayPotValue/100;
// compute voltage based on angle error using PID. Here
// compute() refers to a function further down this sketch.
compute();
// convert voltage to PWM output. The PID loop outputs a
// voltage to be applied to the motor’s terminals. Here the
// map function maps a voltage of -5 V to 5 V to a PWM value
// from -255 to 255.
speedValue = map(voltage, -5, 5, -255, 255);
Serial.print(speednow); // prints the velocity value
Serial.print(""); // skips one line
Serial.print(voltage); // prints the voltage value
Serial.print(""); // skips one line
34
Serial.println(Time); // prints the voltage value
// select direction based on speedValue. If speedValue is
// negative the direction should be anticlockwise, and if
// speedValue is positive the direction should be clockwise.
if (speedValue < 0)
if (angle - lastAngle < 1)
if (angle - lastAngle > -1)
// write LOW to the direction pin (anticlockwise)
digitalWrite(directionPin, HIGH);
// write speedValue to the speed pin. Note we use
// -speedValue since analogWrite requires a value from 0 to
// 255. We have accounted for the negativity of the PID
// output by writing LOW to the direction pin.
analogWrite(speedPin, -speedValue);
else
if (angle - lastAngle < 1)
if (angle - lastAngle > -1)
// write HIGH to the direction pin (clockwise)
digitalWrite(directionPin, LOW );
// write speedValue to the speed pin.
analogWrite(speedPin, speedValue);
void compute()
35
// only run compute if sample time has elapsed. The millis()
// function returns the number of milliseconds since the
// sketch was started.
unsigned long now = millis();
// calculate the time change since a PID calculation was
// performed
int timeChange = (now - lastTime);
// if the time change is greater than the sample time, do a
// PID calculation
if (timeChange > sampleTime)
// compute all the working error variables. Error is the
// difference between the target angle and the angle.
dangle = angle - lastAngle;
speednow = dangle / timeChange;
speednow = speednow * 1000; // this multplication accounts for the milliseconds
float error = speedTarget - speednow;
// calculate the difference between this error and last
// error for the derivative term
dError = (error - lastError);
if (dangle < 1)
if (dangle > -1)
// compute the integral term here. Recall that we multiplied
// ki by sample time so sample time is not present here.
iTerm += (ki * error);
// the motor cannot be supplied with more than 5V, so
// integral term values greater than 5 V are reduced to 5 V
36
if (iTerm > 5) iTerm = 5;
if (iTerm < -5) iTerm = -5;
voltage = kp * error + iTerm + kd * dError;
// again, the motor cannot be supplied with more than 5V,
// so values greater than 5 V are reduced to 5 V
if (voltage > 5) voltage = 5;
if (voltage < -5) voltage = -5;
// remember some variables for next iteration
lastError = error;
lastAngle = angle;
lastTime = now;
37
Apêndice B
Código Fonte PI
//PI CONTROL CODE
//Author: Eduardo Ferreira Vieira d’Almeida
//Date: 7.2015
// Declare pins used as constant value integers
const int speedPin = 3;
const int directionPin = 12;
const int vishayPotPin = A3;
// Declare variables
int vishayPotValue; // integer precision (values from 0 to 1023)
float angle; // float precision since we want a decimal
float angleError; // float precision since we want a decimal
const float speedTarget =2*3.14; // this is the target arm angular velocity
float voltage; // float precision since we want a decimal
float speedValue; // float precision since we want a decimal
// PI variables
unsigned long lastTime; // unsigned long ranges from 0 to 4,294,967,295 that
corresponds to the previous loop time
float sampleTime = 0.01; // 0.01 s or 10 ms
float iTerm = 0; // This is the integral term
float lastError; // This is the error from the previous loop
float lastAngle; // This is the angle from the previous loop
38
float lastSpeed; // This is the angular velocity from the previous loop
unsigned long Time;
float speednow; // Variable that corresponds to the arm angular velocity at the
iteration
float dangle; // Variable that represents the derivative of the angular displacement
float dError ; // Variable that represents the error of the derivative of the angular
displacement
// PI gains
float kp = 0.8; // Proportional gain
float ki = 7; // Integral gain
// The setup routine runs once when you press reset
void setup()
// in Arduino, digitalRead and digitalWrite require that the
// pin is declared as an INPUT or OUTPUT pin.
pinMode(directionPin, OUTPUT);
Serial.begin(9600); // Starts the serial communication via USB
// account for sampleTime in gains. Since a PI loop’s
// integral term is ki * error * sampleTime we may
// simplify our PI loop by simply applying that
// multiplication with or division by sampleTime to ki
// directly.
ki = ki * sampleTime;
// convert sample time to milliseconds (since the function we
// use to measure time works in ms
sampleTime = sampleTime * 1000;
// the loop routine repeates indefinitely
39
void loop()
// read vishay potentiometer
Time = millis(); // Introduce a timer in miliseconds
float vishayPotValue = analogRead(vishayPotPin);
// read the input on analog pin 3:
// convert vishay potentiometer value to an angle.
// this requires an expression using the map() function.
vishayPotValue = map(vishayPotValue, 0, 1023, 593, 0);
angle = vishayPotValue/100;
// compute voltage based on angle error using PI. Here
// compute() refers to a function further down this sketch.
compute();
// convert voltage to PWM output. The PI loop outputs a
// voltage to be applied to the motor’s terminals. Here the
// map function maps a voltage of -5 V to 5 V to a PWM value
// from -255 to 255.
speedValue = map(voltage, -5, 5, -255, 255);
Serial.print(speednow); // prints the velocity value
Serial.print(""); // skips one line
Serial.print(voltage); // prints the voltage value
Serial.print(""); // skips one line
Serial.println(Time); // prints the voltage value
// select direction based on speedValue. If speedValue is
// negative the direction should be anticlockwise, and if
40
// speedValue is positive the direction should be clockwise.
if (speedValue < 0)
if (angle - lastAngle < 1)
if (angle - lastAngle > -1)
// write LOW to the direction pin (anticlockwise)
digitalWrite(directionPin, HIGH);
// write speedValue to the speed pin. Note we use
// -speedValue since analogWrite requires a value from 0 to
// 255. We have accounted for the negativity of the PI
// output by writing LOW to the direction pin.
analogWrite(speedPin, -speedValue);
else
if (angle - lastAngle < 1)
if (angle - lastAngle > -1)
// write HIGH to the direction pin (clockwise)
digitalWrite(directionPin, LOW );
// write speedValue to the speed pin.
analogWrite(speedPin, speedValue);
void compute()
// only run compute if sample time has elapsed. The millis()
// function returns the number of milliseconds since the
// sketch was started.
unsigned long now = millis();
41
// calculate the time change since a PI calculation was
// performed
int timeChange = (now - lastTime);
// if the time change is greater than the sample time, do a
// PI calculation
if (timeChange > sampleTime)
// compute all the working error variables. Error is the
// difference between the target angle and the angle.
dangle = angle - lastAngle;
speednow = dangle / timeChange;
speednow = speednow * 1000; // this multplication accounts for the milliseconds
float error = speedTarget - speednow;
// calculate the difference between this error and last
// error for the derivative term
dError = (error - lastError);
if (dangle < 1)
if (dangle > -1)
// compute the integral term here. Recall that we multiplied
// ki by sample time so sample time is not present here.
iTerm += (ki * error);
// the motor cannot be supplied with more than 5V, so
// integral term values greater than 5 V are reduced to 5 V
if (iTerm > 5) iTerm = 5;
if (iTerm < -5) iTerm = -5;
voltage = kp * error + iTerm;
// again, the motor cannot be supplied with more than 5V,
42
// so values greater than 5 V are reduced to 5 V
if (voltage > 5) voltage = 5;
if (voltage < -5) voltage = -5;
// remember some variables for next iteration
lastError = error;
lastAngle = angle;
lastTime = now;
43
Apêndice C
Código Fonte PD
//PD CONTROL CODE
//Author: Eduardo Ferreira Vieira d’Almeida
//Date: 7.2015
// Declare pins used as constant value integers
const int speedPin = 3;
const int directionPin = 12;
const int vishayPotPin = A3;
// Declare variables
int vishayPotValue; // integer precision (values from 0 to 1023)
float angle; // float precision since we want a decimal
float angleError; // float precision since we want a decimal
const float angleTarget =270*3.14/180; // this is the target arm angular velocity
float voltage; // float precision since we want a decimal
float angleValue; // float precision since we want a decimal
// PD variables
unsigned long lastTime; // unsigned long ranges from 0 to 4,294,967,295 that
corresponds to the previous loop time
float sampleTime = 0.01; // 0.01 s or 10 ms
float lastError; // This is the error from the previous loop
float lastAngle; // This is the angle from the previous loop
unsigned long Time;
44
// PD gains
float kp = 7; // Proportional gain
float kd = 0.8; // Derivative gain
// The setup routine runs once when you press reset:
void setup()
// in Arduino, digitalRead and digitalWrite require that the
// pin is declared as an INPUT or OUTPUT pin.
pinMode(directionPin, OUTPUT);
Serial.begin(9600); // Starts the serial communication via USB
// account for sampleTime in gains. Since a PD loop’s
// derivative term is kd * (error - lastError) / sampleTime, we may
// simplify our PD loop by simply applying that
// multiplication with or division by sampleTime to kd
// directly.
kd = kd / sampleTime;
// convert sample time to milliseconds (since the function we
// use to measure time works in ms
sampleTime = sampleTime * 1000;
// the loop routine repeates indefinitely
void loop()
// read vishay potentiometer
Time = millis(); // Introduce a timer in miliseconds
float vishayPotValue = analogRead(vishayPotPin);
45
// read the input on analog pin 3:
// convert vishay potentiometer value to an angle.
// this requires an expression using the map() function.
vishayPotValue = map(vishayPotValue, 0, 1023, 593, 0);
angle = vishayPotValue/100;
// compute voltage based on angle error using PD. Here
// compute() refers to a function further down this sketch.
compute();
// convert voltage to PWM output. The PD loop outputs a
// voltage to be applied to the motor’s terminals. Here the
// map function maps a voltage of -5 V to 5 V to a PWM value
// from -255 to 255.
angleValue = map(voltage, -5, 5, -255, 255);
Serial.print(angle); // prints the velocity value
Serial.print(""); // skips one line
Serial.print(voltage); // prints the voltage value
Serial.print(""); // skips one line
Serial.println(Time); // prints the voltage value
// select direction based on angleValue. If angleValue is
// negative the direction should be anticlockwise, and if
// angleValue is positive the direction should be clockwise.
if (angleValue < 0)
if (angle - lastAngle < 1)
if (angle - lastAngle > -1)
// write LOW to the direction pin (anticlockwise)
digitalWrite(directionPin, HIGH);
46
// write angleValue to the speed pin. Note we use
// -angleValue since analogWrite requires a value from 0 to
// 255. We have accounted for the negativity of the PD
// output by writing LOW to the direction pin.
analogWrite(speedPin, -angleValue);
else
if (angle - lastAngle < 1)
if (angle - lastAngle > -1)
// write HIGH to the direction pin (clockwise)
digitalWrite(directionPin, LOW );
// write speedValue to the speed pin.
analogWrite(speedPin, angleValue);
void compute()
// only run compute if sample time has elapsed. The millis()
// function returns the number of milliseconds since the
// sketch was started.
unsigned long now = millis();
// calculate the time change since a PD calculation was
// performed
int timeChange = (now - lastTime);
// if the time change is greater than the sample time, do a
// PD calculation
47
if (timeChange > sampleTime)
// compute all the working error variables. Error is the
// difference between the target angle and the angle.
float error = angleTarget - angle;
float dangle = angle - lastAngle;
// calculate the difference between this error and last
// error for the derivative term
float dError = (error - lastError);
voltage = kp * error + kd * dError;
// The motor cannot be supplied with more than 5V,
// so values greater than 5 V are reduced to 5 V
if (voltage > 5) voltage = 5;
if (voltage < -5) voltage = -5;
// remember some variables for next iteration
lastError = error;
lastAngle = angle;
lastTime = now;
48
Apêndice D
Código Fonte PDFB
//PDFB CONTROL CODE
//Author: Eduardo Ferreira Vieira d’Almeida
//Date: 7.2015
// Declare pins used as constant value integers
const int speedPin = 3;
const int directionPin = 12;
const int vishayPotPin = A3;
// Declare variables
int vishayPotValue; // integer precision (values from 0 to 1023)
float angle; // float precision since we want a decimal
float angleError; // float precision since we want a decimal
const float angleTarget =270*3.14/180; // this is the target arm angular velocity
float voltage; // float precision since we want a decimal
float angleValue; // float precision since we want a decimal
// PDFB variables
unsigned long lastTime; // unsigned long ranges from 0 to 4,294,967,295 that
corresponds to the previous loop time
float sampleTime = 0.01; // 0.01 s or 10 ms
float lastError; // This is the error from the previous loop
float lastAngle; // This is the angle from the previous loop
unsigned long Time;
49
// PDFB gains
float kp = 7; // Proportional gain
float kd = 0.8; // Derivative gain
// The setup routine runs once when you press reset:
void setup()
// in Arduino, digitalRead and digitalWrite require that the
// pin is declared as an INPUT or OUTPUT pin.
pinMode(directionPin, OUTPUT);
Serial.begin(9600); // Starts the serial communication via USB
// account for sampleTime in gains. Since a PD loop’s
// derivative term is kd * (error - lastError) / sampleTime, we may
// simplify our PD loop by simply applying that
// multiplication with or division by sampleTime to kd
// directly.
kd = kd / sampleTime;
// convert sample time to milliseconds (since the function we
// use to measure time works in ms
sampleTime = sampleTime * 1000;
// the loop routine repeates indefinitely
void loop()
// read vishay potentiometer
Time = millis(); // Introduce a timer in miliseconds
float vishayPotValue = analogRead(vishayPotPin);
50
// read the input on analog pin 3:
// convert vishay potentiometer value to an angle.
// this requires an expression using the map() function.
vishayPotValue = map(vishayPotValue, 0, 1023, 593, 0);
angle = vishayPotValue/100;
// compute voltage based on angle error using PD. Here
// compute() refers to a function further down this sketch.
compute();
// convert voltage to PWM output. The PDFB loop outputs a
// voltage to be applied to the motor’s terminals. Here the
// map function maps a voltage of -5 V to 5 V to a PWM value
// from -255 to 255.
angleValue = map(voltage, -5, 5, -255, 255);
Serial.print(angle); // prints the velocity value
Serial.print(""); // skips one line
Serial.print(voltage); // prints the voltage value
Serial.print(""); // skips one line
Serial.println(Time); // prints the voltage value
// select direction based on angleValue. If angleValue is
// negative the direction should be anticlockwise, and if
// angleValue is positive the direction should be clockwise.
if (angleValue < 0)
if (angle - lastAngle < 1)
if (angle - lastAngle > -1)
// write LOW to the direction pin (anticlockwise)
digitalWrite(directionPin, HIGH);
51
// write angleValue to the speed pin. Note we use
// -angleValue since analogWrite requires a value from 0 to
// 255. We have accounted for the negativity of the PDFB
// output by writing LOW to the direction pin.
analogWrite(speedPin, -angleValue);
else
if (angle - lastAngle < 1)
if (angle - lastAngle > -1)
// write HIGH to the direction pin (clockwise)
digitalWrite(directionPin, LOW );
// write speedValue to the speed pin.
analogWrite(speedPin, angleValue);
void compute()
// only run compute if sample time has elapsed. The millis()
// function returns the number of milliseconds since the
// sketch was started.
unsigned long now = millis();
// calculate the time change since a PDFB calculation was
// performed
int timeChange = (now - lastTime);
// if the time change is greater than the sample time, do a
// PDFB calculation
52
if (timeChange > sampleTime)
// compute all the working error variables. Error is the
// difference between the target angle and the angle.
float error = angleTarget - angle;
float dangle = angle - lastAngle;
voltage = kp * error - kd * dangle;
// The motor cannot be supplied with more than 5V,
// so values greater than 5 V are reduced to 5 V
if (voltage > 5) voltage = 5;
if (voltage < -5) voltage = -5;
// remember some variables for next iteration
lastError = error;
lastAngle = angle;
lastTime = now;
53