Servo motor: Controle de velocidade

Mecanica robotica e Automação Industrial (PLC)

Moderadores: 51, guest2003

Servo motor: Controle de velocidade

Mensagempor ivrj » 05 Jul 2009 09:41

Olá pessoal, estou desenvolvendo um projeto de um robo Bipede e estou tendo algumas dificuldades com o controle dos servos em relação a sua velocidade.

O controle em sí já está totalmente pronto, consigo controlar os 8 servos q preciso independentemente.

O problema é que eles se movem um pouco rapido e eu gostaria de adicionar uma variavel de controle de velocidade.

Fiz o controle usando um só timer para acionamento dos 8 servos, usando C em microcontrolador pic.

Alguem tem alguma ideia ? qual logica devo usar ?
ivrj
Bit
 
Mensagens: 13
Registrado em: 05 Mai 2009 22:18

Re: Servo motor: Controle de velocidade

Mensagempor EvandroPic » 05 Jul 2009 12:41

ivrj escreveu:Olá pessoal, estou desenvolvendo um projeto de um robo Bipede e estou tendo algumas dificuldades com o controle dos servos em relação a sua velocidade.

O controle em sí já está totalmente pronto, consigo controlar os 8 servos q preciso independentemente.

O problema é que eles se movem um pouco rapido e eu gostaria de adicionar uma variavel de controle de velocidade.

Fiz o controle usando um só timer para acionamento dos 8 servos, usando C em microcontrolador pic.

Alguem tem alguma ideia ? qual logica devo usar ?



Eu introduziria passos na mudança do do Duty Cycle.

Conforme você está fazendo, a mudança vai do Duty Cycle atual para o Duty Cycle da nova posição, sem passar por Duty Cycle intermediários.
Exemplo:
O servo está na posição 30º e você quer que ele vá pra posição 60º.
Se você mudar o Duty Cycle direto, a velocidade vai ser a máxima que o motor conseguir executar.

Se você mudar o Duty Cycle em passos, por exemplo:
De grau em grau em intervalos de 30 ms, o servo levará quase 1 segundo pra fazer o percurso dos 30º em questão.
É só você alterar o tempo de pernência em cada passo que você altera a velocidade.

Na teoria é simples... na prática veja se é possíivel.. :lol:
Mas fica a sugestão.
EvandroPic
Byte
 
Mensagens: 120
Registrado em: 28 Out 2008 15:28

Mensagempor Djalma Toledo Rodrigues » 05 Jul 2009 14:09

A Técnica é Rampa de Aceleração / Rampa de Desaceleração.

O Sistema deverá possuir dois Loops um de posição e dentro deste o Loop de Velocidade.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor ivrj » 06 Jul 2009 07:48

humm entendi.. as duas ideias são parecidas, ao menos para implementação, porém já tentei aplica-las, mas quando o fiz não ficou muito legal. Porém acho q o problema era a baixa resolução do duty usada e o periodo fora dos 20ms do servo, e por isso ele tremia muito ao executar esse controle de velocidade... Porém ao menos 1 dos problema consegui contornar!

Vou seguir suas sugestões e tentar pensar em algum modo usando flags de controle e o proprio timer para incrementar elas paralelamente.


Agradeço suas sugestões, e caso alguém tenha mais alguma idéia, ficaria grato!
ivrj
Bit
 
Mensagens: 13
Registrado em: 05 Mai 2009 22:18

Mensagempor ivrj » 06 Jul 2009 08:01

Djalma Toledo Rodrigues escreveu:A Técnica é Rampa de Aceleração / Rampa de Desaceleração.

O Sistema deverá possuir dois Loops um de posição e dentro deste o Loop de Velocidade.


só pra tirar 1 pequena duvida, essa técnica seria implementada usando 1 flag de controle, o qual diz quando o incremento de outra variável deve parar?

seria isso?
Código: Selecionar todos
#define velocidade 30 //delay em ms
int flagMove;
int Move;
int aux;

void velocidadeServo(int novaPosicao, int posicaoAtual)
{
       Move = posicaoAtual;
       flagMove = novaPosicao;
       delay(velocidade);                       //faz o controle da velocidade
       for(;Move < flagMove; Move++)
       {
              moverServo(Move);                 //move em incrementos de 1,
        }
}
ivrj
Bit
 
Mensagens: 13
Registrado em: 05 Mai 2009 22:18

Mensagempor Djalma Toledo Rodrigues » 06 Jul 2009 12:50

Para curta distância:
A posição atual
B posição a ser atingida
C posição intermediária

De A a C acelera.
de C a B desacelera.

Isso no plano. Acontesse que o trandutor dos Servos tipo FUTABA é um potenciômetro.
Então temos que raciocinar a aceleração ou por Coordenada Polar ou aceleração de movimento Circular
Ver: http://pt.wikipedia.org/wiki/Movimento_ ... r_uniforme
E depois converter para largura de pulso.

(Creio que Coordenada Polar fica bem mais fácil - Progressão Geométrica do Ângulo para a aceleração.)
Editado pela última vez por Djalma Toledo Rodrigues em 07 Jul 2009 00:13, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor _blackmore_ » 06 Jul 2009 22:40

Djalma Toledo Rodrigues

Servos tipo FUTUBA
seria por acaso FUTABA?

abrax!
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor Djalma Toledo Rodrigues » 07 Jul 2009 00:15

Isso Futaba -- Já foi editado e corrigido.

Obrigado _blackmore_
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22


Voltar para Mecatronica a Automação

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x