<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>controle integral - MCU &amp; FPGA</title>
	<atom:link href="https://mcu.tec.br/tags/controle-integral/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcu.tec.br</link>
	<description>Microcontroladores &#38; FPGA</description>
	<lastBuildDate>Thu, 13 Mar 2025 21:41:21 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://mcu.tec.br/wp-content/uploads/2025/02/Robo-para-o-site-MCU.tec_.br-512x512-1-150x150.png</url>
	<title>controle integral - MCU &amp; FPGA</title>
	<link>https://mcu.tec.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Sistema PID e Diferenças entre Sistemas de Controle Aberto e Fechado</title>
		<link>https://mcu.tec.br/algoritimos/sistema-pid-e-diferencas-entre-sistemas-de-controle-aberto-e-fechado/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sistema-pid-e-diferencas-entre-sistemas-de-controle-aberto-e-fechado</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Thu, 13 Mar 2025 21:38:44 +0000</pubDate>
				<category><![CDATA[Algoritimos]]></category>
		<category><![CDATA[algoritmo PID em C]]></category>
		<category><![CDATA[automação industrial]]></category>
		<category><![CDATA[código PID em C]]></category>
		<category><![CDATA[controle aberto]]></category>
		<category><![CDATA[controle derivativo]]></category>
		<category><![CDATA[controle fechado]]></category>
		<category><![CDATA[controle integral]]></category>
		<category><![CDATA[controle PID]]></category>
		<category><![CDATA[controle proporcional]]></category>
		<category><![CDATA[engenharia de controle]]></category>
		<category><![CDATA[estabilidade do sistema]]></category>
		<category><![CDATA[implementação de PID]]></category>
		<category><![CDATA[otimização de controle]]></category>
		<category><![CDATA[programação embarcada]]></category>
		<category><![CDATA[sistemas de controle]]></category>
		<category><![CDATA[sistemas de feedback]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=120</guid>

					<description><![CDATA[<p>Descubra como funciona o controlador PID, suas aplicações e a diferença entre sistemas de controle aberto e fechado. Veja um exemplo prático de implementação do algoritmo em C com código documentado.</p>
<p>The post <a href="https://mcu.tec.br/algoritimos/sistema-pid-e-diferencas-entre-sistemas-de-controle-aberto-e-fechado/">Sistema PID e Diferenças entre Sistemas de Controle Aberto e Fechado</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">O controle PID (Proporcional-Integral-Derivativo) é um dos métodos mais amplamente utilizados na automação e controle de processos industriais. Sua aplicação se dá em sistemas onde se deseja controlar uma variável de saída a partir de uma entrada desejada, minimizando erros e garantindo estabilidade. Este artigo apresenta os fundamentos do controle PID, explora as diferenças entre sistemas de controle aberto e fechado e fornece uma implementação prática do algoritmo em linguagem C, com explicações detalhadas e documentação apropriada.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="585" src="https://mcu.tec.br/wp-content/uploads/2025/03/image-2-1024x585.png" alt="" class="wp-image-122" srcset="https://mcu.tec.br/wp-content/uploads/2025/03/image-2-1024x585.png 1024w, https://mcu.tec.br/wp-content/uploads/2025/03/image-2-300x171.png 300w, https://mcu.tec.br/wp-content/uploads/2025/03/image-2-768x439.png 768w, https://mcu.tec.br/wp-content/uploads/2025/03/image-2-1536x878.png 1536w, https://mcu.tec.br/wp-content/uploads/2025/03/image-2.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><strong>Introdução aos Sistemas de Controle</strong></h2>



<p class="wp-block-paragraph">Os sistemas de controle são fundamentais em diversas áreas da engenharia, permitindo a automação de processos mecânicos, elétricos e químicos. De maneira geral, esses sistemas podem ser classificados em <strong>controle aberto</strong> e <strong>controle fechado</strong>, cada um com características e aplicações distintas.</p>



<h3 class="wp-block-heading"><strong>Sistemas de Controle Aberto</strong></h3>



<p class="wp-block-paragraph">Um sistema de controle aberto é aquele no qual a saída não influencia diretamente a ação de controle. Ou seja, a entrada é aplicada ao sistema e a saída é gerada sem qualquer tipo de realimentação. Esse tipo de controle é simples, mas apresenta limitações significativas, pois não se ajusta automaticamente às variações externas ou internas do sistema.</p>



<h4 class="wp-block-heading"><strong>Exemplo de Sistema de Controle Aberto</strong></h4>



<ul class="wp-block-list">
<li><strong>Torradeira elétrica</strong>: Uma torradeira aplica calor ao pão por um tempo pré-determinado sem medir se ele realmente atingiu o nível de tostagem desejado.</li>
</ul>



<p class="wp-block-paragraph"><strong>Vantagens:</strong></p>



<ul class="wp-block-list">
<li>Simplicidade na implementação;</li>



<li>Baixo custo.</li>
</ul>



<p class="wp-block-paragraph"><strong>Desvantagens:</strong></p>



<ul class="wp-block-list">
<li>Sensibilidade a perturbações externas;</li>



<li>Incapacidade de correção automática de erros.</li>
</ul>



<h3 class="wp-block-heading"><strong>Sistemas de Controle Fechado</strong></h3>



<p class="wp-block-paragraph">Diferente dos sistemas abertos, um sistema de controle fechado utiliza realimentação (feedback) para ajustar automaticamente a saída conforme a necessidade. Um sensor mede a variável de saída e compara com o valor desejado (setpoint), ajustando o sinal de controle para minimizar o erro.</p>



<h4 class="wp-block-heading"><strong>Exemplo de Sistema de Controle Fechado</strong></h4>



<ul class="wp-block-list">
<li><strong>Controle de temperatura de um forno</strong>: Um sensor mede a temperatura interna do forno e ajusta a potência do aquecedor para manter a temperatura desejada.</li>
</ul>



<p class="wp-block-paragraph"><strong>Vantagens:</strong></p>



<ul class="wp-block-list">
<li>Maior precisão no controle da variável de interesse;</li>



<li>Capacidade de compensação de perturbações externas;</li>



<li>Melhor estabilidade do sistema.</li>
</ul>



<p class="wp-block-paragraph"><strong>Desvantagens:</strong></p>



<ul class="wp-block-list">
<li>Maior complexidade e custo;</li>



<li>Necessidade de calibração e ajuste dos parâmetros.</li>
</ul>



<h2 class="wp-block-heading"><strong>Fundamentos do Controle PID</strong></h2>



<p class="wp-block-paragraph">O controlador PID é um tipo de controlador de realimentação que utiliza três componentes matemáticos principais para ajustar a resposta do sistema: <strong>Proporcional (P), Integral (I) e Derivativo (D)</strong>. A equação geral do PID pode ser expressa como: u(t)=Kpe(t)+Ki∫e(t)dt+Kdde(t)dtu(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{d e(t)}{dt}</p>



<p class="wp-block-paragraph">Onde:</p>



<ul class="wp-block-list">
<li>u(t)u(t) é o sinal de controle;</li>



<li>e(t)e(t) é o erro, definido como a diferença entre o valor desejado e o valor atual;</li>



<li>KpK_p é o ganho proporcional;</li>



<li>KiK_i é o ganho integral;</li>



<li>KdK_d é o ganho derivativo.</li>
</ul>



<p class="wp-block-paragraph">Cada um desses termos tem um papel fundamental no comportamento do sistema:</p>



<ul class="wp-block-list">
<li><strong>Proporcional (P):</strong> Controla a resposta imediata do sistema ao erro, ajustando a intensidade do sinal de controle proporcionalmente ao erro.</li>



<li><strong>Integral (I):</strong> Acumula os erros passados para eliminar erros de estado estacionário.</li>



<li><strong>Derivativo (D):</strong> Prever tendências futuras de erro e atuar para minimizar oscilações.</li>
</ul>



<h2 class="wp-block-heading"><strong>Implementação do Algoritmo PID em C</strong></h2>



<p class="wp-block-paragraph">Para demonstrar o funcionamento do controlador PID, implementamos um algoritmo em C, documentado e estruturado para ser usado em sistemas embarcados e aplicações de controle industrial.</p>



<p class="wp-block-paragraph">A implementação abaixo utiliza uma estrutura de dados para armazenar os parâmetros do controlador PID e inclui uma função para calcular a saída do controlador com base no erro de entrada.</p>



<h3 class="wp-block-heading"><strong>Código em C</strong></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="#include <stdio.h&gt;

// Definição da estrutura do controlador PID
typedef struct {
    double Kp;  // Ganho Proporcional
    double Ki;  // Ganho Integral
    double Kd;  // Ganho Derivativo
    double prevError; // Erro anterior
    double integral;  // Acumulador do termo integral
    double dt;  // Tempo de amostragem
} PIDController;

// Função para inicializar o controlador PID
void PID_Init(PIDController *pid, double Kp, double Ki, double Kd, double dt) {
    pid-&gt;Kp = Kp;
    pid-&gt;Ki = Ki;
    pid-&gt;Kd = Kd;
    pid-&gt;prevError = 0.0;
    pid-&gt;integral = 0.0;
    pid-&gt;dt = dt;
}

// Função para calcular a saída do controlador PID
double PID_Compute(PIDController *pid, double setpoint, double measuredValue) {
    double error = setpoint - measuredValue;  // Calcula o erro
    pid-&gt;integral += error * pid-&gt;dt;  // Calcula o termo integral
    double derivative = (error - pid-&gt;prevError) / pid-&gt;dt;  // Calcula o termo derivativo

    // Calcula a saída do PID
    double output = (pid-&gt;Kp * error) + (pid-&gt;Ki * pid-&gt;integral) + (pid-&gt;Kd * derivative);

    // Atualiza o erro anterior para a próxima iteração
    pid-&gt;prevError = error;

    return output;
}

// Exemplo de uso do controlador PID
int main() {
    PIDController pid;
    PID_Init(&amp;pid, 1.2, 0.01, 0.5, 0.1);  // Inicializa o PID com valores arbitrários

    double setpoint = 100.0;  // Valor desejado
    double measuredValue = 90.0;  // Valor real medido

    for (int i = 0; i < 10; i++) {  // Simulação de 10 iterações
        double controlSignal = PID_Compute(&amp;pid, setpoint, measuredValue);
        measuredValue += controlSignal * 0.1;  // Simula um sistema reagindo ao controle

        printf(&quot;Iteração %d - Controle: %.2f - Medida Atual: %.2f\n&quot;, i + 1, controlSignal, measuredValue);
    }

    return 0;
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #5E81AC; font-weight: bold">#</span><span style="color: #81A1C1">include</span><span style="color: #8FBCBB"> </span><span style="color: #ECEFF4">&lt;</span><span style="color: #8FBCBB">stdio.h</span><span style="color: #ECEFF4">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// Definição da estrutura do controlador PID</span></span>
<span class="line"><span style="color: #81A1C1">typedef</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">struct</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> Kp</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Ganho Proporcional</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> Ki</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Ganho Integral</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> Kd</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Ganho Derivativo</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> prevError</span><span style="color: #81A1C1">;</span><span style="color: #616E88"> // Erro anterior</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> integral</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Acumulador do termo integral</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> dt</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Tempo de amostragem</span></span>
<span class="line"><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> PIDController</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// Função para inicializar o controlador PID</span></span>
<span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">PID_Init</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">PIDController </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">pid</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Kp</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Ki</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Kd</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">dt</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">Kp</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> Kp</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">Ki</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> Ki</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">Kd</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> Kd</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">prevError</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.0</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">integral</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.0</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">dt</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> dt</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// Função para calcular a saída do controlador PID</span></span>
<span class="line"><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">PID_Compute</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">PIDController </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">pid</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">setpoint</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">measuredValue</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> error </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> setpoint </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> measuredValue</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Calcula o erro</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">integral</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+=</span><span style="color: #D8DEE9FF"> error </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">dt</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Calcula o termo integral</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> derivative </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">error </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">prevError</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">dt</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Calcula o termo derivativo</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// Calcula a saída do PID</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> output </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">Kp</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> error</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">Ki</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">integral</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">Kd</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> derivative</span><span style="color: #ECEFF4">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// Atualiza o erro anterior para a próxima iteração</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">pid</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">prevError</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> error</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> output</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// Exemplo de uso do controlador PID</span></span>
<span class="line"><span style="color: #81A1C1">int</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    PIDController pid</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">PID_Init</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">&amp;</span><span style="color: #D8DEE9FF">pid</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1.2</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.01</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.5</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.1</span><span style="color: #ECEFF4">)</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Inicializa o PID com valores arbitrários</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> setpoint </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">100.0</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Valor desejado</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> measuredValue </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">90.0</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Valor real medido</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">int</span><span style="color: #D8DEE9FF"> i </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> i </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> i</span><span style="color: #81A1C1">++</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span><span style="color: #616E88">  // Simulação de 10 iterações</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">double</span><span style="color: #D8DEE9FF"> controlSignal </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">PID_Compute</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">&amp;</span><span style="color: #D8DEE9FF">pid</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> setpoint</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> measuredValue</span><span style="color: #ECEFF4">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        measuredValue </span><span style="color: #81A1C1">+=</span><span style="color: #D8DEE9FF"> controlSignal </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.1</span><span style="color: #81A1C1">;</span><span style="color: #616E88">  // Simula um sistema reagindo ao controle</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #88C0D0">printf</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Iteração %d - Controle: %.2f - Medida Atual: %.2f</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> i </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> controlSignal</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> measuredValue</span><span style="color: #ECEFF4">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Explicação do Código</strong></h3>



<p class="wp-block-paragraph">O código acima segue uma estrutura modular e bem documentada:</p>



<ol class="wp-block-list">
<li><strong>Estrutura <code>PIDController</code></strong>:
<ul class="wp-block-list">
<li>Armazena os parâmetros do controlador (<code>Kp</code>, <code>Ki</code>, <code>Kd</code>).</li>



<li>Mantém o erro anterior e o termo integral acumulado.</li>



<li>Inclui o tempo de amostragem (<code>dt</code>), necessário para cálculos diferenciais.</li>
</ul>
</li>



<li><strong>Função <code>PID_Init</code></strong>:
<ul class="wp-block-list">
<li>Inicializa os valores do controlador, garantindo que os estados internos sejam zerados.</li>
</ul>
</li>



<li><strong>Função <code>PID_Compute</code></strong>:
<ul class="wp-block-list">
<li>Calcula o erro entre o valor desejado (<code>setpoint</code>) e o valor real (<code>measuredValue</code>).</li>



<li>Atualiza o termo integral e computa a derivada do erro.</li>



<li>Gera a saída do controlador PID.</li>
</ul>
</li>



<li><strong>Função <code>main</code></strong>:
<ul class="wp-block-list">
<li>Cria um controlador PID e o inicializa com ganhos arbitrários.</li>



<li>Simula um sistema onde a saída do PID afeta diretamente a variável controlada.</li>



<li>Exibe os valores de controle ao longo das iterações.</li>
</ul>
</li>
</ol><p>The post <a href="https://mcu.tec.br/algoritimos/sistema-pid-e-diferencas-entre-sistemas-de-controle-aberto-e-fechado/">Sistema PID e Diferenças entre Sistemas de Controle Aberto e Fechado</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">120</post-id>	</item>
	</channel>
</rss>
