Ir ao conteúdo
  • Cadastre-se

Arduino Variar PWM em função de um Sensor


Posts recomendados

Bom dia, tenho um MPU-6050 e estou querendo variar 2 pwm de acordo com o ângulo.
A principio iria utilizar o comando "if", porém tenho que determinar o duty de acordo com o valor do ângulo x ou y e a minha intenção é variar os 2 juntos, por exemplo:

Se aumentar um grau no ângulo "x", aumentar 1% no duty do pwm "x" e assim por diante.
Ai vi que o laço "for" poderia ser mais útil nesse caso, só que tenho muita dificuldade em visualizar como esse laço iria funcionar ( sou leigo em programação), alguém pode me ajudar?
O laço "for" realmente seria melhor? 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá amigo. O laço for e while têm funções mais nobres. Se o seu microcontrolador tiver 2 canais pwm, basta alimentá-los com o dado vindo do seu dispositivo dentro do laço (loop) principal mesmo. P.ex. o arduíno tem uma tal função analogwrite https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/ que nada + é do que o controle da largura pwm.
 

loop()
{
x=dado_x_do_acelerometro(); //crie ou consulte função mastigada pra isso
y=dado_y_do_acelerometro();
analogwrite(9,x);
analogwrite(5,y);
}

Apesar de você ser 1/2 leigo, espero não precisar te dizer que ctrl-c ctrl-v no código acima vai resolver sua vida, ok?

 

Link para o comentário
Compartilhar em outros sites

@.if O comando analogWrite(),tem a sua frequência limitada entre 490hz-980hz (dependendo do pino),  por causa da sua frequência baixa, programei o arduino para o "Fast Mode" por meio do TCCR2A,ai surge a outra duvida, continuo a programação utilizando o comando "analogWrite"? porque vi alguns exemplos utilizando uma função de auxilio "void setDuty_pin" e não sei se já utilizando o analogWrite() direto a frequência já vai alterar, e por conta da pandemia estou sem osciloscópio para analisar o pwm... ficando mais difícil ! 😪
 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ao mencionar TCCR2A penso que você está no caminho certo pois está a usar o recurso de hardware e não software do mc. Infelizmente não sei te informar ao certo como a função void setDuty_pin manipula os registros do mc pra esta missão. Vai ter que dar uma olhadela no datasheet do mc e dar uma estudada na seção pwm dele. P.ex. digamos que ele seja o atmegaXXX que me parece que tem sim 2 canais pwm

avr_pwm_04.jpg

http://www.ermicro.com/blog/?p=1971

Após entender, sugiro que escrevas direto nos registros do mc pra programá-lo de forma mais... "maxa"😁

E quanto à falta de instrumentos cogite usar simulador p.ex. proteus.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!