123
Fork of LG by
host/Source/App/ThermoCalc.c@22:12e6183f04d4, 2016-02-03 (annotated)
- Committer:
- Kovalev_D
- Date:
- Wed Feb 03 10:44:42 2016 +0300
- Revision:
- 22:12e6183f04d4
[thyz
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Kovalev_D |
22:12e6183f04d4 | 1 | #include "ThermoCalc.h" |
Kovalev_D |
22:12e6183f04d4 | 2 | #include "CyclesSync.h" |
Kovalev_D |
22:12e6183f04d4 | 3 | #include "CntrlGLD.h" |
Kovalev_D |
22:12e6183f04d4 | 4 | #include "InputOutput.h" |
Kovalev_D |
22:12e6183f04d4 | 5 | #include "mathDSp.h" |
Kovalev_D |
22:12e6183f04d4 | 6 | |
Kovalev_D |
22:12e6183f04d4 | 7 | #define debug |
Kovalev_D |
22:12e6183f04d4 | 8 | #define TEMP_AVER_PERIOD 4 // e. number of seconds for average |
Kovalev_D |
22:12e6183f04d4 | 9 | int TermoCompens_Sum = 0; |
Kovalev_D |
22:12e6183f04d4 | 10 | unsigned int IsHeating; |
Kovalev_D |
22:12e6183f04d4 | 11 | //int Tmp_Out[NUM_OF_THERMOSENS]; |
Kovalev_D |
22:12e6183f04d4 | 12 | int dThermoHeatDeltaPer_dTermo[TERMO_FUNC_SIZE]; |
Kovalev_D |
22:12e6183f04d4 | 13 | int dThermoCoolDeltaPer_dTermo[TERMO_FUNC_SIZE]; |
Kovalev_D |
22:12e6183f04d4 | 14 | int dFuncPer_dTermo[TERMO_FUNC_SIZE]; |
Kovalev_D |
22:12e6183f04d4 | 15 | int TermoCompDelta; |
Kovalev_D |
22:12e6183f04d4 | 16 | int Temp_Aver; //e. the mean temperature for 1 Sec for T4 sensor //r. ñðåäíÿÿ òåìïåðàòóðà çà 1 ñåêóíäó äëÿ äàò÷èêà T4 |
Kovalev_D |
22:12e6183f04d4 | 17 | int TempEvolution = 0; |
Kovalev_D |
22:12e6183f04d4 | 18 | int StartTermoCompens = 0; //e. initial thermocompensation (in XXX seconds after start ) //r. íà÷àëüíàÿ òåðìîêîìïåíñàöèÿ (÷åðåç ÕÕÕ ñåêóíä ïîñëå ñòàðòà) |
Kovalev_D |
22:12e6183f04d4 | 19 | |
Kovalev_D |
22:12e6183f04d4 | 20 | extern int WP_reset_heating; //e. voltage of reset at heating //r. íàïðÿæåíèå ñáðîñà ïðè íàãðåâàíèè |
Kovalev_D |
22:12e6183f04d4 | 21 | extern int WP_reset_cooling; //e. voltage of reset at cooling //r. íàïðÿæåíèå ñáðîñà ïðè îõëàæäåíèè |
Kovalev_D |
22:12e6183f04d4 | 22 | |
Kovalev_D |
22:12e6183f04d4 | 23 | __inline Max_Saturation(unsigned *lvl, unsigned limit) |
Kovalev_D |
22:12e6183f04d4 | 24 | { |
Kovalev_D |
22:12e6183f04d4 | 25 | if (*lvl>limit) *lvl = limit; |
Kovalev_D |
22:12e6183f04d4 | 26 | } |
Kovalev_D |
22:12e6183f04d4 | 27 | |
Kovalev_D |
22:12e6183f04d4 | 28 | /*{ |
Kovalev_D |
22:12e6183f04d4 | 29 | switch (Device_blk.Str.TermoMode) //e. selecting thermocompensation mode //r. âûáîð ðåæèìà òåðìîêîìïåíñàöèè |
Kovalev_D |
22:12e6183f04d4 | 30 | { |
Kovalev_D |
22:12e6183f04d4 | 31 | case TERMO_ON: |
Kovalev_D |
22:12e6183f04d4 | 32 | case TERMO_ON_NUMB_OFF: |
Kovalev_D |
22:12e6183f04d4 | 33 | |
Kovalev_D |
22:12e6183f04d4 | 34 | TermoCompens_Sum += StartTermoCompens + DynamicDeltaCalc(); //e. accumulation of the value of thermocompensation from request to request //r. íàêîïëåíèå âåëè÷èíû òåðìîêîìïåíñàöèè îò çàïðîñà äî çàïðîñà |
Kovalev_D |
22:12e6183f04d4 | 35 | |
Kovalev_D |
22:12e6183f04d4 | 36 | break; |
Kovalev_D |
22:12e6183f04d4 | 37 | |
Kovalev_D |
22:12e6183f04d4 | 38 | case TERMO_ON_STATIC_ONLY: |
Kovalev_D |
22:12e6183f04d4 | 39 | case TERMO_ON_STATIC_ONLY_NUMB_OFF: |
Kovalev_D |
22:12e6183f04d4 | 40 | #if !defined debug_SOI |
Kovalev_D |
22:12e6183f04d4 | 41 | TermoCompens_Sum += StartTermoCompens; //e. accumulation of the value of thermocompensation from request to request //r. íàêîïëåíèå âåëè÷èíû òåðìîêîìïåíñàöèè îò çàïðîñà äî çàïðîñà |
Kovalev_D |
22:12e6183f04d4 | 42 | #endif |
Kovalev_D |
22:12e6183f04d4 | 43 | break; |
Kovalev_D |
22:12e6183f04d4 | 44 | |
Kovalev_D |
22:12e6183f04d4 | 45 | case TERMO_ON_DYNAMIC_ONLY: |
Kovalev_D |
22:12e6183f04d4 | 46 | case TERMO_ON_DYNAMIC_ONLY_NUMB_OFF: |
Kovalev_D |
22:12e6183f04d4 | 47 | #if !defined debug_SOI |
Kovalev_D |
22:12e6183f04d4 | 48 | TermoCompens_Sum += DynamicTermoCompens(); //e. accumulation of the value of thermocompensation from request to request //r. íàêîïëåíèå âåëè÷èíû òåðìîêîìïåíñàöèè îò çàïðîñà äî çàïðîñà |
Kovalev_D |
22:12e6183f04d4 | 49 | #endif |
Kovalev_D |
22:12e6183f04d4 | 50 | break; |
Kovalev_D |
22:12e6183f04d4 | 51 | |
Kovalev_D |
22:12e6183f04d4 | 52 | case TERMO_OFF: |
Kovalev_D |
22:12e6183f04d4 | 53 | default: |
Kovalev_D |
22:12e6183f04d4 | 54 | TermoCompens_Sum = 0; //e. thermocompensation is disable, therefore its part is equal to zero //r. òåðìîêîìïåíñàöèÿ âûêëþ÷åíà, ïîýòîìó åå âêëàä ðàâåí íóëþ |
Kovalev_D |
22:12e6183f04d4 | 55 | |
Kovalev_D |
22:12e6183f04d4 | 56 | } //of thermomode switch |
Kovalev_D |
22:12e6183f04d4 | 57 | } */ |
Kovalev_D |
22:12e6183f04d4 | 58 | /****************************************************************************** |
Kovalev_D |
22:12e6183f04d4 | 59 | ** Function name: StaticTermoCompens |
Kovalev_D |
22:12e6183f04d4 | 60 | ** |
Kovalev_D |
22:12e6183f04d4 | 61 | ** Descriptions: Procedure of |
Kovalev_D |
22:12e6183f04d4 | 62 | ** |
Kovalev_D |
22:12e6183f04d4 | 63 | ** parameters: None |
Kovalev_D |
22:12e6183f04d4 | 64 | ** Returned value: None |
Kovalev_D |
22:12e6183f04d4 | 65 | ** |
Kovalev_D |
22:12e6183f04d4 | 66 | ******************************************************************************/ |
Kovalev_D |
22:12e6183f04d4 | 67 | int StaticTermoCompens(int temperature) //r. ðàñ÷åò ñòàòè÷åñêîé ñîñòàâëÿþùåé òåðìîêîìïåíñàöèè çà îäèí ïåðèîä ïðèáîðà (100 ìêñ) |
Kovalev_D |
22:12e6183f04d4 | 68 | { |
Kovalev_D |
22:12e6183f04d4 | 69 | |
Kovalev_D |
22:12e6183f04d4 | 70 | float TermoCompens_Curr; //r. âåëè÷èíà òåðìîêîìïåíñàöèè çà îäèí ïåðèîä ïðèáîðà (100 ìêñ) |
Kovalev_D |
22:12e6183f04d4 | 71 | |
Kovalev_D |
22:12e6183f04d4 | 72 | int i, t; |
Kovalev_D |
22:12e6183f04d4 | 73 | |
Kovalev_D |
22:12e6183f04d4 | 74 | //r. èñïîëüçóåì òîëüêî òåðìîäàò÷èê TSENS_NUMB |
Kovalev_D |
22:12e6183f04d4 | 75 | //r. äëÿ íîâûõ òåðìîäàò÷èêîâ: T4, äëÿ ñòàðûõ: T1 |
Kovalev_D |
22:12e6183f04d4 | 76 | //r. è èñïîëüçóåì êóñî÷íî-íåïðåðûâíóþ òåðìîêîìïåíñàöèþ |
Kovalev_D |
22:12e6183f04d4 | 77 | |
Kovalev_D |
22:12e6183f04d4 | 78 | //r. Tmp_Out[TSENS_NUMB] = 8960; //-2560; //5120; //8000; // -2600; //-5000; |
Kovalev_D |
22:12e6183f04d4 | 79 | |
Kovalev_D |
22:12e6183f04d4 | 80 | t = temperature; |
Kovalev_D |
22:12e6183f04d4 | 81 | if(t > Device_blk.Str.TemperInt[TERMO_FUNC_SIZE - 1]) |
Kovalev_D |
22:12e6183f04d4 | 82 | { |
Kovalev_D |
22:12e6183f04d4 | 83 | t = Device_blk.Str.TemperInt[TERMO_FUNC_SIZE - 1]; |
Kovalev_D |
22:12e6183f04d4 | 84 | } |
Kovalev_D |
22:12e6183f04d4 | 85 | |
Kovalev_D |
22:12e6183f04d4 | 86 | i = 0; |
Kovalev_D |
22:12e6183f04d4 | 87 | while( t > Device_blk.Str.TemperInt[i] ) i++; |
Kovalev_D |
22:12e6183f04d4 | 88 | |
Kovalev_D |
22:12e6183f04d4 | 89 | //r. Tmp_Out[5] = i; |
Kovalev_D |
22:12e6183f04d4 | 90 | TermoCompens_Curr = Device_blk.Str.TermoFunc[i] - dFuncPer_dTermo[i] * (float)( Device_blk.Str.TemperInt[i] - t ); |
Kovalev_D |
22:12e6183f04d4 | 91 | |
Kovalev_D |
22:12e6183f04d4 | 92 | //r. Îòëàäêà |
Kovalev_D |
22:12e6183f04d4 | 93 | //r. TermoCompens_Curr = 1.111111125; // îòëàäêà |
Kovalev_D |
22:12e6183f04d4 | 94 | //r.TermoCompens_Curr = // 0.25; // çà 1 ñåê íàêàïëèâàåòñÿ 2500 èìïóëüñîâ |
Kovalev_D |
22:12e6183f04d4 | 95 | /*r. |
Kovalev_D |
22:12e6183f04d4 | 96 | //0.000100; // êîýôô., ïðè êîòîðîì çà 1 ñåê íàêàïëèâàåòñÿ 1 èìïóëüñ |
Kovalev_D |
22:12e6183f04d4 | 97 | //1.0001; // êîýôô., ïðè êîòîðîì çà 1 ñåê íàêàïëèâàåòñÿ 10001 èìïóëüñ |
Kovalev_D |
22:12e6183f04d4 | 98 | // 0.000125; // êîýôô., ïðè êîòîðîì çà 1 ñåê íàêàïëèâàåòñÿ 1.25 èìïóëüñà (çà 100 âûâîäèòñÿ 122 èìï.???) |
Kovalev_D |
22:12e6183f04d4 | 99 | // 0.000105; // çà 100 ñåê ä.íàêàïëèâàòüñÿ 105 èìï., íàêàïë. 103??? |
Kovalev_D |
22:12e6183f04d4 | 100 | */ |
Kovalev_D |
22:12e6183f04d4 | 101 | |
Kovalev_D |
22:12e6183f04d4 | 102 | // TermoCompens_Curr = LONG_2_FRACT_14_18(TermoCompens_Curr); //r. TermoCompens_Curr ïåðåâîäèì â ôîðìàò 14.18 |
Kovalev_D |
22:12e6183f04d4 | 103 | |
Kovalev_D |
22:12e6183f04d4 | 104 | return TermoCompens_Curr; |
Kovalev_D |
22:12e6183f04d4 | 105 | } // StaticTermoCompens |
Kovalev_D |
22:12e6183f04d4 | 106 | |
Kovalev_D |
22:12e6183f04d4 | 107 | /****************************************************************************** |
Kovalev_D |
22:12e6183f04d4 | 108 | ** Function name: DynamicDeltaCalc |
Kovalev_D |
22:12e6183f04d4 | 109 | ** |
Kovalev_D |
22:12e6183f04d4 | 110 | ** Descriptions: Procedure of |
Kovalev_D |
22:12e6183f04d4 | 111 | ** |
Kovalev_D |
22:12e6183f04d4 | 112 | ** parameters: None |
Kovalev_D |
22:12e6183f04d4 | 113 | ** Returned value: Thermocompensation addition |
Kovalev_D |
22:12e6183f04d4 | 114 | ** |
Kovalev_D |
22:12e6183f04d4 | 115 | ******************************************************************************/ |
Kovalev_D |
22:12e6183f04d4 | 116 | int DynamicDeltaCalc() //e. calculation the addition termocompensation for 1 reset //r. ðàñ÷åò äîáàâêè òåðìîêîìïåíñàöèè íà îäíî îáíóëåíèå |
Kovalev_D |
22:12e6183f04d4 | 117 | { |
Kovalev_D |
22:12e6183f04d4 | 118 | |
Kovalev_D |
22:12e6183f04d4 | 119 | int i, t; |
Kovalev_D |
22:12e6183f04d4 | 120 | |
Kovalev_D |
22:12e6183f04d4 | 121 | t = Temp_Aver; |
Kovalev_D |
22:12e6183f04d4 | 122 | |
Kovalev_D |
22:12e6183f04d4 | 123 | if (IsHeating) |
Kovalev_D |
22:12e6183f04d4 | 124 | { |
Kovalev_D |
22:12e6183f04d4 | 125 | if(t > Device_blk.Str.TemperIntDyn[TERMO_FUNC_SIZE - 1]) |
Kovalev_D |
22:12e6183f04d4 | 126 | { |
Kovalev_D |
22:12e6183f04d4 | 127 | t = Device_blk.Str.TemperIntDyn[TERMO_FUNC_SIZE - 1]; |
Kovalev_D |
22:12e6183f04d4 | 128 | } |
Kovalev_D |
22:12e6183f04d4 | 129 | |
Kovalev_D |
22:12e6183f04d4 | 130 | i = 0; |
Kovalev_D |
22:12e6183f04d4 | 131 | while( t > Device_blk.Str.TemperIntDyn[i] ) i++; |
Kovalev_D |
22:12e6183f04d4 | 132 | |
Kovalev_D |
22:12e6183f04d4 | 133 | TermoCompDelta = ( Device_blk.Str.ThermoHeatDelta[i] - dThermoHeatDeltaPer_dTermo[i] * (float)( Device_blk.Str.TemperIntDyn[i] - t ) ); |
Kovalev_D |
22:12e6183f04d4 | 134 | } |
Kovalev_D |
22:12e6183f04d4 | 135 | else |
Kovalev_D |
22:12e6183f04d4 | 136 | { |
Kovalev_D |
22:12e6183f04d4 | 137 | if(t > Device_blk.Str.TemperCoolIntDyn[TERMO_FUNC_SIZE - 1]) |
Kovalev_D |
22:12e6183f04d4 | 138 | { |
Kovalev_D |
22:12e6183f04d4 | 139 | t = Device_blk.Str.TemperCoolIntDyn[TERMO_FUNC_SIZE - 1]; |
Kovalev_D |
22:12e6183f04d4 | 140 | } |
Kovalev_D |
22:12e6183f04d4 | 141 | |
Kovalev_D |
22:12e6183f04d4 | 142 | i = 0; |
Kovalev_D |
22:12e6183f04d4 | 143 | while( t > Device_blk.Str.TemperCoolIntDyn[i] ) i++; |
Kovalev_D |
22:12e6183f04d4 | 144 | |
Kovalev_D |
22:12e6183f04d4 | 145 | TermoCompDelta = ( Device_blk.Str.ThermoCoolDelta[i] - dThermoCoolDeltaPer_dTermo[i] * (float)( Device_blk.Str.TemperCoolIntDyn[i] - t ) ); |
Kovalev_D |
22:12e6183f04d4 | 146 | } |
Kovalev_D |
22:12e6183f04d4 | 147 | return TermoCompDelta; |
Kovalev_D |
22:12e6183f04d4 | 148 | |
Kovalev_D |
22:12e6183f04d4 | 149 | } // DynamicDeltaCalc |
Kovalev_D |
22:12e6183f04d4 | 150 | |
Kovalev_D |
22:12e6183f04d4 | 151 | /****************************************************************************** |
Kovalev_D |
22:12e6183f04d4 | 152 | ** Function name: clc_ThermoSensors |
Kovalev_D |
22:12e6183f04d4 | 153 | ** |
Kovalev_D |
22:12e6183f04d4 | 154 | ** Descriptions: Procedure of calculating of the normalized temperaturre vector |
Kovalev_D |
22:12e6183f04d4 | 155 | ** |
Kovalev_D |
22:12e6183f04d4 | 156 | ** parameters: None |
Kovalev_D |
22:12e6183f04d4 | 157 | ** Returned value: None |
Kovalev_D |
22:12e6183f04d4 | 158 | ** |
Kovalev_D |
22:12e6183f04d4 | 159 | ******************************************************************************/ |
Kovalev_D |
22:12e6183f04d4 | 160 | void clc_ThermoSensors(void) |
Kovalev_D |
22:12e6183f04d4 | 161 | { |
Kovalev_D |
22:12e6183f04d4 | 162 | unsigned i; |
Kovalev_D |
22:12e6183f04d4 | 163 | static int TS_sum = 0; |
Kovalev_D |
22:12e6183f04d4 | 164 | static int seconds_aver = 0, TenSeconds = 0; |
Kovalev_D |
22:12e6183f04d4 | 165 | static int Temp_AverPrevDynCalc = -7000; |
Kovalev_D |
22:12e6183f04d4 | 166 | static int StartRdy = 1; |
Kovalev_D |
22:12e6183f04d4 | 167 | static int PrevTemp = -7000; |
Kovalev_D |
22:12e6183f04d4 | 168 | |
Kovalev_D |
22:12e6183f04d4 | 169 | for (i=0; i<2; i++) |
Kovalev_D |
22:12e6183f04d4 | 170 | { |
Kovalev_D |
22:12e6183f04d4 | 171 | //e. conversion of temperature values on ADC output //r. ïðåîáðàçîâàíèå çíà÷åíèé òåìïåðàòóðû íà âûõîäå ÀÖÏ |
Kovalev_D |
22:12e6183f04d4 | 172 | //e. to range -32768 .. +32767 ( additional code; format 1.15 ) //r. ê äèàïàçîíó -32768 .. +32767 (äîïîëíèò. êîä; ôîðìàò 1.15) |
Kovalev_D |
22:12e6183f04d4 | 173 | /* Output.Str.Tmp_Out[i] = mac_r(Device_blk.Str.Tmp_bias[i] << 16, |
Kovalev_D |
22:12e6183f04d4 | 174 | (Input.StrIn.Tmp_in[i] - 0x8000), |
Kovalev_D |
22:12e6183f04d4 | 175 | Device_blk.Str.Tmp_scal[i]);*/ |
Kovalev_D |
22:12e6183f04d4 | 176 | Output.Str.Tmp_Out[i+4] = Input.StrIn.Tmp_in[i]; |
Kovalev_D |
22:12e6183f04d4 | 177 | } |
Kovalev_D |
22:12e6183f04d4 | 178 | |
Kovalev_D |
22:12e6183f04d4 | 179 | if (time_1_Sec == DEVICE_SAMPLE_RATE_uks) //r. èñòåêëà 1 ñåêóíäà |
Kovalev_D |
22:12e6183f04d4 | 180 | { |
Kovalev_D |
22:12e6183f04d4 | 181 | seconds_aver++; |
Kovalev_D |
22:12e6183f04d4 | 182 | } |
Kovalev_D |
22:12e6183f04d4 | 183 | |
Kovalev_D |
22:12e6183f04d4 | 184 | if (seconds_aver > TEMP_AVER_PERIOD) //r. èñòåêëè TEMP_AVER_PERIOD(4 ñåêóíäû) ñåêóíä |
Kovalev_D |
22:12e6183f04d4 | 185 | { |
Kovalev_D |
22:12e6183f04d4 | 186 | seconds_aver = 0; |
Kovalev_D |
22:12e6183f04d4 | 187 | TenSeconds++; |
Kovalev_D |
22:12e6183f04d4 | 188 | PrevTemp = Temp_Aver; //e. save the previous mean temperature for 1 Sec //r. çàïîìèíàåì ïðåäûäóùóþ ñðåäíþþ òåìïåðàòóðó çà ñåêóíäó |
Kovalev_D |
22:12e6183f04d4 | 189 | Temp_Aver = TS_sum / (DEVICE_SAMPLE_RATE_HZ * TEMP_AVER_PERIOD); //e. calculating mean temperature for 1 Sec //r. âû÷èñëÿåì ñðåäíþþ òåìïåðàòóðó çà ñåêóíäó |
Kovalev_D |
22:12e6183f04d4 | 190 | |
Kovalev_D |
22:12e6183f04d4 | 191 | if (Temp_Aver > PrevTemp) |
Kovalev_D |
22:12e6183f04d4 | 192 | { |
Kovalev_D |
22:12e6183f04d4 | 193 | TempEvolution++; |
Kovalev_D |
22:12e6183f04d4 | 194 | } |
Kovalev_D |
22:12e6183f04d4 | 195 | if (Temp_Aver < PrevTemp) |
Kovalev_D |
22:12e6183f04d4 | 196 | { |
Kovalev_D |
22:12e6183f04d4 | 197 | TempEvolution--; |
Kovalev_D |
22:12e6183f04d4 | 198 | } |
Kovalev_D |
22:12e6183f04d4 | 199 | |
Kovalev_D |
22:12e6183f04d4 | 200 | TS_sum = 0; //e. reset the sum for calculation of an mean //r. îáíóëÿåì ñóììó äëÿ âû÷èñëåíèÿ ñðåäíåãî |
Kovalev_D |
22:12e6183f04d4 | 201 | } |
Kovalev_D |
22:12e6183f04d4 | 202 | else |
Kovalev_D |
22:12e6183f04d4 | 203 | { |
Kovalev_D |
22:12e6183f04d4 | 204 | TS_sum += Output.Str.Tmp_Out[TSENS_NUMB]; |
Kovalev_D |
22:12e6183f04d4 | 205 | } |
Kovalev_D |
22:12e6183f04d4 | 206 | |
Kovalev_D |
22:12e6183f04d4 | 207 | if (TenSeconds == 10) // 10 * TEMP_AVER_PERIOD = 40 |
Kovalev_D |
22:12e6183f04d4 | 208 | { |
Kovalev_D |
22:12e6183f04d4 | 209 | TenSeconds = 0; |
Kovalev_D |
22:12e6183f04d4 | 210 | if (TempEvolution > 0) |
Kovalev_D |
22:12e6183f04d4 | 211 | { |
Kovalev_D |
22:12e6183f04d4 | 212 | IsHeating = 1; |
Kovalev_D |
22:12e6183f04d4 | 213 | } |
Kovalev_D |
22:12e6183f04d4 | 214 | |
Kovalev_D |
22:12e6183f04d4 | 215 | if (TempEvolution < 0) |
Kovalev_D |
22:12e6183f04d4 | 216 | { |
Kovalev_D |
22:12e6183f04d4 | 217 | IsHeating = 0; |
Kovalev_D |
22:12e6183f04d4 | 218 | } |
Kovalev_D |
22:12e6183f04d4 | 219 | TempEvolution = 0; |
Kovalev_D |
22:12e6183f04d4 | 220 | } |
Kovalev_D |
22:12e6183f04d4 | 221 | |
Kovalev_D |
22:12e6183f04d4 | 222 | //e. single calculaiton of some device parameters (measurement on the VALID_START_SEC second after start) //r. îäíîêðàòíûé ðàñ÷åò íåêîòîðûõ ïàðàìåòðîâ ïðèáîðà (èçìåðåíèå íà VALID_START_SEC ñåêóíäå ïîñëå ñòàðòà) |
Kovalev_D |
22:12e6183f04d4 | 223 | if (StartRdy) |
Kovalev_D |
22:12e6183f04d4 | 224 | { |
Kovalev_D |
22:12e6183f04d4 | 225 | if (TenSeconds > VALID_START_4SEC) |
Kovalev_D |
22:12e6183f04d4 | 226 | { |
Kovalev_D |
22:12e6183f04d4 | 227 | |
Kovalev_D |
22:12e6183f04d4 | 228 | StartRdy = 0; //r. ñàìîáëîêèðîâêà, ïîýòîìó áîëüøå ñþäà íå çàõîäèì |
Kovalev_D |
22:12e6183f04d4 | 229 | |
Kovalev_D |
22:12e6183f04d4 | 230 | if ((Device_blk.Str.TermoMode != TERMO_OFF) && \ |
Kovalev_D |
22:12e6183f04d4 | 231 | (Device_blk.Str.TermoMode != TERMO_ON_DYNAMIC_ONLY) && \ |
Kovalev_D |
22:12e6183f04d4 | 232 | (Device_blk.Str.TermoMode != TERMO_ON_DYNAMIC_ONLY_NUMB_OFF)) //r. ñòàòè÷åñêàÿ òåðìîêîìïåíñàöèÿ âêëþ÷åíà |
Kovalev_D |
22:12e6183f04d4 | 233 | { |
Kovalev_D |
22:12e6183f04d4 | 234 | //r. ðàñ÷åò ñòàòè÷åñêîé òåðìîêîìïåíñàöèè ÷èñëà |
Kovalev_D |
22:12e6183f04d4 | 235 | StartTermoCompens = StaticTermoCompens(Temp_Aver); //r. ñòàðòîâàÿ òåìïåðàòóðû ïðèáîðà |
Kovalev_D |
22:12e6183f04d4 | 236 | } |
Kovalev_D |
22:12e6183f04d4 | 237 | DynamicDeltaCalc(); |
Kovalev_D |
22:12e6183f04d4 | 238 | |
Kovalev_D |
22:12e6183f04d4 | 239 | //r. ðàñ÷åò ãðàíèö äëÿ ÷àñòîòû âèáðîïðèâîäà, çàâèñÿùåãî îò ñòàðòîâîé òåìïåðàòóðû |
Kovalev_D |
22:12e6183f04d4 | 240 | // DithFreqRangeCalc(); |
Kovalev_D |
22:12e6183f04d4 | 241 | |
Kovalev_D |
22:12e6183f04d4 | 242 | //r. êîýôôèöèåíòû äëÿ ïîëîñîâîãî ôèëüòðà êâàçè ÄÓÏ íå ïåðåñ÷èòûâàåì: ñ÷èòàåì, ÷òî ïîëîñà ôèëüòðà çàâåäîìî øèðå |
Kovalev_D |
22:12e6183f04d4 | 243 | |
Kovalev_D |
22:12e6183f04d4 | 244 | |
Kovalev_D |
22:12e6183f04d4 | 245 | //r. íàïðÿæåíèå ñáðîñà ïðè íàãðåâàíèè |
Kovalev_D |
22:12e6183f04d4 | 246 | WP_reset_heating = CPL_reset_calc(Device_blk.Str.WP_reset, Device_blk.Str.K_WP_rst_heating, Temp_Aver, Device_blk.Str.TemperNormal); |
Kovalev_D |
22:12e6183f04d4 | 247 | //e. voltage of reset at cooling //r. íàïðÿæåíèå ñáðîñà ïðè îõëàæäåíèè |
Kovalev_D |
22:12e6183f04d4 | 248 | WP_reset_cooling = CPL_reset_calc(Device_blk.Str.WP_reset2, Device_blk.Str.K_WP_rst_cooling, Temp_Aver, Device_blk.Str.TemperNormal); |
Kovalev_D |
22:12e6183f04d4 | 249 | } |
Kovalev_D |
22:12e6183f04d4 | 250 | } |
Kovalev_D |
22:12e6183f04d4 | 251 | |
Kovalev_D |
22:12e6183f04d4 | 252 | if ( abs(Temp_Aver - Temp_AverPrevDynCalc) > Device_blk.Str.DeltaTempRecalc) |
Kovalev_D |
22:12e6183f04d4 | 253 | { |
Kovalev_D |
22:12e6183f04d4 | 254 | Temp_AverPrevDynCalc = Temp_Aver; |
Kovalev_D |
22:12e6183f04d4 | 255 | DynamicDeltaCalc(); |
Kovalev_D |
22:12e6183f04d4 | 256 | }//r. ðàñ÷åò ñðåäíåé çà 1 ñåêóíäó òåìïåðàòóðû äàò÷èêîâ T4, T5 |
Kovalev_D |
22:12e6183f04d4 | 257 | |
Kovalev_D |
22:12e6183f04d4 | 258 | // cyclic built-in test |
Kovalev_D |
22:12e6183f04d4 | 259 | if ( (Output.Str.Tmp_Out[4] < TS_MIN) || (Output.Str.Tmp_Out[4] > TS_MAX) || (Output.Str.Tmp_Out[5] < TS_MIN) || (Output.Str.Tmp_Out[5] > TS_MAX) ) |
Kovalev_D |
22:12e6183f04d4 | 260 | { |
Kovalev_D |
22:12e6183f04d4 | 261 | Valid_Data |= THERMO_RANGE_ERROR; |
Kovalev_D |
22:12e6183f04d4 | 262 | } |
Kovalev_D |
22:12e6183f04d4 | 263 | |
Kovalev_D |
22:12e6183f04d4 | 264 | if ( abs( Output.Str.Tmp_Out[4] - Output.Str.Tmp_Out[5]) > TS_DIFF_MAX) |
Kovalev_D |
22:12e6183f04d4 | 265 | { |
Kovalev_D |
22:12e6183f04d4 | 266 | Valid_Data |= THERMO_DIFF_ERROR; |
Kovalev_D |
22:12e6183f04d4 | 267 | } |
Kovalev_D |
22:12e6183f04d4 | 268 | } // clc_ThermoSensors |
Kovalev_D |
22:12e6183f04d4 | 269 | |
Kovalev_D |
22:12e6183f04d4 | 270 | |
Kovalev_D |
22:12e6183f04d4 | 271 | /****************************************************************************** |
Kovalev_D |
22:12e6183f04d4 | 272 | ** Function name: clc_PLC |
Kovalev_D |
22:12e6183f04d4 | 273 | ** |
Kovalev_D |
22:12e6183f04d4 | 274 | ** Descriptions: Procedure of initial processing for the CPLC regulator |
Kovalev_D |
22:12e6183f04d4 | 275 | ** |
Kovalev_D |
22:12e6183f04d4 | 276 | ** parameters: None |
Kovalev_D |
22:12e6183f04d4 | 277 | ** Returned value: None |
Kovalev_D |
22:12e6183f04d4 | 278 | ** |
Kovalev_D |
22:12e6183f04d4 | 279 | ******************************************************************************/ |
Kovalev_D |
22:12e6183f04d4 | 280 | void DithFreqRangeCalc(void) //r. ðàñ÷åò ãðàíèö êîýôôèöèåíòà äåëåíèÿ äëÿ ÷àñòîòû âèáðîïðèâîäà, çàâèñÿùèõ îò òåêóùåé òåìïåðàòóðû |
Kovalev_D |
22:12e6183f04d4 | 281 | { |
Kovalev_D |
22:12e6183f04d4 | 282 | |
Kovalev_D |
22:12e6183f04d4 | 283 | unsigned int min_level, max_level; |
Kovalev_D |
22:12e6183f04d4 | 284 | int delta_VB_N; |
Kovalev_D |
22:12e6183f04d4 | 285 | |
Kovalev_D |
22:12e6183f04d4 | 286 | delta_VB_N = mult_r(Device_blk.Str.K_vb_tu >> DITH_VBN_SHIFT, (Temp_Aver - Device_blk.Str.TemperNormal)); //r.200; |
Kovalev_D |
22:12e6183f04d4 | 287 | //r. !!! ñäåëàòü ñóììèðîâàíèå ñ íàñûùåíèåì, à çàòåì ñäâèã |
Kovalev_D |
22:12e6183f04d4 | 288 | min_level = VB_Nmin0 + delta_VB_N; |
Kovalev_D |
22:12e6183f04d4 | 289 | max_level = VB_Nmax0 + delta_VB_N; |
Kovalev_D |
22:12e6183f04d4 | 290 | // maximum saturation for unsigned levels |
Kovalev_D |
22:12e6183f04d4 | 291 | Max_Saturation(&min_level, ((unsigned int)0xFFFF >> DITH_VBN_SHIFT)-1); // min should be always less then max_level by 1 |
Kovalev_D |
22:12e6183f04d4 | 292 | Max_Saturation(&max_level, ((unsigned int)0xFFFF >> DITH_VBN_SHIFT)); |
Kovalev_D |
22:12e6183f04d4 | 293 | Device_blk.Str.VB_Nmin = min_level << DITH_VBN_SHIFT; |
Kovalev_D |
22:12e6183f04d4 | 294 | Device_blk.Str.VB_Nmax = max_level << DITH_VBN_SHIFT; |
Kovalev_D |
22:12e6183f04d4 | 295 | |
Kovalev_D |
22:12e6183f04d4 | 296 | } // DithFreqRange_calc |