Configuration de temporisation

Forum de support pour les locuteurs de la langue française qui souhaitent écrire dans leur langue maternelle.

Moderator: Benj

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Configuration de temporisation

Post by Quentin101 »

Salut à tous je suis nouveau autant sur le forum que sur flowcode donc je tiens d'abord à m'excuser pour les bourdes qui vont suivre :)
Donc voilà je vous expose mon problème je suis en terminale et nous avons entamé (mon groupe de 4 personnes) notre PPE qui consiste à enregistrer et afficher la vitesse de rotation d'une enrubanneuse DERFI en tour/minute.
Nous avons donc recours à un système de capteur "aimanté" (désolé pour le vocabulaire approximatif je n'ai pas le sujet sous les yeux...) : un aimant qui sera sur l'enrubanneuse et un autre sur l'anneau qui tourne de l'enrubanneuse et qui va croiser l'autre aimant à chaque tour. A chaque fois que les deux aimant se croise, donc que l'anneau de l'enrubanneuse a fait un tour, la tension au bornes du capteur me semble-t-il (très approximatif comme je le dit plus haut :roll: mais là n'est pas le souci) passe donc de 5V à 0V pour repasser à 5V jusqu'au prochain tour.
Nous arrivons donc au "coeur" du problème : pour pouvoir enregistrer, traiter et ressortir ce signal de tension en tr/min, nous passerions par une carte muni d'un micro-contrôleur qu'il faut bien sûr programmer à l'aide de Flowcode (j'ai la v4, la même que celle du lycée). Je vous montre donc ce que j'ai fait pour l'instant sachant que je n'y connaissai rien en flowcode :

Avec V = variable concernant la tension 0V ou 5V
N = le nombre de tour de l'anneau

Image

Petit hic ici le système tourne en boucle sans s'arréter et va m'afficher une valeur de 1 ou 0 tour à la limite si j'ai bien compris ....
J'ai essayé de passer par des boucles et des pauses, solution inutile au final parce qu'à chaque pause, "l'analyse" n'enregistre pas le nombre de tour alors que la machine continue de tourner, résultat encore faux donc ...

Après avoir passé quelques heures dessus, en cherchant sur internet, en lisant 36 tutos de flowcode expliquant des choses comme si on connaissait déjà le logicel, etc... Je me suis donc rabattu sur une solution que j'ai beaucoup vus : celle des "Interventions" faisant appels à des macros, tout ça, ... En cherchant un peu plus précisément, je suis tombé sur des explications sur comment faire un Timer mais soit pas très bien expliqué, soit expliqué trop compliqué ...

Je suis donc venu chercher une âme charitable qui voudrait bien m'aider sur le comment de la chose pour pouvoir avoir au final :

Un timer/chronomètre (appelé ça comme vous voulez) qui tournerait pendant 1 minute pendant que le programme récupère le nombre de tour N du l'enrubanneuse et que, au bout de cette minute, le programme afficherait N (sur un écran LCD par exemple pour la simulation) et qui recommence en boucle tout le long que l'enrubanneuse sera en marche. Si éventuellement il n'est pas difficile de trouver le timer pour 30 secondes au cas où, je suis preneur aussi on ne sait pas ce que les profs pourrait me demander au final si ils veulent que l'analyse soit plus rapide, etc... Reconvertir N ne sera pas un souci pour moi après, je souhaite juste avoir un timer de 30 et 60 secondes.

Merci bien à celui qui prendra le temps de jeter un oeil à ce post, et avant que cela ne vous passe par la tête, non ce n'est pas l'intégralité de mon ppe, ce n'est qu'une petite partie, qu'on ne vienne donc pas me dire que je suis feignant et que je pourrai faire tout seul "tous" ce que j'ai à faire :wink:

User avatar
Fastoch13
Posts: 15
Joined: Sun Jan 29, 2012 11:34 am
Has thanked: 1 time
Contact:

Re: Configuration de temporisation

Post by Fastoch13 »

ça fera 5 euro la réponse :P
Je vais essayer de proposer une solution (tout débutant moi aussi)
je te propose de faire une boucle avec une décision si V = 1 alors N = N + 1 sinon continuer, et cette boucle sera continuelle tout au long du travail
pour ton afficheur il affichera S = N / T ... T qui sera le temps de travail, ce T qui s'identifiera par Fr (fréquence) et I (nombre de boucles), tout est la ce T parce que ça dépendra de la fréquence de consultation de A2 et pour le calcul ça sera Nombre de tours (N) par secondes donc je présume que la formule sera S = N*Fr/I
regarde et dis moi si c'est logique et si ça répond a ton hic

NB: la fréquence Fr est à toi de la définir

Image
Akky

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

Avant de continuer j'ai oublier de préciser que nous avons pus vérifier la vitesse de l'enrubanneuse qui est de 300 tr/min (quand il y a 5V/0V) en marche rapide et 150 en marche lente (quand il y a 2.5V/0V (normalement)), petit détail qui complique grandement la chose puisque la fréquence Fr devra changer en fonction de l'état de l'enrubanneuse. Donc ça m'avait l'air d'être une bonne idée, je l'ai étudié et après quelques calculs, ta solution n'est pas exacte. Si le capteur prend V=0, alors avec S=(N*Fr)/I on tombera toujours sur 60 tr/sec ou 300 tr/min, et si le capteur prend 5V, on aura 0 tr/sec. On ne pourra donc pas savoir si il y a une variation de la vitesse. Même en prenant en compte la boucle (d'ailleurs, qu'as tu marqué dedans ?) le système me donnera une valeur trop ronde ou nous devrons attendre un certain temps (apparemment pas une valeur précise) avant d'avoir une valeur assez fiable.

Je cherche toujours pendant que tu y réfléchis, merci pour ta première idée quand même ça m'a fait voir le problème autrement :D

User avatar
Fastoch13
Posts: 15
Joined: Sun Jan 29, 2012 11:34 am
Has thanked: 1 time
Contact:

Re: Configuration de temporisation

Post by Fastoch13 »

La fréquence dont je parle c'est celle qui a un rapport avec l'horloge du pic, autrement dit tu dois calculer le temps de cette boucle (j'appellerai ça "fréquence de travail")
Je n'ai pas trop compris ton capteur, au premier passage de ton aimant ça donne 5v jusqu'au prochain tour ? Genre le capteur varie sequentiellement entre 0v et 5v pour chaque passage ? Si c'est le cas, y aura juste une petite rectification dans la condition, ça ne sera plus "si V=1" mais plutôt " si V= !V" un changement d'état, ou le capteur marque 5v juste quand l'aimant passe et puis se réduit à zéro (temps bref), si c'est le cas, la logique du schéma est correcte, je me dis qu'aussi rapide le moteur tourne, la fréquence du travail est nettement plus rapide pour pouvoir consulter à temps le pin (A2), enfin je pense.

Si tu parles de tension variable [0~5] tu ne vas plus parler de 0 et 1 à l'entrée du PIC (A2) mais plutôt une conversion analogique numérique et une acquisition d'une valeur numérique et la comparer à une valeur de consigne (pour pouvoir dire si l'aimant a passé ou non), ou plutôt faire une bascule de seuil 0,5v pour que ça compte à vitesse réduite ou à haute vitesse

Je ne pense pas que ce soit un problème compliqué, juste essaye de le bien présenter :roll:
Akky

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

Alors essayons de bien le reprendre : la tension est représenté par un signal créneau qui passe de 5V à 0V au moment où les aimants se croisent. Une fois l'aimant passé, la tension revient tout de suite à 5V. A chaque fois que les deux aimants se croiseront, ont aura donc V = 0V ( il faut inverser ta condition je pense).

Ensuite comment pourrais-je mesurer le temps que met une seule boucle pour s'effectuer ? Le temps que celle-ci se fasse est vraiment infime ...

Sinon je ne comprends pas ce que tu as mis dans ta boucle, le "-_" m'intrigue :)

Ta boucle tournerait sans fin jusqu'à l'arrêt de l'enrubanneuse si j'ai bien compris ? Dans ce cas pourquoi mettre une jonction fin/début ?

Que pourrais-je utiliser pour le simuler aussi ? J'ai mis un bouton poussoir momentanée et une fréquence au pif mais je n'arrive pas à faire monter les tours ....

User avatar
Fastoch13
Posts: 15
Joined: Sun Jan 29, 2012 11:34 am
Has thanked: 1 time
Contact:

Re: Configuration de temporisation

Post by Fastoch13 »

Tiens, le "-_" je viens de le voir, je ne l'ai pas mis la, je viens de voir sur mon flowcode, y a pas de ce truc

Avec cette boucle, tu auras une moyenne de tours par seconde ou par minute (tout dépend de ta formule) tu peux par exemple calculer le temps de la boucle (choisissant la vitesse de l’horloge et le temps des instructions) et une fois tu as le temps de la boucle tu peux ajuster combien de boucles tu dois faire pour avoir 30 secondes ou 1 minute, dans mon schéma tu peux avoir la moyenne pendant le temps de marche de la machine.
Akky

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

J'ai réussi à modifier l'horloge j'ai trouvé (même si je ne sais pas vraiment quel valeur mettre et ce que ça représente exactement) mais je n'ai pas trouver pour modifier le temps des instructions (quelle différence avec l'horloge ?).

Et sinon, comme dit dans le précédent post, tu n'aurai pas une idée pour simuler tout ça ?

User avatar
Fastoch13
Posts: 15
Joined: Sun Jan 29, 2012 11:34 am
Has thanked: 1 time
Contact:

Re: Configuration de temporisation

Post by Fastoch13 »

Ce n'est rien le "-_" c'est venu en sauvegardant le schéma en jpg, c'est une boucle "while = 1" donc une boucle infinie, tu peux mettre une variable pour le power On et power Off de ta machine de telle sorte que la boucle commence à faire le calcul avec le démarrage de la machine et s'arrete en arrêtant la machine à l'aide d'une autre variable.
Je reviens sur la fréquence, tu sais bien que ton programme se déroulera plus rapidement avec un oscillateur de 20 MHz qu'un autre de 8 MHz et tu dois savoir aussi que chaque instruction prend un temps défini (chronogramme) c'est grace à ce chronogramme et de savoir ta fréquence que tu peux définir la variable Fr que j'ai décidé d'appeller fréquence de travail .... Quand tu sauras cette dernière tu pourras calculer le temps d'une boucle, et une fois tu connais le temps d'une boucle tu pourras définir le nombre de boucles à faire pour avoir par exemple 30 secondes, ou 60 secondes...

Pour la simulation, j'ai fait un bouton poussoir actif une fois appuyé, connecté sur A2, je lance le programme et je simule le capteur en appuyant sur ce bouton, et ça marche
Akky

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

Effectivement quand on connecte le bouton poussoir ça va mieux :roll: bref j'ai test en mettant en Fr = 2000000 et en mettant un gros nombre de boucle pour que j'ai le temps de regarder un peu ce qu'il se passe. Avec des valeurs exclusivement positives, peut-on m'expliquer comment l'écran peut m'afficher mon S négatif 0_o ? En faisant le pas à pas, au premier tour on a bien S = (1*2000000)/1 et il arrive à me trouver -31616 .....

Sinon à part ce truc aberrant, comment fais-tu pour connaitre le temps d'exécution des instructions ?

medelec35
Matrix Staff
Posts: 9520
Joined: Sat May 05, 2007 2:27 pm
Location: Northamptonshire, UK
Has thanked: 2585 times
Been thanked: 3815 times
Contact:

Re: Configuration de temporisation

Post by medelec35 »

Désolé, cela se traduit, je ne parle pas français.
Le meilleur moyen est d'utiliser d'interruption INT pour détecter aimant.
Également utiliser un timer pour des durées de 1 minute.
Au début de la période de temps N = 0
Pendant la période de temps, si l'aimant est détecté, alors N = N +1.
Lorsque 1 minute s'est écoulée:
RPM = N * 60
N = 0
Afficher RPM.

RPM doit être un entier.
N peut être un octet.
Martin

medelec35
Matrix Staff
Posts: 9520
Joined: Sat May 05, 2007 2:27 pm
Location: Northamptonshire, UK
Has thanked: 2585 times
Been thanked: 3815 times
Contact:

Re: Configuration de temporisation

Post by medelec35 »

Cela pourrait fonctionner sans l'aide des interruptions.
Attachments
RPM1.fcf
(7 KiB) Downloaded 358 times
Martin

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

Oulah je comprends plus là ^^ parler des interruptions ne me choc pas, je ne savais juste pas comment les utiliser. Par contre je ne comprends pas tout dans l'algo que tu as fait dans tes boucles ? Ta boucle tourne combien de temps ?

medelec35
Matrix Staff
Posts: 9520
Joined: Sat May 05, 2007 2:27 pm
Location: Northamptonshire, UK
Has thanked: 2585 times
Been thanked: 3815 times
Contact:

Re: Configuration de temporisation

Post by medelec35 »

Puisque je n'ai pas pris en compte les frais généraux, la boucle s'exécute pour 1.1 secondes. Pour la boucle Loop pour exécuter pour 0,99999 secondes puis changer "count< 10000' Pour 'count< 9002 ".
Martin

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

Je ne comprends pas vraiment ton système .... Pourrais-tu essayer de le détaillé ?

medelec35
Matrix Staff
Posts: 9520
Joined: Sat May 05, 2007 2:27 pm
Location: Northamptonshire, UK
Has thanked: 2585 times
Been thanked: 3815 times
Contact:

Re: Configuration de temporisation

Post by medelec35 »

Quentin101 wrote:Je ne comprends pas vraiment ton système .... Pourrais-tu essayer de le détaillé ?
Bonjour Quentin101. J'ai joint un autre diagramme avec commentaires ajoutés.
Attachments
RPM2.fcf
(10 KiB) Downloaded 290 times
Martin

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

C'est assez compliqué je ne comprends pas vraiment la logique je suis encore débutant sur flowcode ... Et qu'est-ce que cela pourrait donner avec une interruptions ?

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

Petit up depuis la semaine dernière ! Toujours aucun résultat je galère il y a un souci sur l'algo de Fastoch (cité plus haut, je me retrouve avec une valeur négative de temps en temps), je ne comprends strictement rien à l'algo de Medelec, je ne sais pas d'où viennent toutes ses valeurs utilisées, les fonctions qu'ils utilisent sont en anglais (déjà que je ne comprends pas bien mais si en plus je ne sais pas à quoi sa correspond :? )

Voilà en attendant une réponse éventuelle je me suis cassé la tête pour mettre une éventuelle interruption ce qui je pense, résoudrai mon problème, depuis une semaine sans grands résultats.

User avatar
Dan81
Valued Contributor
Valued Contributor
Posts: 268
Joined: Sun Jan 15, 2006 4:07 pm
Location: Albi France
Been thanked: 60 times
Contact:

Re: Configuration de temporisation

Post by Dan81 »

Bonjour Quentin

Le mieux est de travailler avec les interruptions comme le propose Medelec.
- une interruption timer pour faire une base de temps.
- une interruption RB0 pour compter les tours.

Questions :
- quelle est la plage de vitesse à mesurer ?
- peux tu injecter le signal "aimant" (reed en réalité) sur RB0
et donc deplacer le LCD sur le port C ou D.
- quel materiel utilises tu ? (carte Matrix ?), as tu acces à d'autres pic (16F887 par ex)

Daniel

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

Nous aurions peut-être trouvé la solution : On a fait un test avec un algo tout simple avec une interruption :
- horloge = 4 MHz
- prescaler = 2
- TMR0 = 256

On a mis dans cette interruption une macro qui rajoute X=X+1, on affiche X et on fait tourner le programme en boucle. Un chronomètre à main à côté et on a stoppé le programme à 60 sec passé pour obtenir le nombre d'interruption X qu'il s'est passé c'est à dire 6469 si je me souviens bien (fait hier matin ....)

On a rebalancé cette interruption (même réglage et même macro X=X+1) dans le programme principal et on a mis une boucle qui compte le nombre de tour N tant que X<6469.
A la fin de cette boucle on affiche N et on a directement en tr/min, sans calcul intermédiaire.

Nous n'avons malheuresement pas eu le temps de tester le programme avec l'interruption implanté dedans pour voir si à la fin de la boucle on avait bien une minute....

Voilà, on peut éventuellement refaire ça pour 30 secondes si jamais ça ne convient pas au prof ...
Expérience presque précise qui se joue à la micro-seconde près ; la machine tournant à 2.5 tr/s ou 5 tr/s suivant la petite ou grande vitesse, je pense que la micro-seconde ne dérangera pas le résultat final.

Sinon Daniel :
- la machine tourne à 150 tr/min en petite vitesse et à 300 tr/min en grande vitesse. Il faut juste afficher la vitesse de rotation pour savoir si la vitesse est trop lente ou trop rapide par rapport au régime "normal".
- Si j'ai bien compris ta question (ce qui m'étonnerai mais on sait jamais :D ), il n'est pas possible de faire cela puisque la carte sur laquelle nous travaillons ne possède que 2 port A et B
- Le micro-contrôleur fourni par le lycée est un 16F88 et le prof nous fait toujours travailler sur le 16F88 sur flowcode, je ne pense donc pas que c'est possible de changer. Sinon, ne l'ayant pas sous la main, je ne peux pas te dire la référence exacte de la carte, même si je ne crois pas qu'elle soit spécifique à quelque chose.

En espérant avoir répondu à tes questions et aussi que ma solution soit bonne, je te remercie de me suivre dans mes travaux :)

User avatar
Dan81
Valued Contributor
Valued Contributor
Posts: 268
Joined: Sun Jan 15, 2006 4:07 pm
Location: Albi France
Been thanked: 60 times
Contact:

Re: Configuration de temporisation

Post by Dan81 »

Bonjour

la vitesse de rotation est relativement faible.
Au lieu d'attendre des dizaines de secondes : 2 solutions :
- soit augmenter le nombre d'aimants sur le rotor (pas difficile ni cher) et tjs 1 seul capteur.
- soit faire une mesure de periode (à la place d'une mesure de frequence): c a d : mesurer la duree entre 2 implusions.

Pour revenir au Pic , le 16F887 (ou 886) coute 3€ chez Farnell (ou ailleurs) et là on peut faire beaucoup de choses interessantes.
Il suffit d'avoir les supports adequates sur la carte de developpemnt (cas tres frequent)

bon PPE

Daniel

Spanish_dude
Posts: 594
Joined: Thu Sep 17, 2009 7:52 am
Location: Belgium
Has thanked: 63 times
Been thanked: 102 times
Contact:

Re: Configuration de temporisation

Post by Spanish_dude »

Sujet interessant et pas si compliqué que ça ;).
J'ai été pas mal occupé ses derniers temps mais je suis d'accord avec Dan81.

Enfin, j'espère que tu as reussis et si jamais tu as encore des soucis le forum est là pour t'aider !

Nicolas

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

Toutes tes solutions seraient probablement faisable, mais hors du cadre du ppe malheureusement ....
Sinon ma méthode expliqué plus haut serait-elle bonne d'après vous ?
Last edited by Quentin101 on Sun Feb 26, 2012 11:47 pm, edited 1 time in total.

Spanish_dude
Posts: 594
Joined: Thu Sep 17, 2009 7:52 am
Location: Belgium
Has thanked: 63 times
Been thanked: 102 times
Contact:

Re: Configuration de temporisation

Post by Spanish_dude »

Personnellement j'aurais fait un truc pareil.
Peut-être que j'aurais utilisé le timer2 avec quartz 32768Hz pour faire un timer plus précis.
ça peut très bien marcher avec le timer0 !
J'ai jamais fait de truc avec tour/min, mais ton idée avec les aimants est intéressant. J'aurais peut-être choisit un récepteur et transmetteur IR et mettre une bande blanche sur le rotor.
M'enfin chacun son truc :) !

Si le rotor tournerais trop lentement j'appliquerais la solution de Dan81 pour me donner plus d'impulsions.

Nicolas

Quentin101
Posts: 18
Joined: Thu Feb 16, 2012 10:26 pm
Contact:

Re: Configuration de temporisation

Post by Quentin101 »

Le truc c'est que le capteur aimant était déjà implanté sur l'enrubanneuse, on a donc testé plein d'autres solutions pour au final dire que la solution des aimants était la plus intéressante (comme par hasard :D ).
Le seul souci est que je vient de commencer mes vacances donc on peut en discuter 2 semaines encore je ne pourrai pas tester mon algo avant la fin des vacances ....

Spanish_dude
Posts: 594
Joined: Thu Sep 17, 2009 7:52 am
Location: Belgium
Has thanked: 63 times
Been thanked: 102 times
Contact:

Re: Configuration de temporisation

Post by Spanish_dude »

Il existe quelques simulateurs où tu pourrais tester ton fichier *.hex.
Par exemple, sur Proteus (si c'est compatible).

Nicolas

Post Reply