richard misi
/
STM32F303-ESSAI-DS3231-16102018
Essai ds3132
objet.h
- Committer:
- RCMISbed
- Date:
- 2018-10-17
- Revision:
- 0:13c98588f2fc
File content as of revision 0:13c98588f2fc:
#include <string> //1- Definition/ Constantes //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #define wBUFFER 300 // Processus principal/ Trame/ Profondeur MAX du buffer de donnees (exprimé en caracteres) #define wDTRAME 6 // Processus principal/ Trame/ Nombre de donnees MAX par trame // Definition/ Constante/ Nombre d'objet Event MAX #define nbEVENTMAX 12 // Definition/ Constante/ Nombre de LED intégrées MAX #define nbLEDMAX 4 // Carte/ nombre Max LED // Definition/ Constante/ Nombre de Moteurs MAX #define nbMOTORMAX 2 // Definition/ Constante/ Nombre de SERVO MAX #define nbSERVOMAX 2 //Definition/ Parametrage/ GPS/ Parcours/ Nombre maximal de WP #define nbWPMAX 100 // Parcours GPS/ Nombre de Way Point Maximum enregistrés //Definition/ Constante/ Nombre d'objet PID MAX #define nbPIDMAX 2 //Definition/ Constante/ Nombre d'objet commande.axe #define nbAXEMAX 2 //Definition/ Constante/ ojet PAD/ nb axe MAX et nb SW MAX #define padNBAXEMAX 2 #define padNBSWMAX 4 //Definition/ Constante/ Nombre Parametres MAX #define nbPARAMAX 11 // Definition/ Protocole/ Constantes/ Mode #define mSTB 0 // Mode/ STANDBY #define mSTP 1 // Mode/ STOP #define mMAN 2 // Mode/ MANUAL #define mPA 4 // Mode/ Pilote Automatique #define mWP 8 // Mode/ Enregistrement WP #define mRAZ 64 // Mode/ Remise à 0 des commandes #define mCHG 128 // Mode/ recharge Accumulateurs //2- Definition/ Type de donnees //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //2.1- Definition/ Type/ global/ data/ objet GLOBAL typedef struct{ bool fValid; // Validation module string designation; // Identification produit string version; // Version produit (v.xx/yy , xx: annee, yy: semaine dans l'annee) bool debug; // Activation du mode DEBUG int nbLED; // Nombre LED integrées int tBATT; // Batterie/ Structure Chimique int NbElement; // Batterie/ Nombre Elements int Dynmin; // Variables/ dynamique minimum int DynMAX; // Variables/ dynamique MAXIMUM float TSample; // Periode d'echantillonnage du processus (exprimée en secondes) int TPWM; // periode PWM (exprimée en micro secondes) int USBBaud; // UART sur USB BaudRate int UART1Baud; // UART 1 BaudRate int UART2Baud; // UART 2 BaudRate int I2CBaud; // Frequence bus I2C int CANBaud; // Frequence bus CAN struct{ // Event bool fValid; // Event/ Validité bool fPeriode; // Event/ Periodicité int wdt; // Event/ WatchDog int wdtMAX; // Event/ WatchDog MAX }event[nbEVENTMAX]; } GLOBAL_t; //2.2- Definition/ Type/ objet TRAME typedef struct{ bool fValid; // Validation module int wdtTX; // WatchDog Emission int wdtRX; // WatchDog Reception int pcar; // Pointeur de caracteres char sb; // Protocole communication/ Start Beacon: char dlb; // Protocole communication/ Delimiter Beacon char eb; // Protocole communication/ End Beacon int id; // Mot identificateur de trame char rx[wBUFFER]; // tableau des caracteres recus char tx[wBUFFER]; // tableau des caracteres envoyés bool fSB, fEB; // status startB et endB int c[wDTRAME]; // Data Consigne int r[wDTRAME]; // Data Reponse int nbdata; // Nombre de Data sur la Trame } TRAME_t; //2.3- Definition/ Type/ objet COMMANDE typedef struct{ struct{ bool fValid; // Validation Module float in; // Variable Entree float out; // Variable Sortie float dzm; // Valeur Dead Zone inferieure (0..1) float dzM; // Valeur Dead Zone supérieure (0..1) float cti; // Valeur Constante de temps Integrale (0..1) float ctf; // Valeur Constante de temps Proportionnelle (0..1) float ctg; // Valeur Constante de Temps Filtre de sortie float cgg; // Valeur Gain Filtre de sortie float l; // Valeur calcul loi non lineaire float i, i0; // Valeur calcul integral float p; // Valeur calcul proportionnelle float c; // Valeur calcul proportionnelle - integrale float x, dx; // Valeur filtre passe bas }axe[nbAXEMAX]; } COMMANDE_t; //2.4- Definition/ Type/ objet MUX (multiplexeur) typedef struct{ bool fValid; // Validation Module float in0x, in0y, in1x, in1y, in2x, in2y, // Variables d'état d'entree du module: variables d'entree outx, outy; // Variables d'état de sortie du module: variables de sortie unsigned char sel; // Variables d'état d'entree du module: selection de la variable d'entrée unsigned char Status; // Variables Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7: }MUX_t; //2.5- Definition/ Type/ objet ENERGIE typedef struct{ bool fValid, fCHARGE, fVhigh, fVlow, fIhigh, fIlow, fFailed; unsigned char tBATT; // Type de batterie (1: LEAD, 2: NIMH, 2: LION, 3: LIPO) // Definition/ Parametres/ Type de batterie unsigned char NbElement; // Nombre Element en Serie int seqPointer; // Sequenceur du processus de charge float tension, courant; // Variables differentielles Energie, Tension, Courant Acquisition float dE,dV,dI; // Variables differentielles Energie, Tension, Courant Filtrage float E, E0, V, I; // Variables Energie, Tension, Courant float VMax, Vmin, IMax, Imin; // Parametres internes int wPWM, pPWM; // Largeur Impulsion, Periode PWM (chargeur) unsigned char Status; // Variables Status du module s0: fValid, s1: fCharge, s2:fVlow, s3:fVhigh, s4:fIlow, s5:fIhigh, s6: NA, s7: fFailed } ENERGY_t; //2.6- Definition/ Type/ objet GPS typedef struct{ bool fValid, fLocked, fFailed; // Validation Module, Trame Valide int baud; // BaudRate int TSample; // Periode rafraichissement des trames int dop; // Variable Indice Dilution Satellites double utc, lng, lat, hdg, spd; // Variables: Temps Universel (UTC), Longitude (LNG), Latitude (LAT), Cap (HDG), Vitesse Air (SPD) int speedmin; unsigned char Status; //Variables Status du module s0:fValid, s1:fLocked, s2:na, s3:na, s4:na, s5:na, s6:na, s7:fFailed } GPS_t; //2.7- Definition/ Type/ objet IMU typedef struct{ bool fValid, fFailed; // Validation module float roll, pitch, yaw, temp; // Variables attitude; Roulis, Tangage, Lacet, Temperature float q0, q1, q2, q3; // Variables attitude/ Quarternions float liax, liay, liaz; // Variables acceleration lineaire x, y, z float grvx, grvy, grvz; // Variables gravité float gyrox, gyroy, gyroz; // Variables gyroscopiques x, y, z float magx, magy, magz; // Variables magnetometriques x, y, z unsigned char Status; // Variables Status module. s0:fValid, s1:fLocked, s2:na, s3:na, s4:na, s5:na, s6:na, s7:fFailed } IMU_t; //2.8- Definition/ Type/ objet PA (pilote automatique) typedef struct{ bool fValid, fGPSLocked, fWPLocked, fDmin, fDMax, fFailed; double wLNG, wLAT, // Variables d'état d'entree du module: Coordonnnees Consigne (WayPoint à rejoindre) mLNG, mLAT; // Variables d'état d'entree du module: Coordonnees reponse (mesure GPS) float mSPD, // Variables d'état d'entree du module: Vitesse (km/h) (mesure GPS) mHDG, // Variables d'état d'entree du module: Cap (deg) (mesure GPS) CtG, // Cap à suivre au WP (calculé) DtG, // Distance à parcourir au WP (calculée) cPowerMax, // Niveau de puissance Max (0 .. 1) Dmin, DMax, // Distance Max et minau WP Kp, // Correction/ Gain Proportionnel (exprimé en % 0..300) outx, outy; // Variables d'état de sortie du module unsigned char Status; // Variables Status du module s0: fValid, s1: fGPSLocked, s2: fWPLocked, s3:fDmin, s4:fDMax, s5: NA, s6: NA,s7: fFailed } PA_t; //2.9- Definition/ Type/ objet DIGITAL (Accessoire) typedef struct{ bool fValid; // Validation Module unsigned int cDigital; // Variables d'état d'entree du module (c0: Klaxon, c1: Phare) unsigned int rDigital; // Variables d'état de sortie du module (c0: Klaxon, c1: Phare) unsigned char Status; // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7: }DIGITAL_t; //2.10- Definition/ Type/ objet SERVO typedef struct{ bool fValid; // Validation Module int c; // Variables d'état d'entree du module/ Variable (0 .. 1) float x, dx, tSERVO; // Variables d'état Filtre x, dx/ constante de temps du filtre int r; // Variables d'état de sortie du module/ Variable (0 .. 1) int pmin; // Constante/ valeur position minimum int pmax; // Constante/ valeur position maximum unsigned char Status; // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7: } SERVO_t; //2.11- Definition/ Type/ objet LOI typedef struct{ bool fValid; // Validation Module float inx; // Variable/ Entree/ Power float iny; // Variable/ Entree/ Teta float outx; // Variable/ Sortie/ Gauche float outy; // Variable/ Sortie/ Droit unsigned char Status; // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7: } LAW_t; //2.12- Definition/ Type/ objet filtre PID typedef struct{ bool fValid; // Filtre PID/ Validite float inc; // Filtre PID/ Variable/ Consigne float inr; // Filtre PID/ Variable/ FeedBack float eM; // Filtre PID/ Variable/ Erreur (Consigne- Feedback) float eMp; float eMd; float eMd0; float uMi; float uMi0; float uMd; float uMd0; float out; // Filtre PID/ Variable/ Sortie float cPID1; // Filtre PID/ Constante/1/ float cPID2; // Filtre PID/ Constante/2/ float cPID3; // Filtre PID/ Constante/3/ float cPID4; // Filtre PID/ Constante/4/ float cPID5; // Filtre PID/ Constante/5/ float cPID6; // Filtre PID/ Constante/6/ unsigned char Status; // Filtre PID/ Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7: } PID_t; //2.13- Definition/ Type/ objet MOTEUR typedef struct{ bool fValid; // Validite Module float in; // Variable d'état/ entrée/ puissance (0..1) float dx, x; // Variables d'etat/ interne / Filtre Passe Bas float out; // Variables d'état/ sortie / puissance (0.. 1) float tMOTOR; // Constante de temps/ Filtre Passe Bas float gMOTOR; // Constante/ Gain/ Filtre Passe Bas unsigned char Status; // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7: } MOTOR_t; //2.14- Definition/ Type/ objet TRACK typedef struct{ bool fValid; // TRACK/ validite/ module bool fRecord; // TRACK/ Acquisition/ En cours int nbWP; // TRACK/ nombre WP int pWP; // TRACK/ pointeur WP struct{ // TRACK/ structure WP bool fValid; // wp/ valide double lat, lng; // wp/ Coordonnees Geographiques }wp[nbWPMAX]; int Status; // wp/ status } TRACK_t; //2.15- Definition/ Type/ objet MOBILE typedef struct{ bool fValid; // Mobile/ Validite int cWDTRX; // Mobile/ Contante/ WatchDog RX float inx, iny, outx, outy; // Mobile/ Commande: Niveau de puissance vectorielle: Amplidude/ Phase exprimé de 0 à 100% int cMODE, rMODE; // Mobile/ Mode de Fonctionnement double lng, lat, alt, speed, head; // Mobile/ Variables localisation (GPS) float roll, pitch, yaw, altitude; // Mobile/ Variables attitude (IMU) int Status; // Mobile/ Status Module } MOBILE_t; //2.16- Definition/ objet PAD typedef struct{ bool fValid; struct{ float in; // Variable Entree float out; // Variable Sortie int scB; // Pourcentage Proportionnal- Integral (0..100) sc=0: Commande Integrale pure .... sc= 100: Commande Proportionnelle pure int dzB; // Pourcentage Dead Zone (0..100) int znlB; // Pourcentage Zone Non Lineaire (0..100) float ctiB; // Pourcentage Constante de temps loi integrale (0..100) float gainI; // Gain Integrale deuxieme zone lineaire float ctfB; // Pourcentage Constante de temps loi proportionnelle (0..100) float sc; // Valeur Proportionnel Integral float dzm; // Valeur Dead Zone inferieure float dzM; // Valeur Dead Zone supérieure float znlm; // Valeur Non Linearite inferieure float znlM; // Valeur Non Linearite supérieure float cti; // Valeur Constante de temps Integrale float ctf; // Valeur Constante de temps Proportionnelle float l; // Valeur calcul loi non lineaire float i, i0; // Valeur calcul integral float p; // Valeur calcul proportionnelle // float fm[5]; // Valeur filtre moyenneur float x, dX, X; // Valeur filtre passe bas }axe[padNBAXEMAX]; struct{ bool value; }sw[padNBSWMAX]; // float roulis, tangage; } PAD_t;