Audiyofan.org http://www.audiyofan.org/forum/ |
|
Allumage électronique cartographique avec USB ou Bluetooth http://www.audiyofan.org/forum/viewtopic.php?f=71&t=9221 |
Page 3 sur 9 |
Auteur: | Totof [ Sam 10 Jan 2015, 13:22 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonjour à tous Merci Vapkse pour l'explication , Ok en fait ce "protocole" sera sûrement intéressant pour le testeur de tube Ce matin j'ai tester mon proto sur le banc Souriau , pour la vitesse c'est nickel et il ne me reste qu'a améliorer l'ergonomie du compteur pour ressembler à un compteur "Panhard" Pour la dépression c'est presque bon , la conversion des données reçu par le capteur et leurs exploitation demande quelques ajustements encore pour coller aux valeurs attendues Quelques images Fichier(s) joint(s): aepc_PCB_bancdetest1.JPG [ 695.31 Kio | Vu 6473 fois ] Fichier(s) joint(s): aepc_PCB_bancdetest2.JPG [ 518.31 Kio | Vu 6473 fois ] Encore du boulot mais ça commence à ressemblé à ce qui est rechercher il me faut maintenant vérifier les valeurs que le µc calcule et exporte sur le port série avec ce qui est attendu par rapport aux courbes To be continued |
Auteur: | Totof [ Dim 11 Jan 2015, 20:22 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonsoir à tous Après vérification rapide des données récoltées, ça ne collais pas avec les courbes et le point fautif était les valeurs calculé par le µc dans le tableau initial , en fait c'est écrit clairement dans la référence Arduino, mais pour calculé les coefficients de l'équation d'une droite dont la formule générique est y = mx+b ou m = (y2-y1)/(x2-x1) ont a besoin de divisé 2 nombres et la Arduino est galère La pente de mes segments de droite était égale à 0 au lieu de 0.00422413 par exemple pour (20.5-15.6)/(1700-540) ou dans Y = aX avec a=0 donnait une droite horizontal au lieu d'une pente De base 9/4 donne 2 et non pas 2.25 donc pour corriger le soucis il faut faire appel aux float la division devient 9/float(4) et donne bien 2.25 , ça pourrait servir Le code complet de mon tableau qui maintenant donne les bonne valeurs Code: volatile int Advance[11]= {156,156,205,210,216,223,226,231,233,234,234 }; // en 1/10 de degrés d'avance allumeur à partir de 0 T/min,soit avec l'avance statique]; volatile int Speed[11] = {0,540,1700,1800,1900,2000,2040,2080,2100,3000,3500 }; // Vitesse de rotation en tour allumeur; volatile float slope[11]; volatile float intercept[11]; volatile unsigned long RPMS[MAX_INDEX]; volatile unsigned long DELAYDEP[MAX_INDEX]; volatile unsigned long DELAYS[MAX_INDEX]; /// Construction du tableau des délais au départ de la vitesse de rotation et des valeurs d'avance /// La ligne rouge est MAX_RPM void calculateArrayValues() { float startRPM = MIN_RPM; // Usage d'un double pour accroitre la précision des calculs int staticAdvance = 156; // 4.5 dents d'avance statique côté volant moteur à partir de 0 T/min X10 pour avoir un entier // degrés à convertir en degrés allumeur ( 104 dents pour 360°), (360/104)*4.5 int CALC_RPM = 0; // Pour créer le tableau int hallAdvance = 180; // On assimile le position du capteur de rotation à 180° du point mort haut for(int x = 1; x <=11; x++) { slope[x] = abs(Advance[x] - Advance[x-1])/float((Speed[x] - Speed[x-1])*10); // La fonction pour calculer l'avance linéaire est y = mx+b ou m = (y2-y1)/(x2-x1) intercept[x] = (Advance[x-1]*0.1)-((Speed[x-1]*slope[x])); // Calcule la valeur de b d'après la formule précédente CALC_RPM = Speed[x-1]; // Construis le tableau avec un pas de 20 T/min for(int i = (Speed[x-1]/STEP_RPM); i < (Speed[x]/STEP_RPM); i++) { float usPerDegree = 60000000 / CALC_RPM / 360; // 60000000 car tour allumeur float advance = 0; advance = (CALC_RPM * slope[x]) + intercept[x]; // Utilise notre fonction pour calculer l'avance unsigned long advanceDelay; advanceDelay = ((hallAdvance - advance) * usPerDegree) - DWELL - code_delay ; //calcule le temps a appliquer (delai) entre le signal et l'étincelle RPMS[i] = usPerDegree * 180;// * 180 car essai avec tete de delco DELAYS[i] = advanceDelay; DELAYDEP[i] = usPerDegree; // Lorsqu'on est sur une vitesse de rotation, on multiplie le délai par degré par le "mappage" de la valeur du capteur CALC_RPM += STEP_RPM; // Incrémente de 10 T/min à chaque itération } } } Si ça peut servir Du coup l'extraction des données calculées par le µc introduite dans une feuilles Libreoffice permet de vérifier la courbe et sa conformité avec l'originale Fichier(s) joint(s): AC_4114A.JPG [ 454.6 Kio | Vu 6464 fois ] La version sans l'avance statique plus facile à lire Fichier(s) joint(s): Courbe_allumeurAC4114A_M8N_Atmega32U4.png [ 21.27 Kio | Vu 6464 fois ] Celle des valeurs dans le tableau dans la mémoire du µc Fichier(s) joint(s): Courbe_allumeurAC4114A_M8N_avancestatique_Atmega32U4.png [ 20.57 Kio | Vu 6464 fois ] Enfin le dossier avec les fichiers ino et la feuilles Libreoffice pour les curieux Fichier(s) joint(s): Voilà un weekend hyperchargé et plein de réjouissance Bon appétit |
Auteur: | Totof [ Sam 17 Jan 2015, 22:58 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonsoir à tous ce matin fut riche d'enseignements D'abord suite à la vérification de l'adéquation du délai pratiqué vs le délai préalablement calculé et issu du tableau on sait rendu compte d'une erreur grossière En gros pour les faibles vitesses de rotation le délai réel possédait une erreur négative ( moins d'avance ), à moyenne vitesse une erreur contenue ( proche de zéro ) alors qu'a haute vitesse l'erreur devenait positive ( plus d'avance ) Donc l'erreur était grosso modo croissante alors que les délais en µs était décroissant avec la vitesse qui augmente Ces deux effets contraire était assez perturbateur . J'ai donc décortiqué le code et mesurer fonction par fonction les délais de boucle ou process et trouvé le coupable, dans la fonction ci-dessous qui parcourt le tableau de manière croissante et posait le soucis de timing rencontré ce matin. Code: //-------------------------------------------- Function to map the engine rpm to value for the array element --------------------------------------------// int decode_rpm(int rpm_){ map_rpm = 1; if(elapsedtime > RPMS[MAX_INDEX]) // On ne dépasse pas la ligne rouge, on peut émettre une étincelle { if(elapsedtime < RPMS[1]) // Le délai est plus petit que le premier délai du tableau, donc vitesse supérieure à "startRPM" { while((elapsedtime*1.1) < RPMS[map_rpm]) // Incrémentation de la vitesse { map_rpm++; // Saute au prochain index dans le tableaau } } } //Serial.println(map_rpm); return map_rpm; } En effet à basse vitesse la routine qui commence à incrémenter la vitesse pour trouvé le délai, part de l'index [1] si la vitesse lue est plus haute il incrémente de 1, donc pour une vitesse égale à l'index 10 soit 200 T/min allumeur, il incrémente 9 fois et prend un certain temps mesuré à 210 µs par ma routine de vérification hors à 800 T/min elle passe à 774 µs, car il faut incrémenter 99 fois depuis l'index [1]. J'en conclu donc qu'a basse vitesse le délai de parcour du tableau prend moins de temps qu'a haute vitesse, ce qui est l'inverse du temps de délais avant étincelle stocké en mémoire dans le µc, Vous me direz alors pourquoi ne pas incrémenter ou décrémenter pour ne pas parcourrir le tableau du début à chaque fois. Si le moteur s'arrête ou que le µc perd une impulsion d'entrée et vu le moyennage de la vitesse cela rendrait le temps de cette routine aléatoire et assez imprévisible. J'ai donc décidé de corriger ce soucis en enlevant du délai final le temps de cette conversion, comme on a vu que ce délai erronné ce matin tendais vers 2 ms, j'ai simplement modifié ma fonction de temporisation pour en tenir compte. Ca donne ceci Code: /// Si on capte un signal sur l'entrée on récupère le délai et on actionne la bobine. void loop() { if (triggered){ start_times = micros(); triggered = false; decode_rpm(elapsedtime); finaldelay = (DELAYS[map_rpm]) - (cmap_pressure * (DELAYDEP[map_rpm])); // cmap_pressure correspond à la valeur de dépression en degré lue au tour précédent stop_times = micros(); conversiontime = (stop_times - start_times) - 50; // temps moyen d'écart avec la consigne "DELAYS[map_rpm]" de 20 µs milli_delay = ((finaldelay/1000)-2); micro_delay = (finaldelay-(milli_delay*1000))-conversiontime; // -conversiontime pour corriger les erreurs de sommations du temps des différentes lecture et calculs delay(milli_delay); // Currently, the largest value that will produce an accurate delay is 16383 µs delayMicroseconds(micro_delay); // Currently, the largest value that will produce an accurate delay is 16383 µs dwellAndFire(COIL1); read_pressure (); decode_pressure(map_pressure_kpa); Serial.print("V"); Serial.print(","); Serial.print(engine_rpm_average); Serial.print(","); Serial.print(cmap_pressure); Serial.print(","); Serial.print(DELAYS[map_rpm]); Serial.print(","); Serial.print(DELAYDEP[map_rpm]); Serial.print(","); Serial.print(conversiontime); Serial.println(","); } } Les lignes start_times et stop_times permettent de mesurer ce timing variable et ainsi de corrigé la dérive. C'était un peu long, mais ça devrait en amuser certains :-) ou aider d'autres et moi même pour de prochain projets Côté IHM , j'ai complèté le décorum Fichier(s) joint(s): aecp_ihm.png [ 195.24 Kio | Vu 6448 fois ] Les cercles servent à afficher les valeurs tandis que les rectangles affichent sous forme de graphique les fenêtres attendues pour les courbes qui s'y affiche en dynamique en suivant les informations de données venant de l'Atmega32U4 Bref Processing ets un très bon outil assez facile à utiliser car très bien documenté et surtout multi-Os d'ailleurs je vais tester cette IHM sous Win8 sur le laptop de mon fils pour voir Les fichiers à jour Edit du 25/01/2015 Les dossiers concernant les fichiers sont mis à jour avec les dernières modifications Fichier(s) joint(s): Fichier(s) joint(s): Fichier(s) joint(s): Fichier(s) joint(s): A + |
Auteur: | Totof [ Sam 24 Jan 2015, 18:09 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonsoir à tous ce matin j'ai validé mes modifications de code sur la partie Arduino avec une modification importante à savoir le parcour dans le tableaux des "timing" non plus dans un sens unique mais en incrémentant et décrémentant la valeur de l'index , l'instabilité constatée à disparu suite au passage du descriptif de la variable "index" de int à long , j'ai pas compris pourquoi mais du coup le parcours du tableau se fait dans les 2 sens et la vitesse de traitement s'en retrouve fortement diminuée et plus stable quelque soit la vitesse le code Code: //-------------------------------------------- Function to map the engine rpm to value for the array element --------------------------------------------// int decode_rpm(int rpm_){ if(elapsedtime > RPMS[MAX_INDEX]) // On ne dépasse pas la ligne rouge, on peut émettre une étincelle { if(elapsedtime < RPMS[1]) // Le délai est plus petit que le premier délai du tableau, donc vitesse supérieure à "startRPM" { if((elapsedtime*1.1) < RPMS[map_rpm]) // Incrémentation de la vitesse, avec un coefficient pour tomber bon dans le tableau { map_rpm++; // Saute au prochain index dans le tableaau } else if((elapsedtime*1.1) > RPMS[map_rpm]) // Décrémentation de la vitesse { map_rpm--; // Saute au prochain index dans le tableaau } } } //Serial.println(map_rpm); return map_rpm; } les tests ce matin sur le banc Souriau on confoirmé le bon fonctionnement du soft et de la carte elle même L'affichage sous processing facilite grandement la compréhension des résultats et nous a permis d'établir le prochain programme de contrôle qui aura lieu dans 15 jours, à savoir la mesure réelle sur le banc moteur de la dépression prise sur moteur fonctionnant L'IHM Fichier(s) joint(s): aecp_25012015_écran.png [ 192.42 Kio | Vu 6431 fois ] Du coup pour stocker tous mes fichiers j'ai créez un dossier sous onedrive accessible ici Bonne soirée à tous |
Auteur: | Totof [ Mar 10 Fév 2015, 10:08 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonjour à tous Il y a quelques temps que je n'avais pas donner de nouvelles En fait j'ai progresser dans l'apprentissage de Processing et j'ai commencer à jouer avec les datas sous forme de tableaux histoire de créer une aide à la sélection selon le modèle de voiture ou type de moteurs, de la bonne courbe d'allumeur Et c'est moins simple que de le dire Il m"a déjà fallu créer un tableau sous libreoffice reprenant les infos disponoble dans les documents d'époque, heureusement mes amis plus anciens ont une excellente mémoires et une bonne documentation, ce n'est pas encore parfait mais le but est proche D'abord l'ihm a été testé sur un laptop 15" avec win8 donc j'ai réduit l'affichage à 1350 x 690 px on y remarque les quelques modif ainsi qu'une liste déroulante qui permet d'afficher les "bornage' de différente courbes d'allumeurs Fichier(s) joint(s): aecp.png [ 213 Kio | Vu 6413 fois ] J'ai ensuite senti le besoin de créer cette aide pour sélectionner sa courbe et donc créer une fenêtre qui s'ouvre sur un click de bouton et qui affiche un tableau dynamique avec un tri qui s'oppère par sélection d'option et liste déroulante Cela permet de cibler sa recherche Fichier(s) joint(s): aecp_processing1.png [ 403.45 Kio | Vu 6404 fois ] Selon son critère on peut aussi visualiser les différents montages Fichier(s) joint(s): aecp_processing2.png [ 419.24 Kio | Vu 6404 fois ] J'ai aussi ajouté l'avance statique en milieu de tableau car c'est une info utile Fichier(s) joint(s): aecp_processing3.png [ 339.6 Kio | Vu 6404 fois ] Voilà pour l'état actuel du biniou et c'est pas fini comme dirait la pub, c'est encore perfectible à souhait Bonne journée Edit du 14/02/2015 J'ai peauffiné l'IHM et l'écran de sélection voici donc les nouvelles captures la principale modif est l'apparition de l'année des véhicules Work in progress |
Auteur: | Totof [ Jeu 26 Mar 2015, 19:58 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonsoir à tous J'ai mis à jour mon dossier Onedrive et Github avec la dernière version software de L'IHM et les sources du codes sous Arduino avec les 4 courbes d'allumeur pour Panhard en notre pocession elles sont légèrement modifiée pour tenir compte de l'essence moderne Le Onedrive est ici Et le Github là Ce weekend, normalement on va pouvoir enfin tester la dépression sur le moteur , car les dernières pluies et emploi du temps chargé nous ont fait prendre du retard Bonne soirée |
Auteur: | Totof [ Sam 04 Avr 2015, 12:28 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonjour à tous Ce matin le moteur à poussé ses premiers cris en autonome avec la carte de l'allumage électronique Donc la carte fonctionne dans sa partie "hardware" , maintenant on va pouvoir travailler le côté software car là il y a du travail pour arriver à nos désirs inavouables. Déjà un gros point à modifier et éclaircir est le moyennage des mesures tant au niveau vitesse de rotation que mesure de la dépression , ça ne conviens pas dans la pratique , soit le nombre d'échantillon est trop grand soit l'initialisation du tableau de stockage des échantillons ne permet pas une bonne "adéquation" au démarrage du moteur , simplement dit il ne démarre pas au 1/4 de tour à cause de dito, mais plutôt à la dixième mesure Pour la dépression c'est une autre histoire, on ne sais pas quoi penser sur ce qui a été vu,car c'est du super rapide et presque du tout ou rien, faudra que je me crée un fichier log pour analyser ultérieurement les résultats mais je pense aussi pour bien analyser les choses virer ( momentanément ) le moyennage des mesures Prochaine étape donc, faire un .ino avec la même base mais sans moyennage des mesures pour analyser correctement le fonctionnement moteur Ensuite voire si la vitesse du µc permet de réduire l'écart entre la capture du signal et l'émission de l'étincelle comprenant tout les caluls de 180° actuel à 90° avant le PMH en tour moteur , bien sûr faut que ça laisse le temps au µc de faire les calculs. To be continued slowly Bon appétit à tous |
Auteur: | vapkse [ Sam 04 Avr 2015, 12:45 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Salut Totof. Si jamais le onedrive n'est pas accessible. Pour le moyenage, tu peux le faire en une ligne sans tableau. Regarde ici ligne 824 https://dl.dropboxusercontent.com/u/31629593/forums/GU19PP/GU19.ino Le principe est de stocker que la mesure moyenne, et de la faire évoluer qu'avec une nouvelle mesure divisée par un facteur. Plus le facteur est grand, plus ça moyenne. Avec un facteur de 1, ça ne moyenne rien. moyenne += (moyenne - mesure) / facteur; |
Auteur: | Totof [ Sam 04 Avr 2015, 12:47 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonjour Serge Merci Je jette un oeil cet après midi , là je vais manger grillades Bon appétit |
Auteur: | vapkse [ Sam 04 Avr 2015, 14:10 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Oublié un détail. La moyenne doit être un float ou un double. Bon appetit |
Auteur: | Totof [ Sam 04 Avr 2015, 14:41 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Re Nickel comme formule, ça devrait me convenir, et aussi pour mon lampemètre pour moyenner Les mesures A plus |
Auteur: | vapkse [ Sam 04 Avr 2015, 14:44 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Surtout, la consommation de mémoire n'augmente pas en fonction du nombre de moyennage que tu désire effectué. Dans certains Atmel, il n'y en a pas beaucoup. |
Auteur: | Totof [ Dim 10 Jan 2016, 23:27 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonsoir les copains Ca faisait longtemps que je ne vous avait pas parlé de mon projet "Auto ancienne" et pour cause j'était en panne d'inspiration pour solutionner certains soucis , notament de test et vérification des données qui n'était pas satisfaisant jusque là, mais comme le dit la pub ça c'était avant Depuis on a réparé un banc Mohican 740 pour que je puisse jouer avec mon allumage à la maison en faisant tourné le biniou au vitesse allumeur réelle Après différents problèmes rencontrés et dont les solutions ont demandés moultes réflexions il a fallu revoir le code en profondeur du coup j'ai bossé pas mal sur mon allumage carto, surtout histoire de simplifier le code et de faire le test avec une bougie branchée sur l'alimentation 12 V incluse dans le banc Mohican 740 histoire de briser les écueils rencontrés avec cette saloperie de dépression Les grosses modifications sont un retour au fonctionnement avec une étincelle perdue en effet avec le capteur hall pas moyen de savoir sur quel cylindre on est a coup sûr, pour ce soucis une solution serait un capteur hall sur le volant moteur et 1 sur le delco qui ne servirait que de repère pour le cylindre 1 ensuite éradication du moyennage qui posait des soucis de bonne adéquation des délais Pour finir une refonte du tableau calculé de degré d'avance qui tien compte de facteur personnel ( essence moderne, moins d'avance centrifuge ) et d'une longue réflexion avec les collègues Panhardistes sur nos besoins réels Au final samedi prochain on devrait pouvoir essayer sur le banc moteur voir si en réel ça colle avec le résultat obtenu sur le banc Mohican Le résultat sur cette petite vidéo que j'ai rajouter au dossier du projet sous le nom "essai allumage carto" http://1drv.ms/15zfe5U Bon visionnage ;-) |
Auteur: | Totof [ Sam 30 Jan 2016, 17:18 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Bonsoir à tous Enfin il tourne comme on le souhaite Une petite vidéo ici capturée ce matin lors ne notre mise en route et une autre là de l'IHM under test in progress , trop courte malheureusement j'ai du appuyer sur stop trop vite sans m'en rendre compte Trop content que ça marche enfin , du coup semaine prochaine on va essayer plus en profondeur le biniou pour confirmer le programme et le montage avant de faire un essai monté dans une PL17 Plein de bon moment en perspective vont donc venir étoffer nos samedis matins mécaniques Une petite photo du banc moteur vue de l'arrière Fichier(s) joint(s): Essai au banc 2.JPG [ 743.13 Kio | Vu 6350 fois ] et vue de l'avant Fichier(s) joint(s): Essai au banc 1.JPG [ 533.95 Kio | Vu 6350 fois ] J'ai mis à jour sur Onedrive le code source sous arduino et sous processing visible dans ce dossier Bon visionnage |
Auteur: | Totof [ Sam 06 Fév 2016, 13:40 ] |
Sujet du message: | Re: Allumage électronique cartographique avec USB |
Hello a tous Ce matin autre séance de test et l'IHM en "Standalone" exporter de Processing fonctionne nickel sous Linux, le prochain coup (dans 15 jours) on fera un essai sous MAC et Windows Une petite vidéo visible ici On a vérifié de manière stroboscopique l'adéquation du montage et on obtiens bien à bas régime l'avance statique de 5 dents , donc le montage est fonctionnel , on a regardé plus en détail la dépression et le fonctionnement semble correct , résultat l'effet de la dépression est très "violent" sur le visu du cadran la totalité de la plage des 15° est entièrement parcourue lors de grosse ouverture du papillon To be continued dans 15 jours |
Page 3 sur 9 | Heures au format UTC + 1 heure |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |