Commande du port parallele & moteur pas a pas

Soyez le premier à donner votre avis sur cette source.

Snippet vu 51 207 fois - Téléchargée 34 fois

Contenu du snippet

C?est un programme pour commander un moteur pas a pas par excellence, et de commander les différentes entrées & sorties de l?ordinateur.
C?est le début d?un projet de commande des moteur, je suis entrains de modifier cette source pour une commande absolu même au niveau de transmission de mouvement , calcul vitesse ...
Je mettrais la suite du projet dans qlq jours ,elle contient environs 800 lignes

Je demande votre aide pour continuer ce projet surtout au niveau de lecture &écriture des fichier si par exemple on veut intégrer un tout petit compilateur ,par exemple :
On écrit dans un fichier :
Move 4 //pour avacer 4 pas ou
Move 4deg//pour avancer 4 degrés ou encore
IN ?
La question qui se pose comment lire move et si on trouve le mot move on lit la suite et si tout va bien on avance.
    • VC++ 6.0**

Source / Exemple :


/***************************

  • (c) YESSINE 30/08/2004 *
                                                      • /
//FREE SOURCE CODE /* THE STEPPER CONTROL 1.0
  • /
#include "stdafx.h" #include <stdlib.h> #include <iostream> #include <string> #include <windows.h> #include <conio.h> #include <fstream> using namespace std; #define pport 0x378; void move(int tm); void move_to4(int step_number,int tm); void move_to44(int step_number,int tm); //void open_file(); int main(int argc, char* argv[]) { string command; int pval; int stime; int snbr; printf("<<<<****>>>> & STEPPER CONTROL 1.0 & <<<<****>>>>\n"); Sleep(500); printf(" MSDOS MODE \n"); Sleep(1000); printf(" (c)YESSINE 2004 \n\n"); while(command !="exit") { cout<<"-"; cin>>command; // OUT : X PORT if ((command=="op")||(command=="OP")||(command=="Op")||(command=="OpenPort")||(command=="openport")||(command=="OPENPORT")) { unsigned short port_num; int port_val; printf("PORT NUM : "); cin>>port_num; printf("VALUE : "); cin>>port_val; _outp(port_num, port_val); } //HELP if ((command=="help")||(command=="HELP")||(command=="Help")) { int ch ; cout<<"[COMMAND]"<<endl; cout<<" [PORT OUT ] [1]"<<endl; cout<<" [PARALLELE PORT OUT ] [2]"<<endl; cout<<" [MOVING THE STEPPER1] [3]"<<endl; cout<<" [MOVING THE STEPPER2] [4]"<<endl; cout<<" [RETURN ] [5]"<<endl<<endl; cout<<">"; cin>>ch; switch(ch) { case 1: cout<<"Syntax : OpenPort(port number ,value)"<<endl; cout<<" : OPENPORT(port number ,value)"<<endl; cout<<" : openport(port number ,value)"<<endl; cout<<" : OP(port number ,value)"<<endl; cout<<" : Op(port number ,value)"<<endl; cout<<" : op(port number ,value)"<<endl; break; case 2: cout<<"Syntax : ppo(value)"<<endl; cout<<" : PPO(value)"<<endl; cout<<" : Ppo(value)"<<endl; cout<<" : ParallePortOut(value)"<<endl; cout<<" : paralle_port_out(value)"<<endl; break; case 3: cout<<"Syntax : move(time_millisecond)"<<endl; cout<<" : Move(time_millisecond)"<<endl; cout<<" : MOVE(time_millisecond)"<<endl; break; case 4: cout<<"Syntax : move_to(Step_number,time_millisecond)"<<endl; cout<<" : Move_To(Step_number,time_millisecond)"<<endl; cout<<" : MOVE_TO(Step_number,time_millisecond)"<<endl; break; case 5:break; default:break; } //open_file(); } // OUT : PARALLE PORT if ((command=="ppo")||(command=="PPO")||(command=="Ppo")) { printf("OUT NUM [0..1..2..4..8..16..32..64..128]: "); cin>>pval; _outp(0x378, pval); } // OUT : PARALLELE PORT if ((command=="ParallePortOut")||(command=="paralle_port_out")) { printf("OUT NUM [0..1..2..4..8..16..32..64..128]: "); cin>>pval; _outp(0x378, pval); } // STOP THE CURRENT ACTION if ((command=="stop")||(command=="Stop")||(command=="STOP")) { _outp(0x378, 0); printf("STOPPED!"); } // GET PORT /*if ((command=="in")||(command=="In")||(command=="IN")) { DWORD port_number1[5]; printf("PORT NUM : "); cin>>port_number1; cout<<_inp(port_number1); }*/ // MOVING 4 STEPS if ((command=="move")||(command=="Move")||(command=="MOVE")) { printf("SLEEPING TIME : "); cin>>stime; printf("MOVING . . . . .\n"); move(stime); } //MOVING X STEPS if ((command=="move_to")||(command=="Move_TO")||(command=="MOVE_TO")) { printf("STEP NUM : "); cin>>snbr; printf("SLEEPING TIME : "); cin>>stime; printf("MOVING . . . . .\n"); if (snbr<=4) { move_to4(snbr , stime); } if (snbr>4) { move_to4(snbr,stime); move_to44(snbr , stime); } } } return 0; } //MOVING 4 STEPS void move_to4(int step_number,int tm) { int i; for(i=1;i<=step_number;i++) { switch(i) { case 1: Sleep(tm); _outp(0x378, 1); break; case 2: Sleep(tm); _outp(0x378, 2); break; case 3: Sleep(tm); _outp(0x378, 4); break; case 4: Sleep(tm); _outp(0x378, 8); break; } } } //MOVING STEP-4 void move_to44(int step_number,int tm) { int i; for(i=1;i<=step_number-4;i++) { switch(i) { case 1: Sleep(tm); _outp(0x378, 1); break; case 2: Sleep(tm); _outp(0x378, 2); break; case 3: Sleep(tm); _outp(0x378, 4); break; case 4: Sleep(tm); _outp(0x378, 8); break; case 5: Sleep(tm); _outp(0x378, 1); break; case 6: Sleep(tm); _outp(0x378, 2); break; case 7: Sleep(tm); _outp(0x378, 3); break; case 8: Sleep(tm); _outp(0x378, 4); break; default:printf("MAX SETEPS = 12 !!"); break ; } } } void move(int tm) { int i; for(i=1;i<=4;i++) { switch(i) { case 1: Sleep(tm); _outp(0x378, 1); break; case 2: Sleep(tm); _outp(0x378, 2); break; case 3: Sleep(tm); _outp(0x378, 4); break; case 4: Sleep(tm); _outp(0x378, 8); break; } } }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
mercredi 18 juillet 2007
Statut
Membre
Dernière intervention
26 avril 2010

slt tout le monde
voila si possible j'aimerais bien avoir ce code la en vb ,car ça concerne mon pfe
Messages postés
2
Date d'inscription
mardi 16 janvier 2007
Statut
Membre
Dernière intervention
3 mai 2009

Bonjour j'aprécis bien votre gentillesse.
Cette source semble bien pouvoir regler mon probleme, je veux utiliser le port parallele mais les instructions _inp(adr); et _outp(adr,valeur) me causent quelques ennuis.
J'ai telechargé la dll inpout32.dll. Cependant ce probleme perciste encore, je veux utiliser le c à la place du c++ qui n'est pas encore de mon niveau.
Merci d'avance.
Messages postés
2
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
25 février 2008

salut yassine si t ve ux bien mettre le programme complet car je pense que ya un fichier qui manque
"stdafx.h"

merci
Messages postés
4
Date d'inscription
mercredi 19 octobre 2005
Statut
Membre
Dernière intervention
21 mars 2006

c'est pas tellement que les moteurs PaP unt une inertie très faible, même si elle est généralement inférieure à celle des moteurs DC, mais c'est surtout que leur accélération peut être fulgurante, tout comme leur couple à cause de leur bobinage...
je n'en sais pas vraiment plus, mais je crois me souvenir que le couple et l'accélération sont fonction du nombre de pas...
Mais ce qui est sur, c'est qu'un PaP mal géré peut bousiller la carte de controle (tt comme l'alimentation) et la mécanique, alors il faut veiller à ne pas aire d'accélérations trop brutales pour prolonger la vies de l'ensemble.

Sinon, cette source est intéressante, merci! je pense que je vais me pencher desus et la modifier pour controler 2 PaP en même temps par port //, comme 1 PaP bipolaire ne nécessite que 4 fils ;)
Messages postés
33
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
3 août 2007

salut
juste un ptit mot, il vaut mieux prevoir une rampe de vitesse (acceleration constante et reglable) car les moteurs pas-a-pas ont uneinertie très faible et tendent donc à bousillier la mécanique très rapidement ...
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.