Eu tentei alguns técnicos de média em execução para suavizar a alteração nos dados do ADC no AtMega48 para o controle de luzes (PWM) ao girar uma panela (ADC). Os filtros (pseudo-códigos): observei que os filtros são muito agradáveis. Mas lento em resposta, o que é esperado. Estou procurando por técnicas como a média móvel exponencial. Disse ser mais receptivo. Existe outro como este Como ele diz: onde está entre 0 e 1. Como codificar e otimizar esses códigos sábios (sem usar flutuadores) Ou Como eu converteria os flutuadores em números inteiros correspondentes para tornar o código pequeno, rápido e responsivo. E eu mantive 1 Outro, então, que não funcionará como esperado. Por Idve mudar todas as variáveis para flutuar. Por favor, não se concentre na seguinte declaração por enquanto, mas observe. Manter flutuadores na minha base de código está preenchendo a memória do programa de 45 a 137, no caso de Você pode implementar com sobrecarga mínima, limitando as frações binárias. Eu usei isso com bons resultados. Pegue o resultado existente, Mude-o N lugares à direita para dividir por 2N Subtrai-lo do resultado existente. Adicionar novos dados Isso não é tão rápido em mudar com uma mudança de etapa nos dados de entrada como você deseja, mas é fácil de implementar e eficaz o suficiente como um filtro em muitos casos. Você pode acelerar sua resposta ao tomar decisões informais quanto ao seu comportamento em casos que são muito diferentes. Por exemplo, mantenha uma contagem de entradas seqüenciais que são mais do que alguns limites diferentes do resultado existente. Se essa contagem ultrapassar algum limiar, altere a proporção de divisão N por algum fator. Por exemplo, N é geralmente 4- os resultados são deslocados para a direita 4 vezes 16 de divisão. Se a entrada for mais que xxx longe da resposta, faça apenas duas mudanças para a direita e multiplique a nova amostra em 4 antes de adicionar. Respondeu 4 de outubro 12 às 6:08 (Esta é a Modificação 2 em uma série maior na escrita de um algoritmo PID sólido) O Problema Esta modificação vai ajustar o termo derivado um pouco. O objetivo é eliminar um fenômeno conhecido como 8220Derivative Kick8221. A imagem acima ilustra o problema. Desde errorSetpoint-Input, qualquer alteração no Setpoint causa uma alteração instantânea no erro. A derivada dessa mudança é infinita (na prática, uma vez que dt isn8217t 0 acaba acabando sendo um número realmente grande). Esse número é alimentado na equação de pid, o que resulta em um pico indesejável na saída. Felizmente, há uma maneira fácil de se livrar disso. A Solução Acontece que a derivada do Erro é igual à derivada negativa da Entrada, EXCETO quando o Setpoint está mudando. Isso acaba sendo uma solução perfeita. Em vez de adicionar (derivado Kd do erro), subtraimos (derivação Kd da entrada). Isso é conhecido como usar 8220Derivative on Measurement8221. As modificações aqui são bastante fáceis. We8217re substituindo dError por - dInput. Em vez de se lembrar do ultimoError, lembramos agora do últimoInput The Result Here8217s que essas modificações nos trazem. Observe que a entrada ainda parece sobre o mesmo. Então, nós conseguimos o mesmo desempenho, mas nós não enviamos um enorme pico de saída sempre que o Setpoint muda. Isso pode ou não ser um grande problema. Tudo depende de quão sensível é a sua aplicação para produzir picos. Do jeito que eu vejo isso, não precisa mais trabalhar para fazê-lo sem chutar, então por que não faz coisas bem. Próximo Esta entrada foi postada na sexta-feira, 15 de abril de 2011 às 15:02 e está arquivada em Codificação. PID. Você pode acompanhar todas as respostas a esta entrada através do feed RSS 2.0. Você pode deixar uma resposta. Ou trackback do seu próprio site. 9 Responses to 8220Improving the Beginners PID 8211 Derivative Kick8221
Comments
Post a Comment