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

déterminer la vitesse d'un axe à partir d'impulsion d'un capteur - C++ - Programmation

Marsh Posté le 09-05-2009 à 15:17:13    

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!!!

Reply

Marsh Posté le 09-05-2009 à 15:17:13   

Reply

Marsh Posté le 09-05-2009 à 15:27:03    

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
Reply

Marsh Posté le 09-05-2009 à 15:30:59    

c un ATmega 8535

Reply

Marsh Posté le 09-05-2009 à 15:31:47    

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);

Reply

Marsh Posté le 09-05-2009 à 15:32:08    

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
Reply

Marsh Posté le 09-05-2009 à 15:33:53    

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
Reply

Marsh Posté le 09-05-2009 à 15:37:29    

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

Reply

Marsh Posté le 09-05-2009 à 15:42:45    

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

Reply

Marsh Posté le 09-05-2009 à 15:50:14    

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
Reply

Marsh Posté le 09-05-2009 à 15:58:47    

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'

Reply

Marsh Posté le 09-05-2009 à 15:58:47   

Reply

Marsh Posté le 09-05-2009 à 16:00:08    

comment résoudre cette erreur??

Reply

Marsh Posté le 09-05-2009 à 16:02:03    

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
Reply

Marsh Posté le 09-05-2009 à 16:04:41    

j'utilise quoi pour remonter mon programme???

Reply

Marsh Posté le 09-05-2009 à 16:46:56    

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
Reply

Marsh Posté le 11-05-2009 à 20:11:43    

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)

Reply

Marsh Posté le 11-05-2009 à 20:37:03    

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
Reply

Marsh Posté le 11-05-2009 à 20:52:26    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed