Pages: [1]   Go Down
Author Topic: asservissement moteur en fonction du RPM  (Read 385 times)
0 Members and 1 Guest are viewing this topic.
Lausanne
Offline Offline
Full Member
***
Karma: 1
Posts: 116
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

france
Offline Offline
God Member
*****
Karma: 15
Posts: 879
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

par :

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

Christian

Pages: [1]   Go Up
Jump to: