Dmitry Kovalev
/
LGstaandart
forkd
Fork of LG2 by
Diff: SPI.c
- Revision:
- 153:7086895c6ee3
- Parent:
- 152:cff1321ab25e
- Child:
- 155:94e7ac5fea58
--- a/SPI.c Thu May 05 14:00:36 2016 +0000 +++ b/SPI.c Fri May 06 10:08:51 2016 +0000 @@ -3,6 +3,8 @@ //unsigned int Temp_AMP; unsigned int Temp_AMP64P; +int ttt = 0; + unsigned int Count_AMP, ADD_AMP, Cur_Amp; int Znak_Amp; int AD_Regul = 0; @@ -134,41 +136,63 @@ int PLC_In; int tempDelta; int tempDac; + // LoopOn + + + PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации // PLC_In = Gyro.AD_Fast; //или+,или-(знак) Gyro.PLC_Delta = PLC_In - Gyro.PLC_Old; // узнаем приращение Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld; //приращение с учетом знака (и количества) прошлого приращения Gyro.PLC_Old = PLC_In; // запоминание значения - - if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. - else l++; //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды. - if((l>100)&&(Gyro.PLC_Lern>59)) {AD_MAX -= 3107200; l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). - //уменьшаем максимальную амплитуду, сбрасываем счетчик. - if(flagmod==3){ //если максимальный режим регулирования - k++; //инкрементируем счетчик большого понижения амплитуды - if(k>35) //если счетчик бльше 35 - { - k=0; //обнуляем счетчик - AD_MAX -= 13107200; //уменьшаем максимальную амплитуду. - } - } - else k=0; //если это не серия максимальных регулировок обнуляем счетчик. + + + + tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);//ищем разницу между желаемой и действительной амплитудами. + + - tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);//ищем разницу между желаемой и действительной амплитудами. - if( (Gyro.PLC_Lern<60)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(50*0х3с=0хВВ8) для определения максимальной амплитуды. +/* + ////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////смотрим все моды///////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////// + if( (Gyro.PLC_Lern<1011)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. + { + //if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;} + ttt=1; + Gyro.PLC_Lern++; + Spi.DAC_B += 0x3c; + if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; + sprintf((Time),"%d %d %d \r\n", Spi.DAC_B, Gyro.AD_Slow, AD_MAX); + WriteCon(Time); + } + +/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +*/ + + + + // 3600 (размер моды порядка 3000) + if( (Gyro.PLC_Lern<60)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. { Gyro.PLC_Lern++; Spi.DAC_B += 0x3c; if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; - } + + if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. + else l++; //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды. + if((l>100)&&(Gyro.PLC_Lern>59)) {AD_MAX -= 3107200; l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). - if(Gyro.RgConA&0x2) // если включон контур регулирования + + if(Gyro.RgConA&0x2) // если контур регулирования замкнут { - if ( Gyro.PLC_Error2Mode > 0) {Gyro.PLC_Error2Mode --; Gyro.PLC_ADC_DOld = 0;} // если ошибка(нахожление в двух модовом) + if ( Gyro.PLC_Error2Mode > 0) {Gyro.PLC_Error2Mode --; Gyro.PLC_ADC_DOld = 0;} // если ошибка(нахожление в двух модовом) else if ( Gyro.PLC_Delta > (3500 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5; Gyro.PLC_ADC_DOld = 0;} // проверка на двух модовость else if ( Gyro.PLC_Delta < (-3500 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5; Gyro.PLC_ADC_DOld = 0;} // проверка на двух модовость else if ( Gyro.PLC_DeltaADD > 0) {Gyro.PLC_ADC_DOld = 1;} @@ -181,6 +205,9 @@ else {Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;} + + + if(tempDelta>(50<<18)) // 3 режим регулирования { tempDac=(unsigned int)(tempDelta>>18); @@ -209,7 +236,31 @@ tempDac = Gyro.PLC_ADC_DOld * tempDac; flagmod=1; } - + + + + + + + if(flagmod==3){ //если максимальный режим регулирования + k++; //инкрементируем счетчик большого понижения амплитуды + if(k>35) //если счетчик бльше 35 + { + k=0; //обнуляем счетчик + AD_MAX -= 13107200; //уменьшаем максимальную амплитуду. + } + } + else k=0; //если это не серия максимальных регулировок обнуляем счетчик. + + + + + + + + + + if ( Spi.DAC_B < 1000 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;}//проверка на переваливание за границу. if ( Spi.DAC_B > 63000 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} @@ -218,10 +269,10 @@ { //sprintf((Time),"%d %d %d %d\r\n",Gyro.PLC_Lern, Spi.DAC_B, Gyro.AD_Slow, Gyro.AD_Slow>>18 );//выдаем в терминал для постройки граффика регулировки периметра. //WriteCon(Time); - sprintf((Time),"%d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9,tempDelta>>18,tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k);//выдаем в терминал для постройки граффика регулировки периметра. + sprintf((Time),"%d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9, tempDelta>>18, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k);//выдаем в терминал для постройки граффика регулировки периметра. WriteCon(Time); } -//LoopOff +//LoopOff*/ }