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);
|
||||
}while(vitesse_moteur == PICO_ERROR_TIMEOUT);
|
||||
stdio_flush();
|
||||
}while(vitesse_moteur == PICO_ERROR_TIMEOUT);
|
||||
|
||||
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