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.

HansPeterLoft
fonte
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.

fibonatic
fonte