O artigo serve como uma folha de dicas para quem quer fazer seu pêndulo reverso. Aqui estão os problemas pelos quais eu retrabalhei várias vezes, uma breve visão geral da teoria é necessária para entender como estabilizar o sistema.
Por que eu preciso disso?
Resumindo: eu queria expandir minha máquina CNC, mas algo deu errado ...
História completaDesde a infância, eu queria ter minha própria máquina CNC, porque lidou com modelos de aeronaves nas quais você precisa fazer muitos pequenos detalhes repetidos. Primeiro comprei um
kit de bricolage pronto e depois decidi aumentá-lo. Joguei por dois meses, mas ainda assim a máquina é pequena, a área de trabalho era de apenas 18 por 10 cm, não possui sensores de posicionamento. Decidi comprar um guia maior, colocar os interruptores de limite e instalar o carro no meio com um motor de passo. Fiz isso em meio dia, mas você não pode ir direto ao sonho - em um grande CNC, é necessário complicar a tarefa e colocar o pêndulo na carruagem, então me pareceu fácil, mas tive que me lembrar dos anos do instituto e me familiarizar com a TAU.
Tentativas malsucedidas
O projeto levou quase dois anos de tentativa e erro, redesenhando, aguardando detalhes e dias de folga incompletos para que aqueles que desejam repetir economizassem tempo e nervos, considero necessário conversar sobre decisões malsucedidas.
- um giroscópio (MPU6050) em vez de um codificador - fundamentalmente nada contra ele, mas o sensor deve estar localizado em uma haste rotativa; isso introduz um efeito imprevisível e a incapacidade de rolar a haste várias vezes ao redor do eixo.
- codificador absoluto - se for um potenciômetro, mesmo o movimento dos fios (principalmente devido a contatos no arduino) introduz ruído nas medições, um ADC de 10 bits ainda não é suficiente; se for um sensor mais caro, a leitura ocorre por meio de uma interface serial e isso introduz um atraso no sistema, especialmente em combinação com um motor de passo.
- a rigidez do sistema - em algum momento, peguei um tubo de alumínio com carga no final, quando o carro vibrou, começaram a surgir fortes vibrações, e não ficou claro imediatamente qual sistema estávamos estabilizando. Devemos nos esforçar para garantir que o sistema físico esteja o mais próximo possível do que é modelado.
- atrito - esse fenômeno geralmente é negligenciado, tentei reduzi-lo usando grandes rodas de carro e perfis de ranhura em V, em contraste com trilhos com barras deslizantes com pequenas bolas, porque o atrito de rolamento é inversamente proporcional ao raio.
- o uso de um motor de passo - passei muito tempo tentando seguir esse caminho, é enganoso simplificar as fórmulas (na verdade, controlamos imediatamente a aceleração da base do pêndulo) e a simplicidade do design (podemos esquecer o atrito no trilho, o codificador do motor, se assumirmos que o motor não pula etapas) , mas ... Para controlar com precisão a velocidade, o tempo entre as etapas deve ser dezenas de microssegundos, o que significa que você pode esquecer a saída do estado no console. Sem feedback, você não pode ter certeza de que o motor não perdeu as etapas e a velocidade é realmente o que o sistema pensa. Não afirmo que essa seja uma solução sem saída; se alguém conseguir estabilizar o pêndulo com um motor de passo, ficarei feliz em analisá-lo.
Pêndulo livre
Para concluir a imagem, simulamos um pêndulo em uma carruagem livre sem atrito.

As equações de movimento podem ser obtidas pela diferenciação do
Lagrangiano em
relação às coordenadas generalizadas. Obtemos as seguintes equações:
a partir do qual você pode encontrar como o vetor de estado muda:
e simule o sistema. O código está
aqui .

Por que o sistema é instável?
O bom senso e a visualização nos dizem que o próprio pêndulo não se sustenta. Mas como verificar isso matematicamente?
Em termos gerais, o sistema e a solução linearizados são os seguintes:
Um expoente no poder da matriz parece mais claro, se formos para o sistema de coordenadas a partir de vetores próprios, então a matriz
será diagonal (
) e o expositor terá a seguinte aparência:
e ^ {Dt} = \ begin {bmatrix} e ^ {\ lambda_1t} & 0 & \ dots & 0 \\ 0 & e ^ {\ lambda_2t} & \ dots & 0 \\ \ vdots & \ vdots & \ ddots & \ vdots \\ 0 & 0 & \ dots & e ^ {\ lambda_nt} \\ \ end {bmatrix}
Agora é visto, na presença de autovalores (
) com uma parte real positiva, o componente correspondente do vetor de estado tenderá ao infinito e o sistema desmoronará. O exposto acima se aplica a sistemas contínuos. Mais informações sobre sustentabilidade são descritas
nesta vídeo aula.
Verifique se esse é o caso do pêndulo reverso. Linearizamos nosso sistema perto da posição de equilíbrio para
:
\ begin {bmatrix} \ ponto \ theta \\ \ ponto \ omega \\ \ ponto {x} \\ \ ponto {v} \ end {bmatrix} = \ begin {bmatrix} 0 & 1 & 0 & 0 \\ \ frac {g} {L (1 + b)} {\ theta} & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ -g \ frac {b} {1 + b} \ theta & 0 & 0 & 0 \ end {bmatrix} \ begin {bmatrix} \ theta \\ \ omega \\ x \\ v \ end {bmatrix}
Autovalores diferentes de zero têm a forma
, assim nos convencemos da instabilidade.
Adicionar feedback
Agora a força atuará no carro
, uma das equações pode ser reescrita no formato:
, e o sistema linearizado assumirá a forma:
\ begin {bmatrix} \ ponto \ theta \\ \ ponto \ omega \\ \ ponto {x} \\ \ ponto {v} \ end {bmatrix} = \ begin {bmatrix} 0 & 1 & 0 & 0 \\ \ frac {g} {L (1 + b)} {\ theta} & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ -g \ frac {b} {1 + b} \ theta & 0 & 0 & 0 \ end {bmatrix} \ begin {bmatrix} \ theta \\ \ omega \\ x \\ v \ end {bmatrix} + \ begin {bmatrix} 0 \\ \ frac {1} {L} \ frac {1} {2m + M} \\ 0 \\ \ frac {1} {2m + M} \ end {bmatrix} \ cdot {f}
Agora o sistema (
) tornou-se
controlável , isso pode ser verificado verificando se a classificação da matriz
\ begin {bmatrix} B && AB && A ^ 2B && A ^ 3B \ end {bmatrix} igual à dimensão do vetor de estado, ou seja, 4. Para manter o pêndulo na posição vertical, usei um controlador de estado linear-quadrático, ou seja controle (u ou f) é o produto do vetor de estado
por um vetor de parâmetros que são encontrados uma vez,
minimizando o funcional quadrático . O código de simulação está
aqui .

Controle do motor
Agora você precisa controlar o motor DC, ele contém muitos parâmetros que eu não conheço, então usei uma "caixa preta", descrita pelas seguintes equações, levando em consideração o atrito:
Você pode ler sobre a derivação de equações e estimativa de parâmetros
aqui . Abaixo, dou meus gráficos da aceleração do motor com o carro, dependendo da tensão (na realidade, o sinal PWM é emitido pelo controlador) e as curvas ajustadas.

Eu também encontrei os coeficientes do modelo por força bruta, o
código .
Assim, o controlador nos fornece a aceleração necessária e, a partir da 2ª equação, conhecendo todas as constantes, encontramos a tensão.
Juntando o dispositivo real
Agora temos todo o conhecimento para coletar e estabilizar o pêndulo. Eu usei o seguinte ferro:
- O Arduino Mega 2560 não é UNO, porque dois codificadores precisam de 4 pinos para interrupções
- O codificador para o pêndulo - OMRON E6B2-CWZ6C 2500 pulsos por rotação - fornece o ângulo, calculamos a velocidade angular, a resolução é bastante alta, portanto houve diferenças finitas suficientes sem suavização e cálculo de médias
- Codificador para o motor - LPD3806-600BM-G5-24C 600 pulsos por rotação - fornece a posição do carro, calcula a velocidade
- Motor de 12V DC com caixa de engrenagens 5: 1
- 10Amp 5V-30V Motor Driver
Assim, medimos explicitamente o ângulo do pêndulo, a posição do carro, calculamos a velocidade angular do pêndulo e a velocidade do carro - obtemos o estado completo, encontrei os parâmetros do controlador com
este script. Surpreendentemente, tudo rapidamente funcionou como estava. Estou satisfeito com o resultado, fica de pé e até segura um copo!
O código para o Arduino está
aquiO que poderia ser melhorado em comparação com muitas das opções que podem ser encontradas no youtube - este pêndulo é silencioso porque o PWM é ajustado fora da faixa auditiva e são usadas rodas de plástico.
Agora, esta tarefa parece um trabalho de laboratório: medir os parâmetros do motor e encontrar os coeficientes do regulador, entendendo simultaneamente o que está acontecendo.
O que vem a seguir?
Eu pretendo produzir um pêndulo: fazer um balanço, livrar-se de uma bobina de fios, fazer um escudo com conectores convenientes, para que não seja uma pena doar para alguma escola ou museu. Se alguém quiser participar, ficarei feliz em ter muitas idéias mais ambiciosas.
Referências
Obrigado pela atenção!