Codeurs testés fonctionnels, moteurs testés fonctionnels - programme de test inclu
This commit is contained in:
		
							parent
							
								
									ba83f1917d
								
							
						
					
					
						commit
						67f0e3c8f2
					
				
							
								
								
									
										33
									
								
								QEI.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								QEI.c
									
									
									
									
									
								
							| @ -10,6 +10,9 @@ struct QEI_t QEI_A, QEI_B, QEI_C; | ||||
| 
 | ||||
| PIO pio_QEI = pio0; | ||||
| 
 | ||||
| const uint CODEUR_1_A = 26; | ||||
| const uint CODEUR_1_B = 27; | ||||
| 
 | ||||
| void QEI_init(){ | ||||
|     // Initialisation des 3 modules QEI
 | ||||
|     // Chaque module QEI sera dans une machine à état du PIO 0
 | ||||
| @ -21,15 +24,22 @@ void QEI_init(){ | ||||
|     if(offset != 0){ | ||||
|         printf("PIO init error: offset != 0"); | ||||
|     } | ||||
|     // bizarrement, il faut initialiser les boches en entrée pour les GPIO 26 et 27.
 | ||||
|     // Probablement car elle sont en analogique par défaut...
 | ||||
|     gpio_init(CODEUR_1_A); | ||||
|     gpio_set_dir(CODEUR_1_A, GPIO_IN); | ||||
| 
 | ||||
|     gpio_init(CODEUR_1_B); | ||||
|     gpio_set_dir(CODEUR_1_B, GPIO_IN); | ||||
| 
 | ||||
|     // Initialisation des "machines à états" :
 | ||||
|     // QEI1 : broche 26 et 27 - pio : pio0, sm : 0, Offset : 0, broches 26 et 27, clock div : 0 pour commencer
 | ||||
|     // QEI1 : broche 31 et 32 - pio : pio0, sm : 0, Offset : 0, broches (GPIO) 26 et 27, clock div : 0 pour commencer
 | ||||
|     // QEI1 : !!! Attention, il faudra modifier la carte élec !!!
 | ||||
|     quadrature_encoder_program_init(pio_QEI, 0, offset, 26, 0); | ||||
|     // QEI2: broche 26 et 27 - pio : pio0, sm : 1, Offset : 0, broches 26 et 27, clock div : 0 pour commencer
 | ||||
|     // QEI2 : broche 26 et 27 - pio : pio0, sm : 1, Offset : 0, broches (GPIO) 20 et 21, clock div : 0 pour commencer
 | ||||
|     quadrature_encoder_program_init(pio_QEI, 1, offset, 20, 0); | ||||
|     // QEI3: broche 24 et 25 - pio : pio0, sm : 1, Offset : 0, broches 26 et 27, clock div : 0 pour commencer
 | ||||
|     quadrature_encoder_program_init(pio_QEI, 2, offset, 24, 0); | ||||
|     // QEI3 : broche 24 et 25 - pio : pio0, sm : 1, Offset : 0, broches (GPIO) 18 et 19, clock div : 0 pour commencer
 | ||||
|     quadrature_encoder_program_init(pio_QEI, 2, offset, 18, 0); | ||||
| 
 | ||||
|     QEI_A.value=0; | ||||
|     QEI_B.value=0; | ||||
| @ -37,7 +47,9 @@ void QEI_init(){ | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void QEI_update(){ | ||||
| /// @brief Lit les modules QEI et stock l'écart en cette lecture et la lecture précédente.
 | ||||
| void QEI_update(void){ | ||||
|      | ||||
|     int old_value; | ||||
| 
 | ||||
|     old_value = QEI_A.value; | ||||
| @ -54,19 +66,24 @@ void QEI_update(){ | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| /// @brief Renvoi le nombre d'impulsion du module QEI depuis la lecture précédente
 | ||||
| /// Les signe sont inversés (sauf A) car le reducteur inverse le sens de rotation.
 | ||||
| /// Attention, le signe du QEI_A est inversé par rapport aux autres à cause d'un soucis sur la carte électornique
 | ||||
| /// @param  qei : Nom du module à lire (QEI_A_NAME, QEI_B_NAME ou QEI_C_NAME)
 | ||||
| /// @return Nombre d'impulsion calculé lors du dernier appel de la function QEI_Update()
 | ||||
| int QEI_get(enum QEI_name_t qei){ | ||||
|     switch (qei) | ||||
|     { | ||||
|     case QEI_A_NAME: | ||||
|         return QEI_A.value; | ||||
|         return QEI_A.delta; | ||||
|         break; | ||||
| 
 | ||||
|     case QEI_B_NAME: | ||||
|         return QEI_B.value; | ||||
|         return -QEI_B.delta; | ||||
|         break; | ||||
|      | ||||
|     case QEI_C_NAME: | ||||
|         return QEI_C.value; | ||||
|         return -QEI_C.delta; | ||||
|         break; | ||||
|      | ||||
|     default: | ||||
|  | ||||
							
								
								
									
										38
									
								
								test.c
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								test.c
									
									
									
									
									
								
							| @ -11,12 +11,16 @@ | ||||
| #include "QEI.h" | ||||
| 
 | ||||
| const uint LED_PIN = 25; | ||||
| const uint LED_PIN_ROUGE = 28; | ||||
| const uint LED_PIN_NE_PAS_UTILISER = 22; | ||||
| 
 | ||||
| 
 | ||||
| #define V_INIT -999.0 | ||||
| #define TEST_TIMEOUT_US 10000000 | ||||
| 
 | ||||
| int mode_test(); | ||||
| int test_moteurs(); | ||||
| int test_QIE(); | ||||
| int test_vitesse_moteur(enum t_moteur moteur); | ||||
| 
 | ||||
| int main() { | ||||
| @ -33,6 +37,15 @@ int main() { | ||||
|     gpio_set_dir(LED_PIN, GPIO_OUT); | ||||
|     gpio_put(LED_PIN, 1); | ||||
| 
 | ||||
|     gpio_init(LED_PIN_ROUGE); | ||||
|     gpio_set_dir(LED_PIN_ROUGE, GPIO_OUT); | ||||
|     gpio_put(LED_PIN_ROUGE, 1); | ||||
| 
 | ||||
|     // Il fuat neutraliser cettte broche qui pourrait interférer avec 
 | ||||
|     // la lecture des codeurs. (problème sur la carte électrique)...
 | ||||
|     gpio_init(LED_PIN_NE_PAS_UTILISER); | ||||
|     gpio_set_dir(LED_PIN_NE_PAS_UTILISER, GPIO_IN); | ||||
| 
 | ||||
|     sleep_ms(3000); | ||||
|     Servomoteur_Init(); | ||||
|     //puts("Debut");
 | ||||
| @ -41,6 +54,7 @@ int main() { | ||||
|     //while(1);
 | ||||
|     Temps_init(); | ||||
|     Moteur_Init(); | ||||
|     QEI_init(); | ||||
| 
 | ||||
|     while(mode_test()); | ||||
| 
 | ||||
| @ -104,12 +118,17 @@ int main() { | ||||
| int mode_test(){ | ||||
|     static int iteration = 3; | ||||
|     printf("Appuyez sur une touche pour entrer en mode test :\n"); | ||||
|     printf("C - pour les codeurs\n"); | ||||
|     printf("M - pour les moteurs\n"); | ||||
|     stdio_flush(); | ||||
|     int rep = getchar_timeout_us(TEST_TIMEOUT_US); | ||||
|     stdio_flush(); | ||||
|     switch (rep) | ||||
|     { | ||||
|     case 'C': | ||||
|     case 'c': | ||||
|         while(test_QIE()); | ||||
|         break; | ||||
|     case 'M': | ||||
|     case 'm': | ||||
|         /* code */ | ||||
| @ -130,15 +149,29 @@ int mode_test(){ | ||||
|      | ||||
| } | ||||
| 
 | ||||
| int test_QIE(){ | ||||
|     int lettre; | ||||
|     printf("Affichage des QEI :\nAppuyez sur une touche pour quitter\n"); | ||||
|     do{ | ||||
|         QEI_update(); | ||||
|         printf("Codeur a : %d, codeur B : %d, codeur C : %d\n", QEI_get(QEI_A_NAME), QEI_get(QEI_B_NAME), QEI_get(QEI_C_NAME)); | ||||
|         sleep_ms(100); | ||||
| 
 | ||||
|         lettre = getchar_timeout_us(0); | ||||
|     }while(lettre == PICO_ERROR_TIMEOUT); | ||||
|     return 0; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| int test_moteurs(){ | ||||
|     int lettre_moteur; | ||||
| 
 | ||||
|     printf("Indiquez le moteurs à tester (A, B ou C):\n"); | ||||
|     do{ | ||||
|          lettre_moteur = getchar_timeout_us(TEST_TIMEOUT_US); | ||||
|          stdio_flush(); | ||||
|     }while(lettre_moteur == PICO_ERROR_TIMEOUT); | ||||
|     printf("Moteur choisi : %c %d %x\n", lettre_moteur, lettre_moteur, lettre_moteur); | ||||
|     stdio_flush(); | ||||
| 
 | ||||
|     switch (lettre_moteur) | ||||
|     { | ||||
| @ -175,8 +208,8 @@ int test_vitesse_moteur(enum t_moteur moteur){ | ||||
|     int vitesse_moteur; | ||||
|     do{  | ||||
|         vitesse_moteur = getchar_timeout_us(TEST_TIMEOUT_US); | ||||
|         stdio_flush(); | ||||
|     }while(vitesse_moteur == PICO_ERROR_TIMEOUT); | ||||
|     stdio_flush(); | ||||
|      | ||||
|     switch (vitesse_moteur) | ||||
|     { | ||||
| @ -210,5 +243,4 @@ int test_vitesse_moteur(enum t_moteur moteur){ | ||||
|         break; | ||||
|     } | ||||
|     return 1; | ||||
| 
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user