Eu sou um engenheiro elétrico que foi empurrado para o mundo digital e aprendendo à medida que passo. Estou programando um processador de TI para fazer um loop PID (proporcional-integral-derivado) , ilustrado por este diagrama:
Também vou descrevê-lo:
Op-amp de feedback negativo, com o terminal não inversor aterrado. Entrada através do terminal negativo. O circuito de realimentação é um circuito da série RE em paralelo com um resistor e tudo isso em paralelo com uma tampa.
Alguém tem alguma idéia de como converter esse circuito em código C? Estou um pouco fora do meu elemento sobre isso e poderia usar a ajuda.
dt
nas constantes, em vez de fazer divisões e multiplicações extras no loop.Respostas:
O circuito
Ok, acabei de criar uma conta aqui quando vi essa pergunta. Não consigo editar sua pergunta para que eu possa corrigir o erro de digitação que você fez. Eu acredito que você quis dizer circuito da série RC em paralelo, em vez de RE (se for, não tenho uma única pista do que isso significa)
Parece que o circuito analógico que você deseja simular usando C se parece com isso
(Eu não pude resistir ao meu desejo de desenhar isso, pois queria dizer como os engenheiros eletroeletrônicos costumavam se comunicar em fóruns e e-mails sem imagens ... e por que adoramos courier, fonte de largura fixa)
Devo confessar que o circuito que você está usando é simples de configurar, mas é muito complexo matematicamente, quando se trata de ajustar as constantes Propocional, Integral e Derivada do sistema para um valor desejado individualmente, não é possível.
Eu sugiro fortemente que você use o circuito desta fonte para estudar.
Embora seja um pouco tedioso de configurar, matematicamente é muito mais simples de analisar, pois você pode relacioná-lo diretamente à forma matemática padrão em vez da forma ideal.
Por fim, o Vout vai controlar um motor ou o que precisar ser controlado. E Vin é a tensão variável do processo.
Antes de molhar os pés em C (mar?)
Suponho que você esteja lendo os sinais de algum tipo de conversor analógico para digital. Caso contrário, você teria que simular o sinal como uma entrada.
Se usando o formulário Padrão, temos,
Supondo que o tempo de execução do loop seja pequeno o suficiente (um processo lento), podemos usar a seguinte função para calcular a saída,
Onde
onde inicialmente 'der' e 'int' seriam zero. Se você usar uma função de atraso no código para sintonizar a frequência do loop para dizer 1 KHz, seu dt seria 0,001 segundos.
Drawning em C
Eu encontrei esse excelente código para PID em C, embora ele não cubra todos os aspectos, é bom mesmo assim.
Se tomarmos um processo lento, poderemos usar uma frequência mais baixa, de modo que o tempo de execução do código dt >>> para o loop único (muito maior que). Nesses casos, podemos acabar com o timer e usar uma função de atraso.
fonte