Observador de estado para estimativa de velocidade do codificador


1

Eu tento implementar um observador de estado (Luenberg Observer) para estimar a velocidade do meu motor. Somente a posição absoluta do motor pode ser medida e eu quero levar em conta também a velocidade alvo como entrada.

Então, meu modelo de espaço de estados derivado se parece com isso:

Os estados são posição, velocidade e aceleração $$ x = \ begin {pmatrix} p \\ v \\ uma \ end {pmatrix} $$

A entrada é o alvo da velocidade vi menos o estado estimado da velocidade:

$$ u = (v_i-v) $$

As matrizes do sistema são assim (T é o tempo de amostragem): $$ A = \ begin {pmatrix} 1 & amp; T & amp; \ frac {T ^ 2} {2} \\ 0 & amp; 1 & amp; T \\ 0 & amp; 0 & amp; 0 \ end {pmatrix} $$

$$ B = \ begin {pmatrix} T \\ 1 \\ \ frac {1} {T} \ end {pmatrix} $$

$$ C = \ begin {pmatrix} 1 & amp; 0 & amp; 0 \ end {pmatrix} $$

$$ D = 0 $$

Quando eu movo a entrada -v para a matriz A, é assim:

$$ x_ {k + 1} = \ begin {pmatrix} 1 & amp; 0 & amp; \ frac {T ^ 2} {2} \\ 0 & amp; 0 & amp; T \\ 0 & amp; - \ frac {1} {T} & amp; 0 \ end {pmatrix} x_k + \ begin {pmatrix} T \\ 1 \\ \ frac {1} {T} \ end {pmatrix} v_i $$

$$ y_k = \ begin {pmatrix} 1 & amp; 0 & amp; 0 \ end {pmatrix} x_k $$

Então eu tentei colocar os pólos da dinâmica de erro com um observador de Luenberger escolhendo L para:

$$ A-LC = \ begin {pmatrix} 1-L_1 & amp; 0 & amp; \ frac {T ^ 2} {2} \\ -L2 & amp; 0 & amp; T \\ -L3 & amp; - \ frac {1} {T} & amp; 0 \ end {pmatrix} $$

Coloquei os pólos no matlab da seguinte forma: $$ | \ lambda_i | & lt; 1 $$  em [-0,5, -0,55, -0,6]

Que me deu por L:

$$ L = \ begin {pmatrix} 2,65 \\ 2.92 \ times 10 ^ 3 \\ -1,9 \ vezes 10 ^ 5 \ end {pmatrix} $$

Então eu embuti esse observador no sistema real, mas os resultados são realmente muito ruins. Então eu acho que fiz algo errado com o modelo de espaço de estado, especialmente a entrada não parece ser uma boa idéia. Alguém tem uma idéia de como mais eu posso modelar este sistema, especialmente sobre a entrada u estou muito inseguro. Devo usar a corrente real como entrada para u, pois isso é proporcional ao torque e, portanto, à aceleração?

Editar: O que vejo ainda é que o estado a não é observável (a matriz de Observabilidade tem determinante diferente de zero), mas como não quero observar a aceleração (eu dou isso diretamente como uma entrada), acho que isso não deveria ser problema, certo?

Editar 2 Bem, meus ganhos de Luenberger são bem altos, então acho que isso pode ser um problema. Eu atualizo o estado da seguinte maneira:

$$ x_ {k + 1} = (A-LC) x_k + B v_i + Ly_k $$

y é a minha posição medida na instância k, então digamos que seja 4000 (resolução de codificação de 12 bits). Inicialmente meus estados são zero. Então a aceleração será diretamente 4000 * (- 1.9 * 10 ^ 5), enorme! Então eu acho que realmente estraguei alguma coisa aqui.


O observador é rápido o suficiente? Regra de ouro para um observador de Luenberger é colocar seus pólos cerca de 10 vezes mais rápido que os pólos do sistema.
— OpticalResonator

Boa pergunta, não tenho certeza sobre isso. Eu preciso de uma largura de banda de 2kHz, como posso calcular a largura de banda dos pólos para uma função de transferência discreta?
— HansPeterLoft

Com cuidado, em baixas velocidades, os estimadores de velocidade baseados em codificador podem falhar. Se você estiver usando um contador para medir o tempo entre a linha do encoder, o tamanho do contador limitará sua estimativa de velocidade da extremidade inferior. E a taxa de contador sua extremidade superior.
— docscience

Respostas:


1

A aceleração não deve fazer parte do estado, a menos que você seja sua opinião. E rastrear uma velocidade-alvo parece mais um trabalho para o controlador usando feedback. Assim, a entrada do seu sistema é mais provavelmente uma força, que induz uma aceleração, e a posição e velocidade dos estados.

Para que um observador funcione bem, é necessário fornecer um bom modelo para o seu sistema. Ou seja, o motor provavelmente terá algum atrito e talvez até algum atraso. Para obter um modelo, você poderia, por exemplo, tentar encaixar um ARIMA modelo em dados medidos ou uso ERA . A representação do espaço de estados de um sistema LTI (mínimo) não é única, ou seja, eles são equivalentes sob um transformação de similaridade . Portanto, se desejar ter um vetor de estado com posição e velocidade, você poderá obter isso usando uma transformação de similaridade.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.