Professional Documents
Culture Documents
Escola de Engenharia
Sistemas de Controle 2
Projeto de sistema de controle digital PID com Arduino
Eles são capazes de enviar um sinal PWM que é uma técnica usada para digitalizar sinais
analógicos.
3
Saída PWM do Arduino – Exemplo de uso:
Ajustando o Brilho de um LED por PWM
Isto é feito trocando-se a quantidade de tempo que a saída fica em 1 (on) ou em 0 (off). A
duração deste tempo é conhecida como pulse width (largura de pulso).
Por exemplo, caso você envie o valor 0 pela saída digital PWM Pin 11 usando analogWrite(),
o período em ON será zero, ou terá 0% de duty cycle (ciclo de trabalho). Se enviar o valor 64
(25% do valor máximo 255) o pino ficará em ON por 25 porcento do tempo e 75 porcento
em OFF, logo duty cicle de 25%. O valor 191 terá o teu duty cicle de 75% e o valor 255 de
100%.
4
Saída PWM do Arduino – Exemplo de uso:
Ajustando o Brilho de um LED por PWM
Sintaxe:
analogWrite(pino, valor);
Onde o parâmetro pino corresponde ao pino que será gerado o sinal PWM e valor
corresponde ao duty cycle, ou seja, o valor que permanecerá em nível alto o sinal.
O valor deve ser de 0 a 255 onde 0 a saída permanece sempre em nível zero e 225 a saída
permanece sempre em nível alto.
Saída PWM do Arduino – Exemplo de uso:
Ajustando o Brilho de um LED por PWM – Exemplo:
Intensidade do LED
Programando o PID
Dados do sistema de controle PID e do programa
Definindo o problema:
porta analógica A1
0 – 1023
0:0
1023: 100
8
Inicio do programa
9
Configurando o Setup
- Define sensor na porta
analógica A1
- Pino de controle PWM: pino 3
- Configura saída serial
- Define o pino do sensor como
entrada e o pino de controle
como saída.
10
Configurando o loop() Bloco de código executado continuamente.
Exemplo:
SetPoint = 20
Temperatura = 25
Erro = -5
P = error * kP
Exemplo
Multiplicador da diferença
entra a temperatura anterior
e a atual
Definindo controlador P I D
O operador de integral irá somar o erro a cada vez que for executado. Se a execução do
programa for muito rápida, o seu valor irá crescer excessivamente com relação ao
tempo real.
Exemplo:
Se ele for executado 200 vezes por segundo, deve ser dividido por 200.
Se for executado 1 vez por segundo, divide por 1 (que é como está).
deltaTime
Variável para calcular o tempo
de execução do processo atual
Controlador Integral
dependente do tempo em segundos
Detalhe importante
Dividir por 1000.0 (“mil ponto zero”) para considerar que a variável é float (real)
Bloco de código loop() finalizado com os ajustes:
Programa completo com os ajustes:
Programa pronto
Levantando a função de
Ajustando as constantes
transferência do sistema
Teoria do capítulo 9
Teoria do capítulo 2
Ir ajustando kP
Ajustar kI
Ajustar kD
Utilizando o poder do controle digital
Classes do C++
Utilizando o poder do controle digital
- Deixando o código reutilizável
- Controle de múltiplas malhas com PID
Substituindo no cógido:
class PID{
public:
double error;
double sample;
double lastSample;
double kP, kI, kD;
double P, I, D;
double pid;
double setPoint;
long lastProcess;
double process(){
// Implementação P ID
error = setPoint - sample;
float deltaTime = (millis() - lastProcess) / 1000.0;
lastProcess = millis();
//P
P = error * kP;
//I
I = I + (error * kI) * deltaTime;
//D
D = (lastSample - sample) * kD / deltaTime;
lastSample = sample;
// Soma tudo
pid = P + I + D;
return pid;
}
};
Programa completo – Parte 3
#define pSENSOR A1
#define pCONTROLE 3
void setup() {
Serial.begin(9600);
pinMode(pSENSOR, INPUT);
pinMode(pCONTROLE, OUTPUT);
}
void loop() {
// Lê temperatura
double temperature = map(analogRead(pSENSOR), 0, 1023, 0, 100);
// Saída do controle
analogWrite(pCONTROLE, controlePwm);
}
Vantagens do novo programa
Exemplo:
Controle temperatura 1
Controle temperatura 2
Controle temperatura 3
Controle de umidade
Controle de pressão