Changement batterie et transmission

This commit is contained in:
leo 2025-11-30 12:39:05 +01:00
parent 9bda2e8891
commit 30b6ef8c92
7 changed files with 63 additions and 22 deletions

View file

@ -14,22 +14,33 @@ void MyBatterie_Init(void){
MyADC_Init(ADC1,14); // Init ADC channel 14 pour convertir valeur
MyADC_ActiveIT(ADC1,15,&handler_ADC); // Init interruption quand conversion finie
My_USART_Init(USART1); // Init USART pour envoyer batterie
//My_USART_Init(USART1); // Init USART pour envoyer batterie
start_conversion(ADC1); // Premiere conversion
}
void handler_ADC (void){
//last2++;
if (tickms - last2 >= 2000) {
last2 = tickms;
//if (tickms - last2 >= 2000) {
//last2 = tickms;
d = ADC1->DR &~ (0xF << 12); // Retourne valeur numérique
d = d*3.3/4096;
d = d*13*100/12;
send_USART_String(USART1,"Batterie : ");
send_USART(USART1,((int)d/10) + '0'); // Envoie le chiffre des dizaines
send_USART(USART1,((int)d%10) + '0'); // Envoie le chiffre des unités
send_USART_String(USART1,"%\n");
//send_USART_String(USART1,"Batterie : ");
//send_USART(USART1,((int)d/10) + '0'); // Envoie le chiffre des dizaines
//send_USART(USART1,((int)d%10) + '0'); // Envoie le chiffre des unités
//send_USART_String(USART1,"%\n");
//}
//start_conversion(ADC1); // Recommence la conversion pour le prochain
}
void Gestion_Conversion_ADC(void){
if (tickms - last2 >= 1000) {
last2 = tickms;
start_conversion(ADC1);
}
start_conversion(ADC1); // Recommence la conversion pour le prochain
}
int MyBatterie_val(){
return (int)d;
}

View file

@ -5,5 +5,7 @@
void MyBatterie_Init(void);
void handler_ADC(void);
void Gestion_Conversion_ADC(void);
int MyBatterie_val();
#endif

View file

@ -4,6 +4,7 @@
extern uint32_t tickms;
uint32_t last1 = 0;
uint32_t last3 = 0;
void Transmission_Init(void){
My_USART_Init(USART1);
@ -20,4 +21,19 @@ void Transmission_allure(int angle_voiles){
else if (angle_voiles <= 90) send_USART_String(USART1,"Le bateau navigue vent arriere. \n");
else send_USART_String(USART1,"ERREUR DANS L'ANGLE!! \n");
}
}
void Transmission_batterie(int batterie){
if (tickms-last3 >= 5000){
last3 = tickms;
if(batterie > 50){
send_USART_String(USART1,"Batterie : ");
}
else{
send_USART_String(USART1, "ATTENTION LA BATTERIE EST SOUS LES 50% : ");
}
send_USART(USART1,(batterie/10) + '0'); // Envoie le chiffre des dizaines
send_USART(USART1,(batterie%10) + '0'); // Envoie le chiffre des unités
send_USART_String(USART1,"%\n");
}
}

View file

@ -3,5 +3,6 @@
void Transmission_Init(void);
void Transmission_allure(int angle_voiles);
void Transmission_batterie(int batterie);
#endif

View file

@ -37,11 +37,6 @@ void MyRoulis_Init(void){
void MyRoulis_Data(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
// x1 = MySPI_Read(); // premier byte
// x2 = MySPI_Read(); // deuxième byte
// MySPI_Set_NSS(); // Fin transmission X
MySPI_Clear_NSS(); // Début transmission Y
MySPI_Send((0x34)|(1<<7)|(1<<6)); // On veut lire les 2 bytes DATAY
@ -58,11 +53,10 @@ void MyRoulis_Data(void){
float MyRoulis_Angle(){
//Calcul de l'angle alpha
//int x = x1 + (x2 << 8);
y = y1 + (y2 << 8);
z = z1 + (z2 << 8);
a = (float)z*32.0/(float)(1<<10);
b = (float)y*32.0/(float)(1<<10);
a = (float)z*32.0/(float)(1<<10); // Doit être compris entre -1 et 1
b = (float)y*32.0/(float)(1<<10); // Egalement : Pour vérifier que l'on récupère des valeurs cogérentes
alpha = atan((float)y/(float)z);
return alpha;
}

View file

@ -8,13 +8,15 @@ void MyADC_Init(ADC_TypeDef *ADC, char channel){
else if (ADC == ADC2) RCC->APB2ENR |= RCC_APB2ENR_ADC2EN;
RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6; // Passage de l'horloge a 12MHz
ADC->CR2 |= ADC_CR2_ADON; // Démarrage ADC
ADC->SQR1 &= ADC_SQR1_L; // Fixe nb de conversion à faire : 1
ADC->SQR1 &=~ ADC_SQR1_L; // Fixe nb de conversion à faire : 1
ADC->SQR3 = channel; // Fixe la voie à convertir
ADC->CR2 |= ADC_CR2_EXTTRIG;
ADC->CR2 |= ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_2;
}
void start_conversion(ADC_TypeDef *ADC){
ADC->CR2 |= ADC_CR2_EXTSEL;
ADC->CR2 |= ADC_CR2_EXTTRIG; // Permettre le démarage externe
//ADC->CR2 |= ADC_CR2_EXTSEL;
//ADC->CR2 |= ADC_CR2_EXTTRIG; // Permettre le démarage externe
ADC->CR2 |= ADC_CR2_SWSTART; // demander une conversion externe
//Si on veut faire par scrutation et non par intéruption, laisser les lignes suivantes
//while(!(ADC->SR & ADC_SR_EOC)); // attendre la fin (EOC = 1)

View file

@ -21,8 +21,23 @@ prio interruption timer2 : 0
Batterie :
?PC4 : Floating input (ADC12 CHANNEL14)
!PA9 : Alternate output push pull (UART1 TX)
prio interruption ADC : 15
Fonctionnement de la batterie okay, il faut voir quand est-ce qu'on recommence la conversion ou quand est-ce qu'on envoie la batterie.
Il faudrait vérifier le driver SPI qui ne fonctionne pas.
Transmission :
!PA9 : Alternate output push pull (UART1 TX)
Transmet allure du bateau et batterie à UART
Systick :
Créer un timer qui compte par ms avec systick du systeme
Le service plateau envoie la PWM et le bit de sens en permanence
Le service roulis renvoie l'angle de roulis
Le service batterie permet maintenant de renvoyer la batterie, nouvelle conversion toutes les Xms
Le service transmission utilise la valeur de la batterie et la valeur de l'angle des voiles pour envoyer à UART toutes les Xms
Le SPI ne marche toujours pas