Ola, comprei meu servo motor a pouco tempo e quando fui testa-lo ela só ta fazendo +ou- 0° a 100°! e quando ele ultrapassa esse limite, ele fica emitimo um som que parece que as engrenagens estão se forçando! Alguém pode me explicar oque está acontecendo. (servo motor - tower pro, micro servo 9g, sg90)

em anexo o video e a programação

#include <Servo.h>
 
#define SERVO 6 // Porta Digital 6 PWM
 
Servo s; // Variável Servo
int pos; // Posição Servo
 
void setup ()
{
  s.attach(SERVO);
  Serial.begin(9600);
  s.write(0); // Inicia motor posição zero
}
 
void loop()
{
  for(pos = 0; pos < 90; pos++)
  {
    s.write(pos);
  delay(15);
  }
delay(1000);
  for(pos = 90; pos < 0; pos--)
  {
    s.write(pos);
    delay(15);
  }
}

MOV00006.3gp

Exibições: 7024

Responder esta

Respostas a este tópico

Veja se é isso:

No segundo for troque "pos < 0" por "pos > 0

Eu costumo usar sempre na verdade "!=" diferente, que é um vicio de quem compila pra 8051. O 8051 tem o comando CJNE em assembler, que facilita a compilação nesse modo. Quando vc usa maior ou menor ele faz umas tretas com os flags e tal, mas só por curiosidade. Hoje em dia não existem mais essas preocupações.

 Olá Diogo. ^^

 Antes de pensar no problema do ângulo indo de 0º à 100º apenas (que pode estar relacionado com o barulho), nos testes que já fiz em diversos servos, descobri que eles não possuem uma resposta "tão linear" quanto deveriam. Mesmo pegando servos do mesmo código e lote, eles possuem respostas de funcionamento diferentes. Talvez pela baixa qualidade de alguns componentes, ou forma de montagem. Enfim, existem diferenças, e elas são vistas quanto à diferença entre o comando de posição que você dá, e a posição real que o servo executa.

Apenas para compreensão, segue uma figura:

 Vemos que a largura de pulsos é quem determina a posição do servo. E quem gera a largura de pulsos é a sua biblioteca que atua sobre um PWM. E a biblioteca recebe valores de 0 a 180 respectivos ao ângulo de funcionamento.

 Mas, como disse a resposta não é linear(deveriam ser) entre os servos, então como no exemplo, a largura de 1ms pode não corresponder à 0º , e nem a de 2ms pode ser de 180º.

 Fiz testes com geradores de funções, e encontrei servos que funcionam com 0.4ms para 0º e 1.6ms para 180º. Assim como bibliotecas que não era possível usar valores abaixo de 10º e 180º por exemplo, pois eles forneciam uma largura de pulso "fora" do que o servo estava atuando.

 Solução rápida: "Criar uma calibração para o servo." Seja ajustando a largura mínima e máxima para os ângulos que os servos atuam.

 Se você tiver um osciloscópio, e um gerador de funções, poderá identificar os valores correspondentes para controle do seu servo.

 Voltando ao barulho, realmente ocorre quando o servo está sendo "forçado". Isso é devido à resposta da posição e das "travas internas" dele.

  Segue a figura do funcionamento:

 

 Nessa figura percebe-se que as engrenagens estão "amarradas" ao potênciometro, que por sua vez é responsável por "dizer" qual a posição do servo. Ok, lembrando do que falei sobre existir diferenças e nem todo servo para em 180º com 2ms, e que você pode ter um modelo que para com 1.6ms em 180º.  O que aconteceria se você colocasse 2ms? Ele iria querer "passar" os 180º.  Mas, internamente ele possui uma trava que limita o movimento das engrenagens em 180º. Logo, ele fica a todo momento tentando passar os 180º e dai surge o barulho do movimento forçado.

Soluções:

1) Ajustar o PWM da biblioteca. Seja com offset, calibração ou ajustes.

2) Desmontar o motor e verificar se o potênciometro está na posição correta.

    Para isto deve-se colocar o potênciometro na posição central, e o eixo do servo em 90º.

 Segue foto do servo desmontado:

 Caso desmonte, faça com cuidado para não peder nenhuma peça, que podem ser bem pequenas.

 O barulho está explicado, agora o movimento de 0º a 100º é estranho.

 Eu começaria pelo software. Tente fazer um PWM na mão, alterando a largura de pulso desde uns 0.2ms até uns 2.4ms.  E veja se o servo consegue executar todo o movimento até 180º. Se não der certo, só penso que o potênciometro interno está fora de posição. Então terá que realmente abrir o seu servo.

 Verifique a alimentação também. Tem alguns tópicos aqui no fórum que disseram ter problemas com as fontes.

 No mais, espero que seja mais fácil que tudo isto. ^^

 Espero ter ajudado. Fico no aguardo por novidades.

 T++.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço