Dmitry Kovalev
/
LG2
fork
Fork of LG by
Diff: SPI.c
- Revision:
- 195:bcc769f5292b
- Parent:
- 193:a0fe8bfc97e4
- Child:
- 196:f76dbc081e63
diff -r 8f3cb37a5541 -r bcc769f5292b SPI.c --- a/SPI.c Thu Sep 15 14:00:43 2016 +0000 +++ b/SPI.c Tue Sep 20 10:39:30 2016 +0000 @@ -2,7 +2,7 @@ struct SPI Spi; //unsigned int Temp_AMP; unsigned int Temp_AMP64P; - +int tt=0; unsigned int Count_AMP, ADD_AMP, Cur_Amp; int Znak_Amp; int AD_Regul = 0; @@ -103,7 +103,7 @@ Gyro.PLC_Lern++; Spi.DAC_B += 0x3c; if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; - sprintf((Time),"%d %d %d %d \r\n",Gyro.TermLM,Spi.DAC_B, Gyro.AD_Slow, AD_MAX); + sprintf((Time),"%d %d %d %d \r\n",Gyro.TermLM, Spi.DAC_B, Gyro.AD_Slow, AD_MAX); WriteCon(Time); } else {Gyro.ModJump=0;} @@ -113,12 +113,26 @@ -void PlcRegul(void) //Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.) -{ +void PlcRegul(void) + //Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.) +{ + + int templm=0; int PLC_In; int tempDac; if(!(Gyro.PinReg & PinRegBitL) && (start>0)) start--; - if((start==0)) + else if(start==2) + { + if(tt==0) + {// +25° + templm = (Gyro.TermoNKU-Gyro.Termo)*2; //дельта + if(templm>0) Gyro.Ktermo=1; + else Gyro.Ktermo=0; + Spi.DAC_B+=templm; + tt=1; + } + } + else if(start==0) { PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации Gyro.PLC_Delta = PLC_In - Gyro.PLC_Old; //узнаем приращение @@ -132,7 +146,9 @@ } //если изменился коэфициент усиления ФД //3600 (размер моды порядка 3000) if((Gyro.PLC_Lern < 150) && (Gyro.PLC_Error2Mode != 0)) { //пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. - Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 + + if(Gyro.Ktermo)Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 + else Spi.DAC_B -= 0x3c; if(AD_MAX < PLC_In){AD_MAX = PLC_In;} //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. else if ((AD_MAX>PLC_In)&&(AD_MAX>1500800000)) r++; //если текущая амплитуда меньше максимально найденной то инкрементируем счетчик. if (r>10) @@ -146,10 +162,10 @@ if(AD_MAX < PLC_In) {AD_MAX = PLC_In; l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. else l++; //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) - if((l > 40)&&(Gyro.PLC_Error2Mode == 0)) {AD_MAX -= 2107200;k=15;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). m - /* if ((k == 15)&&(Gyro.PLC_Lern > 150)) Spi.DAC_B += 200; //после уменьшения максимальной амплитуды двигаем шевелем цап + if((l > 100)&&(Gyro.PLC_Error2Mode == 0)) {AD_MAX -= 2107200;k=15;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). m + if ((k == 15)&&(Gyro.PLC_Lern > 150)) Spi.DAC_B += 200; //после уменьшения максимальной амплитуды двигаем шевелем цап else if((k == 1)&&(Gyro.PLC_Lern > 150)) {Spi.DAC_B -= 200; k=0;l=0;} //для быстрог поиска новог максимума. - if(k>0)k--;*/ + if(k>0)k--; Gyro.PlC_MaxD=(unsigned int)(AD_MAX-PLC_In); //ищем разницу между желаемой и действительной амплитудами. @@ -207,17 +223,18 @@ tempDac = Gyro.PLC_ADC_DOld * tempDac; flagmod=1; } - } - if ( Spi.DAC_B < 1000 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} //проверка на переваливание за границу. - else if ( Spi.DAC_B > 63000 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} - + } + + if ( Spi.DAC_B < 18300 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} //проверка на переваливание за границу. + else if ( Spi.DAC_B > 53000) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} + } /////////////////////// //////////лог////////// /////////////////////// if(Gyro.LogPLC==1) { - sprintf((Time),"%d %d %d %d %d %d %d %d %d %d\r\n", l, temp9, r, tempDac, flagmod, AD_MAX, PLC_In, 0x7fff-Spi.ADC5,Gyro.PlC_MaxD,0);//выдаем в терминал для постройки граффика регулировки периметра. + sprintf((Time),"%d %d %d %d %d %d\r\n", Spi.DAC_B, templm, start, tt, PLC_In, Gyro.Termo);//выдаем в терминал для постройки граффика регулировки периметра. WriteCon(Time); } } @@ -341,7 +358,7 @@ LPC_SSP0->DR = (Spi.DAC_B); temp9=Spi.DAC_B; break; - +/* case 1://малое воздействие + temp9=Spi.DAC_B + Gyro.StrayPLC_Pls; LPC_SSP0->DR = temp9; @@ -356,7 +373,7 @@ temp9=Spi.DAC_B + Gyro.StrayPLC_2Mode; LPC_SSP0->DR = temp9;//вгоняем в многомодовый режим break; - +*/ } // LPC_SSP0->DR = Spi.DAC_B; //e. передача 12 бит