• Please visit and share your knowledge at our sister communities:
  • If you have not, please join our official Homebrewing Facebook Group!

    Homebrewing Facebook Group

Sintonia do PID

Homebrew Talk

Help Support Homebrew Talk:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.

Fdamata

Well-Known Member
Joined
Dec 16, 2013
Messages
520
Reaction score
53
Pessoal, fiz algumas modificacoes no codigo do Brewpi para utiliza-lo como controlador da brassagem com Arduino e Debian. Meu sistema produz proximo de 50-55 L de cerveja, geralmente sao 32,5 L de agua na brassagem, com 40 L de agua para lavagem e uma resistencia de 5000 W. Utilizo toda a agua da lavagem como fluido de aquecimento do meu mosto em um sistema HERMS.

Testei o meu sistema de controle apenas com agua no sabado e ao tentar aquecer de 69 graus C para 76 graus C houve uma demora muito grande que estou atribuindo à correcao do derivativo e tambem por um ganho proporcional relativamente pequeno. Testarei desabilitar o derivativo e aumentar um pouquinho o proporcional, mas se tolerar overshooting elevado.

A minha pergunta é: como esta a configuracao dos ganhos do PID que vcs utilizam e para quais volumes?

Os meus parametros atuias sao: Kp: 7, Ki: 0,125 e Kd: -3. A sintonia de malhas de controle preve a aplicacao de uma perturbacao em malha aberta, porem o meu sistema nao é de controle continuo (é on-off com PID) e estou com dificuldade, principalmente de tempo, de achar material que fale de calibracao de malhas desta tipologia.

Sds,

Fabiano da Mata
 
Opnião de leigo que tentou fazer o mesmo:

O algoritmo do brewpi é implementado usando uma mistura de PID com bang-controller que funciona bem para fementação, pois os delays entre aquecimento e refrigeração são longos.

Quando testei isso no meu protótipo de single-vessel, percebi que um TIC-17 ( 1 resistência de 1000w ) funciona melhor que esse algoritmo misto do brewpi.

Sendo assim, eu estou partindo para uma implementação com open-ardbir porque tenho quase tudo em casa.

Sugiro fortemente que faça o mesmo, seja com open-ardbir, mash berry, elsinore ou implementação própria. Brewpi no estágio que está é ótimo para fermentação.

Creio que a nova versão que roda em spark core* contemple o que você precisa, mas é caro e eu não sei se tem código/hardware aberto.


* http://www.brewpi.com/introducing-brewpi-spark/
 
Opnião de leigo que tentou fazer o mesmo:

O algoritmo do brewpi é implementado usando uma mistura de PID com bang-controller que funciona bem para fementação, pois os delays entre aquecimento e refrigeração são longos.

Quando testei isso no meu protótipo de single-vessel, percebi que um TIC-17 ( 1 resistência de 1000w ) funciona melhor que esse algoritmo misto do brewpi.

Sendo assim, eu estou partindo para uma implementação com open-ardbir porque tenho quase tudo em casa.

Sugiro fortemente que faça o mesmo, seja com open-ardbir, mash berry, elsinore ou implementação própria. Brewpi no estágio que está é ótimo para fermentação.

Creio que a nova versão que roda em spark core* contemple o que você precisa, mas é caro e eu não sei se tem código/hardware aberto.


* http://www.brewpi.com/introducing-brewpi-spark/

@jalexandre, a questão que mencionou "...os delays entre aquecimento e refrigeração são longos..." eu removi alterando o código AVR conforme abaixo (TempControl.h):

// Set minimum off time to prevent short cycling the compressor in seconds
const uint16_t MIN_COOL_OFF_TIME = 1;
// Use a minimum off time for the heater as well, so it heats in cycles, not lots of short bursts
const uint16_t MIN_HEAT_OFF_TIME = 1;
// Minimum on time for the cooler.
const uint16_t MIN_COOL_ON_TIME = 1;
// Minimum on time for the heater.
const uint16_t MIN_HEAT_ON_TIME = 1;
// Use a large minimum off time in fridge constant mode. No need for very fast cycling.
const uint16_t MIN_COOL_OFF_TIME_FRIDGE_CONSTANT = 1;
// Set a minimum off time between switching between heating and cooling
const uint16_t MIN_SWITCH_TIME = 1;
// Time allowed for peak detection
const uint16_t COOL_PEAK_DETECT_TIME = 180;
const uint16_t HEAT_PEAK_DETECT_TIME = 180;

O meu sistema está prontinho, montado, restando apenas sintonizar o PID (ou PI) para dar a resposta que quero. Veja o resultado que obtive com Kp: 7, Ki: 0.125 e Kd: -3.

Pelo resultado, estou entendendo que o ganho proporcional está um pouco baixo e o derivativo está influenciando negativamente, alterando a inclinação da elevação da temperatura do HLT que aquece o mosto.

Vou testar elevar o Kp e zerar o Kd para ver se consigo um resultado melhor. O meu objetivo é fazer um aquecimento mais rápido, sem no entento gerar um offset elevado demais.

De qualquer forma, fica a sua dica para eventual implementação futura, caso não dê certo. Se alguém tiver interesse posso passar o arquivo hex para carregar no arduino com a remoção destes filtros de proteção, que foram instalados para preservar o compressor do refrigerador.

De qualquer forma, ainda tenho interesse em conhecer como estão as configurações dos ganhos dos PIDs de quem possue.

Sds,

Fabiano da Mata
 

Attachments

  • PID.png
    PID.png
    28.9 KB
Apesar de ter noções de programação, eu não gosto e não quero fazer esses tipos de alterações. A preguiça me impede.

De qualquer maneira, os parâmetros que deram certo pra mim foram esses. Como 'dar certo', entenda maiores intervalos entre ligar/desligar compressor e aquecimento com a menor variação de temperatura possível (0.2ºC).

Não fui a fundo nos números, pois matemática nunca foi meu forte. =)

Kp = 2.5
Ki = 0.125
Kd = 0.75
 
@jalexandre, esses parâmetros são para o Brewpi para controlar a fermentação? E para a brasagem, quais valores de Kp, Ki e Kd vc está utilizando, seja no Brewpi modificado, Ardbier, ....

Sds,

Fabiano da Mata
 
@jalexandre, esses parâmetros são para o Brewpi para controlar a fermentação? E para a brasagem, quais valores de Kp, Ki e Kd vc está utilizando, seja no Brewpi modificado, Ardbier, ....

Sds,

Fabiano da Mata


Usando o brewpi, meu melhor resultado foi usando o sensor 'Fridge' para medir o retorno do mosto ao invés do sensor 'beer'.

Como o sensor fridge é implementado usando on/off controller (respeitando os delays, é claro), eu acabei não anotando as variáveis PID testadas e migrei para o STC-1000 (clone do tic) no mash.
 
Este STC-1000 está implementando on-off ou com PID?
 
O elsinore controla muito bem a temperatura acredito que daria para copiar dele, vou tentar olhar no código fonte deke, o ardbir também contrrola bem vou olhar tbem amanhã te retorno
 
@xavanty, ele controla bem que tipo de sistema (BIAB, RIMS, HERMS...)? Qual é o seu sistema?
 
@xavanty, ele controla bem que tipo de sistema (BIAB, RIMS, HERMS...)? Qual é o seu sistema?

O Strangebrew elsinore é feito para sistemas herms e rims, funciona muito bem, só fiz os testes, pois o meu sistema é single vessel, mas como um dia penso em montar um herms, fiz os testes com os materiais que tenho aqui, ele controla a temperatura dos tanques e rampas de forma perfeita, acho que podia ter funções a mais como o controle das bombas, mas parece que pararam o desenvolvimento. Eu utilizo no meu single vessel hoje ardbier também faz um controle muito preciso da temperatura
 

Latest posts

Back
Top