Pages: 1 [2]   Go Down
Author Topic: Asservissement moteur et variable rpm  (Read 1237 times)
0 Members and 1 Guest are viewing this topic.
Lausanne
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

oui pour chaque condition
Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3014
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ce n'était pas le sens de ma question.
Comme on ne voit qu'un bout de ton code on ne peut pas juger de l'ensemble.
Es-tu certain que la variable startVal soit bien à un? Si ce n'est pas le cas tu n'entreras jamais dans le if et tu ne feras jamais tourner ton moteur.
La même question se pose pour rpm. Est-ce que rpm contient une valeur suffisante pour entrer dans l'une des conditions?
D'ailleurs depuis le début tu ne nous as pas expliqué ce qui ne fonctionne pas.
Logged

Lausanne
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

oui mais en fait le code fonctionne, le problème vient de la variable rpm, mais j'ouvre un nouveau sujet pour cela.

Merci
Logged

Lausanne
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bien en fait c'est la variable rpm que je n'arrive pas à récupérer je ne comprend pas pourquoi  smiley-roll-sweat
Logged

Lausanne
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le problème est en fait lié au taux de rafraichissement trop rapide et à l'instabilité de la variable rpm.

Quelqu'un as t il une solution ? merci  smiley-roll-sweat
Logged

France S-O ou exil en IDF
Offline Offline
Edison Member
*
Karma: 25
Posts: 1904
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu n'as pas l'impression que si tu nous décrivais ton montage en détail et si tu nous donnais un lien vers la datasheet de ton capteur cela nous éviterait de regarder dans notre boule de cristal ?
Logged

Lausanne
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

le capteur est basé sur un capteur magnetic KMZ10A, ci joint le lien pour la datasheet :

http://www.dz863.com/datasheet-817149763-KMZ10A_Magnetic-Field-Sensor/

le code que j'utilise :

Code:

unsigned long timeold ;                   // variable temps
volatile byte rpmcount;                   // variable rpmcount
unsigned int rpm;                          // variable rpm

void setup(){
attachInterrupt(0, rpm_fun, RISING);
rpmcount = 0;
rpm = 0;
timeold = 0;
}

void loop(){

// Tachymetre
if (rpmcount >= 20 ){
  rpm = 60*1000 / (millis() - timeold)*rpmcount;
  timeold = millis();
  rpmcount = 0;
}

if (startVal == 1){
    if (rpm < 4000){  
    analogWrite (motorPin, motorVal_1);
    motorState = 1;
    }
    else if (rpm >= 4000){
    analogWrite (motorPin, motorVal_2);
    motorState = 2;
    }
    else if (rpm >= 8000){
    analogWrite (motorPin, motorVal_3);
    motorState = 3;
    }
}

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



Logged

France S-O ou exil en IDF
Offline Offline
Edison Member
*
Karma: 25
Posts: 1904
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Première chose à voir : la prise d'information, il faut être sur qu'elle est correcte, le code viendra après.
Le capteur est en fait un pont de Wheatstone. comment recueille tu l'information :
1) en dissymétrique en n'utilisant qu'une sortie, référencée par rapport à la masse ?
2) en symétrique avec un montage différentiel ?

A tu pu vérifier l'amplitude du signal qui sort du capteur ?
Est ce que tu as essayé avec un programme ultra simple et le capteur actionné à la main de voir si le micro détecte quelque chose ?

Quand cela ne fonctionne pas il faut décomposer en élément les plus simples possibles et avancer petit à petit dans la chaîne et sûrement pas avec le programme final mais avec des bouts de programme adaptés.

Bons test élémentaires.
Logged

Lausanne
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

oui bien j'ai testé simplement ce code avec affichage du rpm sur le moniteur série et j'ai comparé les valeurs avec les mesures prises avec un tachymètre laser, elles sont correctes.





Logged

France S-O ou exil en IDF
Offline Offline
Edison Member
*
Karma: 25
Posts: 1904
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai un doute : est-ce que la fonction "millis()" est compatible avec l'usage des interruptions ?
Officiellement je crois que s'est oui, mais il semble qu'il traîne encore des bugs, c'est ce que j'ai cru comprendre mais je n'ai pas approfondit, donc sgdg.
Logged

Pages: 1 [2]   Go Up
Jump to: