function y=mom_magn(u); global Asat tau % Le vecteur entrée est à 6 composantes % u(1:3) est le vecteur dérivée champ magnétique B' ( B'x B'y B'z ) en axes satellite % u(4:6) est le vecteur champ B (Bx By Bz en axes satellite % Unit sera son vecteur unitaire % tau est la constante de temps donnée en global dans derivdat % Asat est la matrice d'inertie du satellite dans x y z, elle est donnée en global % La fonction retourne le gain matriciel K % Séparation des vecteurs B_prime(1:3)=u(1:3); B(1:3)=u(4:6); % Vecteur unitaire de B unit=B/norm(B); mat_unit=[0 -unit(3) unit(2); unit(3) 0 -unit(1); -unit(2) unit(1) 0]; UvectUvect=mat_unit*mat_unit; K_mat=-1/norm(B)^2*UvectUvect*Asat/tau; % ********************* % Pour éviter une saturation qui risque de bloquer une composante par rapport à une autre % et donc de ne pas avoir le couple opposé à la rotation principale, je mets % une saturation anticipée proportionnelle, ce qui : % Gardera le couple opposé à la rotation transversale % limitera le moment magnétique des bobines à 0.2 Am² mt_mgn=K_mat*B_prime'; maxi=[abs(mt_mgn(1)),abs(mt_mgn(2)),abs(mt_mgn(3))]; test=max(maxi); if test>=0.2 y=0.2*mt_mgn/test; end if test<0.2 y=mt_mgn; % Si le moment est <= 0.2 Am², il reste à cette valeur, donc : % $$$$$ il faut choisir entre les 2 lignes y=0.2*mt_mgn/test; % Cette formule donne toujours la valeur maximale 0.2 Am² à au moins une bobine end % Fin du test end % Fin programme