Go Down

Topic: asservissement moteur en fonction du RPM (Read 456 times) previous topic - next topic

Mike74

bonjour, voilà j'utilise ce bout de code pour asservir la commande d'un moteur en fonction du rpm mais lorsque je test, le moteur démarre mais le programme reste sur le premier palier lorsque le rpm > 2000 :

Code: [Select]

void loop(){

// Tachymetre
uint16_t rpm=0;                            // variable rpm calculee
int rpmFiltre;
if (rpmcount == 1)
timeold=millis();
else if (rpmcount > 20 ){
     rotating_time = millis() - timeold;
     rpm = 60000/ rotating_time*(rpmcount-1);
     rpmFiltre = lpfilter(rpm, coef, rpmFiltre);
     rpmcount = 0;
     lcd.printOptions(1, COLOR_WHITE, COLOR_BLACK);
     lcd.printXY(60, 62); //set cursor
     lcd.println(rpm, DEC);
     }

if (valeur == 1 && rpm < 2000){
  Go = 1;
}

if (valeur == 1 && rpm >= 2000){
  Go = 2;
}

if (valeur == 1 && rpm >= 3000){
  Go = 3;

else if (valeur == 0){
  Go = 0;
}


switch (Go){

  case 0:
    analogWrite (motorPin, 0);
    motorState = 0;
    run = 0;
    break;
   
  case 1:
    analogWrite (motorPin, 150);
    motorState = 1;
    run = 0;
    break;     

  case 2:
    analogWrite (motorPin, 255);
    motorState = 1;
    run = 0;
    break;

case 3:
    analogWrite (motorPin, 0);
    motorState = 0;
    run = 1;
    break;

defaut:
    break;

}

void rpm_fun() {
rpmcount++;                //Each rotation, this interrupt function is run twice
}



Merci pour votre aide.

Christian_R

Rempalcer
if (valeur == 1 && rpm >= 2000){
  Go = 2;
}

par :

if (valeur == 1 && rpm >= 2000 && rpm <3000){
  Go = 2;
}
Christian

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy