Dmitry Kovalev
/
LG2
fork
Fork of LG by
Diff: SPI.c
- Revision:
- 193:a0fe8bfc97e4
- Parent:
- 192:d32c8cf7bcd9
- Child:
- 195:bcc769f5292b
diff -r d32c8cf7bcd9 -r a0fe8bfc97e4 SPI.c --- a/SPI.c Thu Sep 01 08:23:30 2016 +0000 +++ b/SPI.c Thu Sep 15 11:09:00 2016 +0000 @@ -115,37 +115,41 @@ void PlcRegul(void) //Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.) { - //LoopOn int PLC_In; int tempDac; if(!(Gyro.PinReg & PinRegBitL) && (start>0)) start--; - if((start==0)){ - if(!(Gyro.PinReg & PinRegBitL)) PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации + if((start==0)) + { + PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации Gyro.PLC_Delta = PLC_In - Gyro.PLC_Old; //узнаем приращение Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld; //приращение с учетом знака (и количества) прошлого приращения Gyro.PLC_Old = PLC_In; //запоминание значения - if(Gyro.flagGph_W) { - AD_MAX=0; - Gyro.flagGph_W--; - Gyro.PLC_Error2Mode=3; + if(Gyro.flagGph_W) + { + AD_MAX=0; + Gyro.flagGph_W--; + Gyro.PLC_Error2Mode=3; } //если изменился коэфициент усиления ФД //3600 (размер моды порядка 3000) - if((Gyro.PLC_Lern < 150) && (Gyro.PLC_Error2Mode != 0)) { //пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. - Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 - if(AD_MAX < PLC_In){AD_MAX = PLC_In;} //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. - else if ((AD_MAX>PLC_In)&&(AD_MAX>1500800000)) r++; //если текущая амплитуда меньше максимально найденной то инкрементируем счетчик. - if (r>10){ - Gyro.PLC_Lern=150; - Gyro.PLC_Error2Mode=3; + if((Gyro.PLC_Lern < 150) && (Gyro.PLC_Error2Mode != 0)) + { //пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. + Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 + if(AD_MAX < PLC_In){AD_MAX = PLC_In;} //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. + else if ((AD_MAX>PLC_In)&&(AD_MAX>1500800000)) r++; //если текущая амплитуда меньше максимально найденной то инкрементируем счетчик. + if (r>10) + { + Gyro.PLC_Lern=150; + Gyro.PLC_Error2Mode=3; } //если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска - Gyro.CuruAngle = 0; //не считаем угол пока ищем максивальную амплитуду. - } //работает только первые ~30-40 секунд (37 сек). - if (Gyro.PLC_Lern<250) Gyro.PLC_Lern++; + Gyro.CuruAngle = 0; //не считаем угол пока ищем максивальную амплитуду. + } //работает только первые ~30-40 секунд (37 сек). + if (Gyro.PLC_Lern<160) Gyro.PLC_Lern++; + if(AD_MAX < PLC_In) {AD_MAX = PLC_In; l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. else l++; //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) - if((l == 40)&&(Gyro.PLC_Error2Mode == 0)) {AD_MAX -= 5107200;k=30;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). m - if ((k == 30)&&(Gyro.PLC_Lern > 59)) Spi.DAC_B += 200; //после уменьшения максимальной амплитуды двигаем шевелем цап - else if((k == 1)&&(Gyro.PLC_Lern > 59)) {Spi.DAC_B -= 200; k=0;l=0;} //для быстрог поиска новог максимума. - if(k>0)k--; + 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; //после уменьшения максимальной амплитуды двигаем шевелем цап + else if((k == 1)&&(Gyro.PLC_Lern > 150)) {Spi.DAC_B -= 200; k=0;l=0;} //для быстрог поиска новог максимума. + if(k>0)k--;*/ Gyro.PlC_MaxD=(unsigned int)(AD_MAX-PLC_In); //ищем разницу между желаемой и действительной амплитудами. @@ -176,7 +180,8 @@ tempADC5=0x7fff-Spi.ADC5; // контур замкнут включен лазер - if((Gyro.RgConA&0x8) && (tempADC5>1000)) { + if((Gyro.RgConA&0x8) && (tempADC5>1000)) + { if(Gyro.PlC_MaxD>(50<<17)) { //3 режим регулирования tempDac=(unsigned int)(Gyro.PlC_MaxD>>19); if(tempDac>600) {tempDac=600;} //ограничение на регулирование если очень большая разница амплитуд