Controlo PID em arduino aplicado a motores DC

Controlo PID em arduino aplicado a motores DC usados no ambito da robótica.

Biblioteca

https://playground.arduino.cc/Code/PIDLibrary

 

Os principais objectivos do controlo PID dos motores DC serão:

  • Acelerar e desacelerar os motores de forma controlada
  • Manter uma velocidade estável nos motores
  • Coordenar e sincronizar motores

Todo esses objectivos são alcançados tendo em consideração o desempenho real (medido por encoders)

Um caso prático que implica todos os objectivos acima descritos é a movimentação de um robot 2WD num espaço com movimentos simples: deslocação retilinea (andar a direito), rotação (rodar) e paragem.

Os movimentos andar a direito e rodar são semelhantes, pois o rodar é um caso especial do andar.

  • Para andar a direito  os motores rodam em sentidos iguais a mesma distancia
  • Para rodar  os motores rodam em sentidos inversos a mesma distancia

Por isso, se nos concentrarmos na resolução dos problemas do movimento rectilineo estamos a trabalhar numa solução para os dois tipos de movimentos.

Do exposto, para o caso prático descrito acima, importa tomar como objectivo principal: o movimento rectilinio sem alteração da orientação.

Segmentação básica de um movimento simples

  • Inicio sincronizado da rotação dos motores
  • Aceleração inicial sincronizada da rotação dos motores com anulação das diferenças
  • Manutenção da velocidade estabilizada

 

Exemplos de avaliação

Implementações simples para permitir a avaliação do potencial do método para atingir os objectivos, a maior parte com interrupção do movimento quando a distancia em pulsos é alcançada.

Programas

  • PID no movimento retilíneo – PID simples continuo
  • PID no movimento retilíneo – PID simples interrompido
  • PID no movimento retilíneo – PID com constantes especiais no arranque
  • PID no movimento retilíneo – PID com aceleração inicial
  • PID no movimento retilíneo – PID com correção de diferença nos pulsos
    • Diferença de pulsos na interação
      • Por alteração dos pidInput com
    • Diferença de pulsos acumulados
      • Por alteração dos pidInput com
      • Por um terceiro PID que altera o setPoint das rodas

 

Exemplos de movimentos sequenciais

Programas capazes de efectuar uma sequencia composta pelos seguintes movimentos basicos:

  • andar para a frente
  • andar para trás
  • rodar para a esquerda
  • rodar para a direita
  • parar

Programas

  • Sequencia de movimentos 2WD com PID
  • Sequencia de movimentos 2WD com constantes PID especiais no arranque

Posts existentes sobre este assunto

Sequencia de movimentos 2WD com constantes PID especiais no arranque

Sequencia de movimentos 2WD com PID simples

Serie antiga

PID no movimento retilíneo – 2 PIDs com aceleração – v2

PID no movimento retilinio – 3 PIDs v4

PID no movimento retilíneo – 2 PIDs simples v0

PID no movimento retilinio – 3 PIDs v3

test_pid_2encoders

 

Controlo PID de motores DC em robots de propulsão diferencial

Controlo PID em arduino aplicado a motores DC

 

Sincronizar dois motores dc na mesma velocidade (usado para andar a direito):  2pidsync.ino (test_2wd_start_straight0.ino).

 

//double KpLeft = 0.8, KiLeft = 0.3, KdLeft = 0.0;
//double KpRight = 1.6, KiRight = 0.8, KdRight = 0.000000000001;
//double KpRight = 0.8, KiRight = 0.3, KdRight = 0.0;