| [434] | 1 | 
 | 
|---|
 | 2 | #include "manip.h"      
 | 
|---|
 | 3 | #include "archeops.h"
 | 
|---|
 | 4 | #include "arcunit.h"
 | 
|---|
 | 5 | 
 | 
|---|
 | 6 | /**************************************************************************************/
 | 
|---|
 | 7 | /*                                                                                    */
 | 
|---|
 | 8 | /*          programme  contenant les conversions en mesure physique                   */
 | 
|---|
 | 9 | /*                                                                                    */
 | 
|---|
 | 10 | /*                                                                                    */
 | 
|---|
 | 11 | /*                                                                                    */
 | 
|---|
 | 12 | /**************************************************************************************/
 | 
|---|
 | 13 | 
 | 
|---|
 | 14 | 
 | 
|---|
 | 15 | /* ----------------   block  dilution     ---------------------------------------------  */
 | 
|---|
 | 16 | 
 | 
|---|
 | 17 | 
 | 
|---|
 | 18 | int     voyant_EVO(block_type_dilution* blk)    {return((blk->switch_dil&switch_EVO)?0:1);}
 | 
|---|
 | 19 | int     voyant_EVF(block_type_dilution* blk)    {return((blk->switch_dil&switch_EVF)?0:1);}
 | 
|---|
 | 20 | int     commande_EVO(block_type_dilution*       blk)    {return((blk->switch_dil&vanne_EVO)?0:1);}
 | 
|---|
 | 21 | int     commande_EVF(block_type_dilution*       blk)    {return((blk->switch_dil&vanne_EVF)?0:1);}
 | 
|---|
 | 22 | int     commande_EVB(block_type_dilution*       blk)    {return((blk->switch_dil&vanne_EVB)?0:1);}
 | 
|---|
 | 23 | int     commande_EVV(block_type_dilution*       blk)    {return((blk->switch_dil&vanne_EVV)?0:1);}
 | 
|---|
 | 24 | 
 | 
|---|
 | 25 | 
 | 
|---|
 | 26 | // les pressions et debits metres des injections de la dilution
 | 
|---|
 | 27 | double pression_entree_3He(block_type_dilution* blk)    
 | 
|---|
 | 28 |                 {return(40. *   val_multiplex(blk->ADC_dil[ p_R3])  -1.6);}     //      200 bars pour 5V et 1.6 bar d'offset
 | 
|---|
 | 29 | 
 | 
|---|
 | 30 | double debit_3He(block_type_dilution*   blk)    
 | 
|---|
 | 31 |                 {return(2.      *       val_multiplex(blk->ADC_dil[ d_3He]) );}         //  10 MICRO MOLES  pour  5V
 | 
|---|
 | 32 | 
 | 
|---|
 | 33 | double pression_sortie_3He(block_type_dilution* blk)    
 | 
|---|
 | 34 |                 {return(20.     *       val_multiplex(blk->ADC_dil[ p_C3]) );}          //      100 bars pour 5V
 | 
|---|
 | 35 |         
 | 
|---|
 | 36 | double pression_entree_4He(block_type_dilution* blk)    
 | 
|---|
 | 37 |                 {return(40.     *       val_multiplex(blk->ADC_dil[ p_R4])) ;}          //      200 bars pour 5V
 | 
|---|
 | 38 | 
 | 
|---|
 | 39 | double debit_4He(block_type_dilution*   blk)    
 | 
|---|
 | 40 |                 {return(8.      *       val_multiplex(blk->ADC_dil[ d_4He]))     ;}     //  40 MICRO MOLES  pour  5V
 | 
|---|
 | 41 | //      ,4.     *       val_multiplex(blk->ADC_dil[ d_4He])             //  20 MICRO MOLES  pour  5V
 | 
|---|
 | 42 | 
 | 
|---|
 | 43 | double pression_sortie_4He(block_type_dilution* blk)    
 | 
|---|
 | 44 |                 {return(20.     *       val_multiplex(blk->ADC_dil[ p_C4]) );}          //      100 bars pour 5V
 | 
|---|
 | 45 |         
 | 
|---|
 | 46 | 
 | 
|---|
 | 47 | 
 | 
|---|
 | 48 | double pression_air_vanne(block_type_dilution*  blk)    
 | 
|---|
 | 49 |                 {return(20.*val_multiplex(blk->ADC_dil[ p_air]));}
 | 
|---|
 | 50 |                 
 | 
|---|
 | 51 | double pression_pompe_charbon(block_type_dilution*      blk)    
 | 
|---|
 | 52 |                 {return(20.*val_multiplex(blk->ADC_dil[ p_charb]));}
 | 
|---|
 | 53 |                 
 | 
|---|
 | 54 | 
 | 
|---|
 | 55 | double pression_membranne(block_type_dilution*  blk)    
 | 
|---|
 | 56 |                 {return(0.2*val_multiplex(blk->ADC_dil[ p_memb]));}
 | 
|---|
 | 57 |                 
 | 
|---|
 | 58 |                 
 | 
|---|
 | 59 | double pression_externe(block_type_dilution*    blk)    
 | 
|---|
 | 60 |                 {return(0.2*val_multiplex(blk->ADC_dil[ p_haut]));}
 | 
|---|
 | 61 | 
 | 
|---|
 | 62 |                         
 | 
|---|
 | 63 |                 
 | 
|---|
 | 64 | double tension_pile_10T(block_type_dilution*    blk)    
 | 
|---|
 | 65 |                 {return(2.03*val_multiplex(blk->ADC_dil[ p_10T]));}
 | 
|---|
 | 66 |                                 
 | 
|---|
 | 67 | double tension_pile_p18D(block_type_dilution*   blk)    
 | 
|---|
 | 68 |                 {return(3.90*val_multiplex(blk->ADC_dil[ p_p18D]));}
 | 
|---|
 | 69 |                                 
 | 
|---|
 | 70 | double tension_pile_m18D(block_type_dilution*   blk)    
 | 
|---|
 | 71 |                 {return(3.90*val_multiplex(blk->ADC_dil[ p_m18D]));}
 | 
|---|
 | 72 |                                 
 | 
|---|
 | 73 | double tension_pile_10B(block_type_dilution*    blk)    
 | 
|---|
 | 74 |                 {return(2.03*val_multiplex(blk->ADC_dil[ p_10B]));}
 | 
|---|
 | 75 |                                 
 | 
|---|
 | 76 | double tension_pile_p18B(block_type_dilution*   blk)    
 | 
|---|
 | 77 |                 {return(3.90*val_multiplex(blk->ADC_dil[ p_p18B]));}
 | 
|---|
 | 78 |                                 
 | 
|---|
 | 79 | double tension_pile_m18B(block_type_dilution*   blk)    
 | 
|---|
 | 80 |                 {return(3.90*val_multiplex(blk->ADC_dil[ p_m18B]));}
 | 
|---|
 | 81 |                                 
 | 
|---|
 | 82 | double tension_pile_Ch(block_type_dilution*     blk)    
 | 
|---|
 | 83 |                 {return(3.8*val_multiplex(blk->ADC_dil[ p_Ch]));}
 | 
|---|
 | 84 | 
 | 
|---|
 | 85 | 
 | 
|---|
 | 86 |                                 
 | 
|---|
 | 87 | int switch_pile_5(block_type_dilution*  blk)    
 | 
|---|
 | 88 |                 {return((blk->switch_dil&switch_pile_par_5)?1:0);}
 | 
|---|
 | 89 | int switch_pile_15(block_type_dilution* blk)    
 | 
|---|
 | 90 |                 {return((blk->switch_dil&switch_pile_par_15)?1:0);}
 | 
|---|
 | 91 | 
 | 
|---|
 | 92 | 
 | 
|---|
 | 93 | double  temperature_caisson_haut1(block_type_dilution*  blk)
 | 
|---|
 | 94 |                 {return(val_temperature(blk->ADC_dil[ t_h2]));}
 | 
|---|
 | 95 |                 
 | 
|---|
 | 96 | double  temperature_caisson_haut2(block_type_dilution*  blk)
 | 
|---|
 | 97 |                 {return(val_temperature(blk->ADC_dil[ t_h4]));}
 | 
|---|
 | 98 |                 
 | 
|---|
 | 99 | double  temperature_caisson_bas1(block_type_dilution*   blk)
 | 
|---|
 | 100 |                 {return(val_temperature(blk->ADC_dil[ t_b1]));}
 | 
|---|
 | 101 |                 
 | 
|---|
 | 102 | double  temperature_caisson_bas2(block_type_dilution*   blk)
 | 
|---|
 | 103 |                 {return(val_temperature(blk->ADC_dil[ t_b2]));}
 | 
|---|
 | 104 |                 
 | 
|---|
 | 105 | double  temperature_caisson_tube_helium(block_type_dilution*    blk)
 | 
|---|
 | 106 |                 {return(val_temperature(blk->ADC_dil[ t_b3]));}
 | 
|---|
 | 107 |                 
 | 
|---|
 | 108 | double  temperature_caisson_piles(block_type_dilution*  blk)
 | 
|---|
 | 109 |                 {return(val_temperature(blk->ADC_dil[ t_pile]));}
 | 
|---|
 | 110 |                 
 | 
|---|
 | 111 | double  temperature_caisson_driver_moteur(block_type_dilution*  blk)
 | 
|---|
 | 112 |                 {return(val_temperature(blk->ADC_dil[ t_a1]));}
 | 
|---|
 | 113 |                 
 | 
|---|
 | 114 | double  pression_helium_bain(block_type_dilution*       blk)
 | 
|---|
 | 115 |                 {return( 0.2*val_multiplex(blk->ADC_dil[ RP_He]));}
 | 
|---|
 | 116 |                 
 | 
|---|
 | 117 | double  pression_pirani(block_type_dilution*    blk)
 | 
|---|
 | 118 |                 {return(val_multiplex(blk->ADC_dil[ pirani]));}
 | 
|---|
 | 119 | 
 | 
|---|
 | 120 | 
 | 
|---|
 | 121 | 
 | 
|---|
 | 122 | 
 | 
|---|
 | 123 | 
 | 
|---|
 | 124 | /**********  coefficients  pour  les  mesures  bolo    **********************************/
 | 
|---|
 | 125 | /*                         toutes les puissances en pW                                  */
 | 
|---|
 | 126 | /*      -1-     loi de reponse thermique des bolos  avec R en ohms et T en Kelvin               */
 | 
|---|
 | 127 | /*                                                                                      */
 | 
|---|
 | 128 | /*      T =  coef2  *   (   ln (  R / coef1) **  ( -1 / coef0 )                             */
 | 
|---|
 | 129 | /*                                                                                      */
 | 
|---|
 | 130 | /*      -2-     fuite thermique du bolo   coef 3,4                                              */
 | 
|---|
 | 131 | /*                                                                                      */
 | 
|---|
 | 132 | /*      Ptot =  coef3  *  ( (10*Tb) ** coef4    -    (10*Tcryo)  **  coef4 )                */
 | 
|---|
 | 133 | /*                                                                                      */
 | 
|---|
 | 134 | /*      -3-     calcul empirique de Pciel et de  tau      coef  5,6                             */
 | 
|---|
 | 135 | /*                                                                                      */
 | 
|---|
 | 136 | /*      Pciel   =       coef5   - Pelec         coef5= I * Ai (tables xavier)                       */
 | 
|---|
 | 137 | /*      tau     =       - ln ( 1 +  Pciel / coef6 )     coef6= I * Bi (tables xavier)                   */
 | 
|---|
 | 138 | /*                                                                                                                          */
 | 
|---|
 | 139 | /* Pour les thermometres 1 à 4 (germanium et carbone Allan-Bradley)                         */
 | 
|---|
 | 140 | /* les coefficients sont utilisés differemment, ils permettent de convertir                 */
 | 
|---|
 | 141 | /* R vers T             ( c(6) est un offset sur la mesure de R par rapport  aux mesures 4 fils)*/
 | 
|---|
 | 142 | /*   llR= log(log(R - c(6))-c(0))                                                                               */
 | 
|---|
 | 143 | /*    T = exp(c(1) + c(2)* llR + c(3)* llR* llR + c(4)* llR* llR* llR +                 */
 | 
|---|
 | 144 | /*            c(5)* llR* llR* llR* llR)                                                 */
 | 
|---|
 | 145 | /*                                                                                                                              */
 | 
|---|
 | 146 | /*      version vol Trapani                                                                                                     */
 | 
|---|
 | 147 | /*      on corrige le biais de temperature coef2=1.1 old,  coef3=old/1.1^coef4              */
 | 
|---|
 | 148 | /*                                                                                                                              */
 | 
|---|
 | 149 | /*                                                                                                                              */
 | 
|---|
 | 150 | /*                                                                                                                              */
 | 
|---|
 | 151 | /*                                                                                                                              */
 | 
|---|
 | 152 | /*                                                                                                                              */
 | 
|---|
 | 153 | /****************************************************************************************/
 | 
|---|
 | 154 | 
 | 
|---|
 | 155 | 
 | 
|---|
 | 156 | 
 | 
|---|
 | 157 | 
 | 
|---|
 | 158 | /* ------------------------------------   corps  des fonctions   ------------------------------ */
 | 
|---|
 | 159 | /* -------------------------------------------------------------------------------------------- */
 | 
|---|
 | 160 | 
 | 
|---|
 | 161 | 
 | 
|---|
 | 162 | 
 | 
|---|
 | 163 | 
 | 
|---|
 | 164 | double          DAC_muV         (param_bolo*    param_pt,       reglage_bolo*   reglage_pt, int indice_bolo)
 | 
|---|
 | 165 | {
 | 
|---|
 | 166 | double div,car;
 | 
|---|
 | 167 | car= (double)dac_V(reglage_pt->bolo[indice_bolo])  ;
 | 
|---|
 | 168 | div=(double)param_pt->bolo[indice_bolo].bolo_diviseur;
 | 
|---|
 | 169 | if(div) return (car *2441. /  div );                                    
 | 
|---|
 | 170 | else    return(0);
 | 
|---|
 | 171 | }
 | 
|---|
 | 172 | 
 | 
|---|
 | 173 | 
 | 
|---|
 | 174 | 
 | 
|---|
 | 175 | double          DAC_muA         (param_bolo*    param_pt,       reglage_bolo*   reglage_pt, int indice_bolo)
 | 
|---|
 | 176 | {
 | 
|---|
 | 177 | double capa,tri;
 | 
|---|
 | 178 | tri= (double)dac_I(reglage_pt->bolo[indice_bolo])  ;
 | 
|---|
 | 179 | capa=((param_pt->bolo[indice_bolo].bolo_bebo==10)?0.000868 * (double)param_pt->bolo[indice_bolo].bolo_capa:0.001 * (double)param_pt->bolo[indice_bolo].bolo_capa);
 | 
|---|
 | 180 |                 /* capa en pF   */
 | 
|---|
 | 181 | return (tri * capa / (4096. * 22. * 20.) );                                     
 | 
|---|
 | 182 | }
 | 
|---|
 | 183 | 
 | 
|---|
 | 184 | 
 | 
|---|
 | 185 | double          bolo_muV        (param_bolo*    param_pt,       reglage_bolo*   reglage_pt, int valbrut,int indice_bolo)                                                                                
 | 
|---|
 | 186 | {
 | 
|---|
 | 187 | double x;
 | 
|---|
 | 188 | int nb_coups;
 | 
|---|
 | 189 | int aa;
 | 
|---|
 | 190 | def_gains
 | 
|---|
 | 191 | 
 | 
|---|
 | 192 | nb_coups= reglage_pt->horloge.nb_mesures/2 - reglage_pt->horloge.temp_mort;
 | 
|---|
 | 193 | 
 | 
|---|
 | 194 | aa = (nb_coups<<14) + (nb_coups*190) ;
 | 
|---|
 | 195 | x=((double)((valbrut-aa)<<1))/(double)nb_coups;
 | 
|---|
 | 196 | x=      bol_micro_volt(x,(double)param_pt->bolo[indice_bolo].bolo_gain*gain_ampli(reglage_pt->bolo[indice_bolo]));
 | 
|---|
 | 197 | return(x);
 | 
|---|
 | 198 | }
 | 
|---|
 | 199 | 
 | 
|---|
 | 200 | 
 | 
|---|
 | 201 | 
 | 
|---|
 | 202 | 
 | 
|---|
 | 203 | #define c(i)            (1e-4*(double)param_pt->nom_coef[param_pt->bolo[indice_bolo].numero_nom_coef].coef[i])  
 | 
|---|
 | 204 | 
 | 
|---|
 | 205 | double          bolo_temp       (param_bolo*    param_pt,       reglage_bolo*   reglage_pt, double R,int indice_bolo)
 | 
|---|
 | 206 | {
 | 
|---|
 | 207 | double a,T;
 | 
|---|
 | 208 | a=1;    if( (R>0) && (c(1) >0.01) )             a= log ( R / c(1) );
 | 
|---|
 | 209 | T=0;    if( (a>0) && (c(0)>0.01) )              T= c(2) * pow( a , -1 / c(0) );
 | 
|---|
 | 210 | return(T);
 | 
|---|
 | 211 | }
 | 
|---|
 | 212 | 
 | 
|---|
 | 213 | #undef c
 | 
|---|
 | 214 | 
 | 
|---|
 | 215 | 
 | 
|---|
 | 216 | 
 | 
|---|
 | 217 | 
 | 
|---|
 | 218 | /* -------------------------------------------------------------  */
 | 
|---|
 | 219 | 
 | 
|---|
 | 220 | 
 | 
|---|
 | 221 | unsigned int4   val_long(char x)
 | 
|---|
 | 222 | {
 | 
|---|
 | 223 | unsigned long a,xl;
 | 
|---|
 | 224 | char aa;
 | 
|---|
 | 225 | aa=x-2;
 | 
|---|
 | 226 | a=aa;
 | 
|---|
 | 227 | if(x<3)  xl=x;  else    xl=((a&1) + 2)<<(a>>1);
 | 
|---|
 | 228 | return(xl);
 | 
|---|
 | 229 | }
 | 
|---|
 | 230 | 
 | 
|---|
 | 231 | 
 | 
|---|
 | 232 | double  val_double(char x)
 | 
|---|
 | 233 | {
 | 
|---|
 | 234 | unsigned long a,xl;
 | 
|---|
 | 235 | if(x<0) x=-x;   a=x;    if(!a)  xl=0;   else    xl=((a&1) + 2)<<(a>>1);
 | 
|---|
 | 236 | if(x>0) return(1e-4*(double)xl);        else    return(-1e-4*(double)xl);
 | 
|---|
 | 237 | }
 | 
|---|
 | 238 | 
 | 
|---|
 | 239 | int     new_val_dac(int a,char  code)
 | 
|---|
 | 240 | {
 | 
|---|
 | 241 | if(code&0x80)   a=(code&0x7f) <<5 ;
 | 
|---|
 | 242 | else    {
 | 
|---|
 | 243 |         if(code&0x40)   a+=code&0x3f;   
 | 
|---|
 | 244 |         else            a-=code&0x3f;   
 | 
|---|
 | 245 |         }
 | 
|---|
 | 246 | return(a);
 | 
|---|
 | 247 | }
 | 
|---|
 | 248 | 
 | 
|---|