![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LGstaandart by
Diff: SPI.c
- Revision:
- 152:cff1321ab25e
- Parent:
- 151:d565ce4d58c8
- Child:
- 153:7086895c6ee3
--- a/SPI.c Thu May 05 11:03:59 2016 +0000 +++ b/SPI.c Thu May 05 14:00:36 2016 +0000 @@ -9,7 +9,7 @@ int temp9; int AD_MAX=0; int k=0,l=0; - int flagmod=0; +int flagmod=0; unsigned int Temp_ADC_2; unsigned int Temp_ADC_3; unsigned int Temp_ADC_4; @@ -131,8 +131,7 @@ void PlcRegul(void) //Программа расчет напряжения для модулятора { - - int PLC_In; + int PLC_In; int tempDelta; int tempDac; @@ -143,9 +142,7 @@ Gyro.PLC_Delta = PLC_In - Gyro.PLC_Old; // узнаем приращение Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld; //приращение с учетом знака (и количества) прошлого приращения Gyro.PLC_Old = PLC_In; // запоминание значения - //AD_MAX=1943420832; - //15728640 - //AD_MAX=1943400; + 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 раз). @@ -159,31 +156,21 @@ } } 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) для определения максимальной амплитуды. { Gyro.PLC_Lern++; - //Spi.DAC_B += 100; Spi.DAC_B += 0x3c; if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; - // sprintf((Time),"Spi.DAC_B=%d Gyro.AD_Slow=%d AD_MAX=%d\r\n", Spi.DAC_B, Gyro.AD_Slow,AD_MAX); - // WriteCon(Time); + } - //else Gyro.LogPLC=0; - - - + 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;} // проверка на двух модовость - 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;} else if ( Gyro.PLC_DeltaADD < 0) {Gyro.PLC_ADC_DOld = -1;} else @@ -194,7 +181,7 @@ else {Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;} - if(tempDelta>(50<<18)) + if(tempDelta>(50<<18)) // 3 режим регулирования { tempDac=(unsigned int)(tempDelta>>18); if(tempDac>400) {tempDac=400;} @@ -202,29 +189,29 @@ tempDac = Gyro.PLC_ADC_DOld * tempDac; flagmod=3; } - else if(tempDelta>(12<<18)) + 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); flagmod=2; } - else if(tempDelta>(2<<18)) + else if(tempDelta<(2<<18)) //режим если дельта равна 0; { - tempDac=5; + tempDac=2; Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; flagmod=1; } else { - tempDac=(unsigned int)(tempDelta>>19); + tempDac=(unsigned int)(tempDelta>>19); // 1 режим регулирования Spi.DAC_B += Gyro.PLC_ADC_DOld *tempDac; 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;} + 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;} if(Gyro.LogPLC==1)