Controle de Velocidade de Motor por PWM

Fórum sobre plataforma Arduino

Moderadores: andre_luis, 51, guest2003, Renie

Controle de Velocidade de Motor por PWM

Mensagempor matheusmachado » 09 Jan 2018 08:46

Olá. Estou desenvolvendo um controle de velocidade para que um robô com aquele kit de robôtica para arduino ande em linha reta, corrigindo a velocidade dos motores por meio do pwm. O que tenho em mão são dois sensores ópticos que leem a rotação de 2 rodas com 20 furos que estão acopladas ao motor para determinar a velocidade do motor. Como faço para controlar o pwm sabendo a velocidade dos motores? O código está abaixo:

cpp code
//Definicoes pinos Arduino ligados a entrada da Ponte H
int IN1 = 8;
int IN2 = 9;
int IN3 = 10;
int IN4 = 11;
int PWMA = 5;
int PWMB = 6;
//Definições dos contadores
int contador1=0;
int contador2=0;
float timeold = 0;
float nvoltas1=0;
float nvoltas2=0;
float rmp1=0;
float rpm2=0;
float vel1;
float vel2;
int tempo=0;
int flag;
int a = 99;
int b = 111;

void setup() {

Serial.begin(9600);
Serial.println("Lendo dados do sensor...");

Serial.print("Contador1");
Serial.print(" ");
Serial.println("Contador2");

//Define os pinos como saida
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(PWMA, OUTPUT);
pinMode(PWMB, OUTPUT);

// Define as interrupções
attachInterrupt(0, ISR1, RISING);
attachInterrupt(1, ISR2, RISING);
}

void loop() {
// put your main code here, to run repeatedly:
Serial.print(contador1);
Serial.print(" ");
Serial.println(contador2);
delay(1000);

//Anda o robô para frente
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
Serial.println("Anda para frente");
analogWrite(PWMA,a);
analogWrite(PWMB,b);



//Calculo da velocidade do motor 1
noInterrupts();
tempo=(millis()-timeold);
nvoltas1= (contador1/20);
int rpm1 = (nvoltas1/tempo);
vel1=(((6.28)*(nvoltas1)*(32.5))/(tempo));
nvoltas2= (contador2/20);
rpm2 = (nvoltas2/tempo);
vel2=(((6.28)*(nvoltas2)*(32.5))/(tempo));


timeold = millis();
Serial.print("Velocidade1 ");
Serial.println("Velocidade2");
Serial.print(vel1);
Serial.print(" ");
Serial.print(vel2);
Serial.print(" ");
Serial.print(tempo);
Serial.print(" ");
Serial.print(nvoltas1);
Serial.print(" ");
Serial.print(contador1);
Serial.print(" ");
Serial.print(nvoltas2);
Serial.print(" ");
Serial.print(contador2);
Serial.print(" ");
Serial.print(a);
Serial.print(" ");
Serial.print(b);
Serial.print(" ");
Serial.print(rpm1);
Serial.print(" ");
Serial.print(rpm2);
delay(5000);
interrupts();
contador1=0;
contador2=0;

}
void ISR1()
{
contador1++;

}

void ISR2()
{
contador2++;
}
matheusmachado
 
Mensagens: 2
Registrado em: 09 Jan 2018 08:31

Re: Controle de Velocidade de Motor por PWM

Mensagempor andre_luis » 09 Jan 2018 11:02

Intuitivamente, diria algo do genero:

cpp code
if ( vel > x ){
a--;
b--;
}
else {
a++;
b++;
}
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Controle de Velocidade de Motor por PWM

Mensagempor pamv » 09 Jan 2018 12:22

Você já deu uma lida na documentação atualizada do Arduino para a função attachInterrupt() ?
Tem uma parte do seu código que parece desatualizada em relação a esta função.
pamv
Word
 
Mensagens: 842
Registrado em: 20 Jun 2016 21:47


Voltar para ARDUINO

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes

cron

x