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
- Diferença de pulsos na interação
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;