Carte Einsy Rambo

Page 2 sur 2 Précédent  1, 2

Aller en bas

Re: Carte Einsy Rambo

Message  Djam le Lun 6 Aoû 2018 - 19:41

Bonjour les gens, je reviens avec la carte einsy, en méme temps c'est le sujet!

J'essaye d'avoir le retour du tachymétre avec marlin, au début j'ai essayé de suivre le code pour les RPM dispo sur le site Arduino, mais c'est pour les ventilos avec 4 câbles non pas trois, donc ça fonctionnais à plein régime mais pas quand on descendais les régime du ventilo, le compte tour augmenté au lieu de descendre...la faute au PWM et ça fréquence et des faux positifs...
Bref je suis allé pioché dans le code du FW prusa et j'ai quelque chose qui fonctionne sur l'interruption 7 donc la ventilo prévu pour le Fan impression, ça fonctionne bien, ou plutôt les relevés sont cohérent avec le Noctua, 4500 RPM en full, et descends progressivement avec la descente de vitesse, j'ai encore des doutes sur la formule de calcul, j'aurais aussi aimé faire de même sur l'interruption 6 (l'autre Fan) mais je n'ai pas les mêmes résultat, je suis à 3200RPM en full, ça doit encore étre une histoire de fréquence PWM décalé....mais bon il faut dire que j'ai testé uniquement un bout de code sans le marlin autour qui doit gérer avoir une gestion des fréquences PWM plus précise et égal sur tout les port....à tester.
Faut que j’intègre ça dans le marlin pour voir ce que ça donne, le but étant de contrôler que le ventilo hotend tourne bien et qu'il refroidit bien le heatbreak, si pas de retour le print est mis en pause!

Voila donc le petit bout de code réarrangé du FW Prusa pour que ça fonctionne seul:

Code:
int fan_edge_counter;
int fan_rpm;
#define FAN_PULSE_WIDTH_LIMIT ((SpeedFan > 100) ? 3 : 4) http://Marlin_main.cpp
int PinFan = 6;
int SpeedFan = 255;
unsigned long t_fan_rising_edge;
unsigned long timeold;

void setup() {
  pinMode(PinFan , OUTPUT);
     Serial.begin(9600);

http://Marlin_main.cpp
//INT7
  DDRE &= ~(1 << 7); //input pin
  PORTE &= ~(1 << 7); //no internal pull-up

  //start with sensing rising edge
  EICRB &= ~(1 << 6);
  EICRB |= (1 << 7);

  //enable INT7 interrupt
  EIMSK |= (1 << 7);
  
}
void loop(){
   analogWrite(PinFan,SpeedFan);

http://Temperature.cpp
if (fan_edge_counter >= 100){
  fan_rpm = 30*1000/(millis() - timeold)*fan_edge_counter; // Formule Playground Arduino
  timeold = millis();
  fan_edge_counter = 0;
  Serial.println(fan_rpm);
}

http://Serial.println(fan_edge_counter,DEC);
}
// The fan interrupt is triggered at maximum 325Hz (may be a bit more due to component tollerances),
// and it takes 4.24 us to process (the interrupt invocation overhead not taken into account).

http://Marlin_main.cpp
  ISR(INT7_vect) {
  //measuring speed now works for fanSpeed > 18 (approximately), which is sufficient because MIN_PRINT_FAN_SPEED is higher

  if ((1 << 6) & EICRB) { //interrupt was triggered by rising edge
    t_fan_rising_edge = millis();
  }
  else { //interrupt was triggered by falling edge
    if ((millis() - t_fan_rising_edge) >= FAN_PULSE_WIDTH_LIMIT) {//this pulse was from sensor and not from pwm
      fan_edge_counter += 1;
    }
  }
  EICRB ^= (1 << 6); //change edge
}

Si quelqu'un peut m'expliquer le 30/1000 de la formule
Code:
fan_rpm = 30*1000/(millis() - timeold)*fan_edge_counter;

Parce que pour moi la formule serait: on compte le nombre de tour fait (fan_edge_counter) depuis la dernière fois (timeold), on soustrait timeold par le "temps présent" (millis() ) ce qui nous donne le temps pour faire les tours, on multiplie par 60 (60 Secondes > 1 Minute (Rotation par Minute)) le nombre de tour fait que l'on divise par le temps mis pour les faires...un produit en croix.

Tour fait > en X temps
RPM?      > en 60 secondes

donc:
Code:
fan_rpm = (60*fan_edge_counter)/(millis() - timeold);

PS la formule Prusa et encore plus bizarre:
Code:
fan_speed = (fan_edge_counter* (float(250) / (millis() - extruder_autofan_last_check)))
Le float(250) ...???

Ben ça marche po !!!
avatar
Djam
très actif
très actif

Messages : 305
Points : 347
Date d'inscription : 03/04/2018
Age : 41
Localisation : Elsass

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  Tircown le Mar 7 Aoû 2018 - 19:25

Simple hypothèse pour la première formule le tachymètre "rise" 2x par révolution. Ça semble confirmé par une très rapide recherche google.
Donc pour clarifier on a fan_rpm = 60*1000/(millis() - timeold)*fan_edge_counter / 2;
Si t'as un ventilateur sous la main c'est très vite vérifié. Le *1000 étant bien sûr pour convertir les millisec en sec

Hypothèse encore, la formule Prusa ne donne pas un résultat en RPM. Il faudrait aller voir à quoi est comparé la variable fan_speed plus loin.

Edit:
Pour l'affichage sur l'écran ils multiplient fan_speed *60 pour afficher en RPM, donc fan_speed est en rev/sec (Marlin_main.cpp)
En fouinant un peu dans  on se rend compte que le compteur est incrémenté aux rising mais aussi aux falling, bref tout changement d'état, donc le diviseur n'est plus 2 mais 4. (temperature.cpp, ligne 2003 - 2005 de la version actuelle)
tldr: fan_speed en rev/sec et le 250 vient de 1000/4 (2x rising et 2x falling par révolution).


Dernière édition par Tircown le Mar 7 Aoû 2018 - 19:50, édité 2 fois (Raison : t)
avatar
Tircown
je prends du galon
je prends du galon

Messages : 72
Points : 74
Date d'inscription : 27/03/2018
Age : 30
Localisation : Alsace

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  Djam le Mar 7 Aoû 2018 - 20:16

Merci Tircown cheers ça à l'air de remonter des résultats plus que probant avec la formule :

Code:
fan_rpm = 60*(fan_edge_counter* (float(250) / (millis() - timeold)));
et fan_edge_counter en incrément de deux comme c'est de base, j'avais changé car j'avais un resultat à 4500 RPM à fond...

Bref ça fonctionne, test vite fait donc le ventilo à pas eu le temps de bien aller à fond avant les mesures...
Code:

PWM: 145
RPM: 1562
PWM: 155
RPM: 1643
PWM: 165
RPM: 1717
PWM: 175
RPM: 1790
PWM: 185
RPM: 1857
PWM: 195
RPM: 1927
PWM: 205
RPM: 1986
PWM: 215
RPM: 2045
PWM: 225
RPM: 2100
PWM: 235
RPM: 2162
PWM: 245
RPM: 2260
PWM: 255
RPM: 3894

Un grand merci, maintenant faut que je mette ça dans marlin et avoir le retour LCD et pauser le print si besoin
avatar
Djam
très actif
très actif

Messages : 305
Points : 347
Date d'inscription : 03/04/2018
Age : 41
Localisation : Elsass

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  nono30 le Mar 7 Aoû 2018 - 21:22

bsr, sur la MK3 quand tu veux contrôler directement le fonctionnement du ventilo, tu peux aller de 0 à 255.
avatar
nono30
complétement accro
complétement accro

Messages : 1785
Points : 1843
Date d'inscription : 17/07/2017
Age : 50
Localisation : nîmes

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  Djam le Mer 8 Aoû 2018 - 8:21

Salut Nono3030 vi mais bon y'a pas trop d'intérét à descendre le ventilo de refroidissement heatbreak à moins de 235 je pense, il ne doit plus trop étre efficace à cette vitesse.

Par contre vue que tu as une MK3, tu pourrais me donner la valeur des RPM ventilo Noctua pour 255 , 245 , 235 , 225 , 200 et 128 comme ça je pourrais comparer avec mes résultats et voir si ça coïncide.

@Tircown je doit avoir des soucis de vue, mais dans le code Prusa tu as trouvé trace de la remonté des comptes tours de l'autre ventilo? pas de trace de l'interruption 6 sur lequel est branché le second ventilo et à part le calcul du fan_edge_counter[0] je le voit pas ailleurs ???
avatar
Djam
très actif
très actif

Messages : 305
Points : 347
Date d'inscription : 03/04/2018
Age : 41
Localisation : Elsass

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  Tircown le Mer 8 Aoû 2018 - 19:20

Content d'avoir pu t'aider.

Toujours pour la version actuelle sur le githud de Prusa-firmware:
Seul le pins_Einsy_1_0.h défini le pin pour TACH_1 (pour le second ventilo). pins_RAMBO_1_0.h et pins_RAMBO_1_3.h ne l'ont pas.

Par défaut, le traitement autour de TACH_1 est "comment out", c-à-d présent mais désactivé par mise en commentaire. Ça se situe ligne 2007-2010 de temperature.cpp
Normalement, pour activer tout ça, il suffit de définir TACH_1 et décommenter ces lignes 2007 à 2010. Tout le reste du code est fonctionnel et vérifie simplement que TACH_1 est défini.

Ensuite pour ta vérification de bon fonctionnement, je pense que tu veux trop bien faire.
Prusa-firmware se contente de vérifier que trèèèèèèèès grossièrement les retours:

  • Coldend: si pendant 5sec le tachymètre n'a rien renvoyé et si la température de la buse a dépassé EXTRUDER_AUTO_FAN_TEMPERATURE (=50°)
  • Pièce: si pendant 15sec le tachymètre n'a rien renvoyé et si il avait pour consigne de tourner plus vite que sa vitesse min configurée MIN_PRINT_FAN_SPEED (=75)

références: temperature.cpp ligne 731, 494, 498 - variants/1_75mm_MK[...].h pour les valeur de ces constantes

Pour faire des recherches très rapidement dans plusieurs fichiers tu peux utiliser notepad++ et la fonction de recherche dans les sous-dossiers; ou me demander ce dont tu as besoin, c'est un plaisir Very Happy
avatar
Tircown
je prends du galon
je prends du galon

Messages : 72
Points : 74
Date d'inscription : 27/03/2018
Age : 30
Localisation : Alsace

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  Djam le Mer 8 Aoû 2018 - 20:37

Salut Tircown, merci de ton aide fortement appréciable !

Je crois qu'on se perd un peu dans le code.....On va récapituler:

voila les connecteurs J4 et J5 de la carte einsy



   J4 servant pour le ventilo qui sert à refroidir les pièces et qui est relié à l'interruption 7 de la carte donc le Tach_1, pin 80 relié à l'interruption 7 sur le 2560.

   J5 servant lui pour le noctua qui refroidit le heatbreak et qui est relié à l'interruption 6 de la carte donc la Tach_0 , pin 79 relié à l'interruption 6 sur le 2560.

Donc le bout de code que j'essaye de faire fonctionner sur le marlin (et qui fonctionne à la base grace à toi) se porte sur le Tach_1 puisque c'est à l'interruption 7 qu'il est relié.

Ma question porte sur l'interruption 6 qui elle est relié à J5 donc le Tach_0, là ou est relié le noctua sur une MK3.
C'est donc la valeur de fan_speed[0] que je ne comprends pas dans le FW, je vois le calcul des RPM mais d'ou sort la valeur &unscoped_q=fan_edge_counter[0]]fan_edge_counter[0] si il n'y a pas d'interruption qui calcul le falling et rising?....

Ou alors j'ai rien compris, mais bon j'ai pas la même analyse|expérience que tu as, je me débrouille un peu en code avec un arduino (avec des codes que je fais pour moi), analyser un FW en entier c'est peut étre un peu trop pour moi...
Mais je lache pas l'affaire ^^

Ensuite pour ta vérification de bon fonctionnement, je pense que tu veux trop bien faire.
Prusa-firmware se contente de vérifier que trèèèèèèèès grossièrement les retours:


Coldend: si pendant 5sec le tachymètre n'a rien renvoyé et si la température de la buse a dépassé EXTRUDER_AUTO_FAN_TEMPERATURE (=50°)
Pièce: si pendant 15sec le tachymètre n'a rien renvoyé et si il avait pour consigne de tourner plus vite que sa vitesse min configurée MIN_PRINT_FAN_SPEED (=75)

Oui je sais mais là c'est plus une question de pourquoi ça fonctionne pas comme je l'attends...c'est plus pour ma cultivation na moi que pour autre chose...et la question du moment c'est méme plus les RPM sur le Tach_1 mais la question du tach_0 Wink , les RPM tu as mis pile le doigt dessus Wink
avatar
Djam
très actif
très actif

Messages : 305
Points : 347
Date d'inscription : 03/04/2018
Age : 41
Localisation : Elsass

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  Tircown le Mer 8 Aoû 2018 - 22:40

Bon j'avoue être dépassé également pour cette partie mais de ce que je comprend:
line 1097: // Use timer0 for temperature measurement
line 1098: // Interleave temperature interrupt with millies interrupt
line 1099: OCR0B = 128;
line 1100: TIMSK0 |= (1<...
line 1574:ISR(TIMER0_COMPB_vect){
Revient à faire un attachInterrupt avec timer.
Pour les détails: https://courses.cs.washington.edu/courses/csep567/10wi/lectures/Lecture7.pdf
Même avec la doc ça reste du chinois pour moi scratch

Dans cet appel périodique (à priori toutes les 15ms) check_fans() est appelé et incrémente le compteur à chaque changement d'état de la broche.
Rappel: par défaut ça ne le fait que pour TACH_0, la partie TACH_1 est commentée.

A moindre fréquence, c-à-d environ toutes les secondes (voir ligne 731) sont appelés countFanSpeed() et checkFanSpeed().
La première calcule la vitesse en rev/sec et réinitialise les compteurs. La seconde effectue les contrôles sur la vitesse.

Par contre FAN1 n'est régulé en PWM. Il est simplement mis en HIGH lorsque EXTRUDER_0_AUTO_FAN_PIN (=pin Cool est défini.
avatar
Tircown
je prends du galon
je prends du galon

Messages : 72
Points : 74
Date d'inscription : 27/03/2018
Age : 30
Localisation : Alsace

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  Djam le Mer 8 Aoû 2018 - 23:05

Merci des infos je vais creuser un peu demain


Dernière édition par Djam le Jeu 9 Aoû 2018 - 20:30, édité 1 fois
avatar
Djam
très actif
très actif

Messages : 305
Points : 347
Date d'inscription : 03/04/2018
Age : 41
Localisation : Elsass

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  Djam le Jeu 9 Aoû 2018 - 20:29

Salut ici, bon il s'avére que le calcul est fait tout bêtement il regarde juste le changement d'état de la broche du TACH_0
ça revient en gros à faire le calcul comme sur le site arduino, qui ne remonte pas les bons compte tours quand on fait varier le PWM, en gros ça monte au lieu de descendre.
Comme tu l'as souligné ça doit pas poser de soucis puisque ce ventilo doit tourner en continu à fond...
Je vais quand même essayé de mettre en route l'interruption 6 sur le TACH_0 , histoire de ...

Code:
void check_fans() {
   if (READ(TACH_0) != fan_state[0]) {
      fan_edge_counter[0] ++;
      fan_state[0] = !fan_state[0];
}

Merci de m'avoir aiguillé Tircown et surtout merci de l'astuce de recherche avec notepad++, la recherche sur le Git te remontes pas vraiment tout !!
avatar
Djam
très actif
très actif

Messages : 305
Points : 347
Date d'inscription : 03/04/2018
Age : 41
Localisation : Elsass

Revenir en haut Aller en bas

Re: Carte Einsy Rambo

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 2 Précédent  1, 2

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum