sur la voie du debug des fonctions du gyroscope
This commit is contained in:
parent
c8e6912e89
commit
f68175ce05
10
gyro.c
10
gyro.c
@ -73,7 +73,7 @@ void Gyro_Init(void){
|
|||||||
if(!gyro_config()){
|
if(!gyro_config()){
|
||||||
puts("gyro_config ok !");
|
puts("gyro_config ok !");
|
||||||
}else{
|
}else{
|
||||||
printf("gyro_config FAILED !");
|
puts("gyro_config FAILED !");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,13 +84,8 @@ void Gyro_Init(void){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Gyro_Read(uint16_t step_ms){
|
void Gyro_Read(uint16_t step_ms){
|
||||||
uint8_t tampon[10]="\0\0\0\0\0\0\0\0\0";
|
|
||||||
uint8_t tampon2[10]="ABCDEFGHI";
|
|
||||||
int16_t rot_x, rot_y, rot_z;
|
|
||||||
static double angle_x=0, angle_y=0, angle_z=0;
|
|
||||||
struct t_angle_gyro * _vitesse_angulaire_brute;
|
struct t_angle_gyro * _vitesse_angulaire_brute;
|
||||||
struct t_angle_gyro m_vitesse_angulaire_brute;
|
struct t_angle_gyro m_vitesse_angulaire_brute;
|
||||||
int nb_recu;
|
|
||||||
|
|
||||||
_vitesse_angulaire_brute = &m_vitesse_angulaire_brute;
|
_vitesse_angulaire_brute = &m_vitesse_angulaire_brute;
|
||||||
|
|
||||||
@ -98,7 +93,7 @@ void Gyro_Read(uint16_t step_ms){
|
|||||||
gyro_get_vitesse_brute(_vitesse_angulaire_brute, vitesse_calibration);
|
gyro_get_vitesse_brute(_vitesse_angulaire_brute, vitesse_calibration);
|
||||||
//gyro_get_angles(&vitesse_angulaire, NULL);
|
//gyro_get_angles(&vitesse_angulaire, NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
// conversion de la vitesse angulaire en degré/seconde
|
// conversion de la vitesse angulaire en degré/seconde
|
||||||
gyro_get_vitesse_normalisee(_vitesse_angulaire_brute, vitesse_angulaire);
|
gyro_get_vitesse_normalisee(_vitesse_angulaire_brute, vitesse_angulaire);
|
||||||
|
|
||||||
@ -108,6 +103,7 @@ void Gyro_Read(uint16_t step_ms){
|
|||||||
angle_gyro.rot_x = angle_gyro.rot_x + vitesse_angulaire->rot_x * step_ms * 0.001;
|
angle_gyro.rot_x = angle_gyro.rot_x + vitesse_angulaire->rot_x * step_ms * 0.001;
|
||||||
angle_gyro.rot_y = angle_gyro.rot_y + vitesse_angulaire->rot_y * step_ms * 0.001;
|
angle_gyro.rot_y = angle_gyro.rot_y + vitesse_angulaire->rot_y * step_ms * 0.001;
|
||||||
angle_gyro.rot_z = angle_gyro.rot_z + vitesse_angulaire->rot_z * step_ms * 0.001;
|
angle_gyro.rot_z = angle_gyro.rot_z + vitesse_angulaire->rot_z * step_ms * 0.001;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t gyro_get_temp(void){
|
int16_t gyro_get_temp(void){
|
||||||
|
@ -40,28 +40,6 @@ int gyro_spi_wr_32bits(uint8_t *transmit_buffer, uint8_t *recieve_buffer){
|
|||||||
cs_deselect();
|
cs_deselect();
|
||||||
}
|
}
|
||||||
|
|
||||||
int gyro_read_register_blocking(uint8_t registrer, uint8_t *tampon, uint8_t nb_a_lire){
|
|
||||||
uint8_t tampon_envoi[4]="\0\0\0\0";
|
|
||||||
int nb_recu;
|
|
||||||
tampon_envoi[0] = registrer;
|
|
||||||
|
|
||||||
// Envoie commande N
|
|
||||||
cs_select();
|
|
||||||
spi_write_blocking(spi0, tampon_envoi, 4);
|
|
||||||
nb_recu = spi_read_blocking(spi0, 0, tampon, nb_a_lire);
|
|
||||||
cs_deselect();
|
|
||||||
|
|
||||||
// A faire passer à 0,1 µs
|
|
||||||
sleep_us(1);
|
|
||||||
|
|
||||||
// lire reponse N
|
|
||||||
cs_select();
|
|
||||||
spi_write_blocking(spi0, tampon_envoi, 4);
|
|
||||||
nb_recu = spi_read_blocking(spi0, 0, tampon, nb_a_lire);
|
|
||||||
cs_deselect();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void affiche_tampon_32bits(uint8_t *tampon){
|
void affiche_tampon_32bits(uint8_t *tampon){
|
||||||
uint32_t valeur;
|
uint32_t valeur;
|
||||||
valeur = (tampon[0] << 24) + (tampon[1] << 16) + (tampon[2]<<8) + tampon[3];
|
valeur = (tampon[0] << 24) + (tampon[1] << 16) + (tampon[2]<<8) + tampon[3];
|
||||||
@ -70,10 +48,7 @@ void affiche_tampon_32bits(uint8_t *tampon){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int gyro_get_sensor_data(){
|
int gyro_get_sensor_data(uint8_t tampon_envoi[], uint8_t tampon_reception[]){
|
||||||
uint8_t tampon_envoi[5]="\0\0\0\0\0";
|
|
||||||
uint8_t tampon_reception[5]="\0\0\0\0\0";
|
|
||||||
|
|
||||||
tampon_envoi[0] = 0x30;
|
tampon_envoi[0] = 0x30;
|
||||||
tampon_envoi[1] = 0x00;
|
tampon_envoi[1] = 0x00;
|
||||||
tampon_envoi[2] = 0x00;
|
tampon_envoi[2] = 0x00;
|
||||||
@ -81,12 +56,12 @@ int gyro_get_sensor_data(){
|
|||||||
gyro_spi_wr_32bits(tampon_envoi, tampon_reception);
|
gyro_spi_wr_32bits(tampon_envoi, tampon_reception);
|
||||||
Gyro_traitementDonnees(tampon_reception);
|
Gyro_traitementDonnees(tampon_reception);
|
||||||
if(Gyro_SensorData.SQ != 0x4){
|
if(Gyro_SensorData.SQ != 0x4){
|
||||||
printf("Gyro_Data - SQ bits (%#01x)!= 0x4\n", Gyro_SensorData.SQ);
|
printf("Gyro Failed - SQ bits (%#3x)!= 0x4\n", Gyro_SensorData.SQ);
|
||||||
affiche_tampon_32bits(tampon_reception);
|
affiche_tampon_32bits(tampon_reception);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(Gyro_SensorData.ST != 0x1){
|
if(Gyro_SensorData.ST != 0x1){
|
||||||
printf("Gyro_Data - Status (%#01x)!= 0x1\n", Gyro_SensorData.ST);
|
printf("Gyro Failed - Status (%#3x)!= 0x1\n", Gyro_SensorData.ST);
|
||||||
affiche_tampon_32bits(tampon_reception);
|
affiche_tampon_32bits(tampon_reception);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -171,25 +146,41 @@ int gyro_init_check(){
|
|||||||
|
|
||||||
sleep_us(1); // t=200ms + 2TD
|
sleep_us(1); // t=200ms + 2TD
|
||||||
printf("T=200ms+2TD\n");
|
printf("T=200ms+2TD\n");
|
||||||
tampon_envoi[0] = 0x30;
|
tampon_envoi[0] = 0x00;
|
||||||
tampon_envoi[1] = 0x00;
|
tampon_envoi[1] = 0x00;
|
||||||
tampon_envoi[2] = 0x00;
|
tampon_envoi[2] = 0x00;
|
||||||
tampon_envoi[3] = 0x01;
|
tampon_envoi[3] = 0x00;
|
||||||
gyro_spi_wr_32bits(tampon_envoi, tampon_reception);
|
if(gyro_get_sensor_data(tampon_envoi, tampon_reception)){
|
||||||
Gyro_traitementDonnees(tampon_reception);
|
|
||||||
if(Gyro_SensorData.SQ != 0x4){
|
|
||||||
printf("Gyro_Init - SQ bits (%#01x)!= 0x4\n", Gyro_SensorData.SQ);
|
|
||||||
affiche_tampon_32bits(tampon_reception);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(Gyro_SensorData.ST != 0x1){
|
|
||||||
printf("Gyro_Init - Status (%#01x)!= 0x1\n", Gyro_SensorData.ST);
|
|
||||||
affiche_tampon_32bits(tampon_reception);
|
for(int i=3; i<10; i++){
|
||||||
|
sleep_us(1); // t=200ms + 3TD
|
||||||
|
printf("T=200ms+%dTD\n", i);
|
||||||
|
if(gyro_get_sensor_data(tampon_envoi, tampon_reception)){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
affiche_tampon_32bits(tampon_reception);
|
}
|
||||||
|
|
||||||
|
for(int i=10; i<20; i++){
|
||||||
|
gyro_get_vitesse_brute(NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=20; i<30; i++){
|
||||||
|
sleep_us(1); // t=200ms + 3TD
|
||||||
|
printf("T=200ms+%dTD\n", i);
|
||||||
|
if(gyro_get_sensor_data(tampon_envoi, tampon_reception)){
|
||||||
|
//return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//DEBUG
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -200,16 +191,16 @@ int gyro_config(){
|
|||||||
|
|
||||||
|
|
||||||
void gyro_get_vitesse_brute(struct t_angle_gyro* angle_gyro, struct t_angle_gyro* angle_gyro_moy){
|
void gyro_get_vitesse_brute(struct t_angle_gyro* angle_gyro, struct t_angle_gyro* angle_gyro_moy){
|
||||||
uint8_t tampon[10]="\0\0\0\0\0\0\0\0\0";
|
uint8_t tampon_envoi[5]="\0\0\0\0\0";
|
||||||
int16_t rot_x, rot_y, rot_z;
|
uint8_t tampon_reception[5]="\0\0\0\0\0";
|
||||||
|
int16_t rot_z;
|
||||||
|
|
||||||
|
sleep_us(1); // A supprimer plus tard
|
||||||
if(gyro_get_sensor_data()){
|
printf("T=READ\n");
|
||||||
printf("GYRO : Erreur d'acquisition !\n");
|
if(gyro_get_sensor_data(tampon_envoi, tampon_reception)){
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
rot_x = 0;
|
|
||||||
rot_y = 0;
|
|
||||||
rot_z = Gyro_SensorData.rateData;
|
rot_z = Gyro_SensorData.rateData;
|
||||||
|
|
||||||
if(angle_gyro_moy == NULL){
|
if(angle_gyro_moy == NULL){
|
||||||
@ -220,7 +211,7 @@ void gyro_get_vitesse_brute(struct t_angle_gyro* angle_gyro, struct t_angle_gyro
|
|||||||
angle_gyro->rot_x = 0;
|
angle_gyro->rot_x = 0;
|
||||||
angle_gyro->rot_y = 0;
|
angle_gyro->rot_y = 0;
|
||||||
angle_gyro->rot_z = (int32_t) rot_z * 32 - angle_gyro_moy->rot_z;
|
angle_gyro->rot_z = (int32_t) rot_z * 32 - angle_gyro_moy->rot_z;
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void gyro_get_vitesse_normalisee(struct t_angle_gyro* _vitesse_angulaire,
|
void gyro_get_vitesse_normalisee(struct t_angle_gyro* _vitesse_angulaire,
|
||||||
|
2
test.c
2
test.c
@ -46,6 +46,7 @@ int main() {
|
|||||||
// Tous les pas de step_ms
|
// Tous les pas de step_ms
|
||||||
if(Temps_get_temps_ms() % step_ms){
|
if(Temps_get_temps_ms() % step_ms){
|
||||||
Gyro_Read(step_ms);
|
Gyro_Read(step_ms);
|
||||||
|
/*
|
||||||
//gyro_affiche(gyro_get_vitesse(), "Angle :");
|
//gyro_affiche(gyro_get_vitesse(), "Angle :");
|
||||||
// Filtre
|
// Filtre
|
||||||
angle_gyro = gyro_get_vitesse();
|
angle_gyro = gyro_get_vitesse();
|
||||||
@ -61,6 +62,7 @@ int main() {
|
|||||||
|
|
||||||
printf("%f, %f, %f, %f\n", (double)temps_ms_old / 1000, vitesse_filtre_x, vitesse_filtre_y, vitesse_filtre_z);
|
printf("%f, %f, %f, %f\n", (double)temps_ms_old / 1000, vitesse_filtre_x, vitesse_filtre_y, vitesse_filtre_z);
|
||||||
//gyro_affiche(angle_gyro, "Vitesse (°/s),");
|
//gyro_affiche(angle_gyro, "Vitesse (°/s),");
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toutes les 50 ms
|
// Toutes les 50 ms
|
||||||
|
Loading…
Reference in New Issue
Block a user