IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Pilotage d'un moteur pas à pas : sortie sur lpt1


Sujet :

C

  1. #1
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut [résolu]Pilotage d'un moteur pas à pas : sortie sur lpt1
    bonjour,
    je voudrais pouvoir piloter un moteur pas à pas, mais je ne connais pas la fonction (et son header) permettant de faire une sortie sur le port parallèle... ou du moins la fonction qui fait une sortie sur une adresse donnée...

    si vous la connaissez, merci de me la faire passer

  2. #2
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    salut,

    tu peux utiliser comme pour un port série :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateFile("LPT1", etc);
    Errare humanum est ... sed humanus naturae erratum est.

  3. #3
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    hum... CreateFile ne fonctionne pas ! et je ne vois pas comment spécifier l'adresse du lpt... pourrais-tu être un peu plus précis sur l'utilisation de cette fonction (éviter les etc) j'ai cette adresse : 0x378. je voudrais donc agir sur cette adresse...
    merci

  4. #4
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    question en +, pourquoi mon moteur tourne tout seul sous linux et pas sous window$ 98se ? bizarre ce truc...

  5. #5
    Membre du Club

    Inscrit en
    Mai 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 39
    Points : 67
    Points
    67
    Par défaut
    Windows a du paumer la clé de contact

  6. #6
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    lol leneuf22 .

    PS : ta localisation, c'est près de Valence ?

    Le_Coyote >>
    tu peux trouver un exemple ici, et à plein d'autres endroits sur google. En fait normalement le compilo connaît "LPT1" comme 0x378, je ne sais pas s'il le met qqpart dans un enum, mais bon.

    Et pour avoir les détails de la fonction c'est ici que ça se passe.

    Pour utiliser CreateFile() tu dois inclure windows.h (en fait winbase.h, mais il est inclus dans windows.h). C'est une fonction de l'API Windows, donc normalement ça devrait tourner sans problème.

    Et quand tu dis que ça tourne tout seul sous Linux, tu veux dire qu'il reconnaît toutes les fonctions et qu'il compile sans problème ?
    Autre chose, tu devrais essayer de voir si ça tourne sous un Win2K/NT, car il y a de nombreuses différences entre les 9x et les NT.
    Errare humanum est ... sed humanus naturae erratum est.

  7. #7
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    Citation Envoyé par Hypnos
    tu veux dire qu'il reconnaît toutes les fonctions et qu'il compile sans problème ?
    non, j'ai même pas essayé de compiler sous linux... en fait, le moteur est actif (il avance et recule) sous linux... sous windows, il est inactif mais je peux régler le pas grâce à Outpw(0x378, 0);
    si j'augmente la valeur 0, le pas augmente, si bien que ça durcit le mouvement que tu peux lui imposer toi-même...
    je n'ai pas win2k, et j'ai un vieux nt (le 4), mais bon... pas vraiment envie de le réinstaller... (redimensionnement des partitions...)

    et je sais que mon installation fonctionne sous 98se : je l'ai fait fonctionner avant mais impossible de retrouver le source
    je vais aller voir les liens que tu as posté

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Sous Windows 2000/NT/XP, l'accès direct aux ports est impossible à moins d'avoir un pilote qui s'en charge. Je connais aussi un programme qui peut s'occuper de ce problème! Ainsi, toutes les appli pour Win95/98 peuvent fonctionner avec NT/2000/XP. J'ai une tonne de doc sur le port // et les moteurs pas à pas! Alors si t'as des questions, n'hésite pas! à+
    De retour parmis vous après 10 ans!!

  9. #9
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    Citation Envoyé par Sub0
    Sous Windows 2000/NT/XP, l'accès direct aux ports est impossible
    comme je ne suis pas sous ces o.s.
    et de toute manière, si l'accès est interdit sous nt, c'est forcément interdit pour xp et 2k (ils sont basés sur nt, et ya du linux dedans )

    je veux bien ta tonne de doc sur lpt ainsi que sur le moteur pas à pas 8)
    que si elle n'est pas en pascal : je connais rien à ce langage...

    plus de précisions : mon moteur est à 4 bobines... et je n'arrive qu'à modifier son pas je voudrais bien le faire tourner un peu... donc si t'as des infos... (j'ai perdu le source que j'avais pendant un moment )
    merci

  10. #10
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    ok, donc ce sera seulement des conseils "hardware" que je te donnerais.
    Il faudrait que je saches comment tu as branché ton moteur sur le port: Ya-t-il déjà une interface électronique? Le port // ne peut servir qu'à la commande, et en aucun cas, à la puissance! Il peut délivrer jusqu'à 20 mA, mais les bobines ont besoin de beaucoups plus, donc il n'est pas possible de brancher directement un moteur pas à pas sur le port // sans un étage de puissance (des transistors), sinon tu risques de cramer ton port // et ta carte mère! (normal pour le coyote de tout cramer) - D'où ma question: Comment est branché ton moteur? à+
    De retour parmis vous après 10 ans!!

  11. #11
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    mon moteur est connecté à un circuit sur lequel j'ai un CI (modèle : ULN2003) et une diode zener 12V. il est alimenté en 12VDC par les câbles d'alim. de l'uc.
    voici le schéma (si ça peux t'aider) de connection de l'ULN2003 (qui fait la majorité du boulot) :

    mais je viens de voir que je l'alimente en 5V au lieu de 12 ! mais en 5V, il fonctionne quand même... je vais peut-être essayer en 12V mais sur un vieil ordi... comme ça, si la carte grille, je m'en fous

  12. #12
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    C'est clair! Je vais pouvoir mieux t'aider à présent! Ça va marcher, c'est sûr! Déjà, je sais que ce composant intègre 4 transistors de puissances pour commander les bobines. C'est donc au port // à recréer le "chenillard" pour synchroniser ces 4 bobines...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h> 
    #include <dos.h> 
    #define Puerto    0x378 
    void main (void) { 
     unsigned char Valor;         
     Valor = 0x00; 
     outportb(Puerto, Valor);   
     delay(1000);                      
    }


    Le programme est relativement simple! Le delai est réglé dans la procédure, les valeurs sont dans le tableau; On peut y voir l'espèce de chenillard qui synchronise les bobines... Tu pourras faire deux fonctions, avec un paramètre pour définir le délai. Une fonction pour tourner dans un sens, et une autre pour tourner dans l'autre sens. Mais sous Win NT, la fonction outportb a besoin d'un driver; J'ai une solution dans ce cas... Je te donne plus d'infos bientôt! En attendant, tu peux toujours visiter ces liens, et si tu as des questions, n'hésite pas! à+

    http://www.doc.ic.ac.uk/~ih/doc/stepper/kp4m4/
    http://www.infolaser.net/franpr/tecnica/mpap/mpap.html
    De retour parmis vous après 10 ans!!

  13. #13
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    erf, le lien http://www.infolaser.net/franpr/tecnica/mpap/mpap.html m'envoie sur un site en espagnol ! je connais pas un mot en espagnol je fais anglais lv1 et allemand lv2. mais le site http://www.doc.ic.ac.uk/~ih/doc/stepper/kp4m4/ est en anglais : il va me sauver
    en effet, ça risque de fonctionner : je suis allé sur le site du constructeur de mon moteur, et ils m'ont envoyé sur ce site...
    je vais aller tester le code que tu m'as passé...

    précisions en + : mon moteur a un pas de 1,8° et un autre truc que je ne comprends pas : 75ohms/phase
    75 ohms, je comprends mais phase :

  14. #14
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je ne sais pas trop, enfin, j'imagine que c'est la résistance d'une bobine...
    Je ne suis pas très sûr, en tous les cas, si ça peut t'aider, ma doc dit:
    «Le mode micro pas - Les enroulements ne sont plus alimentés en "tout ou rien" mais on peut donner différentes valeurs positives ou négatives du courant. On peut obtenir toutes les positions intermédiaires entre deux pas, en faisant varier le courant de chaque enroulement.»

    Ou alors, il sagit du régime transitoire:
    «Pour avoir un couple mécanique le plus régulier possible (on ne veut pas de "tremblements" du rotor) et pour pouvoir travailler avec des vitesses de rotation les plus grandes possibles, on cherche à réduire la durée des phases d'extinction et d'établissement des courants dans les bobinages moteurs. (en d'autres termes, on veut réduire la durée des régimes transitoires)...»
    C'est pour cette raison que dans le tableau, il ya 2 bobines alimentées en même temps... (une ligne sur 2)
    Je continu mes recherches... à+
    De retour parmis vous après 10 ans!!

  15. #15
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    oué ok,
    est-ce qu'il se peut que les bobines soient sous-alimentées : 5V au lieu de 12V ? et du fait, ça ne tourne pas beaucoup... :

  16. #16
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Bien sûr!
    Avec la formule U=RI, tu peux calculer l'intensité (en Ampère) que traverse une résistance. Si elle fait 75 ohms et que tu l'alimente en 5V, cela te donne une intensité de I=U/R -> 66.7 mA. Alors qu'en 12V, cela donne 160 mA. Pour une bobine, la formule est différente... Bref, ton moteur aura donc moins de couple, et il se peut même qu'il n'est pas assez de force pour effectuer tous les pas... Dans ce cas, il ne tournera pas correctement, mais seulement quand 2 bobines seront alimentées en même temps (dans le tableau, une ligne sur 2). Il tournera donc 2 fois moins vite... à+

    De retour parmis vous après 10 ans!!

  17. #17
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    j'ai essayé en 12V, mais ça ne doit pas vraiment lui plaire : il chauffe beaucoup
    donc je vais foutre window$ à la poub' et rester avec mon
    même si sous linux, le moteur a un comportement bizarre...
    bon, je vais voir ce qu'il se passe et essayer de scanner les e/s sur mon lpt1 quand je suis sous linux...
    merci
    à+

  18. #18
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Il chauffe parce que tu laisses les bobines alimentées!
    Ce n'est pas forcément nécessaire le blocage...
    En mettant les 4 sorties du port à 0, tu évites le blocage pendant le délai.
    Ainsi, ton moteur ne pourra pas chauffer, as-tu compris?
    Ou alors, il chauffe parce-que l'alimentation des 2 bobines en même temps ne lui convient pas!
    Fais des essais pour voir si une alimentation d'une bobine à la fois est suffisant avec le 12V...
    En tous les cas, c'est étudié pour fonctionner en 12V,
    c'est au niveau de la programmation qu'il ya un problème je pense! à+
    De retour parmis vous après 10 ans!!

  19. #19
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    j'ai un souci de code (ou plutôt de windows )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #include <stdio.h>
    #include <dos.h>
    #include <conio.h>
     
    int base=0x378;
     
    void verbose_outb(int port, int base)
    {
       printf("outp(%02X,%04x)\n",port,0x378);
       _outp(port, 0x378);
    }
     
    unsigned char steptable[8]={0x01,0x05,0x04,0x06,0x02,0x0A,0x08,0x09};
     
    slow_sweep()
    {
       int i;
     
       for(i=0;i<800;i++) {
          verbose_outb(steptable[i%8],base);
        }
    }
     
     
    main()
    {
       getch();
       slow_sweep();
     
    }
    quand je lance le programme, il me met "Erreur de protection windows. Veuiller redémarrer l'ordinateur."
    et après, je dois éteindre l'ordi parce qu'il est planté !!!

    est-ce que quelqu'un pourrait m'éclairer un peu ? où ça plante et pourkoi ?

  20. #20
    LFE
    LFE est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 95
    Points : 2 463
    Points
    2 463
    Par défaut
    Il a déja été expliqué et réexplique que sous windows(NT, 2000, XP sur et certain, 95&98 à confirmer), les accès direct aux ports ne sont pas autorisés.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Commande de position sur moteur pas à pas
    Par Marc29 dans le forum LabVIEW
    Réponses: 31
    Dernier message: 22/01/2017, 10h39
  2. Réponses: 4
    Dernier message: 03/02/2009, 11h57
  3. Pas de corbeille sur le bureau
    Par daladim dans le forum Windows XP
    Réponses: 5
    Dernier message: 02/10/2005, 20h54
  4. [Access] Ne pas montrer #Error sur un rapport Access
    Par nico33307 dans le forum Access
    Réponses: 3
    Dernier message: 22/09/2005, 23h19
  5. [CSS][IE]background d'affiche pas dans div sur IE
    Par Thomzz dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 21/09/2005, 23h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo