roulis v2

This commit is contained in:
leo 2025-11-23 12:24:25 +01:00
parent 6c90c91fba
commit 13e7f95ce0
3 changed files with 60 additions and 4 deletions

View file

@ -1,20 +1,52 @@
#include <stm32f10x.h>
#include <roulis.h>
#include <MySPI.h>
#include <MyTimer.h>
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
}

View file

@ -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

View file

@ -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