From 13e7f95ce07ffd0c54a528ae44a492dfd21bb556 Mon Sep 17 00:00:00 2001 From: leo Date: Sun, 23 Nov 2025 12:24:25 +0100 Subject: [PATCH] roulis v2 --- Services/roulis.c | 36 ++++++++++++++++++++++++++++++++++-- Services/roulis.h | 4 +++- readme.txt | 24 +++++++++++++++++++++++- 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/Services/roulis.c b/Services/roulis.c index f88b48a..00a1516 100644 --- a/Services/roulis.c +++ b/Services/roulis.c @@ -1,20 +1,52 @@ #include #include #include +#include void MyRoulis_Init(void){ MySPI_Init(SPI1); - MySPI_Clear_NSS(); // Initialisation des registres externes + MySPI_Clear_NSS(); // Déput transmission MySPI_Send((0x2D|(1<<7))); // On veut écrire à l'adresse de POWER_CTL : 0x2D MySPI_Send(1<<3); // On veut mettre le bit "measure" à 1; + MySPI_Set_NSS(); // Fin transmission + MySPI_Clear_NSS(); MySPI_Send((0x2C)|(1<<7)); // On veut écrire à l'adresse de BW_RATE MySPI_Send(0x0A); + MySPI_Set_NSS(); + MySPI_Clear_NSS(); MySPI_Send((0x31)|(1<<7)); // On veut écrire à l'adresse de DATA_FORMAT MySPI_Send(0x03); - MySPI_Set_NSS(); + + MyTimer_Init(TIM2,3600,200); // Configurer le timer2 a 100Hz + MyTimer_ActiveIT(TIM2,0,&MyRoulis_angle);// Configurer interruption sur timer2 + MyTimer_Base_Start(TIM2); +} + +void MyRoulis_angle(void){ + + // Récupération des registred DATAX0..DATAZ1 (6 registres) + MySPI_Clear_NSS(); // Début transmission X + MySPI_Send((0x32)|(0<<7)|(1<<6)); // On veut lire les 2 bytes DATAX + char x1 = MySPI_Read(); // premier byte + char x2 = MySPI_Read(); // deuxième byte + MySPI_Set_NSS(); // Fin transmission X + + MySPI_Clear_NSS(); // Début transmission Y + MySPI_Send((0x34)|(0<<7)|(1<<6)); // On veut lire les 2 bytes DATAY + char y1 = MySPI_Read(); // premier byte + char y2 = MySPI_Read(); // deuxième byte + MySPI_Set_NSS(); // Fin transmission X + + MySPI_Clear_NSS(); // Début transmission Z + MySPI_Send((0x36)|(0<<7)|(1<<6)); // On veut lire les 2 bytes DATAZ + char z1 = MySPI_Read(); // premier byte + char z2 = MySPI_Read(); // deuxième byte + MySPI_Set_NSS(); // Fin transmission Z + + // Calcul de l'angle alpha } \ No newline at end of file diff --git a/Services/roulis.h b/Services/roulis.h index 6ed98a5..8949e61 100644 --- a/Services/roulis.h +++ b/Services/roulis.h @@ -3,9 +3,11 @@ /* Description des besoins au niveau service (ne pas oublier de gérer cs/NSS !!!) - Fonction d'init de l'accéléromètre -- Fonction de calcul angle de roulis sur interruption externe GPIOA pin 6 +- Fonction de calcul angle de roulis sur interruption externe GPIOA pin 6 +Ou sinon sur interruption d'un timer a 100HZ */ void MyRoulis_Init(void); +void MyRoulis_angle(void); #endif \ No newline at end of file diff --git a/readme.txt b/readme.txt index 3e114db..a6f59cb 100644 --- a/readme.txt +++ b/readme.txt @@ -1 +1,23 @@ -Fin du drivers SPI, il faudrait maintenant vérifier son fonctionnement. +Fin du drivers SPI, il faudrait maintenant vérifier son fonctionnement et faire le roulis. + +Port map carte nucléo : + +Plateau : + +Timer 3 (channel 3) +? PA1 : Output push pull (bit sens) +! PA9 : Alternate output push pull (ligne TX UART1, not used) +! PA10 : Floating input (ligne RX UART1) +! PB0 : Alternate output push pull (PWM) +prio interruption usart1 : 6 + + +SPI / roulis : + +! PA4 : Output push pull (SPI1 NSS) +! PA5 : Alternate output push pull (SPI1 SCK) +! PA6 : Floating input (SPI1 MISO) +! PA7 : Alternate output push pull (SPI1 MOSI) +prio interruption timer2 : 0 + +Pour le roulis, je ne suis pas sur de comment retourner l'angle (par interruption d'un timer?? si oui comment le retourner??), il faut voir comment le calculer aussi \ No newline at end of file