Microcôntroleurs PIC: commande de moteurs pap

Fermé
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012 - 7 nov. 2011 à 22:12
 lio - 19 mars 2014 à 20:23
Bonjour nous sommes un groupe d'élèves de Terminales Ssi, nous avons à rendre pour le mois d'avril un Projet Plutitechnique Encadré. Nous fabiquons une poursuite de scène automatisée.

Bref notre problème se pose pour la commande des moteurs pas à pas (un en abscisses et l'autre en ordonnées).
En effet après avoir pensé utiliser un Automate Programmable Industriel, aujourd'hui notre prof d'élec a commencé son cours sur le language Flowcode.

L'utilisation de microcontroleurs PIC nous a donc paru plus évidente et moins couteuse que l'API.
Le problème est que nous ne connaissons pas le brochage exact de ces microcontroleurs (simplifié en classe) et nos recherches ont été nules...
C'est pourquoi nous vous demandons les références un microcontroleur PIC dotté de minimum 16 entrées d'informations et de suffisament de sorties pour la commande de deux moteurs pas à pas (4 ou 6 fils chacun).
Nous utiliserons le logiciel de codage graphique FLOWCODE 4.

Merci d'avance

23 réponses

Bonjour

nous ne connaissons pas le brochage exact de ces microcontroleurs
Il suffit d'aller sur le site du fabriquant, Microchip :
http://www.microchip.com/
Il y a les data sheets complètes
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
8 nov. 2011 à 00:01
J'ai commencé à chercher (sur Conrad) mais ne m'y connaissant pas et aprés avoir ouvert une quinzaine de datasheets sans trouver mon bonheur j'ai demandé ici voire si qqn n'en connaitrait pas un par hasard, de plus est-ce que tous les PIC fonctionnent avec le Flowcode ou non ??
0
Bonjour

Le PIC 16F877A dispose de 33 entrées / sorties.
http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf
J'ai déjà piloté des moteurs pas à pas avec.

Il est probablement utilisable avec Flowcode, tu peux demander confirmation à ton prof ou à la boîte qui vent ce logiciel :
http://www.multipower.fr/bro1/Flowcode_site_201004.pdf

J'espère que vous êtes conscients qu'il va falloir réaliser des interfaces d'entrée / sortie, et que le pilotage d'un moteur pas à pas n'est pas ce qui se fait de plus simple (sauf si flowcode a des fonctions toutes prêtes, je ne le connais pas)
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
8 nov. 2011 à 19:08
D'accord.

Avant de se lancer tête baissée dans le projet, nous voulons vous demander votre avis à propos d'une autre manière de commander les moteurs.

En fait notre capteur est un tapis sensitif, il comporte 8 dalles horizontales et 8 dalles verticales; ce qui nous ferait donc 64 positions possibles au total, mais pour des raisons de précision nous allons inclure des positions intermédiaires (explication plus précise si vous ne comprenez pas, sur demande), ce qui nous ferait au final 15 positions horizontales et 15 verticales donc 225 positions possibles au total.

Donc notre objectif serait à travers d'un µC d'après les 16 entrées du tapis, par combinaison x/y, de donner la position voulue sur une échelle de 0 à 224 en sortie de celui-ci.
Premièrement, est-ce que ceci est possible ??

Si oui serait-il possible de controller ensuite deux moteurs pap ou deux servo-moteurs (le plus simple) suivant la sortie donnée par le µC ??
Exemple: si la position "origine" se situe en bas à gauche du tapis (x=0 et y=0) sera-t-il possible de positionnet le moteur automatiquement si on donne la sortie 56 (x=3 et y=1.5), de nimporte quelle position antérieure, aussi bien la 6ème que la 200éme ??

Excusez moi pour le paté, mais la programmation est une chose nouvelle pour moi :S
0
Je veux bien des précisions sur votre tapis sensitif. Quels signaux faut-il lui fournir, que fournit-il en retour ? Et comment obtient-on ces positions intermédiaires ?
Remarque : si j'ai compris quelque chose à cotre codage, la position (x=3 et y=1.5) devrait être codée 93 (3*2*15 + 1.5*2) , pas 56

Pour le pilotage des moteurs, ne pas oublier qu'il vous faut non seulement des sorties, mais aussi des entrées : au moins un capteur pour la prise d'origine sur chaque axe d'un moteur pas à pas, ou un codeur de position (incrémental, absolu ?) pour chaque servo-moteur.

Sinon, passer d'une position à une autre quand on a de quoi piloter un moteur ne devrait vraiment pas poser de problème.
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
Modifié par Molleyjow le 8/11/2011 à 22:54
Tapis sensitif inspiré de "http://www.interface-z.com/produits/cap01_tapis.htm" , mais simplifié (suppression du MIDI remplacé pas des signaux logiques). VOIR PIÈCES JOINTES

Les positions intermédiaires dépendent de si l'utilisateur à ses deux piedssur une seule dalle ou sur plusieurs d'elles.
Le "56" n'est pas un code mais simplement un numéro de position, c'est la "56ème dalle en partant de l'origine" d'abscisse 3 et d'ordonnée 1.5. VOIR PIÈCES JOINTES

Codeur incrémental beaucoup trop cher pour notre budget !
Mais j'ai cru comprendre qu'un servomoteur en possède un propre à lui, enfin un potentiomètre qui lui permet de se repérer à chaque instant (à vérifier)

Comment insérer les pièces jointes je n'ai pas réussi ?? ^^"
0
Il n'y a rien pour joindre des pièces sur CCM,; il faut les mettre sur un autre site et mettre le lien ici.

Votre tapis sensitif est donc équivalent à une matrice 8 x 8 avec des simples contacts aux intersections. C'est facile à gérer avec un PIC. Je suppose que vous n'utilisez pas l'interface MIDI qu'ils proposent.

Oublie ce que j'ai dit sur le "56", c'était un préjugé de ma part. Peu importe le codage, d'ailleurs.

Si vous optez pour un moteur avec un potentiomètre, il y a une possibilité très simple. Vous utilisez deux sorties tout ou rien pour faire tourner le moteur dans un sens ou l'autre, et une entrée analogique pour lire la position du potentiomètre. Vous arrêtez quand vous êtes rendu où vous voulez. Vous avez besoin d'un minimum de matériel et de connaissances pour faire ça. Mais il ne faut pas chercher à avoir des déplacement rapides et précis avec cette méthode.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'avais perdu de vue que votre application était une poursuite de scène. Ma méthode simpliste risque de ne pas être assez performante si vous voulez suivre un danseur frénétique.
Pour avoir plus de performances avec un moteur muni d'un potentiomètre, vous allez utiliser un moteur qui a un asservissement de position analogique, donc une commande analogique. Or, les PIC n'ont pas de sortie analogique. Vous pourriez utiliser une sortie PWM pour ça, mais je crois qu'il n'y en a qu'une. Alors le plus simple serait d'utiliser deux CNA (convertisseur numérique- analogique) à entrée série, je n'ai pas de référence sous la main mais je crois que c'est facile à trouver. Et si c'est l'électronique du moteur qui se charge de son asservissement, ça devient nettement plus facile
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
9 nov. 2011 à 14:38
Merci le père pour les réponses :D

Premièrement les pièces lointes tant attendues:

https://forums.futura-sciences.com/attachments/electronique/163760d1320784439-commande-de-controle-de-moteur-pap-connexion-nappes.jpg
https://forums.futura-sciences.com/attachments/electronique/163761d1320784758-commande-de-controle-de-moteur-pap-branchements-pic.jpg
https://forums.futura-sciences.com/attachments/electronique/163762d1320784758-commande-de-controle-de-moteur-pap-positions.jpg

Ensuite,

L'objectif est pour nous déja de pouvoir suivre une personne qui marcherai sur la scène (one man show) c'est plus simple.

Tu as raison nous n'utiliserons pas la sortie midi, mais le système de matrice en 8 par 8.

Je vais me pencher sur ton système de fonctionnement moteur et voir ça avec mon prof car je n'ai pas tout suivi :S

Ne serait-il pas possible de brancher la sortie de mon PIC sur l'entrée d'un autre dédié au controle des moteurs pas à pas, un programme de déplacement dans un sens ou dans l'autre serait envoyé en boucle un certain nombre de fois, (afin d'obtenir le nombre de pas voulus suivant le signal envoyé par le premier µC) par exemple pour un moteur bipolaire, on utiliserait 2 sorties par sens de rotation, celles ci activant successivement son transistorb (ou autre car le transistor risque de chauffer et cramer vite fait) qui transmettrai lui la puissance nescessaire au moteur. Je ne sais pas si ce que je dis est cohérent et possible ?
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
9 nov. 2011 à 15:04
Rectification: "il faudrait 4 sorties par sens de rotation"
0
Il faut un mot de passe pour aller voir tes documents... Va chercher du côté de ce lien
http://www.commentcamarche.net/faq/451-hebergement-gratuit-d-images-de-photos-et-d-autres-fichiers
L'idée d'utiliser un deuxième PIC pour piloter les moteurs pas à pas est très bonne aussi, mais elle vous donnera plus de soft à faire.
Tu parles aussi de puissance, c'est une très bonne question. L'avez-vous évaluée ? Vous risquez de vous retrouver assez vite avec une électronique trop compliquée à développer à votre niveau, ou trop coûteuse
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
Modifié par Molleyjow le 9/11/2011 à 18:43
http://www.heberger-image.fr/data/images/45870_Connexion_nappes.jpg
http://www.heberger-image.fr/data/images/70875_Branchements_PIC.jpg
http://www.heberger-image.fr/images/19522_Positions.jpg
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
9 nov. 2011 à 18:48
Désolé voici la 3ème:
http://www.heberger-image.fr/data/images/19522_Positions.jpg

La "puissance" est pour juste pour l'alimentation des moteurs ou servos (5volts maxi je pense), mais peut-être pourrai-on passer directement par le pic non ?
0
Je ne comprends pas grand-chose à votre câblage, le schéma n'est pas conventionnel. En principe, pour gérer une matrice de contacts, on met des pull-up sur les lignes et on pilote les colonnes en les tirant à 0 avec des sorties à drain ouvert, choses que le PIC fait facilement.

En ce qui concerne la puissance, il vous faudra certainement un moteur qui consomme quelques ampères sous bien plus de 5 V. Il n'est en aucun cas question de le piloter directement par le PIC. Sauf si l'artiste est un escargot et votre poursuite une lampe de poche ^^. Blaque à part, c'est un aspect pas négligeable, il faudra y penser assez tôt.
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
10 nov. 2011 à 20:42
Le schéma électrique n'est pas conventionnel loin de là je sais... il faut comprendre que chaque fil rouge ou vert est une nappe de 10 fils; 8 fils de celle-ci sont connectés à 8 dalles différentes, un ou les deux qu'il reste destinés à l'allimentation de la dalle supérieure.
La nappe arriverait sur une carte ou chaque fil passerait par une diode avant de se rejoindre en un même poins (afin d'éviter que toute la dalle soit activée sans les diodes) créant un interrupteur pour toute une ligne. On aurait ainsi une position de dalles en abscisses et une en ordonnée, créant en leur intersection la position de la personne sur le tapis.

Je ne me suis pas à vrai dire encore intéréssé aux moteurs, mais la commande de puissance ne sera pas trop compliquée, d'autant plus que nous utiliserons directement une alimentation continue délivrée par un générateur de la salle de classe (pas besoin de redressage et tout le bazar)

Par contre je ne sais pas si je l'ai déja évoqué mais la lampe sera en fait un vieu laser du pôle physique du lycée, alimenté en 9 ou 12 volts je ne sais plus (nous avons des lunettes de protection pour l'utilisateur du tapis)

Autre point nous étudions le budget afin de savoir s'il nous serait possible d'achetter ceci: http://www.robotshop.com/eu/inclineur-ddt550-hitec-servocity.html
De cette manière nous éviterions les problèmes dûs à une mécanique trop peu précise, mais dans ce cas là comment commander les servosmoteurs ??
0
À la lecture de ton explication sur le câblage, je ne suis pas sûr que tu aies bien compris le principe du matriçage.
Il faut envoyer un signal sur les lignes et le lire sur les colonnes (ou l'inverse) alors que d'après ta description, tu ne fais que des lectures sur les lignes et les colonnes... D'où vient le signal que tu lis ?

En ce qui concerne les servomoteurs, la réponse se trouve dans leur notice... Tout dépend du type que vous retiendrez. Apparemment, les moteurs Hitec se pilotent avec de simples impulsions, mais on n'aurait pas le choix du sens de rotation ni de la vitesse dans la doc que j'ai vue. Pas pratique pour cette application.
0
J'ai mis un peu de temps à comprendre comment marche ton câblage des dalles, ce n'est pas du tout ce que je pensais, mais ça doit bien marcher. Il faut 128 diodes, quand même ! Et aussi, ce qui ne figure pas sur ton schéma, 16 résistances sur les entrées pour les tirer à 0 quand les dalles ne sont pas activées.
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
Modifié par Molleyjow le 11/11/2011 à 10:38
Je n'avait pas pensé aux résistances... les diodes nous en avons au lycée de gros stocks puis s'il en manque nous les récupèrerons ou les achèterons tant pis.

Pour l'instant je n'ai pas d'autre question. Merci pour toutes tes réponses en tout cas !! :D
0
De rien, et bonne chance pour votre projet :)
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
27 nov. 2011 à 17:26
Salut, je reviens vers vous pour une petite question...

Nous alors donc commander un moteur pap pour la direction horizontale, de ce coté là pas de problème...
Par contre est-il facile de commander un servomoteur Hitec HS-485HB depuis un microcontroleur ou est-il indispensable de passer par une carte de contrôle style Aurduino ??
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
1 déc. 2011 à 20:47
Up.
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
13 janv. 2012 à 10:16
Salut à tous...

J'ai une petite question pour les spécialistes du codage !

Est-il possible de coder à partir de valeurs contenues dans un tableau sous Flowcode ou en C ?
Je m'explique, nous voudrions pouvoir affecter à chaque position une macro et le nombre de fois qu'il faudrait la réaliser suivant la position à laquelle on veut aller.
Nous aurions pu le faire en lignes, mais sachant qu'au total on a 225 positions le programme serait lourd.
Le principe serait par exemple dans un déplacement horizontal: Si je suis à la position 1 (origine) et que je veut aller à la position 225, se déplacer vers la droite (utilisation de la Macro 1) puis réaliser 224 fois cette opération (boucle); il faudrait donc insérer un calcul dans la case correspondant au "nombre de pas depuis l'origine" - "le nombre de pas effectués" de manière à ce que si je veut maintenant aller à la position 224 le programme calcule "223"-"224"=-1 et effectuerai don un déplacement négatif (Vers la gauche: Macro 2) et une seule fois.

Désolé pour le pavé j'ai essayé d'être le plus clair possible.
0
Bonjour : )

Je ne comprends pas très bien la question. En C, une boucle for suffit, non ? Quant à Flowcode, je ne le connais pas, mais ça m'étonnerait bien qu'il ne dispose pas d'une structure équivalente.
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
15 janv. 2012 à 11:40
Je ré-explique plus clairement:

J'aurai en fait 4 macros dans mon programme:2 pour l'axe horizontal ("déplacer d'1 pas vers la gauche" et "déplacer d'1 pas vers la droite") et de même 2 pour l'axe vertical.

En considérant ma 1ère position (origine) tout en bas à gauche d'un tapis de dalle (quadrillage d'une feuille par exemple) et ma position 225 en haut à droite, si le tapis détecte un signal sur la plaque X, il m'indique la position 200 par exemple, il lui faudra exécuter 200 fois (simplifié) la macro de déplacement vers la droite.

EXPLICATION:
Pour simplifier je ne m'occuperai ici que de l'axe des abscisses:

J'appliquerai en fait un calcul à partir de valeurs définies à l'origine. Soit la position 1 de coordonnées x1=0 et la position 200 de coordonnées x2=200 (ces valeurs sont établies à l'origine ! )

Pour savoir quelle macro appliquer et combien de fois l'exécuter, j'effectue le calcul suivant: "abscisses de la position voulue" - "abscisses de la position précédente" correspond ici à "200" - "0" = "+200"

Le "+" m'indique donc que c'est la macro de "déplacement vers la droite" qu'il faut utiliser et le "200" qu'il faudra la répéter 200 fois.

Maintenant j'introduis une 3ème position, la numéro 17 d'abscisses x3=17 tout en conservant les actions précédentes. La 200ème position devient alors en quelques sortes ma nouvelle origine temporaire et j'effectue toujours le même calcul: "17" - "200" = "-183" (je dois alors utiliser la macro de "déplacement vers la gauche" car présence du signe moins, et répéter celle-ci 183 fois)

Le truc c'est que pour écrire tout ça en lignes donnerait un programme très lourd et compliqué à débugger je pense.

(ps: on a un pic 16F876A avec 8ko de mémoire si jme rapelle bien.)


J'ai essayé d'être le plus compréhensible possible... si il y a encore un point flou demande moi ;D
0
C'est bien ce que j'avais compris (à moins que je ne comprenne toujours pas)
En langage évolué, la soustraction ne prend qu'une instruction ; le test du signe une autre et la boucle (je ne parle pas de l'action faite dans la boucle, mais ne la boucle elle-même), une instruction également.
Ce n'est pas l'idée que je me fais d'un programme lourd et compliqué. Même en assembleur PIC ça ne doit pas dépasser les 50 instructions, peut-être moins de 20.
À titre indicatif, en supposant que tu as une fonction pour déplacer d'un pas à droite et une autre pour déplacer d'un pas à gauche, en C ça pourrait donner très succintement :

void DeplacerHorizontalement (int depart, int arrivee) {
  int k;

  if ( arrivee > depart ) 
    for (k=0; k<arrivee-depart;k++) deplacerdroite();
  else 
    for (k=0; k<depart-arrivee;k++) deplacergauche();
}
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
16 janv. 2012 à 18:36
Exactement ça... et je n'avait pas pensé à un truc aussi simple ;D
Pour moi il fallait obligatoirement que je tape les ligne pour les 225 possibilités, sans penser à un calcul tout simple.

Du coup autre question, j'ai changé mon PIC pour un 16F877 (plus gros) mais comme il faut lui brancher un quartz... Lequel faut-il, et à quoi sert-il exactement ?
0
Le quartz est principalement caractérisé par sa fréquence. J'ai sous les yeux une carte avec un PIC 16F877 équipé d'un quartz de 4 MHz. À vérifier dans la datasheet du PIC, il est possible que fréquences plus élevées soient autorisées.
Ce quartz sert à rythmer l'exécution des instructions dans le PIC. Dans le cas de la famille 16F... une instruction est exécutée tous les 4 cycles du quartz : avec 4 MHz, il y a donc une instruction toutes les microsecondes, ou un million par seconde. Ceci pour les instructions simples ; pour les sauts (GOTO, CALL, RETURN et autres instructions du même style) il faut deux fois plus de temps.
Je parle d'instructions du langage machine. Pour une "boîte" de flowcode il faut plusieurs, voire plusieurs dizaines d'instructions élémentaires.
0
Molleyjow Messages postés 17 Date d'inscription vendredi 14 octobre 2011 Statut Membre Dernière intervention 21 janvier 2012
Modifié par Molleyjow le 21/01/2012 à 12:07
Bien compris je finirais de voir tout ca avec mon prof d'elec :)

J'ai un problème, je sais comment faire mon programme, mais sous floxcode les variables utilisées sont en fait en octets, et je n'y arrive donc pas... N'y a t-il pas manière à utiliser celles ci sous forme logique 0 ou 1 ??

Exemple de quelques lignes d'une boite calcul:

X0=B0
X05=B0+B1
X1=B1

De plus il faudrait que lorsque ma variable X05 est active, les variables X0 et X1 soient à 0...(si en logique avec l'utilisation de barres)

Exple:

X0=B0+/B1
X05=B0+B1
X1=B1+/B0

Est-ce possible sous flowcode ?? (Sinon je suis dans la Mer** ^^' )
0