Dmitry Kovalev
/
LGfiltr
forkd
Fork of LGstaandart by
Diff: SPI.c
- Revision:
- 155:94e7ac5fea58
- Parent:
- 153:7086895c6ee3
- Child:
- 157:1069c80f4944
diff -r 09888f2a229b -r 94e7ac5fea58 SPI.c --- a/SPI.c Fri May 06 10:45:37 2016 +0000 +++ b/SPI.c Fri May 06 14:08:54 2016 +0000 @@ -131,14 +131,13 @@ -void PlcRegul(void) //Программа расчет напряжения для модулятора +void PlcRegul(void) //Программа расчет напряжения для модулятора//выполняется 1.25 микросек. { + LoopOn int PLC_In; int tempDelta; int tempDac; - - -// LoopOn + @@ -151,8 +150,7 @@ - tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);//ищем разницу между желаемой и действительной амплитудами. - + /* @@ -177,20 +175,23 @@ - // 3600 (размер моды порядка 3000) + // 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; - } + Gyro.PLC_Lern++; //инкрементируем счетчик поиска максимальной амплитуды + if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. + Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 + } //работает только первые ~30-40 секунд (37 сек). - 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(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow; l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. + else l++; //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) + + tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow); //ищем разницу между желаемой и действительной амплитудами. + //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды. + 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;} // если ошибка(нахожление в двух модовом) else if ( Gyro.PLC_Delta > (3500 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5; Gyro.PLC_ADC_DOld = 0;} // проверка на двух модовость @@ -211,16 +212,16 @@ if(tempDelta>(50<<18)) // 3 режим регулирования { tempDac=(unsigned int)(tempDelta>>18); - if(tempDac>400) {tempDac=400;} - Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; - tempDac = Gyro.PLC_ADC_DOld * tempDac; + if(tempDac>400) {tempDac=400;} //ограничение на регулирование если очень большая разница амплитуд + Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; //новое значение в цап + tempDac = Gyro.PLC_ADC_DOld * tempDac; //используется только для выдачи flagmod=3; } else if(tempDelta>(12<<18)) // 2 режим регулирования { tempDac=(unsigned int)(tempDelta>>18); Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac); - tempDac = Gyro.PLC_ADC_DOld * (tempDac); + tempDac = Gyro.PLC_ADC_DOld * (tempDac); //используется только для выдачи flagmod=2; } else if(tempDelta<(2<<18)) //режим если дельта равна 0; @@ -238,10 +239,6 @@ } - - - - if(flagmod==3){ //если максимальный режим регулирования k++; //инкрементируем счетчик большого понижения амплитуды if(k>35) //если счетчик бльше 35 @@ -252,15 +249,7 @@ } 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;} @@ -272,7 +261,7 @@ 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 }