Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1709 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  déterminer la vitesse d'un axe à partir d'impulsion d'un capteur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

déterminer la vitesse d'un axe à partir d'impulsion d'un capteur

n°1882404
LE TAUPIN
Posté le 09-05-2009 à 15:17:13  profilanswer
 

Salu à tous :hello:  
jauré besoin d'aide pour un peti programme :(  
 
G un axe ki tourne avec o bout un capteur
Ce capteur délivre 8 impulsion par tour
Je ve déterminer la vitesse de l'axe en tr/sec
 
G pensé a utilisé un timer mé je ne sé pa comment le programmer.
 
HELP PLEASE!! QUICK!!!

mood
Publicité
Posté le 09-05-2009 à 15:17:13  profilanswer
 

n°1882408
esox_ch
Posté le 09-05-2009 à 15:27:03  profilanswer
 

Lis la doc de ton micro-controlleur ?
Le plus simple c'est d'utiliser les input capture en général


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1882409
LE TAUPIN
Posté le 09-05-2009 à 15:30:59  profilanswer
 

c un ATmega 8535

n°1882411
LE TAUPIN
Posté le 09-05-2009 à 15:31:47  profilanswer
 

g fé ca mé je sé pa si ca va marcher  
 
interrupt [EXT_INT0]
            void ext_int0_isr(void)
                 {
                 impulsion++;
                 }
            interrupt [TIM1_COMPA]
            void timer1_compa_isr(void)
                 {
                 nb_tour_par_seconde = impulsion/8;
                 impulsion = 0;
                 PORTA.0 = !PORTA.0;
                 }                
            V = nb_tour_par_seconde/(2*3.14);

n°1882412
esox_ch
Posté le 09-05-2009 à 15:32:08  profilanswer
 

Ok je connais pas ce chip. Tu as quoi à disposition pour déterminer la vitesse?T'as des ports d'input capture ?

 

Edit : Bon, déjà tu fais un effort pour écrire correctement sinon je m'en vais ok?
À part ça, ton script marche de toutes façons pas parce que tu tiens pas en considération la fréquence à laquelle est appelée l'interruption du timer1


Message édité par esox_ch le 09-05-2009 à 15:34:17

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1882413
LE TAUPIN
Posté le 09-05-2009 à 15:33:53  profilanswer
 

je branche le capteur sur l'entrée 0 du port A
 
ya 3 timer intégré o composant


Message édité par LE TAUPIN le 09-05-2009 à 15:45:26
n°1882414
LE TAUPIN
Posté le 09-05-2009 à 15:37:29  profilanswer
 

j'ai une autre question
lorsque j'utilise un goto
est-ce que je doit déclarer le label??
Si oui comment??

n°1882416
LE TAUPIN
Posté le 09-05-2009 à 15:42:45  profilanswer
 

Sinon t'entend quoi par input capture??
si c'est plus simple je ve bien savoir ce que c'est

n°1882420
esox_ch
Posté le 09-05-2009 à 15:50:14  profilanswer
 

Donc : Pas besoin d'écrire 3 posts à la suite, tu peux très bien éditer ton post précédent.
 
T'écris en C++ non? Pourquoi tu me parles de goto?
Input Capture c'est une fonctionnalité qui est souvent présente sur les chips et qui font ce que tu veux "tous seuls". Mais dans ton cas ce n'est pas le cas.
 
T'es sur la bonne voie là, faut juste que tu modifie la "formule" que tu utilises pour trouver le rapport entre nombre d'impulsions et nombre de tours par seconde


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1882423
LE TAUPIN
Posté le 09-05-2009 à 15:58:47  profilanswer
 

ok merci  
oui je programme en c
je te parle de goto parce que j'ai un souci
j'ai intégré un goto dans mon programme mé il me dit que j'ai un warning
Le voila:  
 
unreferenced label 'retour1'

mood
Publicité
Posté le 09-05-2009 à 15:58:47  profilanswer
 

n°1882424
LE TAUPIN
Posté le 09-05-2009 à 16:00:08  profilanswer
 

comment résoudre cette erreur??

n°1882425
esox_ch
Posté le 09-05-2009 à 16:02:03  profilanswer
 

N'utilise pas de goto, t'en a pas besoin.
Arrête d'écrire plusieurs posts à la suite


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1882426
LE TAUPIN
Posté le 09-05-2009 à 16:04:41  profilanswer
 

j'utilise quoi pour remonter mon programme???

n°1882430
esox_ch
Posté le 09-05-2009 à 16:46:56  profilanswer
 

Tu écris tout dans un while


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1883418
beel1
Posté le 11-05-2009 à 20:11:43  profilanswer
 

LE TAUPIN a écrit :

g fé ca mé je sé pa si ca va marcher  
 
interrupt [EXT_INT0]
            void ext_int0_isr(void)
                 {
                 impulsion++;
                 }
            interrupt [TIM1_COMPA]
            void timer1_compa_isr(void)
                 {
                 nb_tour_par_seconde = impulsion/8;
                 impulsion = 0;
                 PORTA.0 = !PORTA.0;
                 }                
            V = nb_tour_par_seconde/(2*3.14);


Il manque toute la partie d'initialisation du micro en main. Notamment il faut déclarer PORTA.0 en entrée, l'interruption _INT0, l'interruption Timer1_Compare et spécifier la valeur de comparaison. Ensuite il faut une boucle infinie.
Genre :

Code :
  1. void main(void)
  2. {
  3.     init_PORTA();
  4.     init_Timer1();
  5.     init_INT0();
  6.     while ( 1 == 1 )
  7.     {
  8.         V = nb_tour_par_seconde/(2*3.14);
  9.     }
  10. }


Il te reste à écrire les fonctions init_ qui sont dépendantes du micro utilisé (que je ne connais pas)

n°1883431
esox_ch
Posté le 11-05-2009 à 20:37:03  profilanswer
 

beel1 a écrit :


Il manque toute la partie d'initialisation du micro en main. Notamment il faut déclarer PORTA.0 en entrée, l'interruption _INT0, l'interruption Timer1_Compare et spécifier la valeur de comparaison. Ensuite il faut une boucle infinie.
Genre :

Code :
  1. void main(void)
  2. {
  3.     init_PORTA();
  4.     init_Timer1();
  5.     init_INT0();
  6.     while ( 1 == 1 )
  7.     {
  8.         V = nb_tour_par_seconde/(2*3.14);
  9.     }
  10. }


Il te reste à écrire les fonctions init_ qui sont dépendantes du micro utilisé (que je ne connais pas)

 

La prochaine fois, histoire de faire avancer le smilblick, essaie de ne pas remonter un topic pour poster une imbécillité pareille..

 

Si on veut faire les chose bien (ce que tu suggères vu que tu sembles pinailler sur les initialisations) :
- Il doit inclure le fichier mappant les raccourcis genre PORTA vers l'adresse mémoire correspondante
- Il doit déclarer le prototype de ses fonction
- main n'est pas void mais int, donc doit finir par un return 0;
- Faut aimer se compliquer la vie pour écrire while( 1 == 1 ) au lieu que while(1)
 - Tu n'as pas initialisé V (qui, si on respecte les notations, devrait être constant vu qu'écris en majuscule)
- La formule n'a aucun sens

 

Message cité 1 fois
Message édité par esox_ch le 11-05-2009 à 20:38:08

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1883434
beel1
Posté le 11-05-2009 à 20:52:26  profilanswer
 

esox_ch a écrit :

La prochaine fois, histoire de faire avancer le smilblick, essaie de ne pas remonter un topic pour poster une imbécillité pareille..


Il est venu me chercher en MP

esox_ch a écrit :

Si on veut faire les chose bien (ce que tu suggères vu que tu sembles pinailler sur les initialisations) :
- Il doit inclure le fichier mappant les raccourcis genre PORTA vers l'adresse mémoire correspondante


Je vais pas tout écrire et je connais pas les dits fichiers pour sa plateforme. Ce qui est sûr c'est que le programme tournera pas si les interruptions ne sont pas autorisées (d'ailleurs ça aussi ça manque dans mon bout de code)

esox_ch a écrit :

- Il doit déclarer le prototype de ses fonction


évidemment, si il a jamais fait de C dans ce cas c'est même pas la peine de parler de micro et il faut tout reprendre depuis le début

esox_ch a écrit :

- main n'est pas void mais int, donc doit finir par un return 0;


Pas sur les plateformes sur lesquelles j'ai l'habitude de travailler

esox_ch a écrit :

- Faut aimer se compliquer la vie pour écrire while( 1 == 1 ) au lieu que while(1)


Déformation professionnelle, c'est comme ça dans ma règle de codage que j'utilise tous les jours

esox_ch a écrit :

- Tu n'as pas initialisé V (qui, si on respecte les notations, devrait être constant vu qu'écris en majuscule)


J'ai copié-collé sa formule, si j'avais passé V en minuscule alors qu'ailleurs dans son prog il est déclaré en majuscule ça va pas marcher. L'essentiel c'est qu'il y ait de la vie pour avancer.  

esox_ch a écrit :

- La formule n'a aucun sens


C'est la vitesse angulaire en radians par seconde, mais de toute façon elle est utilisée nulle part, c'est plus ça qui me gênerait perso.


Message édité par beel1 le 11-05-2009 à 20:53:42

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  déterminer la vitesse d'un axe à partir d'impulsion d'un capteur

 

Sujets relatifs
Diffuser un flux vidéo à partir d'une webcamformulaire + remplissage automatique de champs à partir d'un champ
Formulaire + remplir des champs automatiquement à partir d'une champlancer un .exe à partir de IE sous windows CE
[access] Mettre des champs à jour à partir de variablescréer projet à partir de code sous visual studio 2008 [10€!]
[Access 2003] champs calculé à partir de 2 tables différentescréer un plugin à partir d'un projet généré par emf
Acceder à une class à partir d'un autre fichierimporter des tables à partir d'un fichier texte
Plus de sujets relatifs à : déterminer la vitesse d'un axe à partir d'impulsion d'un capteur


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)