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;
|
PIO pio_QEI = pio0;
|
||||||
|
|
||||||
|
const uint CODEUR_1_A = 26;
|
||||||
|
const uint CODEUR_1_B = 27;
|
||||||
|
|
||||||
void QEI_init(){
|
void QEI_init(){
|
||||||
// Initialisation des 3 modules QEI
|
// Initialisation des 3 modules QEI
|
||||||
// Chaque module QEI sera dans une machine à état du PIO 0
|
// Chaque module QEI sera dans une machine à état du PIO 0
|
||||||
@ -21,15 +24,22 @@ void QEI_init(){
|
|||||||
if(offset != 0){
|
if(offset != 0){
|
||||||
printf("PIO init error: 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" :
|
// 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 !!!
|
// QEI1 : !!! Attention, il faudra modifier la carte élec !!!
|
||||||
quadrature_encoder_program_init(pio_QEI, 0, offset, 26, 0);
|
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);
|
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
|
// 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, 24, 0);
|
quadrature_encoder_program_init(pio_QEI, 2, offset, 18, 0);
|
||||||
|
|
||||||
QEI_A.value=0;
|
QEI_A.value=0;
|
||||||
QEI_B.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;
|
int old_value;
|
||||||
|
|
||||||
old_value = QEI_A.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){
|
int QEI_get(enum QEI_name_t qei){
|
||||||
switch (qei)
|
switch (qei)
|
||||||
{
|
{
|
||||||
case QEI_A_NAME:
|
case QEI_A_NAME:
|
||||||
return QEI_A.value;
|
return QEI_A.delta;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QEI_B_NAME:
|
case QEI_B_NAME:
|
||||||
return QEI_B.value;
|
return -QEI_B.delta;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QEI_C_NAME:
|
case QEI_C_NAME:
|
||||||
return QEI_C.value;
|
return -QEI_C.delta;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
38
test.c
38
test.c
@ -11,12 +11,16 @@
|
|||||||
#include "QEI.h"
|
#include "QEI.h"
|
||||||
|
|
||||||
const uint LED_PIN = 25;
|
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 V_INIT -999.0
|
||||||
#define TEST_TIMEOUT_US 10000000
|
#define TEST_TIMEOUT_US 10000000
|
||||||
|
|
||||||
int mode_test();
|
int mode_test();
|
||||||
int test_moteurs();
|
int test_moteurs();
|
||||||
|
int test_QIE();
|
||||||
int test_vitesse_moteur(enum t_moteur moteur);
|
int test_vitesse_moteur(enum t_moteur moteur);
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -33,6 +37,15 @@ int main() {
|
|||||||
gpio_set_dir(LED_PIN, GPIO_OUT);
|
gpio_set_dir(LED_PIN, GPIO_OUT);
|
||||||
gpio_put(LED_PIN, 1);
|
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);
|
sleep_ms(3000);
|
||||||
Servomoteur_Init();
|
Servomoteur_Init();
|
||||||
//puts("Debut");
|
//puts("Debut");
|
||||||
@ -41,6 +54,7 @@ int main() {
|
|||||||
//while(1);
|
//while(1);
|
||||||
Temps_init();
|
Temps_init();
|
||||||
Moteur_Init();
|
Moteur_Init();
|
||||||
|
QEI_init();
|
||||||
|
|
||||||
while(mode_test());
|
while(mode_test());
|
||||||
|
|
||||||
@ -104,12 +118,17 @@ int main() {
|
|||||||
int mode_test(){
|
int mode_test(){
|
||||||
static int iteration = 3;
|
static int iteration = 3;
|
||||||
printf("Appuyez sur une touche pour entrer en mode test :\n");
|
printf("Appuyez sur une touche pour entrer en mode test :\n");
|
||||||
|
printf("C - pour les codeurs\n");
|
||||||
printf("M - pour les moteurs\n");
|
printf("M - pour les moteurs\n");
|
||||||
stdio_flush();
|
stdio_flush();
|
||||||
int rep = getchar_timeout_us(TEST_TIMEOUT_US);
|
int rep = getchar_timeout_us(TEST_TIMEOUT_US);
|
||||||
stdio_flush();
|
stdio_flush();
|
||||||
switch (rep)
|
switch (rep)
|
||||||
{
|
{
|
||||||
|
case 'C':
|
||||||
|
case 'c':
|
||||||
|
while(test_QIE());
|
||||||
|
break;
|
||||||
case 'M':
|
case 'M':
|
||||||
case 'm':
|
case 'm':
|
||||||
/* code */
|
/* 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 test_moteurs(){
|
||||||
int lettre_moteur;
|
int lettre_moteur;
|
||||||
|
|
||||||
printf("Indiquez le moteurs à tester (A, B ou C):\n");
|
printf("Indiquez le moteurs à tester (A, B ou C):\n");
|
||||||
do{
|
do{
|
||||||
lettre_moteur = getchar_timeout_us(TEST_TIMEOUT_US);
|
lettre_moteur = getchar_timeout_us(TEST_TIMEOUT_US);
|
||||||
|
stdio_flush();
|
||||||
}while(lettre_moteur == PICO_ERROR_TIMEOUT);
|
}while(lettre_moteur == PICO_ERROR_TIMEOUT);
|
||||||
printf("Moteur choisi : %c %d %x\n", lettre_moteur, lettre_moteur, lettre_moteur);
|
printf("Moteur choisi : %c %d %x\n", lettre_moteur, lettre_moteur, lettre_moteur);
|
||||||
stdio_flush();
|
|
||||||
|
|
||||||
switch (lettre_moteur)
|
switch (lettre_moteur)
|
||||||
{
|
{
|
||||||
@ -175,8 +208,8 @@ int test_vitesse_moteur(enum t_moteur moteur){
|
|||||||
int vitesse_moteur;
|
int vitesse_moteur;
|
||||||
do{
|
do{
|
||||||
vitesse_moteur = getchar_timeout_us(TEST_TIMEOUT_US);
|
vitesse_moteur = getchar_timeout_us(TEST_TIMEOUT_US);
|
||||||
}while(vitesse_moteur == PICO_ERROR_TIMEOUT);
|
|
||||||
stdio_flush();
|
stdio_flush();
|
||||||
|
}while(vitesse_moteur == PICO_ERROR_TIMEOUT);
|
||||||
|
|
||||||
switch (vitesse_moteur)
|
switch (vitesse_moteur)
|
||||||
{
|
{
|
||||||
@ -210,5 +243,4 @@ int test_vitesse_moteur(enum t_moteur moteur){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user