Bonjour à tous,
J'ai un circuit sur lequel je récupère un courant (lecture d'une tension sur le pic grâce à un shunt) d'après une commande de température.
Je souhaites réaliser une fonction qui me retourne le point de courant minimum sur une courbe Température(Courant).
Pour celà, je pensais procéder de la manière suivante :
1- Lors de l'appel de la fonction, je définis un nombre de points. A partir desquels je viens remplir un tableau (colonne 1 : consigne T°C et colonne 2 : lecture courant)
Ensuite, je récupère le point en température, dans le tableau, pour lequel le courant est minimum.
2- Je réalise, autour de ce point, une boucle dé/incrémentant la température pour atteindre le courant le plus faible de la courbe. Enfin, je retourne le point en T°C pour lequel le courant est le plus faible.
Pouvez m'aider sur la définition des variables qui me retournent des erreurs et votre avis pour optimiser/corriger le code.Code:unsigned long Ctrl_Tdeg ( int Pts_Tdeg ) { unsigned long Tab_I[Pts_Tdeg+1][2] = {0}; // Définir un tableau de deux colonnes contenant le courant mesuré suivant la consigne de température unsigned long I_Min = I_Mesure; // Entrée analogique I_Mesure => #define I_Mesure ANSELBbits.ANSB3 = 1; unsigned long TdegI_Min; unsigned Pas = 10; // Boucle 1 : on enregistre dans le tableau le courant mesuré for (int i=0;i<=Pts_Tdeg;i++) { Tab_I[i][0] = Config_Tdeg(15+(i*(50/Pts_Tdeg))); // Appel la fonction Config_Tdeg( unsigned long Tdeg_Consigne) qui envoie la consigne de température sur le circuit pour 15°C à 65°C Tab_I[i][1] = I_Mesure; if (Tab_I[i][1] < I_Min) { TdegI_Min = Tab_I[i][0]; I_Min = Tab_I[i][1]; } } // Boucle 2 : Pour un nombre de points en température, on connait le point de courant minimum. On va donc incrémenter/décrementer pour se rapprocher de la valeur minimum de la courbe do { do { TdegI_Min += ((50/Pts_Tdeg)/Pas); I_Min = I_Mesure; } while (I_Mesure < I_Min) do { TdegI_Min -= ((50/Pts_Tdeg)/Pas); I_Min = I_Mesure; } while (I_Mesure < I_Min) Pas = Pas / 5; } while((Pas >= (1/2)) && ((15) < TdegI_Min < (65))) return ( TdegI_Min ); }
Merci d'avance.
-----