por MOR_AL » 18 Set 2010 22:04
Bom.
Primeiramente o uC não reconhece temperatura (100ºC, 40ºC, etc.).
O uC reconhece valor do byte (vamos supor que sua variável está representada em um byte).
Então os 40ºC, depois de ser convertido no CAD, vai valer (por ex.) 80 (em 256 valores), e os 100ºC vai valer 200.
Aí você quer achar o ERRO. Você não pode ter um valor negativo em um byte, já que você considerou isso em algum instante do projeto.
Então, para saber qual é o erro, ou a diferença entre os dois valores, você primeiro tem que saber qual é o sinal que a operação de subração vai dar. Como o valor DESEJADO é de 100ºC, que o uC identifica como 200, e o valor MEDIDO é 40º, que o uC identifica como 80, a diferença
valor DESEJADO menos valor MEDIDO vai dar positivo 200 - 80 = 120
Se o valor DESEJADO fosse MENOR que o valor MEDIDO, a diferença daria negativa.
Portanto, primeiramente você TEM que identificar qual será o sinal do resultado. Você faz isso fácil fácil, tanto em assembler como em outra linguagem de um nível um pouco maior.
Não vou entrar na questão do controle PID. Vou só procurar fazer você entender o processo.
Após identificar o sinal.
Se for positivo, significa que DESEJADO é maior que o MEDIDO. Logo você tem que AUMENTAR o valor MEDIDO, aumentando o período Ton (caso de um PWM)
Se for negativo, significa que DESEJADO é menor que o MEDIDO. Logo você tem que DIMINUIR o valor MEDIDO, diminuindo o período Ton (caso de um PWM).
O sinal referente a esse ERRO vai indicar se o Ton vai aumentar ou diminuir.
Mas, de quanto?
Bom, aí é que começa a ter que analisar a rapidez com que já está se aproximando de um erro nulo.
Imagine uma locomotiva a 100 km/h e a 300 m da parada. Apesar de ainda não ter chegado, você sabe que TEM que diminuir. Você usou uma realimentação via observação e aciona o controle da locomotiva, sabendo que tem que frear.
Agora imagine que você está em um velocípede, a 100km/h e tem que parar na mesma distância de 300m. Hora a massa total agora é muito menor. Provavelmente, se você não pedalar mais nem vai chegar aos 300m que faltam.
Aí é que entra o controle PID.
Ele leva em consideração a distância , a velocidade e a aceleração, para chegar ao final dos 300 metros com velocidade zero.
Como você normalmente não sabe quanto acelerar, nem frear, ou manter a velocidade, e quando deve isso acontecer, aí você tem que ajustar os coeficientes do seu PID. O kp, o ki e o kd.
Existem métodos para isso.
Repare que em alguns casos, por algum motivo, você não pode fazer esse ajuste em tempo real. Aí tem que conhecer a física envolvida em cada bloco do seu sistema, tais como a massa do que está sendo movimentada, a força (o momento) que o motor possui, a capacidade do freio, o atrito envolvido, etc. Conhecendo isso, você pode calcular os valores de kp, ki e kd. Não é simples.
Voltando aos bits do uC.
Você sabe que o ERRO encontrado (módulo e sinal), sozinho não diz muita coisa. Olha o exemplo do trem e do velocípede, onde o erro é o mesmo e a atitude é diferente.
Você tem que saber também se o erro (de velocidade, no exemplo do trem) está aumentando ou diminuindo e de que valor. Isso é responsável pelo kd (que multiplica a derivada da velocidade).
O ERRO é a própria velocidade. Kp multiplica esse erro.
Mas e a posição (os 300 metros que faltam para chegar)?
Para saber a posição, você deve multiplicar a velocidade pelo tempo (dá a distância percorrida). Integrar cada distância. Ao final, se você for somando cada distância, ela tem que coincidir com os 300 metros, com velocidade nula e aceleração nula também (trem parado na estação).
Repare que se o seu controle atuar sobre o período Ton de um PWM, por exemplo, a única informação que ele recebe (o PWM) é qual o Ton. O uC não sabe o que é velocidade, aceleração, posição, temperatura, etc. Ele apenas sabe que o Ton pode possuir 256 valores (8 bits).
Mas então para que os K's todos? Os K's servem para informar qual deverá ser o próximo valor de Ton, baseado no erro e sua variação.
O valor do próximo Ton (entre 0 e 255), é função de cada k, do erro, de sua variação e do valor final. Ton(seguinte) = kp*erro(atual) + ki*somatório dos erros anteriores + kd*variação do erro(atual). Essa expressão tem que ter um resultado entre 0 e 255.
Certa vez, há cerca de um ano, eu fiz um controle simples de uma impressora. Até cheguei a montar um filmezinho no YouTube.
O controle era bem simples. "Se faltar, avance. Se passar, volte".
Não me preocupei com o PID, e até que não ficou ruim não.
Terminando.
Repare que o que você exemplificou, que a temperatura desejada era de 100ºC e a medida era de 40ºC, corresponde a um degrau de 60ºC de temperatura.
Se o seu sistema for correto, a temperatura desejada será alcançada em um tempo menor possível e sem passar dos 100ºC.
Isso é que um controle PID faz. Observe as duas figuras do Francesco.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain