Página 1 de 1

Rampa de aceleração e desaceleração.

MensagemEnviado: 15 Dez 2015 10:46
por Eduardo Augusto
Olá amigos!
Estou travado no desenvolvimento de uma rotina, não consigo sair do lugar, e gostaria do suporte de vocês.
Bem como posso explicar...
O usuário deve informa ao sistema as variáveis de frequência inicial , frequência final , tempo inicial e tempo final da seguinte forma:

cpp code
struct rampa{
unsigned int Finicial;
unsigned int Ffinal;
unsigned int deltaFreq;

unsigned int Tinicial;
unsigned int Tfinal;
unsigned int deltaTempo;
}ramp;

void configRampa(unsigned int Finicial, unsigned int Ffinal, unsigned int Tinicial, unsigned int Tfinal)
{
ramp.Finicial = Finicial; ramp.Ffinal = Ffinal;
ramp.deltaFreq = (Finicial-Ffinal);

ramp.Tinicial = Tinicial; ramp.Tfinal = Tfinal;
ramp.deltaTempo = (Tinicial-Tfinal);
}


Daí acho os valores de delta frequência e tempo....Sendo o tempo em ms e a frequência em Hz...

Daí apos o usuário configurar essas variáveis e colocar o sistema em modo de operação, um timer programado para 1ms vai gerar via interrupção o clock da rampa e ai penso que,uma equação vai proporcionalmente, a partir do valor de Finical e Ffinal incrementar uma variável que sera minha variável de saída. Minha saída tem de ser em frequência e proporcional. Não estou conseguindo enxergar como modelar isso, quanto mais procuro saber mais dou um nó.

Tenho quase que certeza que a desaceleração seja o mesmo contudo decrementando a variável de saída.

Re: Rampa de aceleração e desaceleração.

MensagemEnviado: 15 Dez 2015 11:37
por andre_luis
Isso tá cheirando á uma regra-de-três, mas não vi nenhuma conta de divisão acima.
De qualquer modo, tem como anexar um gráfico mostrando melhor ó que seria esperado da saída ?

Re: Rampa de aceleração e desaceleração.

MensagemEnviado: 15 Dez 2015 12:41
por MOR_AL
Tá me cheirando a equação de uma reta (proporcional).
Como o uC é uma péssima calculadora, eu acrescentaria a decisão:
Se n for igual a N, então T(N) = Tf e F(N) = Ff
MOR_AL

Re: Rampa de aceleração e desaceleração.

MensagemEnviado: 15 Dez 2015 12:49
por Djalma Toledo Rodrigues
Não da para entender bem voce fala em ms em Hz depois aceleração e des...
Se cogitas em Rampa de aceleração ou desaceleração pressupõem-se inércia. quem entender há?

Não entendo, não compreendo, essas consultas, aqui falando em geral, há de ser Projetos Ultra-secretos...

Mas vamos ao caso:

Quando for assim antes de partir logo pro programa imagine, se pergunte, como uma pessoa procederia.
Faça um Fluxograma do Procedimento Lógico dessa pessoa
No Fluxograma já deverá estar solucionado
passe para o Programador.

Dj.

Re: Rampa de aceleração e desaceleração.

MensagemEnviado: 15 Dez 2015 13:01
por Eduardo Augusto
Desculpa a explicação nas coxas, não tem segredo nenhum, é que não soube explicar mesmo. Trata-se de um projeto de um inversor v/f de até 4cv.

Portanto a rampa pode ser de tempo de 100ms a até 10min. Por isso o clock de 1ms pelo timer.

Bem vamos lá o gráfico final serial um trapézio como o abaixo,
Eu pensei em usar um interpolação linear, pois tenho os limites de x e y e acho conseguiria achar os valores intermediários mas ainda estou me enrolando. :?

untitled.png

Moral tenho quase certeza que seja isso, um função de reta, tentarei implementar.

Re: Rampa de aceleração e desaceleração.

MensagemEnviado: 15 Dez 2015 13:14
por brasilma
Olá Eduardo,

Creio que o cálculos para os incrementos da rampa seriam feitos dividindo-se o delta de frequência pelo delta de tempo em mS.

E a partir da frequência inicial a cada ciclo de interrupção de 1 mS você adiciona o valo obtido no cálculo anterior.

Creio que a base seja essa...

Re: Rampa de aceleração e desaceleração.

MensagemEnviado: 15 Dez 2015 14:06
por Eduardo Augusto
brasilma escreveu:Olá Eduardo,

Creio que o cálculos para os incrementos da rampa seriam feitos dividindo-se o delta de frequência pelo delta de tempo em mS.

E a partir da frequência inicial a cada ciclo de interrupção de 1 mS você adiciona o valo obtido no cálculo anterior.

Creio que a base seja essa...


Calma lá deixa eu ver se eu entendi!
O usuario informa Finicial = 5, Ffinal = 60, TInicial = 0, Tfinal 3s (3000ms).
Dai eu teria um DeltaF de 55Hz e um DeltaT de 3000. Daí a cada interrupção eu poderia fazer
Código: Selecionar todos
return ((DeltaF/DeltaT))+ValorAnterior;
?

Brasilma fiz umas simulações aqui no excel e funcionou como o esperado, contudo no final da rampa eu estou com o valor de DeltaF, no caso 55 e não 60.

Re: Rampa de aceleração e desaceleração.

MensagemEnviado: 15 Dez 2015 14:25
por brasilma
Isso,

Ffinal = 60Hz - Finicial = 5Hz => 55Hz;
Tfinal = 3000mS - TInicial = 0 => 3000mS

3000mS / 55Hz = 54.5mS

A cada 54 ou 55 ciclos* de interrupção de 1mS você incrementa 1Hz na frequencia.
*(a rotina pode usar arredondamento para o valor e usar o valor da frequência final informada pelo usuário como limite)

Você precisará prever limites para as grandezas para não ocorrer problema de divisão ou coisas absurdas como uma aceleração/desaceleração acima de determinados limites.

Para não ocorrer este problema que relatou, deixa como parâmetro para o encerramento da rotina de rampa que o valor da frequência seja igual ao que o usuário informou (como sugeri), ok? (creio que o parâmetro de frequência seja mais relevante (ou observável) que o tempo da rampa)

Re: Rampa de aceleração e desaceleração.

MensagemEnviado: 15 Dez 2015 18:47
por MOR_AL
Eduardo Augusto escreveu:
brasilma escreveu:Olá Eduardo,

Creio que o cálculos para os incrementos da rampa seriam feitos dividindo-se o delta de frequência pelo delta de tempo em mS.

E a partir da frequência inicial a cada ciclo de interrupção de 1 mS você adiciona o valo obtido no cálculo anterior.

Creio que a base seja essa...


Calma lá deixa eu ver se eu entendi!
O usuario informa Finicial = 5, Ffinal = 60, TInicial = 0, Tfinal 3s (3000ms).
Dai eu teria um DeltaF de 55Hz e um DeltaT de 3000. Daí a cada interrupção eu poderia fazer
Código: Selecionar todos
return ((DeltaF/DeltaT))+ValorAnterior;
?

Brasilma fiz umas simulações aqui no excel e funcionou como o esperado, contudo no final da rampa eu estou com o valor de DeltaF, no caso 55 e não 60.


Se você tentar seguir o que eu postei, vai ver que você chegou a 55 e não 60, porque não computou o valor inicial na reta.
Sua reta parte da origem (0,0). Daí só tem o coeficiente angular (o m). Faltou o coeficiente linear, que desloca a reta, deixando de partir da origem.
Estude mais um pouquinho a minha postagem anterior, que você chega lá.
Em tempo:
Se for para simular o gráfico que você postou, ele é formado por uma sequência de três retas. A primeira com coeficiente angular positivo. A segunda com coeficiente angular nulo. A terceira com coeficiente angular negativo.

A equação geral da reta é:

y = m (x - x0) + y0, onde

y é o valor da vertical, dados os demais valores.
m é o coeficiente angular. É o que você calculou e eu mostrei antes. É o Df / DT.
x0 e y0 são os valores (conhecidos) de um ponto pertencente à reta.
x é o valor que você escolhe, para achar o y.

Ex:

Uma equação de reta que parra pelos pontos (1,2) (x0 = 1 e y0 = 2) e (3,4) (x1 = 3 e y1 = 4)

Solução:

m = (y1 - y0) / (x1 - x0) = (4 - 2) / (3 - 1) = 2 / 2 = 1.

então a equação da reta é:
y = m (x - x0) + y0
Substituindo os valores:
y = 1 * (x - 1) + 2 = x - 1 + 2 = > y = x + 1
Agora vamos ver se essa equação de reta passa pelos pontos x0, y0 e x1, y1
Para x0 = 1, o valor de y TEM que dar 2

y = 1 + 1 = 2. Ok!

Agora vamos ver se a reta passa pelo ponto (x1 = 3 e y1 = 4).
entro com x = 3 e y TEM que dar 4.
y = 3 + 1 = 4. Ok!

... E se x for igual a zero?

y = 0 + 1 => y = 1, então a reta também passa pelo ponto (0,1)

Agora você pode substituir y pela frequência e o x pelo tempo. Veja minha postagem anterior, que você vai entender.
Espero ter ajudado.
MOR_AL