DynamicModel6 GPS

Salve a tutti,
sto sviluppando per la mia scuola un progetto di un computer di bordo con datalogger per un lancio di un pallone sonda che faremo il prossimo anno con gli studenti. Ho sviluppato un codice che funziona abbastanza bene e ricevo i dati dai vari sensori e li scrivo su SD, su seriale e su LCD, il tutto su ESP32.
L'unico problema che ho è che non capisco perchè se inserisco il codice per abilitare la modalità DynamicModel6 per il GPS UBX MAX M8C per farlo funzionare, non leggo più nessun valore ne su seriale ne su schermo e su seriale inizia a stampare soliti simboli come quando si sbaglia la velocità del baudrate. Il problema si verifica quando inserisco la stringa sotto l'inizializzazione del GPS che faccio in questo modo:

void setup() {
.............
  // Inizializzo il GPS 
  gpsSerial.begin(9600, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN); 

  // Configuro il GPS in modalità Dynamic Model 6
  setGPS_DynamicModel6();
............

Se elimino la stringa della Dynamic Model 6 il GPS e tutti i valori vengono mostrati correttamente e il GPS funziona. Il problema è che senza questa modalità il GPS smetterebbe di funzionare a 9000 metri di altezza. Ovviamente alla fine dello sketch poi inserisco anche la restante parte di codice come mostrato a questo link da cui ho preso spunto Getting started with Ublox Part 2 – Setting Airborne Dynamic Model | Ava High Altitude Balloon Project

void setGPS_DynamicModel6()
{
 int gps_set_sucess=0;
 uint8_t setdm6[] = {
 0xB5, 0x62, 0x06, 0x24, 0x24, 0x00, 0xFF, 0xFF, 0x06,
 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00,
 0x05, 0x00, 0xFA, 0x00, 0xFA, 0x00, 0x64, 0x00, 0x2C,
 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xDC };
 while(!gps_set_sucess)
 {
 sendUBX(setdm6, sizeof(setdm6)/sizeof(uint8_t));
 gps_set_sucess=getUBX_ACK(setdm6);
 }
}
void sendUBX(uint8_t *MSG, uint8_t len) {
 Serial.flush();
 Serial.write(0xFF);
 delay(500);
 for(int i=0; i<len; i++) {
 Serial.write(MSG[i]);
 }
}
boolean getUBX_ACK(uint8_t *MSG) {
 uint8_t b;
 uint8_t ackByteID = 0;
 uint8_t ackPacket[10];
 unsigned long startTime = millis();
 
// Construct the expected ACK packet
 ackPacket[0] = 0xB5; // header
 ackPacket[1] = 0x62; // header
 ackPacket[2] = 0x05; // class
 ackPacket[3] = 0x01; // id
 ackPacket[4] = 0x02; // length
 ackPacket[5] = 0x00;
 ackPacket[6] = MSG[2]; // ACK class
 ackPacket[7] = MSG[3]; // ACK id
 ackPacket[8] = 0; // CK_A
 ackPacket[9] = 0; // CK_B
 
// Calculate the checksums
 for (uint8_t ubxi=2; ubxi<8; ubxi++) {
 ackPacket[8] = ackPacket[8] + ackPacket[ubxi];
 ackPacket[9] = ackPacket[9] + ackPacket[8];
 }
 
while (1) {
 
// Test for success
 if (ackByteID > 9) {
 // All packets in order!
 return true;
 }
 
// Timeout if no valid response in 3 seconds
 if (millis() - startTime > 3000) {
 return false;
 }
 
// Make sure data is available to read
 if (Serial.available()) {
 b = Serial.read();
 
// Check that bytes arrive in sequence as per expected ACK packet
 if (b == ackPacket[ackByteID]) {
 ackByteID++;
 }
 else {
 ackByteID = 0; // Reset and look again, invalid order
 }
 }
 }
}

Qualcuno potrebbe aiutarmi a capire dove sbaglio e mostrarmi come integrare e a far funzionare il tutto correttamente? Eventualmente posso anche allegare il mio codice intero.

Grazie mille anticipatamente per l'aiuto.
Saluti
Buone ferie