Ir ao conteúdo
  • Cadastre-se

Tratando curva no eixo x do acelerômetro


paivadaniel

Posts recomendados

http://img20.imageshack.us/img20/6679/imgor.png

Olá pessoal, estou tratando um acelerômetro, no eixo x, esse é o sinal do acelerômetro para o eixo x medido no osciloscópio quando colocado num rotorzinho (um trequinho que roda com uma velocidade um tanto uniforme), ou seja, a aceleração inicialmente cresce, e quando muda de sentido, ela vai decrescendo, muda de sentido, volta a ter um crescimento.

É o seguinte, eu tenho que comparar 100 pontos dessa curva com outros 100 pontos da mesma usando pic18f4582, essa comparação deve ser feita da seguinte forma: os 100 pontos iniciais devem estar distanciados 2pi dos 100 pontos que entrarão na comparação, ou seja, devem estar distanciados de um ciclo, para que seus valores quando comparados sejam próximos. O problema é que meu programa pega 100 pontos, e não consegui pensar uma maneira para calcular os pontos da curva distanciados de 2pi, ou seja ele pode pegar 100 pontos e comparar com 100 pontos vizinhos, e a comparação vai estar toda defasada.

Se eu tivesse o número de pontos da curva (que depende da freqüencia), ou alguma outra ideia, eu resolveria a questão.

Alguma ideia?

Segue trecho do programa:

void ler_basal_eixo_x()

{

set_adc_channel(5);

delay_us(10);

eixo_x_basal = read_adc();

delay_us(10);

eixo_x_basal_limite = (eixo_x_basal + (eixo_x_basal/8));

printf("b = %lf \n\r", eixo_x_basal);

printf("bl = %lf \n\r", eixo_x_basal_limite);

printf("\n\r");

return;

}

//----------------------------------------------------------------

void ler_v1()

{

while (fim == 0)

{

set_adc_channel (5);

delay_us (10);

eixo_x = read_adc();

delay_us (10);

if (eixo_x > eixo_x_basal_limite) // verificar quando há movimento no eixo x

{

for(i=0; i<TAM_MAX; i++)

{

set_adc_channel (5);

delay_us (10);

v1 = read_adc();

delay_us (10);

printf("v1[%d] = %lf \n\r", i, v1);

}

fim = 1; // sair do laço while

}

}

printf("\n\r");

return;

}

void ler_v2()

{

fim = 0;

while (fim == 0)

{

set_adc_channel (5);

delay_us (10);

eixo_x = read_adc();

delay_us (10);

if (eixo_x > eixo_x_basal_limite) // verificar quando há movimento no eixo x

{

for(i=0; i<TAM_MAX; i++)

{

set_adc_channel (5);

delay_us (10);

v2 = read_adc();

delay_us (10);

printf("v2[%d] = %lf \n\r", i, v2);

}

fim = 1; // sair do while

}

}

printf("\n\r");

return;

}

void main()

{

...

ler_basal_eixo_x();

ler_v1();

ler_v2();

...

// aqui entra a lógica de comparação

...

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...