|
1 | | -# ⚙️ Ferramenta Computacional para Análise de Sistemas de Controle ⚙️ |
| 1 | +<div align="center"> |
2 | 2 |
|
3 | | - |
4 | | -[](https://opensource.org/licenses/MIT) |
| 3 | +<img src="https://img.shields.io/badge/Python-3.10%2B-3776AB?style=for-the-badge&logo=python&logoColor=white"/> |
| 4 | +<img src="https://img.shields.io/badge/License-MIT-22c55e?style=for-the-badge"/> |
| 5 | +<img src="https://img.shields.io/badge/Status-Concluído-22c55e?style=for-the-badge"/> |
| 6 | +<img src="https://img.shields.io/badge/TCC-UFERSA%202025-orange?style=for-the-badge"/> |
5 | 7 |
|
6 | | -**Trabalho de Conclusão de Curso - Engenharia de Computação** |
7 | | -*Aluno: Luís Fernando Alexandre dos Santos* |
8 | | -*Orientador: Prof. Dr. Cecilio Martins de Sousa Neto* |
9 | | -*Universidade Federal Rural do Semi-Árido - 2025* |
| 8 | +<br/><br/> |
10 | 9 |
|
11 | | -## 📜 Descrição Geral |
| 10 | +# ⚙️ SysControl — Ferramenta de Análise de Sistemas de Controle |
12 | 11 |
|
13 | | -Esta é uma ferramenta computacional desenvolvida em Python com o objetivo de **auxiliar estudantes e profissionais** das áreas de Engenharia (Controle, Computação, Elétrica, Mecatrônica) na **análise, projeto e caracterização de sistemas de controle dinâmicos**. |
| 12 | +> **Aplicação desktop completa para análise, projeto e simulação de sistemas de controle dinâmicos.** |
| 13 | +> Desenvolvida como Trabalho de Conclusão de Curso em Engenharia de Computação. |
14 | 14 |
|
15 | | -A aplicação oferece uma interface gráfica intuitiva que permite: |
16 | | -* Analisar a estabilidade de sistemas lineares pelo critério de **Routh-Hurwitz**. |
17 | | -* Extrair parâmetros de desempenho ($\omega_n$, $\zeta$) de **sistemas de segunda ordem**. |
18 | | -* Realizar uma análise textual e gráfica completa do **Lugar Geométrico das Raízes (LGR)**. |
19 | | -* Projetar e simular controladores clássicos **PI, PD e PID**, comparando a resposta temporal, o LGR e o mapa de polos/zeros do sistema original versus o sistema controlado. |
| 15 | +<br/> |
20 | 16 |
|
21 | | -## ✨ Módulos Principais |
| 17 | +_Autor: **Luís Fernando Alexandre dos Santos**_ |
| 18 | +_Orientador: **Prof. Dr. Cecilio Martins de Sousa Neto**_ |
| 19 | +_Universidade Federal Rural do Semi-Árido — UFERSA · 2025_ |
22 | 20 |
|
23 | | -A ferramenta é dividida em quatro módulos independentes, cada um focado em uma etapa diferente da análise de sistemas de controle. |
| 21 | +</div> |
24 | 22 |
|
25 | | -| Módulo | Screenshot | |
26 | | -| :--- | :--- | |
27 | | -| **1. Tela Principal** |  | |
28 | | -| **2. Análise de Estabilidade** |  | |
29 | | -| **3. Análise de Sistema 2ª Ordem** |  | |
30 | | -| **4. Lugar Geométrico das Raízes** | ** | |
31 | | -| **5. Análise de Controladores** |  | |
| 23 | +--- |
| 24 | + |
| 25 | +## 📌 Visão Geral |
| 26 | + |
| 27 | +O **SysControl** é uma ferramenta educacional desenvolvida em Python com interface gráfica moderna, destinada a estudantes e profissionais de Engenharia de Controle, Computação, Elétrica e Mecatrônica. |
| 28 | + |
| 29 | +A aplicação reúne em um único ambiente: |
| 30 | + |
| 31 | +- ✅ Análise de **estabilidade** via Critério de Routh-Hurwitz |
| 32 | +- ✅ Extração de **parâmetros** de sistemas de segunda ordem (ωₙ, ζ, K) |
| 33 | +- ✅ Análise completa do **Lugar Geométrico das Raízes (LGR)** |
| 34 | +- ✅ Projeto e simulação de **controladores PI, PD e PID** com comparativos gráficos |
32 | 35 |
|
33 | 36 | --- |
34 | 37 |
|
35 | | -## 🧭 Funcionalidades dos Módulos |
36 | | - |
37 | | -A aplicação é dividida em quatro módulos principais, acessíveis pela tela inicial: |
38 | | - |
39 | | -### 1. 📊 Análise de Estabilidade |
40 | | -* **Objetivo:** Avaliar a estabilidade de um sistema a partir de sua **equação característica**. |
41 | | -* **Funcionalidade:** Implementa o **Critério de Routh-Hurwitz**, gerando a tabela de Routh formatada e indicando o número de polos instáveis. |
42 | | -* **Entrada:** Coeficientes do polinômio característico (denominador). |
43 | | -* **Saída:** Relatório textual completo, incluindo a tabela de Routh, as raízes do polinômio (polos) e uma conclusão clara sobre a estabilidade do sistema. |
44 | | - |
45 | | -### 2. ⚙️ Análise de Sistema 2ª Ordem |
46 | | -* **Objetivo:** Extrair parâmetros fundamentais e métricas de desempenho de um sistema de segunda ordem. |
47 | | -* **Funcionalidade:** Recebe a função de transferência (numerador e denominador) e calcula os parâmetros $\omega_n$ (frequência natural), $\zeta$ (coeficiente de amortecimento) e K (ganho). |
48 | | -* **Saída:** Relatório textual detalhado com todos os parâmetros, classificação do sistema (subamortecido, etc.) e as métricas de resposta temporal (Tr, Tp, Ts, Mp). |
49 | | - |
50 | | -### 3. 📌 Lugar Geométrico das Raízes (LGR) |
51 | | -* **Objetivo:** Fornecer uma análise completa, textual e gráfica, do LGR de um sistema em malha aberta. |
52 | | -* **Funcionalidade:** Este módulo dedicado calcula todas as 6 regras de construção do LGR. |
53 | | -* **Saída:** |
54 | | - * **Gráfico Interativo:** Plota os polos, zeros, ramos, segmentos do eixo real e assíntotas. |
55 | | - * **Relatório Detalhado:** Gera um relatório de texto completo, formatado de maneira didática, contendo: |
56 | | - 1. Polos e Zeros. |
57 | | - 2. Segmentos do eixo real que pertencem ao LGR. |
58 | | - 3. Cálculo das Assíntotas (centro e ângulos). |
59 | | - 4. Pontos de Entrada/Saída (cálculo de dK/ds = 0). |
60 | | - 5. Ângulos de Partida e Chegada (para polos/zeros complexos). |
61 | | - 6. Análise de **Routh-Hurwitz** para encontrar o **Ganho Crítico (K)** e os pontos de **cruzamento com o eixo jω**. |
62 | | - |
63 | | -### 4. 🎮 Análise de Controladores (PI, PD, PID) |
64 | | -* **Objetivo:** Projetar, simular e comparar o desempenho de um sistema com e sem um controlador. |
65 | | -* **Funcionalidade:** Permite ao usuário definir a planta G(s), o tipo de entrada (Degrau/Rampa) e os ganhos (Kp, Ki, Kd) do controlador. |
66 | | -* **Saída:** Uma interface multi-abas com comparativos lado a lado: |
67 | | - * **Resposta Temporal:** Gráfico da saída $y(t)$ do sistema original vs. sistema controlado. |
68 | | - * **Lugar das Raízes:** Gráfico do LGR de $G(s)$ vs. $G_c(s)G(s)$. |
69 | | - * **Polos e Zeros:** Mapa de polos/zeros do sistema *final* (malha fechada). |
70 | | - * **Métricas:** Tabela comparativa de desempenho (Tr, Ts, Mp, etc.). |
71 | | -* **Nova Funcionalidade:** A aba LGR deste módulo permite ao usuário especificar **polos dominantes desejados** (inserindo $\zeta$ e $\omega_n$) e exibe no gráfico a linha de $\zeta$ constante e os polos desejados, auxiliando no projeto do controlador. |
| 38 | +## 🖥️ Interface da Aplicação |
| 39 | + |
| 40 | +| Módulo | Tela | |
| 41 | +|--------|------| |
| 42 | +| 🏠 Tela Principal |  | |
| 43 | +| 📊 Análise de Estabilidade |  | |
| 44 | +| ⚙️ Sistema de 2ª Ordem |  | |
| 45 | +| 📌 Lugar Geométrico das Raízes |  | |
| 46 | +| 🎮 Análise de Controladores |  | |
| 47 | + |
| 48 | +--- |
| 49 | + |
| 50 | +## 🧩 Módulos |
| 51 | + |
| 52 | +### 📊 1. Análise de Estabilidade |
| 53 | + |
| 54 | +Determina a estabilidade de um sistema a partir de sua equação característica. |
| 55 | + |
| 56 | +- Implementa o **Critério de Routh-Hurwitz** com geração automática da tabela |
| 57 | +- Identifica o número de **polos instáveis** (semiplano direito) |
| 58 | +- Exibe as **raízes do polinômio** e uma conclusão clara sobre a estabilidade |
| 59 | + |
| 60 | +**Entrada:** coeficientes do polinômio característico |
| 61 | +**Saída:** tabela de Routh formatada + relatório textual completo |
| 62 | + |
| 63 | +--- |
| 64 | + |
| 65 | +### ⚙️ 2. Análise de Sistema de 2ª Ordem |
| 66 | + |
| 67 | +Extrai parâmetros e métricas de desempenho de sistemas de segunda ordem. |
| 68 | + |
| 69 | +| Parâmetro | Descrição | |
| 70 | +|-----------|-----------| |
| 71 | +| ωₙ | Frequência natural | |
| 72 | +| ζ | Coeficiente de amortecimento | |
| 73 | +| K | Ganho estático | |
| 74 | +| Tr | Tempo de subida (10% → 90%) | |
| 75 | +| Tp | Tempo de pico | |
| 76 | +| Mp (%) | Máximo sobressinal | |
| 77 | +| Ts | Tempo de acomodação (±2%) | |
| 78 | + |
| 79 | +Classifica automaticamente o sistema: **subamortecido**, **criticamente amortecido** ou **superamortecido**. |
| 80 | + |
| 81 | +--- |
| 82 | + |
| 83 | +### 📌 3. Lugar Geométrico das Raízes (LGR) |
| 84 | + |
| 85 | +Análise gráfica e textual completa do LGR de um sistema em malha aberta. |
| 86 | + |
| 87 | +**Regras de construção calculadas:** |
| 88 | +1. Polos e zeros do sistema |
| 89 | +2. Segmentos do eixo real pertencentes ao LGR |
| 90 | +3. Assíntotas — centro e ângulos |
| 91 | +4. Pontos de entrada/saída (`dK/ds = 0`) |
| 92 | +5. Ângulos de partida e chegada (polos/zeros complexos) |
| 93 | +6. **Ganho Crítico (K)** e cruzamentos com o eixo jω via Routh-Hurwitz |
| 94 | + |
| 95 | +**Saídas:** gráfico interativo com polos, zeros, ramos e assíntotas + relatório didático detalhado |
| 96 | + |
| 97 | +--- |
| 98 | + |
| 99 | +### 🎮 4. Análise de Controladores (PI · PD · PID) |
| 100 | + |
| 101 | +Projeta, simula e compara o desempenho do sistema com e sem controlador. |
| 102 | + |
| 103 | +**Interface multi-abas com comparativos lado a lado:** |
| 104 | + |
| 105 | +| Aba | Conteúdo | |
| 106 | +|-----|----------| |
| 107 | +| 📈 Resposta Temporal | y(t) — sistema original vs. controlado | |
| 108 | +| 📌 Lugar das Raízes | LGR de G(s) vs. Gc(s)·G(s) | |
| 109 | +| 🗺️ Polos e Zeros | Mapa do sistema em malha fechada | |
| 110 | +| 📋 Métricas | Tabela comparativa (Tr, Ts, Mp, e_ss...) | |
| 111 | + |
| 112 | +> **Funcionalidade extra:** a aba LGR permite definir **polos dominantes desejados** a partir de ζ e ωₙ, exibindo a linha de ζ constante no gráfico para auxiliar no projeto. |
72 | 113 |
|
73 | 114 | --- |
74 | 115 |
|
75 | | -## 🧠 Conceitos Teóricos Abordados |
76 | | - |
77 | | -A ferramenta se baseia em conceitos fundamentais da Teoria de Controle Clássico: |
78 | | - |
79 | | -* **Função de Transferência:** Representação matemática da dinâmica de um sistema linear no domínio de Laplace, $G(s) = \frac{N(s)}{D(s)}$. |
80 | | -* **Sistemas de Segunda Ordem:** Sistemas cuja dinâmica é descrita por uma equação diferencial de segunda ordem. A forma padrão em malha fechada é $G(s) = \frac{K \omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2}$, onde: |
81 | | - * $\omega_n$: Frequência natural (velocidade da resposta). |
82 | | - * $\zeta$: Coeficiente de amortecimento (forma da resposta: subamortecida, crítica, superamortecida). |
83 | | -* **Estabilidade (Critério de Routh-Hurwitz):** Método algébrico que, a partir da equação característica, determina o número de polos no semiplano direito (indicando instabilidade). |
84 | | -* **Lugar Geométrico das Raízes (LGR):** Gráfico que mostra como os polos de malha fechada se movem no plano-s à medida que um ganho (K) varia de 0 a $\infty$. |
85 | | -* **Resposta Temporal:** Comportamento da saída do sistema ao longo do tempo em resposta a uma entrada (Degrau ou Rampa). Métricas importantes incluem: |
86 | | - * **Tempo de Subida (Tr):** Tempo para a resposta ir de 10% a 90% do valor final. |
87 | | - * **Tempo de Pico (Tp):** Tempo para atingir o primeiro pico de sobressinal. |
88 | | - * **Máximo Sobressinal (Mp%):** Percentual máximo que a resposta ultrapassa o valor final. |
89 | | - * **Tempo de Acomodação (Ts):** Tempo para a resposta entrar e permanecer dentro de uma faixa (geralmente ±2%) do valor final. |
90 | | -* **Erro em Regime Permanente ($e_{ss}$):** A diferença entre a entrada desejada e a saída do sistema após um longo tempo. |
91 | | -* **Controladores PID:** |
92 | | - * **Proporcional (P):** Atua proporcionalmente ao erro atual. |
93 | | - * **Integral (I):** Atua na integral do erro passado (elimina o $e_{ss}$ para entradas degrau). |
94 | | - * **Derivativo (D):** Atua na taxa de variação do erro (melhora a estabilidade e a resposta transitória). |
| 116 | +## 🧠 Base Teórica |
| 117 | + |
| 118 | +``` |
| 119 | +G(s) = N(s) / D(s) Função de Transferência |
| 120 | +
|
| 121 | + K · ωₙ² |
| 122 | +G(s) = ────────────────── Forma padrão de 2ª ordem |
| 123 | + s² + 2ζωₙs + ωₙ² |
| 124 | +``` |
| 125 | + |
| 126 | +| Conceito | Descrição | |
| 127 | +|----------|-----------| |
| 128 | +| **Função de Transferência** | Representação no domínio de Laplace | |
| 129 | +| **Routh-Hurwitz** | Método algébrico para análise de estabilidade | |
| 130 | +| **LGR** | Trajetória dos polos de malha fechada em função do ganho K | |
| 131 | +| **PID** | Controlador com ação proporcional, integral e derivativa | |
| 132 | +| **Erro em Regime (e_ss)** | Diferença entre referência e saída em regime permanente | |
95 | 133 |
|
96 | 134 | --- |
97 | 135 |
|
98 | | -## 🛠️ Tecnologias Utilizadas |
| 136 | +## 🛠️ Stack Tecnológica |
99 | 137 |
|
100 | | -* **Python 3.10+** |
101 | | -* **CustomTkinter:** Para a interface gráfica moderna e responsiva. |
102 | | -* **Matplotlib:** Para a geração e exibição dos gráficos incorporados na interface. |
103 | | -* **Control:** Biblioteca Python essencial para análise e projeto de sistemas de controle (criação de TF, `step_response`, `feedback`, `rlocus`, `poles`, `zeros`, `damp`). |
104 | | -* **NumPy:** Para cálculos numéricos eficientes e manipulação de arrays. |
105 | | -* **SciPy:** Utilizada para a simulação da resposta à rampa (`scipy.signal.lsim`). |
106 | | -* **SymPy:** Utilizada para os cálculos simbólicos do LGR, como `dK/ds = 0`, e para a construção da tabela de Routh-Hurwitz com o ganho `k`. |
107 | | -* **Pillow (PIL):** Necessário pelo `tela.py` para carregar e exibir imagens na interface. |
| 138 | +| Biblioteca | Uso | |
| 139 | +|------------|-----| |
| 140 | +| `CustomTkinter` | Interface gráfica moderna e responsiva | |
| 141 | +| `Matplotlib` | Geração e exibição de gráficos embutidos | |
| 142 | +| `Control` | Núcleo de análise de sistemas de controle | |
| 143 | +| `NumPy` | Cálculos numéricos e manipulação de arrays | |
| 144 | +| `SciPy` | Simulação da resposta à rampa (`lsim`) | |
| 145 | +| `SymPy` | Cálculos simbólicos do LGR e tabela de Routh | |
| 146 | +| `Pillow` | Carregamento de imagens na interface | |
| 147 | + |
| 148 | +--- |
108 | 149 |
|
109 | 150 | ## 🚀 Como Executar |
110 | 151 |
|
111 | | -1. **Clone o repositório:** |
112 | | - ```bash |
113 | | - git clone [https://github.com/luisFernandoJv/sistema-de-controle---an-lise-de-sistema-de-segunda-ordem-.git](https://github.com/luisFernandoJv/sistema-de-controle---an-lise-de-sistema-de-segunda-ordem-.git) |
114 | | - cd sistema-de-controle---an-lise-de-sistema-de-segunda-ordem- |
115 | | - ``` |
116 | | - |
117 | | -2. **Crie e ative um ambiente virtual (recomendado):** |
118 | | - ```bash |
119 | | - python -m venv venv |
120 | | - source venv/bin/activate # Linux/macOS |
121 | | - # ou |
122 | | - .\venv\Scripts\activate # Windows |
123 | | - ``` |
124 | | - |
125 | | -3. **Instale as dependências:** |
126 | | - *(Certifique-se de ter um arquivo `requirements.txt`)* |
127 | | - ```bash |
128 | | - pip install -r requirements.txt |
129 | | - ``` |
130 | | - *Seu `requirements.txt` deve conter:* |
131 | | - ``` |
132 | | - customtkinter |
133 | | - matplotlib |
134 | | - control |
135 | | - numpy |
136 | | - scipy |
137 | | - sympy |
138 | | - Pillow |
139 | | - ``` |
140 | | - |
141 | | -4. **Execute a aplicação principal (`tela.py`):** |
142 | | - ```bash |
143 | | - python tela.py |
144 | | - ``` |
| 152 | +### 1. Clone o repositório |
| 153 | + |
| 154 | +```bash |
| 155 | +git clone https://github.com/luisFernandoJv/sistema-de-controle---an-lise-de-sistema-de-segunda-ordem-.git |
| 156 | +cd sistema-de-controle---an-lise-de-sistema-de-segunda-ordem- |
| 157 | +``` |
| 158 | + |
| 159 | +### 2. Crie um ambiente virtual |
| 160 | + |
| 161 | +```bash |
| 162 | +python -m venv venv |
| 163 | + |
| 164 | +# Linux / macOS |
| 165 | +source venv/bin/activate |
| 166 | + |
| 167 | +# Windows |
| 168 | +.\venv\Scripts\activate |
| 169 | +``` |
| 170 | + |
| 171 | +### 3. Instale as dependências |
| 172 | + |
| 173 | +```bash |
| 174 | +pip install -r requirements.txt |
| 175 | +``` |
| 176 | + |
| 177 | +`requirements.txt`: |
| 178 | +``` |
| 179 | +customtkinter |
| 180 | +matplotlib |
| 181 | +control |
| 182 | +numpy |
| 183 | +scipy |
| 184 | +sympy |
| 185 | +Pillow |
| 186 | +``` |
| 187 | + |
| 188 | +### 4. Execute a aplicação |
| 189 | + |
| 190 | +```bash |
| 191 | +python tela.py |
| 192 | +``` |
| 193 | + |
| 194 | +--- |
| 195 | + |
| 196 | +## 📁 Estrutura do Projeto |
| 197 | + |
| 198 | +``` |
| 199 | +📦 sistema-de-controle/ |
| 200 | + ┣ 📂 image/ # Screenshots da interface |
| 201 | + ┣ 📜 tela.py # Ponto de entrada — tela principal |
| 202 | + ┣ 📜 estabilidade.py # Módulo 1: Análise de Estabilidade |
| 203 | + ┣ 📜 segunda_ordem.py # Módulo 2: Sistema de 2ª Ordem |
| 204 | + ┣ 📜 lgr.py # Módulo 3: Lugar Geométrico das Raízes |
| 205 | + ┣ 📜 controladores.py # Módulo 4: Análise de Controladores |
| 206 | + ┣ 📜 requirements.txt |
| 207 | + ┗ 📜 README.md |
| 208 | +``` |
| 209 | + |
| 210 | +--- |
145 | 211 |
|
146 | 212 | ## 📄 Licença |
147 | 213 |
|
148 | | -Este projeto é distribuído sob a licença MIT. |
| 214 | +Distribuído sob a licença **MIT**. Consulte o arquivo [`LICENSE`](LICENSE) para mais detalhes. |
| 215 | + |
| 216 | +--- |
| 217 | + |
| 218 | +<div align="center"> |
| 219 | + |
| 220 | +Desenvolvido com 💙 para a comunidade de Engenharia de Controle |
| 221 | +**UFERSA · Engenharia de Computação · 2025** |
| 222 | + |
| 223 | +</div> |
0 commit comments