Arduino Forum

International => Français => Réalisations et Projets Finis => Topic started by: bricofoy on Oct 06, 2012, 11:16 am

Title: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 06, 2012, 11:16 am
Bonjour à tous

Je suis en train de réaliser(enfin, d'essayer, en tout cas) une gestion automatique de groupe électrogène, qui devra permettre un démarrage du moteur sur commande externe à contact sec, commande interne par poussoir, surveiller le moteur (charge batterie, pression d'huile, température) et le couper si nécessaire et surveiller le temps de fonctionnement pour afficher un témoin "maintenance" si le délai entre entretiens est dépassé.

Il y a un certain nombre d'entrées tout ou rien permettant de lire les capteurs du moteur (pression d'huile, charge batterie, etc) et de sorties commandant des relais pour l'alimentation générale, le contact, le démarreur et le préchauffage.

Le fonctionnement général est géré par une machine à états. Le programme se compose finalement d'une boucle infinie qui effectue :
-lecture entrées
-passage par la machine à états qui détermine les sorties
-écritures sorties

Pour le moment, le programme est le suivant : (voir fichier joint)


J'aurais concernant ce code quelques questions, en particulier sur le stockage de valeurs "word" en eeprom. J'utilise  le code suivant, pour décomposer les word en deux bytes et les stocker/relire :

 
Code: (écriture) [Select]

EEPROM.write(adr_tpstotLSB,(byte)tpstot);
EEPROM.write(adr_tpstotMSB,(byte)(tpstot>>8));


pour son écriture, est-ce que la conversion (byte)valeur_en_word retourne bien comme je l'espère le byte LSB ?
et pour la seconde partie, avec une variable de type unsigned int, il ne devrait pas y avoir de problème de "sign extension" lors de >>8 ? et même si le cast (byte) retourne le byte LSB, si il y a un problème de sign extension, ça ne devrait pas interférer ?

Code: (lecture) [Select]

 tpstot = EEPROM.read(adr_tpstotMSB)<<8; //temps fonctionnement total depuis installation
 tpstot += EEPROM.read(adr_tpstotLSB);


ça, si j'ai bien compris le fonctionnement de <<, ça devrait marcher ?

le problème étant que pour le moment, le matériel n'est pas fabriqué, je peux donc difficilement tester le code en situation...

Concernant la machine à états, c'est la première fois que je me lance dans un codage de ce type, donc les remarques des gourous de la question (barbudor ? ) sont les bienvenues :)

Je donnerai bien sûr ici toutes les informations concernant les évolutions du projet, les schémas électriques, etc.




Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 06, 2012, 12:21 pm
Oui, ton code de décalage devrait fonctionner.

Pour mémoire :
- l'opérateur << décale les bits vers la gauche et insère à droite des 0
   Le comportement est le même que le nombre soit signé ou non signé : le bit de poids fort est perdu (il n'y a pas conservation du signe=
   Par exemple : 0x8001 << 1 = 0x0002

- l'opérateur >> décale les bits vers la gauche mais le comportement est différent si le nombre est signé ou non :

i) Sur un nombre signé, le signe (bit de poids fort) est conservé (duppliqué)
Code: [Select]
   int a = -32765; // == 0x8003
   int b = a >> 1;
   Serial.println( b ); // renvoie -16383 == 0xC001


ii) sur un nombre non signé, un zéro est inséré sur le bit de poids fort
Code: [Select]
   unsigned int a = 32771; // == 0x8003
   unsigned int b = a >> 1;
   Serial.println( b ); // renvoie 16385 == 0x4001



Sinon, pour ce qui est des automates, bienvenue dans la secte.
Pour recevoir la bénédiction du Grand Maître, il faut donner la moitié de son stock de composants XD

Des questions ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: fdufnews on Oct 06, 2012, 04:16 pm
Quote
- l'opérateur >> décale les bits vers la gauche mais le comportement est différent si le nombre est signé ou non

Le Grand Maître nous fait un petit coup de fatigue, il doit rendre 1/4 des composants qu'il a reçu

- l'opérateur >> décale les bits vers la droite mais le comportement est différent si le nombre est signé ou non
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: al1fch on Oct 06, 2012, 04:19 pm
Oui mais le Grand maïtre pourra peut etre doubler la donation initiale : une moitié pour Mealy, le reste pour Moore !! (sectes jumelles)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 06, 2012, 04:27 pm
Oui, oui, c'est la CSG : Contribution de Solidarité des Gurus.
Chaque Grand Maître doit reverser à sa secte mère de manière hierarchique.
Denis Ritchie nous ayant quitté l'année dernière, ca en fait une de moins à payer.
J'ai jamais cotisé à la secte de La Pomme Croquée mais je ne renie pas mon affiliation à Bill Gates : mon premier programme était sur un TRS-80 en Basic ... Microsoft !

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 07, 2012, 08:36 am

Oui, ton code de décalage devrait fonctionner.


ok pour les décalages. mais pour ce qui est du cast (byte)word, ça va bien me renvoyer l'octet de poids faible du word ?
ou faut-il employer byte(word) ? ça change quelquechose ?

Quote



Sinon, pour ce qui est des automates, bienvenue dans la secte.
Pour recevoir la bénédiction du Grand Maître, il faut donner la moitié de son stock de composants XD

Des questions ?

LOL

blague à part, tu cherches des composants en particulier ? j'ai un bon gros stock de trucs avec entre autre des 74LS***, des microcontroleurs anciens (Z80, 68000, etc)  et pas mal de composants passifs qui ne me servent pas à grand chose, si ça peut servir avant que ça tombe en désuétude...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 07, 2012, 10:06 am
Oui le cast (byte)word ne va prendre que l'octet de poids fort. Par exemple, il n'est pas nécessaire de faire (byte)(word & 0xFF).
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 07, 2012, 11:47 am
hu, poids fort ou faible ?

soyons clair, j'ai un doute sur ma compréhension des choses : si par exemple j'ai le word suivant :
word_A = b0011001100001111, j'ai bien 00110011 octet de poids fort, et 00001111 octet de poids faible, non ? ou c'est l'inverse ?

alors (byte)word_A == b00001111  ou b00110011 ?

je sais, j'ai du mal... et j'ai encore plus de mal avec l'hexa :P mes cours d'infos sont loin, loinnnnn.....
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 07, 2012, 12:05 pm

word_A = b0011001100001111, j'ai bien 00110011 octet de poids fort, et 00001111 octet de poids faible

Oui

Quote

alors (byte)word_A == b00001111  ou b00110011 ?

(byte)word_A == b00001111 
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 07, 2012, 12:29 pm
ok, donc il y a une erreur dans ta précédente réponse :


Oui le cast (byte)word ne va prendre que l'octet de poids fort. Par exemple, il n'est pas nécessaire de faire (byte)(word & 0xFF).


il fallait lire, si j'ai bien compris, "ne va prendre que l'octet de poids faible"

j'ai bon ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 07, 2012, 02:04 pm
Oui, oui, tu as raison
Je suis trop fatigué
Je dis n'importe quoi

:(=>[]
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 07, 2012, 02:25 pm
pas de soucis :)

je m'interroge sur l'opportunité de séparer ma machine à états en deux, une qui gère uniquement le fonctionnement du moteur, et une qui gère les entrées pour pouvoir simplifier les conditions de changement d'état.
Mais comme les deux seraient amenées à agir sur les mêmes sorties, je doute de la faisabilité de la chose. Ou alors je sépare mon registre de sorties en deux. Mais au final cela va t-il vraiment simplifier ? vu que du coup je vais me retrouver avec une machine dont les conditions de changement d'état dépendent de l'état de l'autre machine... oula non, en fait ça va pas le faire. Heu oui désolé je réfléchis en live, là
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 08, 2012, 10:39 pm
Nouvelle version du code (en pièce jointe), nettement plus complète. Normalement la machine à états est finie, à deux ou trois correction dans les conditions près.

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 08, 2012, 11:48 pm
J'aime bien ton code : define (au lieu de variables inutiles comme dans beaucoup d'exemples Arduino), machine d'état.
C'est dommage que tu n'ai pas une syntaxe différente pour les variables, les états, .. qui rendrait le code plus lisible.
Pour la packing des bits dans le BYTE, j'aurais utilisé des décalages plutot qu'une multiplication.

Tu sautes 2 échelons direct dans la secte des Adorateurs de la Machine d'Etat :)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 09, 2012, 10:58 am

J'aime bien ton code : define (au lieu de variables inutiles comme dans beaucoup d'exemples Arduino), machine d'état.

Merci :)
Quote

C'est dommage que tu n'ai pas une syntaxe différente pour les variables, les états, .. qui rendrait le code plus lisible.

Ben pourtant, j'ai justement essayé de faire un truc où les nom indiquent ce que ça représente, comme vet_** pour "valeur état ***", ve_** pour "valeur entrée **" etc etc

Tu verrais ça plutôt comment ?

Quote


Pour la packing des bits dans le BYTE, j'aurais utilisé des décalages plutot qu'une multiplication.


Heu, où donc ? J'utilise partout des additions, il me semble ?

Il n'y a que dans
Code: [Select]
void lecture_entrees() {
  // lecture des entrées, stockage dans une seule variable byte pour economiser de la ram et faciliter les manipulations
  entrees = ve_alim * digitalRead(e_alim);
  entrees += ve_ext * digitalRead(e_ext);
  entrees += ve_prh * digitalRead(e_prh);
  entrees += ve_run * digitalRead(e_run);
  entrees += ve_rst * digitalRead(e_rst);
  ubat = coef_ubat * analogRead(e_ubat);
  temps_courant = millis();
}


qu'il y a des multiplications, mais c'est une multiplication par 1 ou 0 de la constante à additionner ou non au registre. Donc au final, ça reste une addition :-D

Quote


Tu sautes 2 échelons direct dans la secte des Adorateurs de la Machine d'Etat :)



Ciel !  8)


Depuis que j'ai fait du grafcet au lycée et des réseaux de pétri en école d'ingé, j'aime bien les MET, au moins c'est pas (trop) le bordel dans les conditions.

Reste que pour la mise en oeuvre, j'ai comme d'habitude fait les choses à l'envers. En partant du codage "en live" au lieu de faire ma machine sur le papier avant.

Et du coup, j'ai une zone merdique autour des état et_decomp et et _demarreur, qui sont plus ou moins inter-dépendants, et mon état et_run qui regroupe en fait des sortes de sous-états puisque les sorties diffèrent selon certaines conditions...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 09, 2012, 01:52 pm

Quote

C'est dommage que tu n'ai pas une syntaxe différente pour les variables, les états, .. qui rendrait le code plus lisible.

Ben pourtant, j'ai justement essayé de faire un truc où les nom indiquent ce que ça représente, comme vet_** pour "valeur état ***", ve_** pour "valeur entrée **" etc etc

Tu verrais ça plutôt comment ?


Voici en gros mes choix a titre purement personnel :

Variable globale ou fonction globale : NomDeLaVariable ou NomDeLaFonction (majuscule sur le début de chaque mot)

Variable locale d'une fonction ou fonction locale d'un module ou fonction/variable membres d'une classe : nomDeLaVariable nomDeLaFonction (minuscule au début, majuscule début des autres mots)

Paramètre d'une fonction : _nomDeParamètre (comme une variable locale mais avec _ devant)

Types : NomDuType_t
Enums (j'utilise systématiquement des enums pour mes états) :
typdef enum {
  DEBUT,
  EN_COURS,
  ARRET
} EtatsMoteur_t;

EtatsMoteur_t EtatMoteur;

Ce sont des choix personnels, chacun fait fait fait c'qui lui plait plait plait XD

Quote

Il n'y a que dans
Code: [Select]
void lecture_entrees() {
  // lecture des entrées, stockage dans une seule variable byte pour economiser de la ram et faciliter les manipulations
  entrees = ve_alim * digitalRead(e_alim);
  entrees += ve_ext * digitalRead(e_ext);
  entrees += ve_prh * digitalRead(e_prh);
  entrees += ve_run * digitalRead(e_run);
  entrees += ve_rst * digitalRead(e_rst);
  ubat = coef_ubat * analogRead(e_ubat);
  temps_courant = millis();
}


qu'il y a des multiplications, mais c'est une multiplication par 1 ou 0 de la constante à additionner ou non au registre. Donc au final, ça reste une addition :-D



J'aurais écris :

Code: [Select]

  entrees = digitalRead(e_alim) << BIT_ALIM
             | digitalRead(e_ext) << BIT_EXT
             | digitalRead(e_prh) << BIT_PRH
             | digitalRead(e_run) << BIT_RUN
             | digitalRead(e_rst) << BIT_RST;


Encore question de goût.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 09, 2012, 03:46 pm
pour les variables : en effet, maintenant que tu le dis, j'ai quelques réminiscences de stage chez Motorola ou il y avait des convention de codage dans ce style... Pour une prochaine version je remettrai ça d'équerre.
Pour le type "enum" pour les états, j'avais prévu au départ de faire un truc comme ça, sauf que les cours d'infos sont loin, que j'ai pas trouvé rapidement d'exemples démonstratifs sur le net, et que c'est pas détaillé dans l'arduino référence.
Du coup, j'ai fait ce que je savais faire...

En plus là je stocke l'état dans un byte, soit me semble t'il la plus petite variable possible sur un arduino. Avec une enum, concrètement ça bouffe quoi comme place en mémoire ?
Bon ceci dit je suis je pense bien loin d'arriver au bout de la ram de la bestiole, mais bon...

pour la lecture des entrées, oui en effet maintenant que tu l'a écris, ça parait tout simple  :smiley-mr-green: mais les décalages, c'est nouveau pour moi, et ça ne me vient pas naturellement. Je suppose qu'en plus d'être plus clair, ton code est nettement plus rapide à l'execution, non ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 09, 2012, 11:00 pm
Quote
Avec une enum, concrètement ça bouffe quoi comme place en mémoire ?


Normalement un compilo bien élevé implémente l'énum dans la plus petite variable possible.
Donc ca devrait être un byte aussi.

Quote
ton code est nettement plus rapide à l'execution, non ?


Pareil, un compilo bien optimisé devrait savoir traduire automatiquement une multiplication par une puissance en un décalage.
Mais au cas ou... mieux vaut l'écrire comme cela ;)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 18, 2012, 02:01 am
Bon, ça progresse. Le code n'a guère évolué, mais il est nettement moins plein de bugs.
Et le hard a commencé à se profiler.

J'ai failli graver un premier PCB hier, et je me suis rendu compte in-extremis que mon design était trop grand et ne rentrait pas dans le boîtier... oui je sais, organisation, tout ça, blablabla.... :ouin:

Donc là je suis en train de rerouter la carte en plus petit...

Dommage, mon premier essai de transfert thermique d'impression laser sur le cuivre semblait bien réussi.
A ce sujet, pour ceux qui veulent se lancer dans l'aventure de la gravure low-cost, le papier glacé des pubs SNCF est PARFAIT pour faire ça :) :) c'est impressionnant, le toner se transfère intégralement sur la carte, et le papier se décolle de lui-même avec juste un peu d'eau bouillante :)

(http://sphotos-f.ak.fbcdn.net/hphotos-ak-prn1/550668_10151053889067130_1825817382_n.jpg)

(http://sphotos-a.ak.fbcdn.net/hphotos-ak-snc7/374166_10151054146732130_43471752_n.jpg)

(http://sphotos-a.ak.fbcdn.net/hphotos-ak-snc6/224430_10151054944312130_1359679012_n.jpg)

(http://sphotos-e.ak.fbcdn.net/hphotos-ak-ash3/524924_10151054944017130_1876382337_n.jpg)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 25, 2012, 10:37 am
ça progresse lentement, mais ça progresse !

un petit coup de gravure, avec un engin qui ne m'avait pas servi depuis 19ans !!
(http://sphotos-g.ak.fbcdn.net/hphotos-ak-prn1/155362_10151063518387130_1908843318_n.jpg)

la carte finalement gravée, nouvelle version (la première ne rentrait pas dans le boîtier !! la honte )
(http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/31028_10151063518632130_1055704352_n.jpg)

un petit coup de sérigraphie, ça présente quand même mieux :
(http://sphotos-f.ak.fbcdn.net/hphotos-ak-prn1/560647_10151063518787130_1288271784_n.jpg)

dessous aussi, et aussi étamage à froid :
(http://sphotos-d.ak.fbcdn.net/hphotos-ak-snc7/602458_10151064839792130_1082248957_n.jpg)

des p'tits trous, encore des p'tits trous...
(http://sphotos-c.ak.fbcdn.net/hphotos-ak-snc7/377385_10151063519122130_740066624_n.jpg)
(http://sphotos-e.ak.fbcdn.net/hphotos-ak-ash3/563989_10151063519292130_453914780_n.jpg)


mise en place des composants :
(http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash3/560787_10151064839847130_2068776934_n.jpg)

le merdier avec enfin tous les composants à leur place :
(http://sphotos-c.ak.fbcdn.net/hphotos-ak-ash3/561928_10151064839952130_1824835947_n.jpg)

et les premiers bugs physiques :
(http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash3/564807_10151065389637130_923701064_n.jpg)
forcément, les MOS avec D et S inversés, ça se polarise pas trop bien... :/


d'ailleurs à ce sujet, existe-il plusieurs brochages des 2n2222 en TO92 ? ceux que j'ai sur la carte ont collecteur et émetteur inversés par rapport à toutes les datasheet que j'ai pu trouver, j'ai pas vraiment compris...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 25, 2012, 08:48 pm
Sympa
bravo

Question : comment as tu fait la sérigraphie ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 25, 2012, 08:59 pm
comme pour le typon : transfer de toner au fer à repasser. Il faut une vielle imprimante laser sur laquelle on peut vraiment régler la densité sur "foncé" (sur les récentes que j'ai essayé, impossible d'avoir un résultat assez noir)

ensuite, le papier qui marche le mieux pour faire le transfert, c'est... le papier glacé des pubs SNCF !! j'ai essayé plein d'autres papiers, finalement comme je n'avais plus de pub, j'ai fait avec du papier couché, ça marche correctement, mais le papier est super ennuyeux à décoller.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Oct 26, 2012, 01:39 pm

comme pour le typon : transfer de toner au fer à repasser. Il faut une vielle imprimante laser sur laquelle on peut vraiment régler la densité sur "foncé" (sur les récentes que j'ai essayé, impossible d'avoir un résultat assez noir)

ensuite, le papier qui marche le mieux pour faire le transfert, c'est... le papier glacé des pubs SNCF !! j'ai essayé plein d'autres papiers, finalement comme je n'avais plus de pub, j'ai fait avec du papier couché, ça marche correctement, mais le papier est super ennuyeux à décoller.


Belle rea en DiY

simple reflexion en ce concerne la serigraphie :
autant apres finalisation/gravure du cuivre, le toner appliqué est évacué
autant en en application sur face compo  il reste (c'est d'ailleurs  le but  :smiley-mr-green:) , je ne suis pas sur qu'employer cette méthode ne soit pas source "de grouilles ou autres embrouilles"  8)

Compte tenu  des formulations des toner(s) (particules carbonées/conductrices/liants/etc...) c'est une "source" à ne pas negliger (rapide = amorçage en proximité sur du V )
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 26, 2012, 08:34 pm
Ben je me suis posé la question, et j'ai essayé avec mon testeur d'isolement : à 1000V une ligne de toner ne conduit pas.

Donc j'ai allègrement hachuré ma partie détection présence 220V coté cuivre :P Et test effectué, ça n'a pas cramé :)

Bon, il est 20h35, je termine juste de déboguer la carte et le code après 2 nuits blanches, je dois encore monter le merdier sur le groupe, et aller livrer et installer le tout...  Youpi !!
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 26, 2012, 08:51 pm
Une question quand même : quel intérêt à utiliser une Arduino mini/nano au lieu de mettre directement le chip sur la carte.
Vu le reste de ta carte, c'est quans même pas un paudre DIP28, 2 capas et 1 résistance qui t'on fait peeur ?
Ca revient quand même 2 fois plus cher que les composants tous seuls.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 28, 2012, 06:46 pm
par facilité. pour l'usb intégré, parceque je ne sais pas flasher un micro, etc etc etc et aussi parceque je ne me suis pas vraiment posé la question, en fait :P

Bon, cela dit, le résultat est très mitigé, voire catastrophique. La carte fonctionne parfaitement posée sur la table. Montée sur le groupe, c'est la déchéance : à la première tentative de démarrage, dès que le démarreur est activé, l'arduino reboote.

Il est minuit vendredi soir, je viens d'avoir le client au téléphone et de lui promettre que la machine serait chez lui dans une heure.
Oscillo, et, conclusion : il semble que la tension batterie tombe en dessous de 8V au moment de l'activation de démarreur, du coup le LM317 + le régul de l'arduino, ben ça fout la merde et ça reboote. Ajout d'une diode sur l'alim et d'un gros condo avant le LM317. ça semble résoudre le soucis. Pas longtemps. Ajout désespéré de 100nF de découplage un peu partout sur la carte, ok, le démarrage manuel passe.
Essai de démarrage commandé par l'entrée distante : le moteur démarre, mais se coupe aussitot. Et impossible de comprendre à quel moment le programme chie, car lorsque le câble usb est branché, tout fonctionne impeccable. Conclusion logique : l'USB apporte la stabilité de l'alim, et ça fonctionne. Ajout d'un gros condo sur le 5V, rien à faire, même résultat. C'est très étrange car dans ce cas, ce n'est pas la carte qui reboote, c'est vraiment le programme qui commande l'arret moteur et le passage en défaut. Et bien entendu, absolument impossible de savoir ce qui se passe, vu que dès l'USB est branché, ça marche. Par contre, impossible de suivre le déroulement du programme via l'usb : la liaison se réinitialise et change de tty/USBx dès l'activation de démarreur. Perturbation EM, je suppose, pourtant j'ai rajouté des condos de partout.
Du coup, en désespoir de cause à 3h du mat, je massacre une seconde nano dont j'avais de toutes manières cramé l'atmega (mais dont le FTDI fonctionne) en me disant que je vais m'en servir de convertisseur USB/série TTL pour voir ce qui se passe en me branchant direct sur masse/Tx/RX  de la nano en place sur la carte, mais non, rien, impossible ça ne communique pas. Et d'ailleurs je ne comprends pas bien pourquoi ?
Ce qui est étrange, c'est que quand j'active le log sur mon soft, l'arduino raconte plein de trucs, donc il envoie en ontinu des données. La led Tx de l'arduino est allumée, ok, mais si je débranche l'usb, couic, plus rien. Pourtant il balance toujours, vu que si je rebranche l'usb, ça se rallume, et en relançant la console série, je vois ce que ça balance (ha oui, j'ai viré le condo Cje sais plus combien, qui provoque le reset auto de l'arduino via le FTDI). Mais du coup impossible de voir ce qui est raconté sur le port série sans que l'usb ne soit branché, ce qui est un peu merdique.
Comment faire pour que ça marche ??

Bref, misère sur toute la ligne, finalement comme la démarrage manuel fonctionne à peu près à chaque fois, on livre le groupe chez le client samedi matin tout de même.

La je vais recevoir deux autre groupes à équiper, je vais donc pouvoir reprendre les essais. Et tu as raison, je vais sans doute utiliser direct un Atmega328 en boitier dil sur la carte, au moins je pourrai faire ce que je veux avec le port série...

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 28, 2012, 08:15 pm
Pour ton problème le mieux serait de pouvoir debugger sans apporter le 5V de l'USB puisque celui-ci améliore le résultat. Tu peux bricoler un câble USB avec Masse , D-, D+ sans le 5V. Ou bien enlever la schotky D1 sur la Nano.
Il faut aussi empêcher l'auto-reset en enlevant le condo C4.
Cela devrait permettre devoir ce qui se passe.

Je comprend pas :
Quote
Par contre, impossible de suivre le déroulement du programme via l'usb : la liaison se réinitialise et change de tty/USBx dès l'activation de démarreur


Pour l'ATMega328, ca s'achete pre-flashé avec le bootloader Arduino.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 28, 2012, 09:25 pm
.

le condo C4 il a déja viré, justement pour pouvoir débugger sans que ça reboote.

mais de toutes manières, je ne peux pas le faire, vu que même quand l'atmega ne reboote pas, le FTDI lui, si, et la liaison USB change de port com, du coup le temps de fermer la console, changer de port et la rouvrir, ben je ne sais pas ce qu'il s'est passé.

c'est pour ça que je voulais utiliser la partie USB de ma seconde nano grillée pour essayer d'avoir une liaison série stable et qui ne me ramène pas une alim, sauf que ça ne marche pas, ça donne l'impression que de débrancher la prise USB désactive la liaison série de l'atmega, j'avoue ne pas trop bien comprendre.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 28, 2012, 09:36 pm
Montage de la carte sur le groupe, ça avait l'air bien parti, vu comme ça...

(http://sphotos-h.ak.fbcdn.net/hphotos-ak-snc7/599186_10151070063362130_1452741731_n.jpg)

changement de la pompe à injection par une avec électrovanne pour pouvoir faire l'arret du moteur électriquement:
(http://sphotos-f.ak.fbcdn.net/hphotos-ak-prn1/545350_10151070062272130_384753076_n.jpg)

après bidouillages nocturnes et désespérés, des capas de filtrage et de découplage greffées de partout :

(http://sphotos-d.ak.fbcdn.net/hphotos-ak-ash3/548885_10151070063787130_709423534_n.jpg)

(http://sphotos-e.ak.fbcdn.net/hphotos-ak-prn1/59466_10151070064277130_481474319_n.jpg)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Grag38 on Oct 30, 2012, 12:40 pm
Quel est ce soft stp ?

(http://sphotos-a.ak.fbcdn.net/hphotos-ak-snc7/374166_10151054146732130_43471752_n.jpg)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: fdufnews on Oct 30, 2012, 12:54 pm
Quote
Quel est ce soft stp ?

A vue de nez je dirais Kicad
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Oct 30, 2012, 01:03 pm

Quel est ce soft stp ?

(http://sphotos-a.ak.fbcdn.net/hphotos-ak-snc7/374166_10151054146732130_43471752_n.jpg)

comme indiqué dans la barre d'adresse des hardcopy
c'est kicad
http://iut-tice.ujf-grenoble.fr/kicad/
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Grag38 on Oct 30, 2012, 02:23 pm
Merci ! Super en plus je suis de Grenoble, donc je télécharge du local ! Lol
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 30, 2012, 02:46 pm
KiCAD. C'est libre, ça tourne sous windows, linux et mac, et c'est impressionnant de facilité de prise en main et d'efficacité. Je n'avais jamais touché un soft de EDA avant ce projet, et juste avec le fichier d'aide fourni avec kicad je m'en suis sorti, c'est dire !

Tu le trouvera sur ce site web (version linux, native) :

http://www.kicad-pcb.org/display/KICAD/KiCad+EDA+Software+Suite

Et pour ce qui est des version windows ou mac, une recherche google te trouvera rapidement un installeur ;)


EDIT : bon bah grilled. au moins je donne le bon lien, c'est déjà ça :)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 30, 2012, 06:44 pm
Bon sinon pour savoir de quoi on parle, voila le schéma de mon système (fichier joint)
(il manque dessus les capas de découplage que j'ai rajouté un peu partout)

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 30, 2012, 07:32 pm
Y'a tout ?

j'ai du mal a comprendre ton circuit d'alim. Normal je ne sais pas exactement ce que tu cherches a faire.

mais je m'interroge quand même sur le relai de gauche.
Commandé par l'Arduino (s_alim) ? Comment l'Arduino peut-elle se mettre en route toute seule ?

Si je comprend bien Q5 et le relai amène l'alim sur le LM317 conduit si e_ext OU e_local OU s_alim est présent.

Tes reboot ne pourraient-ils pas être liés à des problèmes de ce coté là ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 30, 2012, 08:25 pm
oui, y'a tout sauf les capas que j'ai rajouté en live

alors l'alim, en fait, c'est simple : quand j'ai une demande de démarrage, que ce soit via l'entrée EXT (contact sec) ou LOCAL (contact sec entre +(borne 1) et local), alors via les diodes D6 ou D7 cela charge le condensateur C4, Ce qui crée un courant dans R8 qui rends positive la gate de Q5, le relais colle et alimente la carte. Ensuite l'arduino prends le relais et alimente direct la gate de Q5, provoquant l'auto-maintien de l'alim. C4 est là pour faire une temporisation le temps que l'arduino boote et alimente lui même Q5.
R9 sert à décharger C4  en l’absence de EXT ou LOCAL, pour que le système refoncionne à la prochaine demande.

Le but de ça, c'est que quand le système est en veille il se coupe totalement de la batterie pour ne pas la décharger inutilement, vu que cela peut être amené à rester en veille plusieurs semaines, voire mois.

J'ai ensuite un timout dans le programme, pour que si aucune nouvelle demande n'arrive, l'alim se coupe. En l'occurence après 2 minutes en fonctionnement normal, et 2h si il y a un défaut grave à afficher.

Et non, le reboot ne vient pas de là, enfin plus maintenant que j'ai rajouté un condo de 10000µ et une diode sur l'alim.

Maintenant, ce n'est plus l'arduino qui reboote mais juste le FTDI (ou en tout cas la liaison USB coupe) ce qui m'empèche de voir ce qui merde à ce moment précis.
Je pense que j'ai encore à ce moment des impulsions qui se baladent suite à l'amorçage de l'alternateur ou un truc comme ça, et que mes capas n'ont pas court-circuité, et qui me provoquent les soucis.

En plus comme le matériel est chez le client, pour le moment je ne peux plus faire de tests avant d'avoir réalisé une nouvelle carte et l'avoir montée sur un autre groupe...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 30, 2012, 10:57 pm
Je reposte ici le résumé de la situation que je viens d faire dans l'autre topic :

Bon alors il faut expliquer un peu à quoi sert tout ça : le but est d'avoir un fonctionnement automatique de groupe électrogène diesel. L'arduino doit donc sur demande externe (contact sec) faire démarrer le moteur, puis surveiller qu'il n'y a pas de défaut (calage, non démarrage, perte de pression d'huile) et réagir en conséquence.

Au départ, j'avais un reboot de l'arduino dès l'activation de démarreur Il s'est avéré que c'était dû à une grosse chute de tension de la batterie, ça s'est donc résolu par l'ajout d'une grosse capa (10 000µ) et d'une diode sur l'alim de la carte.
Ensuite, j'ai eu des détections farfelues au niveau des entrées, j'ai donc rajouté des capas de découplage un peu partout pour essayer de virer les pulses qui, je suppose, se baladent inopportunément, venant soit du démarreur, soit de l'alternateur de charge. Cela a semblé résoudre le problème, mais pas dans tous les cas.

Et c'est précisément le cas qui foire qui devrait être le mode le plus utilisé du système : la commande de démarrage externe.
Avec la commande locale, ça fonctionne (presque) à chaque fois.
Avec la commande externe, ça merde à chaque fois : le moteur démarre, puis l'arduino le coupe et signale "défaut calage" comme si le moteur avait calé de lui même. Comme le programme fonctionne quand je teste la carte sur le bureau avec des poussoirs pour simuler les capteurs, je suppose que le soucis vient du matériel et non du soft, mais je ne peux en être sur, pour une raison très claire :  quand la prise USB est raccordée sur la carte, d'une part, ça fonctionne (ce qui tendrait à suspecter un soucis sur l'alim, mais pourtant sa surveillance à l'oscillo ne laisse rien paraitre de suspect), et d'autre part : au moment ou sans l'USB, ça déconne, la liaison USB se réinitialise, et donc le temps de relancer la console sur le nouveau port, j'ai perdu le log qui me serait utile.

C'est ce décrochage de l'USB qui me fait dire "perturbations EM", mais sans doute suis-je à coté de la plaque.

J'ai du coup essayé d'utiliser le FTDI d'une autre nano grillée dont j'ai supprimé l'atmega comme convertisseur USB/TTL, que j'ai raccordé sur les pins TX, RX, et GND de la nano en place. Et bien rien, ça ne communique pas. http://arduino.cc/forum/index.php/topic,129661.0.html

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 30, 2012, 10:59 pm
Et voila le schéma avec cette fois les modifs faites en live en pleine nuit. Je me rends compte en le dessinant à tête reposée que les capas de découplage ne sont pas forcément aux endroits les plus critiques, il en manque sur les entrées par exemple. Mais bon, en pleine nuit après 2 nuits blanches...

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: B@tto on Oct 31, 2012, 09:16 am
Ok je crois que je vois un peu mieux. Y'a un une partie que je comprend pas vraiment, celle de gauche : le calage est bien détecté par cette partie (e_alim) ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 31, 2012, 09:26 am
non. le fonctionnement du moteur et donc le calage est détecté par e_run. Quand le moteur tourne, l'alternateur produit du 220V, et active l'optocoupleur.

e_alim, ça sert à détecter si l'interrupteur général est sur on ou pas, pour couper l'auto-maintien de l'alim.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: B@tto on Oct 31, 2012, 10:12 am
Ok alors je viens de reprendre ton code, bon y'a quelques points qui restent obsures pour moi mais je pense pas que ça vienne de la. Il me semble que ton code et ton hardware ne sont pas armés pour faire face à la mise en régime de l'alternateur : quand tu le mets en marche, l'laternateur ne va pas fournir directement du 230V 50hz, or ton circuit lisse le signal donc tu ne vois pas la fréquence. Il faudrait dans l'idéal ne pas le filtrer et rentrer sur un port digital, et faire en somme un système de détection de passage à zero. Ainsi tu pourrais suivre la phase transitoire.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 31, 2012, 10:34 am
Ben je ne vois pas en quoi cela poserait problème ? A partir d'un certain régime, la tension produite est suffisante pour activer l'optocoupleur, à partir de ce régime il n'y a plus de risque d'arret du moteur si le démarreur ne tourne plus, donc je coupe le démarreur.
En fait l'alternateur produit quasiment immédiatement du 230V mais c'est la fréquence qui augmente avec le régime moteur.
Le fait est que ça fonctionne parfaitement en mode "manuel" (démarrage depuis l'entré e_local) alors que ça ne foire que dans le cas du démarrage depuis l'entrée e_ext.

La seule différence entre ces deux entrées dans le code, c'est que l'entrée locale active un flag puis n'est plus lue, alors que l'entrée ext est lue tout le temps et que si elle tombe cela coupe le moteur. Mais dans ce cas ça ne devrait pas faire remonter un défaut de "calage moteur", ça devrait juste le couper puis redémarrer.

Du coup je me suis dit il y a peut-être une perturbation de l'entrée e_run qui me fait détecter un calage, alors j'ai rajouté une tempo sur cette détection de calage, ce qui n'a rien changé.

Je crois que tu n'avais pas la dernière version du code, je la joins à ce post. Attention, elle est passablement en vrac, c'est fruit de modifications dans tous les sens en désespoir de cause à des heures inavouables...

Sur la suggestion de barbudor, suis en train de re-dessiner une nouvelle carte en utilisant directement un atmega328 en boitier DIL, comme ça déjà je vais éliminer les soucis d'alimentation liés aux deux régulateurs en cascade, et le soucis de liaison série qui se perds, vu que j'utilisera alors un convertisseur USB/TTL externe.
Je crois que tant que ça n'est pas fait, il sera difficile de comprendre ce qui se passe, vu que je n'ai de toutes façons plus le matériel sous la main pour faire des essais.

En tout cas, merci de t'interresser à mon problème :)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Oct 31, 2012, 01:58 pm



Du coup je me suis dit il y a peut-être une perturbation de l'entrée e_run qui me fait détecter un calage, alors j'ai rajouté une tempo sur cette détection de calage, ce qui n'a rien changé.
...
Sur la suggestion de barbudor, suis en train de re-dessiner une nouvelle carte en utilisant directement un atmega328 en boitier DIL, comme ça déjà je vais éliminer les soucis d'alimentation liés aux deux régulateurs en cascade, et le soucis de liaison série qui se perds, vu que j'utilisera alors un convertisseur USB/TTL externe.
Je crois que tant que ça n'est pas fait, il sera difficile de comprendre ce qui se passe, vu que je n'ai de toutes façons plus le matériel sous la main pour faire des essais.



bonjour bricofoy
reprendre une conception que l'on pensait bien aboutie , même si c'est "intellectuellement" difficile  :smiley-mr-green: est souvent une bonne façon de reposer calmement les problemes et leurs resolutions, la suggestion de Barbudor dés lors que tu dispose de cette possibilité (intellectuelle et "matos dispo" est une excellente chose.

pour simple reflexion :
ce que tu appelle info de  "calage diesel" est une info  secondaire dérivée mécaniquement  mais pas  primaire  ?

tu ne "lis" pas la rotation de l'accouplement, mais tu déduis que la rotation  existe (moteur en etat "non calé" )parce que l'alternateur delivre "qq chose" ?


Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 31, 2012, 02:59 pm
Oui, exactement. Si le moteur tourne, l'alternateur débite. L'accouplement est direct, il n'y a pas de courroie ou de flector.

À partir du moment ou je ne détecte plus la tension, c'est que soit le moteur a calé, soit il tourne à trop bas régime car la panne sèche arrive, soit l'alternateur a cramé.

Dans les trois cas il convient de couper l'alimentation du moteur et de passer en erreur.

Sinon ma conception, c'était fait en une semaine je ne considère pas vraiment ça comme abouti :P
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: cannard on Oct 31, 2012, 03:04 pm

Oui, exactement. Si le moteur tourne, l'alternateur débite.

À partir du moment ou je ne détecte plus la tension, c'est que soit le moteur a calé, soit il tourne à trop bas régime car l'alimentation en carburant est défectueuse, soit l'alternateur a cramé.


soit il tourne à trop bas régime parce qu'il est entrain de démarrer ? ou l'opto-coupleur n'a pas encore commuté

j'aurais tendance de mettre une petite tempo sur un problème de ce genre...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Oct 31, 2012, 03:10 pm


Oui, exactement. Si le moteur tourne, l'alternateur débite.

À partir du moment ou je ne détecte plus la tension, c'est que soit le moteur a calé, soit il tourne à trop bas régime car l'alimentation en carburant est défectueuse, soit l'alternateur a cramé.


soit il tourne à trop bas régime parce qu'il est entrain de démarrer ? ou l'opto-coupleur n'a pas encore commuté

j'aurais tendance de mettre une petite tempo sur un problème de ce genre...


Non, car pour passer à l'état suivant et couper le démarreur, c'est que la détection de tension a déjà été faite.

Et oui il y a la tempo, de toutes manières. Je l'ai justement rajoutée quand j'ai constaté le soucis, sans succès.

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Oct 31, 2012, 06:03 pm
Je n'ai pas regardé le code mais dans ta reprise de carte/câblage, pense a bien repenser au propre le câblage des alims comme je te le suggérais dans l'autre topic : un seul point de masse et pour chaque alim, câblage en étoile.
Autant que possible bien séparer les parties logiques (Arduino) et puissance qui peuvent générer de forts courants et donc des parasites : alims séparées, et surtout câbles d'alims séparés.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 02, 2012, 10:34 am
Ben alims séparées, à part de ne pas mettre le relais de commande du démarreur sur la carte, je ne vois pas ce que je peux faire de plus ?
Pour le point de masse, c'est le moins batterie, repéré -batt sur la carte, qui donne sur un plan de masse. Est-ce que cette disposition n'est pas bonne ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Nov 02, 2012, 12:13 pm
J'ai peut être encore pas tout compris ton câblage
Pourrais tu faire un schéma du câblage externe à la carte ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 02, 2012, 07:55 pm
Voila le schéma.

Il manque la borne "C" (pour relier l'alternateur de charge batterie) sur le schéma de la carte, car je l'ai oubliée... en fait du coup je me suis branché sur la borne d'alim du relais de commande du décompresseur, vu que ce relais n'est pas monté sur la carte.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Nov 02, 2012, 08:50 pm
Dans les relais, y a t'il des courants forts ?

Si oui, l'ide qui me vient ca serait d'avoir 2 signaux +BATT :
- Un destiné à l'alim de la carte et qui va donc sur le circuit d'alim de la carte : bobine RL5 et et commun 2 de RL5 (broche 21)
- Un destiné au circuit des relais RL1..RL4 et qui rentrerait par un point de connecteur différent et qui n'alimentarait que les relais au niveau des fusibles.
Chaque entrée batterie serait relié à la batterie par un câble différent pour éviter que les courants forts qui traversent ces relais n'impactent l'alim de la carte.

C'est la seule idée que j'ai.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Nov 02, 2012, 09:09 pm
en complément de la suggestion de barbudor, je mettrais un tore ferrite au plus prés du point d'alim du MCU
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 03, 2012, 08:32 am
Merci de ces suggestions :)

Par contre, je ne sais pas à partir de quel niveau vous considérez ça comme "courants forts"... en l'occurence là qui passe par les relais, il y a l'alimentation de l'électrovanne de carburant, grand maxi 500mA, et l'alimentation du solénoïde du démarreur, environ 5A à vue de nez, à vrai dire je ne l'ai pas mesuré. C'est sans doute moins que ça.
Et dans certains cas il y aura un solénoïde de décompression (2A), et une bougie de préchauffage, là on sera plus proche des 15 ou 20A, mais 100% résistif, ce qui du coup ne devrait pas poser problème, non ?

Je pense que je vais aussi rajouter une diode de roue libre aux bornes du solénoïde du démarreur, ça ne pourra pas faire de mal.

Je m'étais même posé la question de commander tout ça directement via les IRF740 (ou IRF3205, bien plus costauds, j'en ai un stock aussi), sans utiliser de relais, mais alors je serai obligé de leur adjoindre des radiateurs, et comme je n'en avais pas, mais que j'avais un stock de relais...
D'après vous, la commande direct via les MOS, ça serait une mauvaise idée ?

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Nov 03, 2012, 10:03 am
Même 500mA commence a faire.
Ce n'est pas tant le courant max que l'établissement brutal qui - à mon avis - peut réjecter sur le reste du circuit.
Une fois établit, si le courant est constant ca ne devrait pas poser de problème du moment que les pistes sont dimensionnées pour (20A ca commence a faire pour des pistes de CI).
Même si la charge est purement résistive (pas d'effet inductance), les appels de courants au démarrage peuvent créer des perturbations.

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 03, 2012, 11:48 am
Ha ok.  Pourtant dans le solaire, j'ai l'habitude de trimballer des forts courants (pour le coup entre 20 et 80A, et des fois 100 à 300, donc ça commence à faire) sans que ça perturbe ce qu'il y a à coté. Curieux.

Pour les pistes du CI, celles qui doivent trimballer 20A, je soude un fil de cuivre de 2,5mm² sur tout le long.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Nov 03, 2012, 12:42 pm

Ha ok.  Pourtant dans le solaire, j'ai l'habitude de trimballer des forts courants (pour le coup entre 20 et 80A, et des fois 100 à 300, donc ça commence à faire) sans que ça perturbe ce qu'il y a à coté. Curieux.

Pour les pistes du CI, celles qui doivent trimballer 20A, je soude un fil de cuivre de 2,5mm² sur tout le long.


les contacts de relais sont plus susceptible en pouvoir de coupure en DC qu'en AC
l'etincelage/charbonage en DC est plus problematique qu'en AC où le zerocrossing contribue à l'etouffement d'etincelage lors du déplacement de l'equipage
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 03, 2012, 12:59 pm
Oui, mais là j'utilise des relais automobile, dont le pouvoir de coupure est au minimum de 30A, j'en suis bien loin !

Dans les installations solaires, quand on doit couper des courants forts, on utilise des relais mercure (une bille qui flotte sur du mercure et établi le contact).
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 15, 2012, 10:01 am
Nouvelle version de la carte, en essayant de tenir compte des avis donnés ici et par un ami ingénieur chez Airbus, intégrant les capas de découplage, les modifs de l'alim, et surtout l'atmega328 directement sur la carte, ce qui devrait résoudre les soucis avec l'USB.

(https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-snc6/602558_10151092969722130_1285179102_n.jpg)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Nov 15, 2012, 01:39 pm

Nouvelle version de la carte, en essayant de tenir compte des avis donnés ici et par un ami ingénieur chez Airbus, intégrant les capas de découplage, les modifs de l'alim, et surtout l'atmega328 directement sur la carte, ce qui devrait résoudre les soucis avec l'USB.



Bonjour Bricofoy
Je ne sais pas si tout tes problèmes seront solutionnés, mais "à l'oeil"  le PCB est agréable à regarder
et puisqu'un ingé aero  :smiley-mr-green: est intervenu
je plagie sans vergogne *
« Un beau PCB est un PCB  qui distribue bien. »

J'aurais juste une remarque sur ton gros condo de 10.000 implanté, quelle ESR ?

* « Un bel avion est un avion qui vole bien. »




Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 15, 2012, 03:50 pm
Je n'en sais rien, mais à la limite... je m'en fiche. Ce condo est là, avec la diode D8, pour suppléer à la batterie le temps que le démarreur se lance, car tant que le moteur est bloqué, il se comporte comme un court-circuit et la batterie tombe à 7 ou 8V, entraînant le reset de l'atmega... Comme il n'y a sur cette alim finalement que l'atmega (le truc du circuit qui consomme le plus, je crois que c'est la commande des 2222 qui pilotent les leds ), le courant consommé est très faible et je pense que du coup l'ESR importe peu.

le condo employé, c'est ça : https://radiospares-fr.rs-online.com/web/p/condensateurs-aluminium/7111214/

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Nov 15, 2012, 05:36 pm
Effectivement on a bien l'impression que la partie numérique et la partie puissance sont bien distincte.

Pour ce qui est des logs sur site, je suis tenté par faire un petit module enregistreur de log genre : https://www.sparkfun.com/products/9530
Une petite carte avec uP et carte SD ou EEPROM SPI/I2C pour stocker les logs d'une carte sur laquelle tu ne peux pas forcement intervenir/laisser un PC branché plusieurs jours.
Tu repasse de temps en temps relever les logs et hop
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 15, 2012, 05:48 pm
bof, là vu le système, si ça marche, c'est immédiatement visible. Enfin je veux dire ça ne devrait pas changer de comportement au cours du temps.

Le problème que j'avais avec la première version, c'était le reboot du FTDI qui m'empéchait de suivre justement le moment ou ça bugguait...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 16, 2012, 06:41 pm
La nouvelle carte quasiment finie :

(http://sphotos-c.ak.fbcdn.net/hphotos-ak-ash4/311128_10151094664142130_2099373955_n.jpg)

(http://sphotos-e.ak.fbcdn.net/hphotos-ak-ash4/319094_10151094664002130_2011563622_n.jpg)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Nov 17, 2012, 10:27 am
Cool
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Nov 17, 2012, 12:45 pm

La nouvelle carte quasiment finie :


bonjour bricofoy
belle rea
c'est quoi le fil bleu en "diagonale" (strap) , un impératif pour rester sur du routage 1 face ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Nov 17, 2012, 01:16 pm
c'est le mise à la masse des bobines des relais, pour ne pas passer par le plan de masse qui est en dessous. C'est pour écarter le passage du courant "puissance" (ça reste relatif, la puissance de 4 bobines, mais enfin) de la masse numérique, surtout vu que j'ai la masse du circuit résonnant du quartz qui est juste sur le trajet sinon.

c'est la mise en pratique des conseils trouvés ici et d'après mon pote d'airbus sur la séparation des alims et des masses :)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 06, 2012, 12:19 pm
Bon, aujourd'hui je me replonge dans le projet. Et là, c'est le drame : impossible de programmer l'atmega sur la nouvelle carte...

En fait sur ma carte, j'ai juste sorti sur un bornier les pins TX,RX et GND (les trois broches visibles sur la photo de la carte, à coté du poussoir reset), et sur ce bornier je viens brancher ma première nano dont j'ai grillé, puis dessoudé l'atmega. Cette carte est donc devenue un convertisseur USB/TTL puisqu'il ne reste dessus que le FTDI.

À priori cette bidouille fonctionne, puisque si je reboucle tx et rx, je reçois bien ce que j'envoie, et aussi si je connecte cette carte au port série de ma uno, je reçois bien ce qui transite. J'ai aussi fait des essais sur la nano avec software serial, ça communique dans les deux sens.

Donc, le convertisseur fonctionne. Jusque là, tout va bien.

Mais quand je branche ça sur ma carte maison, sur laquelle est monté un atmega neuf avec le bootloader (puce testé sur la uno, elle fonctionne), ben lorsque je fais "upload" ben... rien. Ça compile, j'appuie sur reset, il y a un moment d'attente et je reçois l'erreur suivante :
avrdude: stk500_getsync(): not in sync: resp=0xe0

le plus souvent la valeur à la fin du message est plutot 0x00

j'ai du coup essayé de flasher ma carte uno sur le même principe, puisque elle elle marche à coup sûr. Même résultat.

J'avoue que là, je sèche.

DU coup, je flashe l'atmega en le montant sur la uno, puis je le remet sur ma carte, mais c'est légèrement fastidieux, et je doute que les pins de la puce supportent très longtemps le traitement :/
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Dec 06, 2012, 01:51 pm

Bon, aujourd'hui je me replonge dans le projet. Et là, c'est le drame : impossible de programmer l'atmega sur la nouvelle carte...

En fait sur ma carte, j'ai juste sorti sur un bornier les pins TX,RX et GND (les trois broches visibles sur la photo de la carte, à coté du poussoir reset), et sur ce bornier je viens brancher ma première nano dont j'ai grillé, puis dessoudé l'atmega. Cette carte est donc devenue un convertisseur USB/TTL puisqu'il ne reste dessus que le FTDI.
...
DU coup, je flashe l'atmega en le montant sur la uno, puis je le remet sur ma carte, mais c'est légèrement fastidieux, et je doute que les pins de la puce supportent très longtemps le traitement :/

Bonjour bricofoy
Sans que ça réponde directement à ta question :
J'ai une carte uno, constat le 8U32 a "morflé"
j'ai essayé de programmer le 328  en utilisant RXD/TXD au travers d'un adaptateur USB<--->COM
après quelques essais juste pour le fun (pas trop de temps) j'ai laissé "tombé" , j'ai noté dans un coin qu'il manquait (peut être ? ) le signal DTR .

prendre là le topic
http://arduino.cc/forum/index.php/topic,132694.msg998954.html#msg998954

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 06, 2012, 02:03 pm
ben quand tu regardes par exemple une arduino pro et le convertisseur à FTDI ou 8U32 qui va avec, il n'y a que TX, RX, GND, 5V et le reset qui sont reliés.

Le dtr->reset, si on appuie sur le bouton reset au bon moment, on s'en passe, j'avais fait ça sur la nano de la V1 du projet en virant le condo car le reset auto me gênait, ça marchait bien.

l'alim, ben ma fois tant que la carte est alimentée, je ne vois pas en quoi ça pourrait déranger.

et il ne reste bien que tx/rx, non ?

en plus j'ai sous les yeux les schémas de la nano et de la uno, il n'y a a bien que tx/rx et le dtr->RESET qui sont reliés entre le ftdi et l'atmega.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Dec 06, 2012, 02:08 pm


Le dtr->reset, si on appuie sur le bouton reset au bon moment, on s'en passe, j'avais fait ça sur la nano de la V1 du projet en virant le condo car le reset auto me gênait, ça marchait bien.
...

C'etait une simple "reflexion"
j'en etait "intellectuellement" resté à ce que mon doigt  :smiley-mr-green: ne gerait pas correctement  le reset "dans une bonne fenetre temporelle"
et/ou que le bootloader devait etre changé.

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 06, 2012, 02:12 pm
ben c'est ce que je me demande aussi... mais pourtant, sur la nano qui est sur la carte V1 du projet, j'ai viré le reset auto qui m'empéchait de débugger correctement, et l'upload marchait bien en appuyant sur reset au moment où l'ide affiche la taille du sketch compilé.

je vais couper le strap "reset_en" sur la uno pour vérifier à nouveau...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 06, 2012, 02:36 pm
bon, test effectué avec la UNO en coupant le strap : l'upload fonctionne bien, mais c'est vrai que la fenetre de temps pour appuyer sur reset est courte, faut vraiment appuyer dès l'affichage de la taille du code dans l'ide.

par contre, quand on rate de moment, on n'arrive pas du tout au message d'erreur qu'il y a dans l'autre cas, mais simplement un laconique
avrdude: stk500_recv(): programmer is not responding
ce qui semble parfaitement logique.

dans l'autre cas, il semble qu'il y ait donc bien un problème au niveau de a communication. Est-ce que la longueur des fils où transitent les signaux TTL peut perturber ? Faudrait-il utiliser éventuellement des câbles blindés ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Dec 06, 2012, 07:05 pm
Tu pourrais peut être flasher dans ton ATmega (depuis la UNO) un soft qui sort des traces sur la liaison série
Et voir si tu les reçoit via la Nano/FTDI

Même faire en sorte que ce soft te renvoie quelque chose de différent s'il reçoit quelque chose sur la liaison entrante
Comme cela tu valide la liaison série indépendamment d'avrdude

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 06, 2012, 11:39 pm
oui, j'ai déjà essayé ça, ça fonctionne. la liaison est parfaitement opérationelle, il n'y a que pour l'upload que ça foire.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Dec 07, 2012, 09:05 pm
Et le bootloader est ok puisqu'il marche quand le chip est sur la Uno.

Reste le reset qui ne se fait pas au bon moment ?

Normalement le bootloader fait pulser 2 fois la led 13 quand il démarre. Est-ce que tu as une led sur la pin D13 ?
Ou en mettre une juste pour vérifier ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 07, 2012, 10:12 pm
pas deux fois, mais 3. sur la carte il y a un relais d'alim sur cette pin, qui claque bien trois fois.

mais ce n'est pas sur ma carte le soucis, c'est sur le convertisseur usb/ttl, car quand je le branche sur la uno de la même manière, j'ai le même résultat.

et pour ce qui est du reset, quand je programme la uno en ayant supprimé le reset automatique, ça fonctionne parfaitement, faut juste appuyer sur reset au bon moment. Et si on rate le moment, le message d'erreur est différent de celui que j'obtiens avec le convertisseur FTDI. (enfin quand j'appuie sur reset au bon moment, en tout cas. Avec le convertisseur aussi j'obtiens le message de non réponse si je rate le reset)

ce qui est gonflant, c'est que quand je met sur ma carte un atmega programmé avec un truc qui débite et reçois des infos sur le port série, ça fonctionne parfaitement, le convertisseur semble faire son boulot tout à fait correctement.

il n'y a qu'un truc qui m'a semblé ouche, c'est que de temps en temps, il y a des espaces en trop dans ce qui est reçu via le convertisseur. mais j'ai vu ça une fois et je n'ai pas réussi à le reproduire, pourtant je suis certain que ça ne venait pas du soft dans le micro.

je me demande vraiment si je n'ai pas des perturbations du fait de la longueur des fils que j'ai mis entre la carte nano qui me sert de convertisseur et ma carte ou la uno (environ 25cm). je vais essayer de les raccourcir fortement.

ou alors c'est parce-que j'ai tressé les trois fils pour pas qu'il se baladent, ça a faire des paires foireuses ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 12, 2012, 08:36 pm
Bon, finlement, succés ! En fait il suffisait de choisir "duemilanove" comme carte, et là l'upload fonctionne. J'avoue que je ne comprends pas bien pourquoi, vu que c'est le même micro et le même ftdi que par exemple la uno, la nano ou la pro, mais bon. En fouillant sur le forum anglais, j'ai trouvé des erreurs similaires, qui avaient été résolues en changeant de modèle de carte, et finalement en les essayant toutes, y'en a bien une qui fonctionne :)

Du coup, le premier truc que j'ai uploadé dans la carte, c'est "blink"... et comme j'ai sur la broche 12 et la 13 des relais, ça donne un résultat assez amusant :


http://www.dailymotion.com/video/xvv2xi_arduino-beatbox_tech

EDIT : avec le bon lien, c'est mieux :)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Dec 12, 2012, 09:56 pm
Tu veux un indice ?

Petite expérimentation pratique :
- Met le chip sur ta Uno
- Flash Blink
- Regarde le clignotement de la led
- Met le chip sur ta carte
- Ecoute les relais (ca serait mieux avec une led)
- Crie "P.... mais c'est bien sur"
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: B@tto on Dec 12, 2012, 09:57 pm
Ah tiens, ça me rappelle quelque chose :)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Dec 12, 2012, 09:58 pm
Pourquoi ? Tu as fait la même chose B@tto ?
:smiley-mr-green:
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 12, 2012, 10:07 pm

Tu veux un indice ?

Petite expérimentation pratique :
- Met le chip sur ta Uno
- Flash Blink
- Regarde le clignotement de la led
- Met le chip sur ta carte
- Ecoute les relais (ca serait mieux avec une led)
- Crie "P.... mais c'est bien sur"



ouais non mais t'inquiètes, j'avais compris, hein (http://bricofoy.free.fr/bordel/ddr.gif)

mais le résultat sur un relais mérite quand même d'être écouté :P il doit y avoir moyen de faire des instruments de musique avec ma carte :P

edit : lien corrigé dans le message plus haut
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Dec 12, 2012, 10:22 pm
Ce qui veut dire aussi que toutes les tempo de ton code sont fausses.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 12, 2012, 10:23 pm
gné ? comment ça ? la duemilanove n'est pas à 16MHz ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Dec 12, 2012, 10:31 pm
Je crois que tu n'as pas compris mon indice.

Le bootloader de la UNO tourne à 115200
Celui de la Duemilanove est à 57600

Si ton téléchargement fonctionne à 57600 c'est parce que ton ATmega tourne en fait à 8MHz au lieu de 16MHz, mais qu'il ne le sait pas (à l'insu de son plein gré dirions nous).

La photo de ta carte n'est pas suffisante pour vérifier si ton quartz est bien à 16MHz.

Mais c'est pour cela que je te suggère de vérifier qu'un code connu flashé dans le même chip s'exécute à la même vitesse (ou pas) sur les 2 plateforme.

Si ton quartz est bien à 16MHz et que tu constates une différence de vitesse, c'est que tu n'a pas le bon quartz par rapport aux FUSE de ton ATmega (des histoires de résonance parallèle ou série qui font que le quartz oscille sur la fondamentale ou l'harmonique).
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 12, 2012, 10:35 pm
oula... ouais ok... pourtant en activant le mode "verbose output" lors de l'upload, dans tous les cas il essaye la comm à 57600, que ce soit avec la carte UNO ou la carte Duemilanove sélectionnées...
Mon quartz est bien à 16MHz, et là je viens de charger le programme prévu pour dans la carte, les tempos me semblent OK.

EDIT : je viens de vérifier en chronométrant, les tempos sont bien ok. Ceci dit, il y a quoi comme quartz sur la duemilanove ? si ça se trouve ça tourne en fait à 8MHz mais c'est aussi compilé pour...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Dec 12, 2012, 10:38 pm
Pourtant :

Code: [Select]
uno.name=Arduino Uno
uno.upload.speed=115200
...
atmega328.name=Arduino Duemilanove w/ ATmega328
atmega328.upload.speed=57600


Je ne vois pas d'autre raison pour expliquer le comportement différent entre les 2 cartes qu'une horloge divisée par 2.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 12, 2012, 10:55 pm
arghhhh je deviens fou, je refais à l'instant un essai en sélectionnant "uno" pour te copier coller la ligne où il raconte qu'il commmunique à 57600, et quand j'uploade... ça marche x_x

du coup je re-sélectionne "duemilanove", et... ça marche plus (http://http//bricofoy.free.fr/bordel/ddr.gif) je crois que je vais faire exorciser ma carte et mon pc :P

en fait ce que tu me dis sur les vitesses, ça semblerait vouloir dire que l'IDE a buggé et ne prenait pas en compte mon choix de carte, en fait il restait sur 57600 quel que soit le choix effectué.

Ensuite il a planté et j'ai du le relancer suite à une déconnexion de l'USB, et depuis il fonctionne normalement, et le bon choix est bien "uno", vu que j'ai une atmega328P avec un bootloader uno dessus, à 16MHz.



Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: barbudor on Dec 12, 2012, 10:58 pm
Donc vinalement tout fa bien  ? :)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 13, 2012, 09:10 am
ben du coup, oui, mais il semble tout de même qu'il y ait un bug dans l'IDE 1.0

Par contre ça ne va pas si bien car mon soft lui fait n'importe quoi, mais ça c'est un autre soucis :P
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Dec 13, 2012, 11:54 am



Du coup, le premier truc que j'ai uploadé dans la carte, c'est "blink"... et comme j'ai sur la broche 12 et la 13 des relais, ça donne un résultat assez amusant :


http://www.dailymotion.com/video/xvv2xi_arduino-beatbox_tech

EDIT : avec le bon lien, c'est mieux :)

Bonjour
avec un  peu (beaucoup) d'imagination ça a un petit air de "snap battle à la west side story"  :smiley-mr-green:

Bon j'essaierais de reprogrammer mon uno (8U2 HS ), en essayant d'autres cibles
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: B@tto on Dec 13, 2012, 12:16 pm

Pourquoi ? Tu as fait la même chose B@tto ?
:smiley-mr-green:


La même boulette oué :)
http://arduino.cc/forum/index.php/topic,113147.0.html

Heureusement notre ami Jihelbi était la pour me traiter de gland xD
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 13, 2012, 09:48 pm
bah, c'est pas tout à fait pareil, non ! moi en pratique, j'ai bien un relais sur la pin 13, mais je n'ai pas de soucis de castagnettes au boot, car c'est le relais d'alim, et la broche 13 ne sert qu'a provoquer un auto-maintien, mais au moment du boot, le relais est activé par une commande externe.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Mar 06, 2013, 03:08 pm
ça y est, j'ai enfin une version qui fonctionne, et avec la première carte en plus.

elle est ici : http://sourceforge.net/projects/groupe/?source=directory
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Mar 06, 2013, 07:47 pm

ça y est, j'ai enfin une version qui fonctionne, et avec la première carte en plus.

elle est ici : http://sourceforge.net/projects/groupe/?source=directory

bonsoir bricofoy
ça y est j'ai compris, il fallait que tu demarre le groupe pour avoir du jus pour pouvoir alimenter ton PC et reposter  :smiley-mr-green:

Finalement le problème venait d'où ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Mar 06, 2013, 08:35 pm
finalement, je n'en sais rien :p je crois surtout que terminer le code et la carte par deux nuits blanches d'affilée, ça n'avait vraiment pas aidé.

J'ai passé une journée avec le PC chez le client, à bidouiller le code en direct sur le groupe, et finalement, à un moment, pouf, ça a marché. Mais alors précisément pourquoi, je ne saurais le dire. Je pense que j'avais une tempo qui reset avant la fin lors de la détection de rotation du moteur à cause de deux appels à la même tempo mal imbriqués.
Mais sans certitude, vu que j'ai toujours la liaison USB qui bug lors du démarrage moteur, je ne peux pas suivre le déroulement.

En tout cas ça fonctionne.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Mar 06, 2013, 09:16 pm

finalement, je n'en sais rien :p je crois surtout que terminer le code et la carte par deux nuits blanches d'affilée, ça n'avait vraiment pas aidé.
...
En tout cas ça fonctionne.

Le principal, c'est que ça finisse par tomber en marche  8)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Mar 06, 2013, 11:14 pm
Il faut quand même que je revoie le système d'erreurs et de reset, c'est assez merdique et la cliente ne s'en sort pas. Et comme quand le moteur cale par panne sèche, ça passe en erreur, et que régulièrement elle se fait avoir vu qu'elle n'a pas voulu de l'option réservoir externe grande capacité...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on May 16, 2013, 04:43 pm
nouvelle version 1.0.0 avec l'ajout de temporisations de montée en température et de refroidissement avant et après activation de la sortie puissance de la génératrice. Cette coupure de la sortie puissance se fait par un relais commandé par la sortie décompresseur de la carte, puisqu'elle ne va finalement pas servir.

https://sourceforge.net/p/groupe/code/ci/0cbda993f452e1612fbcbb8a91f8b451ff6bba47/tarball

par contre ma machine à états est de plus en plus un fouillis inimaginable, c'est in-maintenable. il faut vraiment que je reprenne le code à partir de zéro pour remettre ça propre.

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on May 16, 2013, 07:53 pm
En fait ce topic pourrait être déplacé dans "réalisations et projets finis" je suppose, même si il y aura sans doute des évolutions, vu que c'est déja un projet fonctionnel.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: jfs on May 17, 2013, 07:23 am
C'est fait  ;)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on May 28, 2013, 10:47 am
Nouvelle version de la carte !

Si vous avez des commentaires...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on May 28, 2013, 01:42 pm

Nouvelle version de la carte !

Si vous avez des commentaires...


je suppose que tu es content d'avoir bien mené ton projet au bout ?
c'est une belle démonstration des difficultés qui apparaissent entre l'idée posée sur la page blanche et la réalisation fonctionnelle ET validée  :smiley-mr-green:
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on May 28, 2013, 03:43 pm
ben pour l'instant, je sais pas si on peut considérer que c'est "mené au bout" :P j'ai certes un groupe qui tourne, mais je suis encore en train de redessiner la carte, pour palier aux insuffisances des deux premières versions (dont la deuxième n'a d'ailleurs jamais été montée ! ).
En particulier avec la découverte sur ebay de capteurs de proximité à 4€, je remplace la détection du démarrage moteur par une mesure de vitesse de rotation, ce qui va éviter de limer le pignon du démarreur contre la couronne pendant toute la phase d'accélération du moteur.
J'ai aussi rajouté une sortie pour contrôler un relais qui coupe la sortie de la génératrice, afin de laisser au moteur le temps de refroidir avant de le couper (ça m'a coûté une culasse, quand même, la coupure moteur en charge)

Avis aux amateurs ! j'ai donc à dispositions deux cartes à base d'ATMEGA328, une qui est littéralement un shield pour une nano (celle qui est en usage actuellement), et une à base de 328P (boitier DIL). Ces deux cartes comportent chacune 5 relais dont 4 utilisables directement, et deux sorties collecteur ouvert (2N2222) (3 pour la seconde), ainsi que 4 entrées analogiques.

Ces deux cartes ne me servirons plus dès que la V3 sera opérationnelle, si ça intéresse qqn, je les fais à prix coûtant ;)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jun 17, 2013, 05:54 pm
Nouvelle version de la carte (V3.0) en cours de finalisation :

(http://sphotos-g.ak.fbcdn.net/hphotos-ak-ash4/1003249_10151406195452130_385940142_n.jpg)

(http://sphotos-e.ak.fbcdn.net/hphotos-ak-frc3/972143_10151417072032130_971854372_n.jpg)

(http://sphotos-g.ak.fbcdn.net/hphotos-ak-ash4/1006126_10151417072257130_135436259_n.jpg)

je dois dire que je suis assez content de ma sérigraphie maison :)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jun 19, 2013, 04:35 pm
(http://sphotos-a.ak.fbcdn.net/hphotos-ak-prn2/971462_10151420173162130_1878040126_n.jpg)

Ça progresse : y'a des composants et des trucs qui s'allument ! :)
Title: Soucis avec les interruptions
Post by: bricofoy on Jul 03, 2013, 07:04 pm
Bon alors voila, pour détecter la rotation du moteur, j'ai rajouté un capteur de proximité qui compte les dents du ventilateur du moteur.

le nouveau scema de la carte V3.0 est le suivant :
http://sourceforge.net/p/groupe/code/ci/capteur_rota/tree/kicad/groupe2/groupe2.pdf?format=raw (http://sourceforge.net/p/groupe/code/ci/capteur_rota/tree/kicad/groupe2/groupe2.pdf?format=raw)

J'ai connecté ce capteur sur l'entrée INT1 (pin D03), ma fonction associée à l'interruption mesure la période entre plusieurs tops et compte ces tops. Ensuite j'ai une fonction qui est appelée dans la boucle principale, qui calcule la vitesse de rotation du moteur à partir de cette période et du nombre de tops comptés.

Code: [Select]

unsigned int rpm_moteur; //vitesse de rotation moteur.

//variables utilisees en interruption (volatile = stockees en RAM)
volatile unsigned int rpm_cpt;                     //compteur de passage en interruption. Pour savoir cb de périodes sont utilisées pour le calcul de F
volatile unsigned long rpm_periode;                //periode des implulsion du capteur de rotation
volatile unsigned long rpm_tprecedent,rpm_tcourant;//temps utilisés pour calculer la période

void setup()
{
(...)
attachInterrupt(1, comptetour, RISING); //entree rotation moteur sur INT1
(...)
}

void calcule_rpm() {
  //calcul de la vitesse de rotation du moteur.
 
  //on calcule la fréquence avec 1*60*1000/période car la période est en ms (*1000), et que l'on veut la fréquence en tr/min et non en Hz ou tr/s (*60)
  //on divise ensuite le total par le nombre de dents comptées par le capteur sur 1 tour moteur
  //la periode est une moyenne des rpm_cpt periodes mesurees en interruption avant passage par ici
 
  //Serial.print(rpm_cpt);
  //Serial.println(" "); 
  if (rpm_cpt) {
    rpm_moteur = (unsigned int)(60000/(rpm_periode/rpm_cpt))/nbr_dents_capteur_rota;
    rpm_cpt = 0; //remise à zero du compteur pour les prochaines mesures
    rpm_periode = 0; //idem pour la periode
  }
  else if (rpm_tcourant<(temps_courant-300))
rpm_moteur = 0; //si pas de nouvelle mesure pdt plus de 300ms, alors le moteur est à l'arret ou le capteur est HS
//300ms de période correspond à 22trs minutes si nbr_dents_capteur_rota=9
  //Serial.print(rpm_moteur);
  //Serial.print(" ");
 
}

void comptetour(void) {
  //passage ici en interruption à chaque top capteur de vitesse.
  //On stocke juste la somme des période des impulsions, et un compteur du nombre de périodes additionnées 
  rpm_tprecedent = rpm_tcourant;
  rpm_tcourant = millis();
  rpm_cpt++;
  rpm_periode += (rpm_tcourant-rpm_tprecedent); 
}


le code complet est ici : http://sourceforge.net/p/groupe/code/ci/31e71b1ae87b4828ae862ed18880018b4c217bed/tree/groupe.ino (http://sourceforge.net/p/groupe/code/ci/31e71b1ae87b4828ae862ed18880018b4c217bed/tree/groupe.ino)

Tout ça fonctionne très bien, du moins tant que le système est en veille (machine à état en état et_attente).

En revanche, dès que je demande un démarrage du moteur, on dirais que le passage en interruption ne se fait plus. Je passe bien dans la fonction de calcul de vitesse à chaque boucle, comme en attestent les serial.print que j'ai collé dedans, mais le nombre de tops comptés est toujours 0, quelle que soit la fréquence des impulsions en entrée, ce qui semble vouloir dire que je ne passe pas dans l'interruption.

Le pire, c'est que une fois la séquence de démarrage (ratée !) finie, quand la machine à état repasse en attente, ben ça remarche.... arghhhh !

Qu'est-ce qui peut me bloquer l'interruption ? J'avoue que je m'arrache les cheveux, je sent bien que ça doit être une connerie énorme, mais j'y suis depuis 3h et je trouve pas...
Title: Re: Soucis avec les interruptions
Post by: Artouste on Jul 03, 2013, 07:22 pm

Bon alors voila, pour détecter la rotation du moteur, j'ai rajouté un capteur de proximité qui compte les dents du ventilateur du moteur.

...
Qu'est-ce qui peut me bloquer l'interruption ? J'avoue que je m'arrache les cheveux, je sent bien que ça doit être une connerie énorme, mais j'y suis depuis 3h et je trouve pas...

Bonjour bricofoy
je ne suis pas un specialiste des interruptions, mais j'ai joué avec il n'y a pas longtemps
voir ici
http://forum.arduino.cc/index.php?topic=165087.msg1236504#msg1236504

suggestion : une fois en marche ton code ne voit plus jamais de rising ? (trop rapide ?)
juste pour test ça donne quoi avec change au lieu de rising , "une dent et un creux" c'est 3 "change"
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 03, 2013, 07:43 pm
alors en fait, c'est plus merdique que ça ! là j'attaque l'entrée avec un signal carré à 100Hz, ce qui devrait me donner une valeur de rpm à environ 667 trs/min, et en fait j'ai une valeur qui oscille entre zéro et 416 avec de temps en temps des pics à 7000, enfin bref c'est totalement n'importe-quoi.

donc en fait la fonction de calcul ou ma fonction de mesure ne marchent pas.

trop rapide, non, certainement pas, grand maximum mon entrée sera à 500Hz ça ne devrait pas poser trop de soucis...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Jul 03, 2013, 08:08 pm

alors en fait, c'est plus merdique que ça ! là j'attaque l'entrée avec un signal carré à 100Hz, ce qui devrait me donner une valeur de rpm à environ 667 trs/min, et en fait j'ai une valeur qui oscille entre zéro et 416 avec de temps en temps des pics à 7000, enfin bref c'est totalement n'importe-quoi.

donc en fait la fonction de calcul ou ma fonction de mesure ne marchent pas.

trop rapide, non, certainement pas, grand maximum mon entrée sera à 500Hz ça ne devrait pas poser trop de soucis...


ça depend du temps que tu consomme en phase d'interruption
pour ne rien louper j'ai du deriver le calcul et me contenter de renseigner simplement un tableau (voir code commenté)
mais ceci n'est peut etre pas exploitable dans tons cas 
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: B@tto on Jul 03, 2013, 08:21 pm
Est-ce que tu es sûr que c'est software ? Est-ce que le code que tu post ici est juste un résumé du code qui est réellement exécuté ou bien ce code ci te pose réellement problème ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 03, 2013, 08:24 pm
ben justement, j'ai essayé d'en faire le moins possible en interruption, regarde la fonction void comptetour() elle est réduite à sa plus simple expression..

bon en fait, le calcul marche, c'est mon entrée qui merdait (tension de sortie du gbf intégré au DSO Quad trop basse ! j'ai bricolé un ampli et ça marche, j'ai bien mes 666 trs/min (avec de temps en temps un pic à 740, donc il reste un bug que je n'ai absolument aucune espèce d'idée de la manière de la trouver ! )

par contre je retrouve mon comportement du début : dès que l'état de la machine change, je mesure 0 !! donc c'est que ça ne passe plus en interruption...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 03, 2013, 08:25 pm

Est-ce que tu es sûr que c'est software ? Est-ce que le code que tu post ici est juste un résumé du code qui est réellement exécuté ou bien ce code ci te pose réellement problème ?


je croyais être sûr que c'était un soucis soft (en tout cas il y en a un : les pics à 740tr/min) mais à vrai dire je ne suis plus sûr de rien, là :/

le code est bien un résumé du code actuellement executé par l'atmega
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 03, 2013, 08:30 pm
ARGHHH en fait quand j'ai les relais qui s'activent, l'alim baisse avec la conso des bobines, et les créneaux en sortie du pont diviseur R37/R32 sont trop bas (3,08V crète) et l'atmega ne les détecte plus !! en remontant l'alim, ça fonctionne... Pourtant d'après la donc de l'atméga, il me semblait qu'un niveau haut était pris en compte à partir d'une tension bien plus faible que ça ??

le schéma est là : http://sourceforge.net/p/groupe/code/ci/capteur_rota/tree/kicad/groupe2/groupe2.pdf?format=raw


Je vais modifier mon entrée, le pont diviseur foire, manifestement. Si d'ailleurs vous avez une idée à me suggérer ? par exemple ne pas faire un pont diviseur mais limiter la tension d'entrée avec une zéner ?

Le capteur que j'utilise fonctionne en 12V, avec une sortie collecteur ouvert PNP, d'où ce pont diviseur pour ne pas cramer l'entrée de l'atmega avec des pulse en 12V
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Jul 03, 2013, 08:56 pm


Je vais modifier mon entrée, le pont diviseur foire, manifestement. Si d'ailleurs vous avez une idée à me suggérer ? par exemple ne pas faire un pont diviseur mais limiter la tension d'entrée avec une zéner ?

Le capteur que j'utilise fonctionne en 12V, avec une sortie collecteur ouvert PNP, d'où ce pont diviseur pour ne pas cramer l'entrée de l'atmega avec des pulse en 12V


J'avais demerdé un probleme du genre capricieux comme le tiens  Vin 12 ---> Vcommut 5V
si les temps de recouvrement sont acceptable , essaye un petit 78L05 comme regulateur du signal d'entrée , (ne pas oublier de tirer un peu dessus )
ce n'est pas à priori fait pour, mais si F° est faible ça peut etre une bonne solution "à pas cher"  8)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 03, 2013, 09:02 pm


Bonjour bricofoy
je ne suis pas un specialiste des interruptions, mais j'ai joué avec il n'y a pas longtemps
voir ici
http://forum.arduino.cc/index.php?topic=165087.msg1236504#msg1236504

suggestion : une fois en marche ton code ne voit plus jamais de rising ? (trop rapide ?)
juste pour test ça donne quoi avec change au lieu de rising , "une dent et un creux" c'est 3 "change"


je vois que tu stockes les valeurs dans un tableau, au lieu de les additionner comme moi. C'est plus rapide ainsi ?

Dans mon cas, en faisant des print avec la valeur du compteur, je constate qu'elle est majoritairement à 1 et n'a jamais dépassé 3, donc finlement le reste du code (machine à état, entrées/sorties, liaison série) que je pensais assez lent s'execute en fait assez rapidement.

Je n'ai aucun idée en revanche de la manière de débugger mon erreur occasionelle avec le pic à 740 au lieu des 666 theoriques...
En fait la seule explication que je vois à cette erreur c'est un passage en interruption avant la fin du traitement de la fonction calcule_rpm(), auquel cas j'ai alors un calcul fait avec une valeur de compteur erronée car elle n'a pas eu le temps d'être remise à zéro.
Peut-être que je devrait faire un detachInterrupt() a l'entrée dans la fonction, et à nouveau attachInterrup() à sa sortie ? ainsi je risque de rater un ou deux pulse, mais au moins e calcul restera juste avec les suivants ?
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Jul 03, 2013, 10:09 pm

...

- je vois que tu stockes les valeurs dans un tableau, au lieu de les additionner comme moi. C'est plus rapide ainsi ?
...

- Peut-être que je devrait faire un detachInterrupt() a l'entrée dans la fonction, et à nouveau attachInterrup() à sa sortie ? ainsi je risque de rater un ou deux pulse, mais au moins e calcul restera juste avec les suivants ?

- Dans mon cas : je sais +/- quel est le temps d'amortissement (nombre de secteurs parcourus) pour tendre à Vitesse=0
c'etait dans le but d'une collecte statistique
c'est la methode d'acquisition la plus efficace que j'avais trouvé (tout ce qui est traité dans l'interrupt consomme du temps)

- comme je l'ai expliqué , je ne suis pas assez pointu sur ce domaine ,  mais ça semble une bonne voie pour "calibrer une fenetre de tir"  8)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: B@tto on Jul 04, 2013, 09:29 am

ARGHHH en fait quand j'ai les relais qui s'activent, l'alim baisse avec la conso des bobines, et les créneaux en sortie du pont diviseur R37/R32 sont trop bas (3,08V crète) et l'atmega ne les détecte plus !! en remontant l'alim, ça fonctionne... Pourtant d'après la donc de l'atmega, il me semblait qu'un niveau haut était pris en compte à partir d'une tension bien plus faible que ça ??


Apparemment la question est simple mais la réponse complexe : http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=109947&start=20


Je vais modifier mon entrée, le pont diviseur foire, manifestement. Si d'ailleurs vous avez une idée à me suggérer ? par exemple ne pas faire un pont diviseur mais limiter la tension d'entrée avec une zéner ?


Résitance + zener c'est le top : coût et mise en place identique à un pont diviseur mais sans les inconvénients. D'ailleurs on l'oublie parfois mais la zener n'est pas forcement obligatoire seule la résistance limitant le courant est nécessaire : http://www.atmel.com/images/doc2508.pdf
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 04, 2013, 10:38 am
merci b@tto pour ces liens. j'avais déja trouvé ce matin l'AN atmel, mais l'autre est très instructif aussi...

en gros, c'est la merde :P

Je crois que je vais tenter la version sale à la sauce atmel : juste une R en série avec l'entrée, et laisser les diodes internes faire leur boulot.
En fait, j'avais voulu faire un pont diviseur pour m'assurer d'avoir un courant minimum dans mon entrée pour éviter un certain nombre de parasites, dans la mesure ou l'environnement du montage (groupe électrogène : bobines, relais, alternateur, fort courants, etc) est quand même EMF-gène au possible...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 04, 2013, 12:24 pm
bon là le soucis de voltage en entrée est flagrant :

Code: [Select]
tps : 0:2 0:2 ubat=12.00 rpm=1333
tps : 0:2 0:2 ubat=12.00 rpm=1666
tps : 0:2 0:2 ubat=12.00 rpm=1333
tps : 0:2 0:2 ubat=12.00 rpm=1333
tps : 0:2 0:2 ubat=11.81 rpm=1333
tps : 0:2 0:2 ubat=11.69 rpm=1333
tps : 0:2 0:2 ubat=11.60 rpm=1666
tps : 0:2 0:2 ubat=11.52 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.71 rpm=1333
tps : 0:2 0:2 ubat=12.20 rpm=1666
tps : 0:2 0:2 ubat=12.47 rpm=1333
tps : 0:2 0:2 ubat=12.57 rpm=1666
tps : 0:2 0:2 ubat=12.63 rpm=1333
tps : 0:2 0:2 ubat=12.90 rpm=1333
tps : 0:2 0:2 ubat=12.06 rpm=1333
tps : 0:2 0:2 ubat=11.28 rpm=0
tps : 0:2 0:2 ubat=11.28 rpm=0
tps : 0:2 0:2 ubat=10.64 rpm=0
tps : 0:2 0:2 ubat=10.93 rpm=0
tps : 0:2 0:2 ubat=11.91 rpm=1333
tps : 0:2 0:2 ubat=12.45 rpm=1333
tps : 0:2 0:2 ubat=12.73 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1666


pour ce qui est des erreurs de mesure, je viens de me rendre compte d'un truc : à la fréquence de mes impulsions, la période n'est que de quelques ms. Il faut déjà que je fasse la mesure avec des µs, ça sera sans doute bien plus précis...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 04, 2013, 06:10 pm
ok, bon avec la mesure de période en µs avec micros(), ça fonctionne très bien jusqu'a 1kHz, soit le double de la vitesse maxi du moteur, j'ai donc de la marge :)

reste à modifier le câblage de mon entrée, et là par contre c'est merdique, car la tension batterie peut varier de 14,5V (en fonctionnement, alternateur en charge) à moins de 7V (démarreur en fonction par temps froid). Et la tension ne doit pas descendre en sortie de pont en dessous de 3,1V... ce qui n'est pas possible pour ne pas non plus dépasser 5,5V ! 
Donc j'hésite entre laisser le pont, calibré pour arriver à 3,5V avec 7V en entrée, et utiliser les diodes internes à l'atmega pour limiter le voltage lorsque la Ubat remonte, ou remplacer R37 par une zener à 5V.
La zener est-elle préférable ? j'ai lu un peu tout et son contraire dans les topics parlant de limiter une tension d'entrée par une zener...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Jul 04, 2013, 07:10 pm

ok, bon avec la mesure de période en µs avec micros(), ça fonctionne très bien jusqu'a 1kHz, soit le double de la vitesse maxi du moteur, j'ai donc de la marge :)

reste à modifier le câblage de mon entrée, et là par contre c'est merdique, car la tension batterie peut varier de 14,5V (en fonctionnement, alternateur en charge) à moins de 7V (démarreur en fonction par temps froid). Et la tension ne doit pas descendre en sortie de pont en dessous de 3,1V... ce qui n'est pas possible pour ne pas non plus dépasser 5,5V !  
Donc j'hésite entre laisser le pont, calibré pour arriver à 3,5V avec 7V en entrée, et utiliser les diodes internes à l'atmega pour limiter le voltage lorsque la Ubat remonte, ou remplacer R37 par une zener à 5V.
La zener est-elle préférable ? j'ai lu un peu tout et son contraire dans les topics parlant de limiter une tension d'entrée par une zener...

tu n'a pas un 78L05 (ou meme un 7805) pour tester l'entrée comme je l'ai proposé plus haut ?
http://forum.arduino.cc/index.php?topic=125887.msg1302300#msg1302300
ça procure une large fourchette de tension en entrée,  ça coute 20cts et en TO92 ce n'est pas compliqué à implanter
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: B@tto on Jul 04, 2013, 09:57 pm
La zener ou la diode interne devrait parfaitement faire l'affaire
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 05, 2013, 10:14 am

tu n'a pas un 78L05 (ou meme un 7805) pour tester l'entrée comme je l'ai proposé plus haut ?
http://forum.arduino.cc/index.php?topic=125887.msg1302300#msg1302300
ça procure une large fourchette de tension en entrée,  ça coute 20cts et en TO92 ce n'est pas compliqué à implanter

à 500Hz ? je doute fort que ça fonctionne... mais ça mériterait de le tester :)   mais pour le greffer sur le carte, c'est pas des plus simple. Je vais déja tester avec une zener car ça c'est facile j'ai juste à la mettre à la place de la R37 du pont
Title: Re: Soucis avec les interruptions
Post by: jstoezel on Jul 18, 2013, 06:28 pm
Hmmm pour moi les erreurs de calcul de RPM que tu observes (valeurs erronees et valeurs a zero) sont probablement dues a un probleme d'exclusion mutuelle.

Le code qui execute en interruption et le code qui execute dans la boucle principale operent sur des variables communes. Ceci n'est pas un probleme jusqu'au moment ou les variables sont assignees, par chaque morceau de code. Les 2 codes executent concouramment, creant une condition de course.
Ces conditions peuvent etre intermittentes ou tres frequentes, et ce qui est interessant est qu'elles apparaissent et disparaissent en function de la charge du microcontroller.

En bref, si chaque partie du code doit assigner des variables partagees, il doit y avoir un moyen d'assurer que les variables ne sont pas assignees concouramment. La solution la plus facile est d'inhiber les interruptions depuis le code principal (loop) lorsque les variables partagees sont assignees. Ceci cree une section de code critique.

Dans tous les comptes tours a base d'interruptions sur lesquels j'ai travaille il fallait creer une section de code critique.



Bon alors voila, pour détecter la rotation du moteur, j'ai rajouté un capteur de proximité qui compte les dents du ventilateur du moteur.

le nouveau scema de la carte V3.0 est le suivant :
http://sourceforge.net/p/groupe/code/ci/capteur_rota/tree/kicad/groupe2/groupe2.pdf?format=raw (http://sourceforge.net/p/groupe/code/ci/capteur_rota/tree/kicad/groupe2/groupe2.pdf?format=raw)

J'ai connecté ce capteur sur l'entrée INT1 (pin D03), ma fonction associée à l'interruption mesure la période entre plusieurs tops et compte ces tops. Ensuite j'ai une fonction qui est appelée dans la boucle principale, qui calcule la vitesse de rotation du moteur à partir de cette période et du nombre de tops comptés.

Code: [Select]

unsigned int rpm_moteur; //vitesse de rotation moteur.

//variables utilisees en interruption (volatile = stockees en RAM)
volatile unsigned int rpm_cpt;                     //compteur de passage en interruption. Pour savoir cb de périodes sont utilisées pour le calcul de F
volatile unsigned long rpm_periode;                //periode des implulsion du capteur de rotation
volatile unsigned long rpm_tprecedent,rpm_tcourant;//temps utilisés pour calculer la période

void setup()
{
(...)
attachInterrupt(1, comptetour, RISING); //entree rotation moteur sur INT1
(...)
}

void calcule_rpm() {
 //calcul de la vitesse de rotation du moteur.
 
 //on calcule la fréquence avec 1*60*1000/période car la période est en ms (*1000), et que l'on veut la fréquence en tr/min et non en Hz ou tr/s (*60)
 //on divise ensuite le total par le nombre de dents comptées par le capteur sur 1 tour moteur
 //la periode est une moyenne des rpm_cpt periodes mesurees en interruption avant passage par ici
 
 //Serial.print(rpm_cpt);
 //Serial.println(" ");  
 if (rpm_cpt) {
   rpm_moteur = (unsigned int)(60000/(rpm_periode/rpm_cpt))/nbr_dents_capteur_rota;
   rpm_cpt = 0; //remise à zero du compteur pour les prochaines mesures
   rpm_periode = 0; //idem pour la periode
 }
 else if (rpm_tcourant<(temps_courant-300))
rpm_moteur = 0; //si pas de nouvelle mesure pdt plus de 300ms, alors le moteur est à l'arret ou le capteur est HS
//300ms de période correspond à 22trs minutes si nbr_dents_capteur_rota=9
 //Serial.print(rpm_moteur);
 //Serial.print(" ");
 
}

void comptetour(void) {
 //passage ici en interruption à chaque top capteur de vitesse.
 //On stocke juste la somme des période des impulsions, et un compteur du nombre de périodes additionnées  
 rpm_tprecedent = rpm_tcourant;
 rpm_tcourant = millis();
 rpm_cpt++;
 rpm_periode += (rpm_tcourant-rpm_tprecedent);  
}


le code complet est ici : http://sourceforge.net/p/groupe/code/ci/31e71b1ae87b4828ae862ed18880018b4c217bed/tree/groupe.ino (http://sourceforge.net/p/groupe/code/ci/31e71b1ae87b4828ae862ed18880018b4c217bed/tree/groupe.ino)

Tout ça fonctionne très bien, du moins tant que le système est en veille (machine à état en état et_attente).

En revanche, dès que je demande un démarrage du moteur, on dirais que le passage en interruption ne se fait plus. Je passe bien dans la fonction de calcul de vitesse à chaque boucle, comme en attestent les serial.print que j'ai collé dedans, mais le nombre de tops comptés est toujours 0, quelle que soit la fréquence des impulsions en entrée, ce qui semble vouloir dire que je ne passe pas dans l'interruption.

Le pire, c'est que une fois la séquence de démarrage (ratée !) finie, quand la machine à état repasse en attente, ben ça remarche.... arghhhh !

Qu'est-ce qui peut me bloquer l'interruption ? J'avoue que je m'arrache les cheveux, je sent bien que ça doit être une connerie énorme, mais j'y suis depuis 3h et je trouve pas...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 19, 2013, 06:22 pm
ciel ! bonjour JS, tu t'es perdu sur ce forum dédié aux "microcontrolleurs d'en bas" ? :) je serai ravi de profiter de ton expérience en la matière en tout cas :) :)

merci pour ta réponse. en effet, j'avais pensé à désactiver l'interruption le temps de calculer la vitesse. Et à vrai dire, je ne sais plus pourquoi je ne l'ai pas fait.
Quoi qu'il en soit, les soucis d'erreurs de mesure énormes du début étaient liés à un bête soucis de tension d'entrée trop basse, à cause d'un pont diviseur foireux. Là ça fonctionne, j'ai toujours des erreurs de temps en temps, mais minimes (de l'ordre de 50à100tr/min) et qui ne gênent en rien le fonctionnement normal, vu que ce n'est pas l'atmega qui fait la régulation de vitesse.

D'ailleurs je viens tout juste de rentrer de l'installation du premier groupe avec cette version du matériel, et quelques correction du soft sur place (parceque forcément, si on part installer un matériel testé, c'est beaucoup moins drôle  :smiley-red: ) avec un nuit blanche à la clef, mais ça fonctionne.
En plus, aller travailler à 1850m d'altitude dans la montagne, c'est la classe 8) dommage que je n'ai pas eu le temps d'aller aux champignons  =(

La dernière version (qui marche) de la carte et du soft son disponible ici :
http://sourceforge.net/p/groupe/code/ci/capteur_rota/tarball

Attention toutefois pour la carte, il faut remplacer deux résistances dans les ponts diviseurs des entrées d'interruption par des zeners à 4,6V, je n'ai pas eu le temps de modifier les fichiers kicad.

la carte V3 en place sur le groupe :
(http://sphotos-b.ak.fbcdn.net/hphotos-ak-ash4/998710_10151455002942130_898951457_n.jpg)

un peu de déboggage sur place après une nuit blanche, parceque sinon c'est pas sport :
(http://sphotos-g.ak.fbcdn.net/hphotos-ak-frc3/1044723_10151468487132130_1159640935_n.jpg)

pas mal la vue depuis la fenetre du bureau quand même !
(http://sphotos-a.ak.fbcdn.net/hphotos-ak-frc3/1069980_10151468487027130_287699438_n.jpg)

et finalement la bête à sa place :
(http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/14783_10151468486827130_1678984951_n.jpg)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: jstoezel on Jul 20, 2013, 05:44 am
Ahah, j'ai achete une Arduino Uno il y a 2 jours (ma premiere  :smiley-red:). Je mettrai des photos du projet sur Facebook la semaine prochaine. Je me suis apercu un peu tard que j'avais besoin d'une carte microcontrolleur pour les vacances, pas le temps d'en construire une. Arduino c'est bien parce qu'il y a beaucoup de code et de shields disponibles. Par contre, quelle perte de temps sans debugguer et programmeur!
Je serais ravis d'aider, envois moi du code a developer ou une carte a construire. En ce moment je suis un peu a cours d'idees pour des projets personnels. Mon nouveau constructeur de cartes les livres en violet ::love::, ca rajoutera de la gaiete dans cette boite grise!

Quel est le but de ce controleur de ce groupe electrogene? Demarrer quand le systeme solaire a epuise toutes ses reserves?
C'est marrant parce qu'au travail on a achete un petit generateur diesel de chez Caterpillar (18kW) pour un des projets de recherche. On le controle par Modbus. On l'a un peu modifie pour verifier l'efficacite, on a rajoute des capteurs de debit d'essence etc. Avant de travailler sur ce projet, je ne savais pas que la plupart des reserves indiennes au nord de Winnipeg utilisent des generateurs diesel. La plupart de ce generateurs marchent en paires, un supporte la charge du reseau, l'autre tourne au ralenti, en standby au cas ou le generateur principal tombe en panne. Aussi, la plupart de ces generateurs tournent a regime constant, ce qui fait que tu peux te retrouver avec trop d'energie si la demande du reseau est trop basse. Donc a present ces generateurs peuvent mieux faire.
Donc on a monte un projet de recherche et on s'amuse avec ce generateur, on fait tourner different scenario, estime lequel conserve le plus de diesel, compare avec des simulation etc.

Meme si le compte tour semble marcher maintenant je pense que c'est dans ton interet d'ajouter une section de code critique quand les variables partagees sont assignees dans le code principal.

Est ce que tu as un port de debuggage ou de telemetrie sur cette carte? Type OBD? Bluetooth ou WIFI ::love::. Il manque un LCD d'une vielle imprimante dans ton design!

Combien de place est ce qu'il te reste sur ce microcontrolleur? Une chose qui me frustre un peu avec l'Arduino que j'ai eu, c'est le manque de flash. C'est facile de s'habituer a des micros avec 512k de flash et 64k de RAM.


ciel ! bonjour JS, tu t'es perdu sur ce forum dédié aux "microcontrolleurs d'en bas" ? :) je serai ravi de profiter de ton expérience en la matière en tout cas :) :)

merci pour ta réponse. en effet, j'avais pensé à désactiver l'interruption le temps de calculer la vitesse. Et à vrai dire, je ne sais plus pourquoi je ne l'ai pas fait.
Quoi qu'il en soit, les soucis d'erreurs de mesure énormes du début étaient liés à un bête soucis de tension d'entrée trop basse, à cause d'un pont diviseur foireux. Là ça fonctionne, j'ai toujours des erreurs de temps en temps, mais minimes (de l'ordre de 50à100tr/min) et qui ne gênent en rien le fonctionnement normal, vu que ce n'est pas l'atmega qui fait la régulation de vitesse.

D'ailleurs je viens tout juste de rentrer de l'installation du premier groupe avec cette version du matériel, et quelques correction du soft sur place (parceque forcément, si on part installer un matériel testé, c'est beaucoup moins drôle  :smiley-red: ) avec un nuit blanche à la clef, mais ça fonctionne.
En plus, aller travailler à 1850m d'altitude dans la montagne, c'est la classe 8) dommage que je n'ai pas eu le temps d'aller aux champignons  =(

La dernière version (qui marche) de la carte et du soft son disponible ici :
http://sourceforge.net/p/groupe/code/ci/capteur_rota/tarball

Attention toutefois pour la carte, il faut remplacer deux résistances dans les ponts diviseurs des entrées d'interruption par des zeners à 4,6V, je n'ai pas eu le temps de modifier les fichiers kicad.

la carte V3 en place sur le groupe :
(http://sphotos-b.ak.fbcdn.net/hphotos-ak-ash4/998710_10151455002942130_898951457_n.jpg)

un peu de déboggage sur place après une nuit blanche, parceque sinon c'est pas sport :
(http://sphotos-g.ak.fbcdn.net/hphotos-ak-frc3/1044723_10151468487132130_1159640935_n.jpg)

pas mal la vue depuis la fenetre du bureau quand même !
(http://sphotos-a.ak.fbcdn.net/hphotos-ak-frc3/1069980_10151468487027130_287699438_n.jpg)

et finalement la bête à sa place :
(http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/14783_10151468486827130_1678984951_n.jpg)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 20, 2013, 10:06 pm
Alors ici, j'ai de disponible sur la carte V3 un port I2C et un port 1-Wire, avec pour but de rajouter des capteurs de températures (1-Wire) pour déterminer si il y a besoin ou pas de préchauffage, et pour adapter les temps de chauffage/refroidissement du moteur.
Et via i2c pour rajouter un afficheur, une horloge pour permettre de programmer des horaires, un datalogger sur carte SD (par exemple un openlog trafiqué pour logger en i2c), etc etc

J'ai aussi une autre entrée interruption inutilisée pour le moment prévue pour mettre une jauge capacitive dans le réservoir.


mais avec 32k de dispo, et un environnement de devel pas spécialement optimisé, c'est un peu tendu. Pour le moment mon code qui ne fait pas grand chose utilise déjà 19k.

pas de port SPI sur ma carte qui permettrait de faire du vrai debug, car l'ai eu besoin des bits pour commander les relais.

pour résumer, la carte V3 a donc :
-port série
-port I2C
-port 1-Wire
-2entrées interruption (une pour le compte-tours, une pour la jauge)
-3entrées logiques (contact de démarrage local, externe, et pression d'huile)
-1entrées analogique (mesure de la tension batterie)
-3sorties relais 25A (contact, préchauffage, démarreur)
-1sortie relais ou PWM avec un PMOS (pour piloter un solénoide de controle du régime)
-3sorties collecteur ouvert NPN (2 pour les leds d'état, 1 pour le relais qui coupe la sortie de la génératrice)
-1relais interne qui assure l'auto-maintien de l'alim de la carte


L'objectif ici est pour le moment d'assurer uniquement la gestion du moteur de la manière la plus automatique possible pour que l'utilisateur n'ait rien à faire. C'est l'onduleur du système solaire qui lui détermine si il y a besoin de recharger les batteries avec le groupe ou non et demande le démarrage (contact sec).
Il peut également demander le soutien du groupe en cas de surcharge ou de surchauffe.
Mais je songe à faire une seconde carte qui s'occupera de la gestion de la charge des batteries, car les possibilités de paramétrage offertes par l'onduleur sont assez limitées.

voila voila
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Jul 21, 2013, 12:00 pm

... et un port 1-Wire, avec pour but de rajouter des capteurs de températures (1-Wire) pour déterminer si il y a besoin ou pas de préchauffage, et pour adapter les temps de chauffage/refroidissement du moteur.
...

bonjour bricofoy
comme tu semble etre en environnement certes bucolique  :smiley-mr-green: mais de moyenne montagne, je te conseillerais d'utiliser comme capteur de T° 1W un DS1920 (DS1820 en boitier microcan inox )
si tu en veux un pour test, ----> MP
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 21, 2013, 08:24 pm
en fait j'ai des 1820 montés dans des petits tubes inox étanches, avec un fil de 2m. c'est je trouve bien plus pratique à utiliser que le boitier des 1920. Mais je te remercie pour ta proposition :)

Mais en fait je suis en train de me dire que le capteur maxim, ça va pas le faire, car il est limité à 100°, et si je colle le machin sur le moteur, il va cramer assez rapidement... je vais plutot voir pour utiliser une PT100 ou un thermocouple avec un circuit I2C qui va bien, peut-être.
Au pire le port 1-Wire, si il ne me sert pas ça me fera toujours une I/O pour faire autrechose.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: Artouste on Jul 22, 2013, 12:59 pm


Mais en fait je suis en train de me dire que le capteur maxim, ça va pas le faire, car il est limité à 100°, et si je colle le machin sur le moteur, il va cramer assez rapidement... je vais plutot voir pour utiliser une PT100 ou un thermocouple avec un circuit I2C qui va bien, peut-être.
Au pire le port 1-Wire, si il ne me sert pas ça me fera toujours une I/O pour faire autrechose.

bonjour bricofoy
c'est sur que si la T° à verifier flirte au dessus des 120° C , les 1820 ou autres capteurs "actifs" sont hors concours
les thermocouples ou PT100(0) deviennent alors un choix quasi obligés.
ceci etant une CTN "haute temperature" si la T° ne dépasse pas 300° C peut être une bonne alternative si il te reste un port ana (cout, facilité d'intégration)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Jul 22, 2013, 03:13 pm
non, je n'ai plus de dispo que la pin digitale prévue pour le bus 1-Wire, et les deux analogiques pour l'I2C, mais comme je veux garder l'i2C pour pouvoir rajouter un LCD et un module RTC... ben voila.
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 17, 2016, 05:18 am
Bonjour à tous

Ce projet n'est pas mort, contrairement à ce qu'on aurait pu croire :D

Je suis en train de créer une nouvelle librairie de création de machines à états simple, basée sur les pointeurs de fonction.
Celles existantes que j'ai trouvé étant inutilement complexes à mon sens. Et une fois ça fini, je vais recoder tout le projet avec cette nouvelle lib. histoire de nettoyer un peu mon bazard car là c'est immonde.


Pour le moment il me manque encore quelques fonctions utiles, je devrais avoir tout ça qui fonctionne demain...

Mais cette version est déjà tout à fait fonctionnelle. Il me manque juste des timers en fait.
Si des gourous de la MAE veulent bien y jeter un oeil pour mettre le doigt là où ça ne devrait pas manquer de faire mal...
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bilbo83 on Dec 17, 2016, 11:19 am
Bonjour,

Je viens de regarder le code de ta classe YASM.
C'est simple et clair.
J'utilise très souvent les MAE (FSM en Anglais) de manière artisanale avec des "switch case" pour les états et "millis()" pour gérer le temps.
Je ne sais pas si utiliser les timers apportera de la clarté au code.
Par contre un tableau de pointeurs sur des propriétés, permettrait de diminuer, voire éliminer les variables globales que l'on utilise pour gérer les transitions d'état.
Je ne sais pas si je me fais bien comprendre; les variables "i" et "j" de ton exemple.

Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 19, 2016, 03:17 pm
Bon, après 36h de codage non-stop (et un rendez-vous raté pour installer le résultat ce matin...), je crois que même l'atmega devient philosophe :

(http://forum.arduino.cc/index.php?action=dlattach;topic=125887.0;attach=191496)
Title: Re: Commande automatique de groupe électrogène - machine à états et autres questions
Post by: bricofoy on Dec 27, 2016, 11:49 pm
bon finalement la machin est installé, et tout a marche du premier coup ! Incroyable, c'est la première fois que je ne suis pas obligé de sortir l'ordi pour régler les bugs de dernière minute chez le client... Comme quoi une bonne MAE bien cadrée dans une classe propre, ça marche mieux qu'un bricolage de switch/case pleines de sous-états dans les états :P et en plus finalement ça prends moins de place en mémoire de l'arduino !

Du coup dans la foulée on en a installé un second, mais avec une vielle carte remise au goût du jour avec l'ajout de l'afficheur un peu à l'arrache avec le bus I2C soudé direct sur les pins de l'atmega avec du fil à wrapper. Bon c'est sûr si le client ouvre la boite, c'est pas idéal, mais ça fonctionne en un temps record :)