collapse

* Links de Robótica

* Posts Recentes

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

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

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Regulação da velocidade de um motor DC
« em: 09 de Janeiro de 2010, 14:45 »
Boas.
Estou a iniciar um mino projecto que têm como objectivo regular a velocidade de um motor através dum potenciometro,

estou a utilizar um potenciometro dos grandes (com carapuça :P) e estou alimentá-lo normalmente e sair para o -, o pino do meio ligo a uma entrada analogica do arduino,

e a minha questão é: à medida que vou rodando o potenciometro ele nao deveria variar um valor de 0 a 1023?, o que me está acontecer é que sem mecher nele ele dá me valores mesmo de 0 a 1023..

estou a utilizar o seguinte código:

Código: [Seleccione]
int pot_pin = 0;
int valor = 0;

void setup(){
  Serial.begin (9699);
}

void loop(){
  valor = analogRead(pot_pin);
  Serial.println(valor);
  delay(500);
}

cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Regulação da velocidade de um motor DC
« Responder #1 em: 09 de Janeiro de 2010, 14:50 »
correcção do código:

Código: [Seleccione]
int pot_pin = 0;
int valor = 0;

void setup(){
  Serial.begin (9600);
}

void loop(){
  valor = analogRead(pot_pin);
  Serial.println(valor);
  delay(500);
}

cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Regulação da velocidade de um motor DC
« Responder #2 em: 09 de Janeiro de 2010, 14:57 »
Boas.
Primeiro, para fazeres correcções, podes editar o post, não precisas de postar uma resposta a ti mesmo.

estou a utilizar um potenciometro dos grandes (com carapuça :P) e estou alimentá-lo normalmente e sair para o -, o pino do meio ligo a uma entrada analogica do arduino,

Então e a 3ª perna? Não devias ligá-la ao 5v?

Resumindo:
Potênciometro -> Arduino
pin 1 -> GND
pin 2 -> Analog X
pin 3 -> 5v

É isto que tens?

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Regulação da velocidade de um motor DC
« Responder #3 em: 09 de Janeiro de 2010, 14:58 »
sim é isso.
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Regulação da velocidade de um motor DC
« Responder #4 em: 09 de Janeiro de 2010, 15:03 »
ja resolvi o problema, não me estava a chegar alimentação á placa onde tenho o potenciometro, os fios estavam a fazer mau contacto...
obeigado por responderes microbyte, eu vou dando novidades da evolução do projecto:)
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Regulação da velocidade de um motor DC
« Responder #5 em: 09 de Janeiro de 2010, 15:05 »
Esqueceste-te do "Editar" outra vez...  :P

BTW, ainda bem que já está resolvido...
Mais uma vez, uma situação em que a solução era desligar tudo e montar outra vez...

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Regulação da velocidade de um motor DC
« Responder #6 em: 23 de Janeiro de 2010, 16:48 »
Boas...
Aqui deixo um video do regulador de velocidade concluido com a respectiva programação,

Regulação de velocidade de um motor DC!!.MPG Small | Large


Citar
int switch1_pin =2;
int switch2_pin = 4;
int pot_pin = 0;
int pin1 = 3;
int pin2 = 10;
int botao1_antes = 0; //valor do botão1 antes de ser premido!
int botao2_antes = 0; // "   "   botão2 antes de ser premido!
int val_pot = 0;

void setup(){
  pinMode(switch1_pin, INPUT);
  pinMode(switch2_pin, INPUT);
  Serial.begin(9600);
}

void loop(){
  val_pot = map(analogRead(pot_pin), 0,1023,50,255);
  Serial.println(val_pot);
  delay(200);
  
  if((digitalRead(switch1_pin) == LOW) && (botao1_antes == 0)){
   analogWrite(pin1, 0);
   analogWrite(pin2, val_pot);
   botao1_antes = 1;
  }
  else{
    if((digitalRead(switch1_pin) == LOW) && (botao1_antes == 1)){
        analogWrite(pin1, val_pot);
   analogWrite(pin2, 0);
   botao1_antes = 0;
  }
  if((digitalRead(switch2_pin) == LOW) && (botao2_antes == 0)){
    analogWrite(pin1,0);
   analogWrite(pin2, 0);
   botao2_antes = 1;
  }
  if ((digitalRead (switch2_pin) ==LOW) && (botao2_antes == 1)){
    analogWrite (pin1, 0);
    analogWrite (pin2, 0);
    botao2_antes = 0;
  }
  }
}
 
 

  




 

espero que tenham gostado e, claro, com que este tutorial venha a ser útil a alguém.. ;)
« Última modificação: 26 de Janeiro de 2010, 20:20 por fred gomes »
cumprimentos,
Fred

Offline nunosilvarocha

  • Mini Robot
  • *
  • Mensagens: 335
Re: Regulação da velocidade de um motor DC
« Responder #7 em: 23 de Janeiro de 2010, 19:01 »
se o que queres fazer com o teu motor é clicar no botão da direita e ele rodar para a direita e só parar quando voltares a carregar novamente, e o mesmo no botão da esquerda, só que em sentido contrário é fácil.
O que tu estas a fazer neste monto é dizer ao arduino que enquanto o botão estiver a ser clicado ele anda.
o que tens que fazer é:
clicas no botao e a variável 'a' fica a '1'
voltas a clicar no botao a variável 'a' fica a '0'
depois testas:
se a variável 'a' for '1' entao o motor anda
se a variável 'a' for '0' o motor para

qualquer duvida vai postando!!

Offline nunosilvarocha

  • Mini Robot
  • *
  • Mensagens: 335
Re: Regulação da velocidade de um motor DC
« Responder #8 em: 23 de Janeiro de 2010, 19:12 »
se poderes posta uma foto dos motores que estas a utilizar e das rodas, gostava de visiona-las melhor!!

Offline msaleiro

  • Mini Robot
  • *
  • Mensagens: 691
    • Blog
Re: Regulação da velocidade de um motor DC
« Responder #9 em: 23 de Janeiro de 2010, 19:21 »
Também achei as rodas muito interessantes :P Mostra lá isso ;)
msaleiro - Mário Saleiro
UAlg FCT-DEI / VisLab - Instituto de Sistemas e Robótica / eLab Hackerspace
http://thebitbangtheory.com

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Regulação da velocidade de um motor DC
« Responder #10 em: 23 de Janeiro de 2010, 20:28 »
Boas nuno.. obrigado responderes.. eu daqui a pouco ou amanha tento da forma que disseste, estou agora de volta do seguidor de linhas e não me dá muito geito retirar-lhe o arduino agora,.

Boas msaleiro, as rodas são de alumínio (não fui eu que as fiz, foi o meu pai lá na fábrica)...o revestimento à volta delas que vês são dumas correias velhas , colei para aumentar a aderência ao solo das rodas e também para ficarem com um melhor aspecto, só que a colagem como ves não ficou perfeita, estava mais preocupado em não ficar com os dedos agarrados à cola 3 do que em colar aquilo como deve ser :P, as rodas de lado tem um furo e um parafuso là dentro, ao colocar as rodas nos motores coloco com a parte do parafuso virada para a "ranhura " que os motores têm e aperto com uma chave de um buraco para fixar as rodas...

http://img85.imageshack.us/i/dsc08189.jpg/
http://img693.imageshack.us/i/dsc08190m.jpg/








« Última modificação: 28 de Julho de 2010, 14:24 por fred gomes »
cumprimentos,
Fred

Offline msaleiro

  • Mini Robot
  • *
  • Mensagens: 691
    • Blog
Re: Regulação da velocidade de um motor DC
« Responder #11 em: 23 de Janeiro de 2010, 21:19 »
Parecem estar mt boas! Pelo menos têm bom aspecto! Obrigado pelas fotos e pela explicação :) Boa sorte com o resto do projecto
msaleiro - Mário Saleiro
UAlg FCT-DEI / VisLab - Instituto de Sistemas e Robótica / eLab Hackerspace
http://thebitbangtheory.com

Offline maurosmartins

  • Mini Robot
  • *
  • Mensagens: 483
    • msm
Re: Regulação da velocidade de um motor DC
« Responder #12 em: 24 de Janeiro de 2010, 14:04 »
Olá pessoal.

O controlo que aqui temos é "open-loop" o que para uma grande parte das coisas funciona, mas se quisermos fazer correctamente por exemplo um robô com locomoção diferencial, precisamos que ambos os motores tenham exactamente a mesma velocidade de forma a andar em linha recta!

Para isso seria melhor usar um controlador do tipo "closed-loop" e implementar um mais que conhecido controlador PID para o controlo da velocidade.

Já fiz qq coisa deste estilo para uma cadeira na universidade e funcionava, mas estava longe dos resultados que gostaria de obter, alguém aqui tem experiência em implementar este tipo de controladores num micro controlador?!

Entretanto deixo um documento que encontrei e que gostei bastante, relata a concepção de um controlador PID analógico e faz o confronto dos resultados obtidos por simulação (matlab/simulink) com a tão esquecida dos professores universitarios REALIDADE.
http://asl.epfl.ch/research/projects/VtolIndoorFlying/rapports/rapportSemStauffer.pdf (em inglês)

Cumprimentos, Mauro.


Offline msr

  • Mini Robot
  • *
  • Mensagens: 780
Re: Regulação da velocidade de um motor DC
« Responder #13 em: 24 de Janeiro de 2010, 14:16 »
Um controlador PID é algo que quero bastante fazer um dia. Dei uma vista de olhos nesse pdf e parece realmente estar muito interessante, vou ter que ler melhor.

Pensei num controlador PID quando  tive vontade de fazer um "self balancing robot" mas essa de por dois motores à mesma velocidade é capaz de ser um melhor ponto de partida (ou manter a velocidade independentemente da inclinação do chão). Acho que a maior dificuldade é arranjar um modelo matemático para o sistema e a partir daí sacar as constantes.

Offline maurosmartins

  • Mini Robot
  • *
  • Mensagens: 483
    • msm
Re: Regulação da velocidade de um motor DC
« Responder #14 em: 24 de Janeiro de 2010, 14:49 »
Pelo que já andei a ver, e dos (pcos) conhecimentos :D que tenho de controlo.

Podemos conseguir o modelo matemático do sistema através do conhecimento da resposta a degrau do sistema.

Agora falando mais terra a terra, a ideia é ter o motor parado e mando-lo andar(entrada em degrau) e verificar a evolução da velocidade em ordem ao tempo. Vamos ficar com algo deste género:
Em que o Y(t) do gráfico pode ser por exemplo RPMs ou m/s.....

Depois conhecendo os valores assinalados na figura por Td, Z e o podem ser calculados os primeiros ganhos para o termo P,I e D pelo método de Ziegler–Nichols através das equações:
http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
Estes valores são aceitáveis mas não são a solução óptima.

Uma das minhas maiores dificuldades prende-se com relacionar a saída dos cálculos PID com o duty cycle do sinal PWM que temos de fornecer ao motor, talvez alguém saiba explicar-me isto.

Cumprimentos, Mauro.