Carte Einsy Rambo
+2
Rio31
Djam
6 participants
Page 2 sur 2
Page 2 sur 2 • 1, 2
Re: Carte Einsy Rambo
Je te remerci pour la solution mais j'avais un ruban LED de 24V qui trainait depuis pas mal de temps, ben elle traine plus
Pas de soucis avec PWM de la LED statut faut juste virer la LED pour avoir le résultat escompté, tout fonctionne comme attendu ^^, ça un fait un peu kéké tuning mais bon
Pas de soucis avec PWM de la LED statut faut juste virer la LED pour avoir le résultat escompté, tout fonctionne comme attendu ^^, ça un fait un peu kéké tuning mais bon
Djam- très actif
- Messages : 366
Date d'inscription : 03/04/2018
Re: Carte Einsy Rambo
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:
Si quelqu'un peut m'expliquer le 30/1000 de la formule
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:
PS la formule Prusa et encore plus bizarre:
Ben ça marche po !!!
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)))
Ben ça marche po !!!
Djam- très actif
- Messages : 366
Points : 426
Date d'inscription : 03/04/2018
Age : 47
Localisation : Elsass
Re: Carte Einsy Rambo
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).
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)
Tircown- je prends du galon
- Messages : 91
Points : 93
Date d'inscription : 27/03/2018
Age : 36
Localisation : Alsace
Re: Carte Einsy Rambo
Merci Tircown ça à l'air de remonter des résultats plus que probant avec la formule :
Bref ça fonctionne, test vite fait donc le ventilo à pas eu le temps de bien aller à fond avant les mesures...
Un grand merci, maintenant faut que je mette ça dans marlin et avoir le retour LCD et pauser le print si besoin
- Code:
fan_rpm = 60*(fan_edge_counter* (float(250) / (millis() - timeold)));
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
Djam- très actif
- Messages : 366
Points : 426
Date d'inscription : 03/04/2018
Age : 47
Localisation : Elsass
Re: Carte Einsy Rambo
bsr, sur la MK3 quand tu veux contrôler directement le fonctionnement du ventilo, tu peux aller de 0 à 255.
nono30- complétement accro
- Messages : 2215
Points : 2292
Date d'inscription : 17/07/2017
Age : 57
Localisation : Vercors
Re: Carte Einsy Rambo
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 ???
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 ???
Djam- très actif
- Messages : 366
Points : 426
Date d'inscription : 03/04/2018
Age : 47
Localisation : Elsass
Re: Carte Einsy Rambo
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:
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
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
Tircown- je prends du galon
- Messages : 91
Points : 93
Date d'inscription : 27/03/2018
Age : 36
Localisation : Alsace
Re: Carte Einsy Rambo
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 ^^
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 , les RPM tu as mis pile le doigt dessus
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 , les RPM tu as mis pile le doigt dessus
Djam- très actif
- Messages : 366
Points : 426
Date d'inscription : 03/04/2018
Age : 47
Localisation : Elsass
Re: Carte Einsy Rambo
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
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 est défini.
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
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 est défini.
Tircown- je prends du galon
- Messages : 91
Points : 93
Date d'inscription : 27/03/2018
Age : 36
Localisation : Alsace
Re: Carte Einsy Rambo
Merci des infos je vais creuser un peu demain
Dernière édition par Djam le Jeu 9 Aoû 2018 - 20:30, édité 1 fois
Djam- très actif
- Messages : 366
Points : 426
Date d'inscription : 03/04/2018
Age : 47
Localisation : Elsass
Re: Carte Einsy Rambo
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 ...
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 !!
ç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 !!
Djam- très actif
- Messages : 366
Points : 426
Date d'inscription : 03/04/2018
Age : 47
Localisation : Elsass
Page 2 sur 2 • 1, 2
Sujets similaires
» [Résolu] Estink Carte Mère de Carte Contrôleur Interface 5 Axes CNC Commande de Moteur Pas à Pas
» association carte laser corel à carte de puissance moteur
» cnc artisanal
» carte mémoire
» carte de controle MK4-ET
» association carte laser corel à carte de puissance moteur
» cnc artisanal
» carte mémoire
» carte de controle MK4-ET
Page 2 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum