Test des sorties PWM et sens des moteurs : OK
This commit is contained in:
parent
e6de7a72fd
commit
26329bfeef
25
Moteurs.c
25
Moteurs.c
@ -15,7 +15,7 @@
|
||||
|
||||
uint slice_moteur_A, slice_moteur_B, slice_moteur_C;
|
||||
|
||||
|
||||
/// @brief Initialisation les entrées / sorties requises pour les moteurs
|
||||
void Moteur_Init(){
|
||||
// Initialisation des broches pour les PWM
|
||||
gpio_set_function(MOTEUR_A_VITESSE, GPIO_FUNC_PWM);
|
||||
@ -26,9 +26,9 @@ void Moteur_Init(){
|
||||
gpio_init(MOTEUR_A_SENS);
|
||||
gpio_init(MOTEUR_B_SENS);
|
||||
gpio_init(MOTEUR_C_SENS);
|
||||
gpio_set_dir(MOTEUR_A_SENS, true);
|
||||
gpio_set_dir(MOTEUR_B_SENS, true);
|
||||
gpio_set_dir(MOTEUR_C_SENS, true);
|
||||
gpio_set_dir(MOTEUR_A_SENS, GPIO_OUT);
|
||||
gpio_set_dir(MOTEUR_B_SENS, GPIO_OUT);
|
||||
gpio_set_dir(MOTEUR_C_SENS, GPIO_OUT);
|
||||
|
||||
// Configuration des PWM à 1 kHz
|
||||
// Clock_system 125 MHz - 16 bits PWM (65536)
|
||||
@ -44,7 +44,7 @@ void Moteur_Init(){
|
||||
|
||||
pwm_config_set_clkdiv_int(&pwm_moteur, 2);
|
||||
pwm_config_set_phase_correct(&pwm_moteur, false);
|
||||
pwm_config_set_wrap(&pwm_moteur, (uint16_t)65635);
|
||||
pwm_config_set_wrap(&pwm_moteur, (uint16_t)65535);
|
||||
|
||||
pwm_init(slice_moteur_A, &pwm_moteur, true);
|
||||
pwm_init(slice_moteur_B, &pwm_moteur, true);
|
||||
@ -57,6 +57,9 @@ void Moteur_Init(){
|
||||
}
|
||||
|
||||
|
||||
/// @brief Configure le PWM et la broche de sens en fonction de la vitesse et du moteur
|
||||
/// @param moteur : Moteur (voir enum t_moteur)
|
||||
/// @param vitesse : Vitesse entre -32767 et 32767
|
||||
void Moteur_SetVitesse(enum t_moteur moteur, int16_t vitesse ){
|
||||
uint16_t u_vitesse;
|
||||
|
||||
@ -70,27 +73,27 @@ void Moteur_SetVitesse(enum t_moteur moteur, int16_t vitesse ){
|
||||
case MOTEUR_A:
|
||||
pwm_set_chan_level(slice_moteur_A, PWM_CHAN_A, u_vitesse);
|
||||
if(vitesse < 0){
|
||||
gpio_put(MOTEUR_A_SENS, false);
|
||||
gpio_put(MOTEUR_A_SENS, 0);
|
||||
}else{
|
||||
gpio_put(MOTEUR_A_SENS, true);
|
||||
gpio_put(MOTEUR_A_SENS, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case MOTEUR_B:
|
||||
pwm_set_chan_level(slice_moteur_B, PWM_CHAN_A, u_vitesse);
|
||||
if(vitesse < 0){
|
||||
gpio_put(MOTEUR_B_SENS, false);
|
||||
gpio_put(MOTEUR_B_SENS, 0);
|
||||
}else{
|
||||
gpio_put(MOTEUR_B_SENS, true);
|
||||
gpio_put(MOTEUR_B_SENS, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case MOTEUR_C:
|
||||
pwm_set_chan_level(slice_moteur_C, PWM_CHAN_A, u_vitesse);
|
||||
if(vitesse < 0){
|
||||
gpio_put(MOTEUR_B_SENS, false);
|
||||
gpio_put(MOTEUR_C_SENS, 0);
|
||||
}else{
|
||||
gpio_put(MOTEUR_B_SENS, true);
|
||||
gpio_put(MOTEUR_C_SENS, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
104
test.c
104
test.c
@ -7,14 +7,16 @@
|
||||
#include "Temps.h"
|
||||
#include "spi_nb.h"
|
||||
#include "Servomoteur.h"
|
||||
#include "QEI.h"
|
||||
|
||||
const uint LED_PIN = 25;
|
||||
|
||||
#define V_INIT -999.0
|
||||
#define TEST_TIMEOUT_US 10000000
|
||||
|
||||
int mode_test();
|
||||
|
||||
int test_moteurs();
|
||||
int test_vitesse_moteur(enum t_moteur moteur);
|
||||
|
||||
int main() {
|
||||
bi_decl(bi_program_description("This is a test binary."));
|
||||
@ -37,10 +39,14 @@ int main() {
|
||||
|
||||
//while(1);
|
||||
Temps_init();
|
||||
Gyro_Init();
|
||||
Moteur_Init();
|
||||
|
||||
while(mode_test());
|
||||
|
||||
Gyro_Init();
|
||||
|
||||
|
||||
|
||||
temps_ms = Temps_get_temps_ms();
|
||||
temps_ms_old = temps_ms;
|
||||
while (1) {
|
||||
@ -95,29 +101,113 @@ int main() {
|
||||
|
||||
// Mode test : renvoie 0 pour quitter le mode test
|
||||
int mode_test(){
|
||||
static int iteration = 3;
|
||||
printf("Appuyez sur une touche pour entrer en mode test :\n");
|
||||
printf("M - pour les moteurs\n");
|
||||
int rep = getchar_timeout_us(10000000);
|
||||
stdio_flush();
|
||||
int rep = getchar_timeout_us(TEST_TIMEOUT_US);
|
||||
stdio_flush();
|
||||
switch (rep)
|
||||
{
|
||||
case 'M':
|
||||
case 'm':
|
||||
/* code */
|
||||
|
||||
while(test_moteurs());
|
||||
break;
|
||||
case PICO_ERROR_TIMEOUT:
|
||||
iteration--;
|
||||
if(iteration == 0){
|
||||
printf("Sortie du mode test\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
default:
|
||||
printf("Commande inconnue\n");
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
int test_moteurs(){
|
||||
int lettre_moteur;
|
||||
|
||||
printf("Indiquez le moteurs à tester (A, B ou C):\n");
|
||||
int moteur = getchar_timeout_us(0);
|
||||
printf("Moteur choisi : %d %x", moteur, moteur);
|
||||
do{
|
||||
lettre_moteur = getchar_timeout_us(TEST_TIMEOUT_US);
|
||||
}while(lettre_moteur == PICO_ERROR_TIMEOUT);
|
||||
printf("Moteur choisi : %c %d %x\n", lettre_moteur, lettre_moteur, lettre_moteur);
|
||||
stdio_flush();
|
||||
|
||||
switch (lettre_moteur)
|
||||
{
|
||||
case 'A':
|
||||
case 'a':
|
||||
while(test_vitesse_moteur(MOTEUR_A));
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
case 'b':
|
||||
while(test_vitesse_moteur(MOTEUR_B));
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
case 'c':
|
||||
while(test_vitesse_moteur(MOTEUR_C));
|
||||
break;
|
||||
|
||||
case 'Q':
|
||||
case 'q':
|
||||
return 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int test_vitesse_moteur(enum t_moteur moteur){
|
||||
printf("Vitesse souhaitée :\n0 - 0%%\n1 - 10%%\n2 - 20%%\n...\n9 - 90%%\nA - 100%%\n");
|
||||
|
||||
int vitesse_moteur;
|
||||
do{
|
||||
vitesse_moteur = getchar_timeout_us(TEST_TIMEOUT_US);
|
||||
}while(vitesse_moteur == PICO_ERROR_TIMEOUT);
|
||||
stdio_flush();
|
||||
|
||||
switch (vitesse_moteur)
|
||||
{
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
printf("Vitesse choisie : %c0%%\n", vitesse_moteur);
|
||||
Moteur_SetVitesse(moteur, (vitesse_moteur - '0') * 32767.0 / 10.);
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
case 'a':
|
||||
printf("Vitesse choisie : 100%%\n");
|
||||
Moteur_SetVitesse(moteur, (int16_t) 32766.0);
|
||||
break;
|
||||
|
||||
|
||||
case 'q':
|
||||
case 'Q':
|
||||
return 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user