Go Down

Topic: asservissement moteur en fonction du RPM (Read 432 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