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;
|
uint slice_moteur_A, slice_moteur_B, slice_moteur_C;
|
||||||
|
|
||||||
|
/// @brief Initialisation les entrées / sorties requises pour les moteurs
|
||||||
void Moteur_Init(){
|
void Moteur_Init(){
|
||||||
// Initialisation des broches pour les PWM
|
// Initialisation des broches pour les PWM
|
||||||
gpio_set_function(MOTEUR_A_VITESSE, GPIO_FUNC_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_A_SENS);
|
||||||
gpio_init(MOTEUR_B_SENS);
|
gpio_init(MOTEUR_B_SENS);
|
||||||
gpio_init(MOTEUR_C_SENS);
|
gpio_init(MOTEUR_C_SENS);
|
||||||
gpio_set_dir(MOTEUR_A_SENS, true);
|
gpio_set_dir(MOTEUR_A_SENS, GPIO_OUT);
|
||||||
gpio_set_dir(MOTEUR_B_SENS, true);
|
gpio_set_dir(MOTEUR_B_SENS, GPIO_OUT);
|
||||||
gpio_set_dir(MOTEUR_C_SENS, true);
|
gpio_set_dir(MOTEUR_C_SENS, GPIO_OUT);
|
||||||
|
|
||||||
// Configuration des PWM à 1 kHz
|
// Configuration des PWM à 1 kHz
|
||||||
// Clock_system 125 MHz - 16 bits PWM (65536)
|
// 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_clkdiv_int(&pwm_moteur, 2);
|
||||||
pwm_config_set_phase_correct(&pwm_moteur, false);
|
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_A, &pwm_moteur, true);
|
||||||
pwm_init(slice_moteur_B, &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 ){
|
void Moteur_SetVitesse(enum t_moteur moteur, int16_t vitesse ){
|
||||||
uint16_t u_vitesse;
|
uint16_t u_vitesse;
|
||||||
|
|
||||||
@ -70,27 +73,27 @@ void Moteur_SetVitesse(enum t_moteur moteur, int16_t vitesse ){
|
|||||||
case MOTEUR_A:
|
case MOTEUR_A:
|
||||||
pwm_set_chan_level(slice_moteur_A, PWM_CHAN_A, u_vitesse);
|
pwm_set_chan_level(slice_moteur_A, PWM_CHAN_A, u_vitesse);
|
||||||
if(vitesse < 0){
|
if(vitesse < 0){
|
||||||
gpio_put(MOTEUR_A_SENS, false);
|
gpio_put(MOTEUR_A_SENS, 0);
|
||||||
}else{
|
}else{
|
||||||
gpio_put(MOTEUR_A_SENS, true);
|
gpio_put(MOTEUR_A_SENS, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MOTEUR_B:
|
case MOTEUR_B:
|
||||||
pwm_set_chan_level(slice_moteur_B, PWM_CHAN_A, u_vitesse);
|
pwm_set_chan_level(slice_moteur_B, PWM_CHAN_A, u_vitesse);
|
||||||
if(vitesse < 0){
|
if(vitesse < 0){
|
||||||
gpio_put(MOTEUR_B_SENS, false);
|
gpio_put(MOTEUR_B_SENS, 0);
|
||||||
}else{
|
}else{
|
||||||
gpio_put(MOTEUR_B_SENS, true);
|
gpio_put(MOTEUR_B_SENS, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MOTEUR_C:
|
case MOTEUR_C:
|
||||||
pwm_set_chan_level(slice_moteur_C, PWM_CHAN_A, u_vitesse);
|
pwm_set_chan_level(slice_moteur_C, PWM_CHAN_A, u_vitesse);
|
||||||
if(vitesse < 0){
|
if(vitesse < 0){
|
||||||
gpio_put(MOTEUR_B_SENS, false);
|
gpio_put(MOTEUR_C_SENS, 0);
|
||||||
}else{
|
}else{
|
||||||
gpio_put(MOTEUR_B_SENS, true);
|
gpio_put(MOTEUR_C_SENS, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
104
test.c
104
test.c
@ -7,14 +7,16 @@
|
|||||||
#include "Temps.h"
|
#include "Temps.h"
|
||||||
#include "spi_nb.h"
|
#include "spi_nb.h"
|
||||||
#include "Servomoteur.h"
|
#include "Servomoteur.h"
|
||||||
|
#include "QEI.h"
|
||||||
|
|
||||||
const uint LED_PIN = 25;
|
const uint LED_PIN = 25;
|
||||||
|
|
||||||
#define V_INIT -999.0
|
#define V_INIT -999.0
|
||||||
|
#define TEST_TIMEOUT_US 10000000
|
||||||
|
|
||||||
int mode_test();
|
int mode_test();
|
||||||
|
|
||||||
int test_moteurs();
|
int test_moteurs();
|
||||||
|
int test_vitesse_moteur(enum t_moteur moteur);
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
bi_decl(bi_program_description("This is a test binary."));
|
bi_decl(bi_program_description("This is a test binary."));
|
||||||
@ -37,10 +39,14 @@ int main() {
|
|||||||
|
|
||||||
//while(1);
|
//while(1);
|
||||||
Temps_init();
|
Temps_init();
|
||||||
Gyro_Init();
|
Moteur_Init();
|
||||||
|
|
||||||
while(mode_test());
|
while(mode_test());
|
||||||
|
|
||||||
|
Gyro_Init();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
temps_ms = Temps_get_temps_ms();
|
temps_ms = Temps_get_temps_ms();
|
||||||
temps_ms_old = temps_ms;
|
temps_ms_old = temps_ms;
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -95,29 +101,113 @@ int main() {
|
|||||||
|
|
||||||
// Mode test : renvoie 0 pour quitter le mode test
|
// Mode test : renvoie 0 pour quitter le mode test
|
||||||
int mode_test(){
|
int mode_test(){
|
||||||
|
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("M - pour les moteurs\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)
|
switch (rep)
|
||||||
{
|
{
|
||||||
case 'M':
|
case 'M':
|
||||||
|
case 'm':
|
||||||
/* code */
|
/* code */
|
||||||
|
while(test_moteurs());
|
||||||
break;
|
break;
|
||||||
case PICO_ERROR_TIMEOUT:
|
case PICO_ERROR_TIMEOUT:
|
||||||
|
iteration--;
|
||||||
|
if(iteration == 0){
|
||||||
printf("Sortie du mode test\n");
|
printf("Sortie du mode test\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("Commande inconnue\n");
|
printf("Commande inconnue\n");
|
||||||
return 1;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int test_moteurs(){
|
int test_moteurs(){
|
||||||
|
int lettre_moteur;
|
||||||
|
|
||||||
printf("Indiquez le moteurs à tester (A, B ou C):\n");
|
printf("Indiquez le moteurs à tester (A, B ou C):\n");
|
||||||
int moteur = getchar_timeout_us(0);
|
do{
|
||||||
printf("Moteur choisi : %d %x", moteur, moteur);
|
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