collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Regulação da velocidade de um motor DC  (Lida 23086 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline msr

  • Mini Robot
  • *
  • Mensagens: 798
Re: Regulação da velocidade de um motor DC
« Responder #15 em: 24 de Janeiro de 2010, 16:49 »
Sim em geral nas simulações usam-se "escalões" (step) na entrada. O significado prático dessa entrada é uma "variação brusca" que em geral é o que temos na realidade (motor parado -> motor em movimento com velocidade constante). Por exemplo no grafico que colocaste punha-se um escalão de amplitude Bu que é o valor de referência que queres ter à saída.

O que tens a fazer em primeiro lugar é arranjar uma EQUAÇÃO matematica que te modele o sistema físico (uma coisa do genero y(t) = velocidade(t) - constante_de_atrito*v(t)). Aplicas-lhe transformadas de laplace e ficas com a chamada "função de transferência". Essa função de transferencia corresponde a um bloco no simulink que é o que modela o teu sistema físico.

A partir daqui tambem não tenho as ideias bem acentes... Mas aqui vai um pouco de brainstorming:

Os blocos que ficam à volta, são os blocos do PID em si que tem a parte proporcional, integral e diferencial e vão fazer com que o a saída do sistema se mantenha o mais proximo do valor de referencia (Bu) possivel. Cada um desses três blocos tem um ganho e são esses tres ganhos que interessam determinar através da simulação.

Na realidade, deves saber a velocidade "real" do motor (através de um encoder ou óptica) e com base nisso aumentar ou diminuir o PWM (tendo em atenção valores limite).

Deixo mais uns links para referência:
http://atmel.nl/dyn/resources/prod_documents/doc2558.pdf (vê este, está muito bom! na página da atmel tens codigo de um controlador PID - basta inserires os valores das constantes - já pronto a enviar para um microcontrolador, provavelmente assim já consegues perceber melhor onde entra a parte do código em que alteras o PWM)
http://bestune.50megs.com/more.htm (exemplo de um esquema no simulink)


Offline maurosmartins

  • Mini Robot
  • *
  • Mensagens: 483
    • msm
Re: Regulação da velocidade de um motor DC
« Responder #16 em: 24 de Janeiro de 2010, 17:09 »
Olá msr, obrigado pela resposta.

Eu compreendo o funcionamento e a teoria, mas agora falta passar para a realidade.

Na imagem da para mostrar a estrutura básica do controlador PID, em que se pode ver os blocos do controlador propriamente dito, seguido do bloco designado por M que é o processo (o motor, caixa de engrenagem, etc) e a realimentação. Tendo o conhecimento destes blocos é possível simular o comportamento do sistema.

Como o msr disse é necessário medir a velocidade do motor para dps comparar com a velocidade pretendida, esta parte é fácil de implementar por exemplo tendo o  motor um encoder óptico e dps contam-se os pulsos através de um contador num microcontrolador e uma base de tempo constante.

Cumprimentos, Mauro.

« Última modificação: 24 de Janeiro de 2010, 17:19 por maurosmartins »

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: Regulação da velocidade de um motor DC
« Responder #17 em: 25 de Janeiro de 2010, 02:04 »
Aleluia alguem fala de PID Controlers (em português Controlo Proporcional Integral Derivativo) no fórum (não fosse ele de robótica)!
Há já algum tempo que ando a estudar isto a sério (tenho feito experiências e simulações com resultados bastante interessantes) e andava com ideias de começar a partilhar aqui mais informação, mas sendo assim, sugiro que criem um tópico para se falar de PID  :D que dizem?

Não querendo fazer um post Off-Topic, vou dizer algo sobre este!

Ora bem, na minha opinião criar um algoritmo de controlo proporcional integral derivativo é ligeiramente exagerado... Já para nao falar dos custos absurdos de motores com encoders (minimamente razoaveis)!
A aproximação sugerida pelo nunosilvarocha é a mais indicada para esta situação. Contudo o maurosmartins tem toda a razão qd diz que este é necessario para a locomoçao diferencial de um robot. Até digo mais, para a locomoção de um robot, não usar algum tipo de algoritmo deste género é ridiculo! A não ser que não se queria ter qualquer tipo de controlo sobre o movimento do robot e se queira que este não ande a direito!
Olhando duma prespectiva muito muito muito simplista e já um tanto ou quanto abstracta poderia considerar-se a ideia do nunosilvarocha uma implementação de um closed-Loop :P!

« Última modificação: 25 de Janeiro de 2010, 02:22 por tr3s »
Tr3s
Daniel Gonçalves

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Regulação da velocidade de um motor DC
« Responder #18 em: 25 de Janeiro de 2010, 02:34 »
Olha que este semestre no trabalho prático que me calhou foi feito um PID em atmega8 com bons resultados no controlo de um pêndulo invertido. Só que o meu grupo na parte do TP fez o PID analógico. No entanto há por aí uns quadrotors com 3 controladores PID's, um para cada eixo e estão implementados em Arduino num atmega328p.

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: Regulação da velocidade de um motor DC
« Responder #19 em: 25 de Janeiro de 2010, 03:05 »
Eu não disse que não dava para fazer com um pequeno Atmega, disse que para este projecto não valia a pena (ate pq os custos de o motor com encoder razoavel sao muito altos +/- 300 euros)! Um PID já razoável não deverá ocupar mais do que uns 800 a 1000 bytes! Qualquer micro hoje em dia já dá para isto.  ;)

Não entendi bem essa resposta, há alguma intenção por aí?
« Última modificação: 25 de Janeiro de 2010, 03:10 por tr3s »
Tr3s
Daniel Gonçalves

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Regulação da velocidade de um motor DC
« Responder #20 em: 25 de Janeiro de 2010, 12:29 »
esquece, quando disses-te isto
Citar
Ora bem, na minha opinião criar um algoritmo de controlo proporcional integral derivativo é ligeiramente exagerado...
na primeira vez que li fiquei com a impressão que tinhas dito que era exagerado para um micro. Tu estavas-te a referir que era exagerado só para controlar motores.

Offline maurosmartins

  • Mini Robot
  • *
  • Mensagens: 483
    • msm
Re: Regulação da velocidade de um motor DC
« Responder #21 em: 25 de Janeiro de 2010, 13:54 »
Viva pessoal!

Ainda bem que há mais pessoas que estão interessadas neste assunto! :D

 tr3s, disseste que tinhas algumas feitas com resultados interessantes, gostaria de saber do que se trata, qualquer coisa ajuda :)

Mas quanto a mim acho k não é demasiado fazer um controlador PID para motores, eu acho k é mesmo imperativo! Pelo que tenho andado a ler o algoritmo nao é assim tão complicado, o que eu nao consigo perceber e já falei disso é como ajustar o dutty cycle do PWM em função do resultado do PID...

Quanto a motores com encoders, é claro que são mais caros que os normais, mas existem motores para pequenos robos, já com encoder e caixa de redução por cerca de 30€ como por exemplo este:

E existe uma espécie de upgrade para os servos que permite colocar um encoder embora que de baixa resolução é bastante útil.

Também existem PICs (vá digam mal :P mas eu sou um gaijo dos PICs  :D ) que tem um periferico chamado QEI que vem de Quadrature Encoder Interface e permite o acoplamento directo de encoders com saida em quadratura ao microcontrolador, quando o tempo o permitir vou usar uma placa que já tenho desenhada com um destes microcontrolador mas com dois modulos QEI (um para cada motor de uma base diferencial)

Agora falta o PID... :'(

É verdade como o metRo_ disse para arduino já existe uma biblioteca que implementa um controlador PID.

Pode ser que todos juntos consigamos fazer alguma coisa!

Cumprimentos, Mauro.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Regulação da velocidade de um motor DC
« Responder #22 em: 25 de Janeiro de 2010, 14:47 »
Não sei como te hei-de explicar esta parte mas basicamente a saída do PID é o valor do dutty-cicle.

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: Regulação da velocidade de um motor DC
« Responder #23 em: 25 de Janeiro de 2010, 15:05 »

Mas quanto a mim acho k não é demasiado fazer um controlador PID para motores, eu acho k é mesmo imperativo! Pelo que tenho andado a ler o algoritmo nao é assim tão complicado, o que eu nao consigo perceber e já falei disso é como ajustar o dutty cycle do PWM em função do resultado do PID...

Quanto a motores com encoders, é claro que são mais caros que os normais, mas existem motores para pequenos robos, já com encoder e caixa de redução por cerca de 30€ como por exemplo este:

E existe uma espécie de upgrade para os servos que permite colocar um encoder embora que de baixa resolução é bastante útil.

É verdade como o metRo_ disse para arduino já existe uma biblioteca que implementa um controlador PID.

Pode ser que todos juntos consigamos fazer alguma coisa!

Cumprimentos, Mauro.

Mauro, tens razão quando dizes que para controlar motores convém usar PID, mas é quando queres controlar movimentos e necessitas de precisão. Por exemplo, um micromouse.
Tens de me mostrar o link para esse motor para ver que tipo encoder isso tem, estou curioso quanto à resolução dele... E a caixa de redução não me agrada nada...
Esses encoders que se podem acoplar a servos e a motores DC são uma verdadeira bosta servem para praticamente nada! :D haha

Brevemente partilharei aqui mais informação, mas se tiverem dúvidas é só perguntar que responderei logo que possível e dentro dos meus limites :D

Vi um algoritmo de PID no sitio do Arduino e quase que me deu vómitos. Não sei se é o mesmo mas se é um com uma data de funções e etc.... não estou a dizer que está errado porque não está, usa a teoria toda e faz as contas certas mas em termos de optimização deixa muito a desejar... Vejam pelo espaço ocupado...
Tr3s
Daniel Gonçalves

Offline msr

  • Mini Robot
  • *
  • Mensagens: 798
Re: Regulação da velocidade de um motor DC
« Responder #24 em: 25 de Janeiro de 2010, 15:35 »
Estão a falar deste certo? http://www.arduino.cc/playground/Code/PIDLibrary
Também não me agradou muito...

Dêem uma olhadela no codigo do AVR211 http://www.atmel.com/dyn/Products/app_notes.asp?family_id=607 (cliquem no disco para sacar o codigo). Eu na altura que andei a pesquisar mais sobre este assunto estava com a ideia de tentar fazer código para um hipotético controlador PID mas depois de ver este da Atmel esqueci completamente a ideia ;D Não é que o já tenha experimentando, mas parece-me muito bom.
Para compilar é usado isto: http://www.iar.com/website1/1.0.1.0/675/1/ (kickstart edition é gratuita)

Edit: ja agora, este PID ocupa apenas 534bytes
« Última modificação: 25 de Janeiro de 2010, 15:39 por msr »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Regulação da velocidade de um motor DC
« Responder #25 em: 25 de Janeiro de 2010, 15:49 »
O PID que eu vi estava dentro de um do projecto de um quadcopter mas não me lembro qual, assim que o vir outra vez posto aqui.

Offline maurosmartins

  • Mini Robot
  • *
  • Mensagens: 483
    • msm
Re: Regulação da velocidade de um motor DC
« Responder #26 em: 25 de Janeiro de 2010, 16:23 »
Viva pessoal.

Tens de me mostrar o link para esse motor para ver que tipo encoder isso tem, estou curioso quanto à resolução dele... E a caixa de redução não me agrada nada...
Esses encoders que se podem acoplar a servos e a motores DC são uma verdadeira bosta servem para praticamente nada! :D haha

Bem os motores e soluções que mostrei são para pessoas (como eu :D ) que tem low budget e tambem para pequenos robos, por isso é normal os motores nao serem os ideais, tambem preferia um  Pittman ou melhor ainda um Maxon, mas são mto caros e o pior é que nem os que mostrei tenho :D loool

Não sei como te hei-de explicar esta parte mas basicamente a saída do PID é o valor do dutty-cicle.

metRo_ talvez na biblioteca do arduino isto se verifique, mas por exemplo basta eu usar um cristal diferente que os valores de frequencia e PWM já sao diferentes no entanto as "contas" do PID mantem-se, posso estar a pensar mal, mas ainda nao compreendi esta parte.

Cumprimentos, Mauro.



Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: Regulação da velocidade de um motor DC
« Responder #27 em: 25 de Janeiro de 2010, 16:48 »
Como eu te compreendo!
Também ando a procura de uma solução mais "barata" para ter feedback dos motores ao mesmo tempo que consigo manter-lhes uma boa velocidade. Já estive a ver esses que mostraste, tem uma resolução razoável e comparando com o preço até é boa. Infelizmente são muito grandes e muito "bêbados" para o que eu procuro.
Mas digo que são "excelentes" para robots de tamanho intermédio e low-cost!
Eu ainda preferia uns faulhaber Mauro ;)
Tr3s
Daniel Gonçalves

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Regulação da velocidade de um motor DC
« Responder #28 em: 25 de Janeiro de 2010, 18:23 »
metRo_ talvez na biblioteca do arduino isto se verifique, mas por exemplo basta eu usar um cristal diferente que os valores de frequencia e PWM já sao diferentes no entanto as "contas" do PID mantem-se, posso estar a pensar mal, mas ainda nao compreendi esta parte.
Aquilo que eu disse verifica-se numa aplicação de um PID. Eu nunca vi essa biblioteca que vocês falam.

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re: Regulação da velocidade de um motor DC
« Responder #29 em: 25 de Janeiro de 2010, 20:15 »
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.