MÉTODOSDECONTROLELINEARAPLICADOSAUMAUNIDADEDE...

63
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

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