![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fork
Fork of LG by
Diff: SPI.c
- Revision:
- 159:38f39c0c143f
- Parent:
- 158:0c8342e1837a
- Child:
- 160:6170df6f5a5c
--- a/SPI.c Wed May 11 14:04:57 2016 +0000 +++ b/SPI.c Fri May 13 11:01:16 2016 +0000 @@ -4,7 +4,6 @@ unsigned int Temp_AMP64P; int ttt = 0; -float TimPlc=0; unsigned int Count_AMP, ADD_AMP, Cur_Amp; int Znak_Amp; int AD_Regul = 0; @@ -105,7 +104,7 @@ -void ShowMod(void) +void ShowMod(void)//технологическая функция для просмотра мод на всем диапазпне цап { ////////////////////////////////////////////////////////////////////////////////////////////////// @@ -113,14 +112,12 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// if( (Gyro.PLC_Lern<1092)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. { - Gyro.PLC_Error2Mode--; 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); WriteCon(Time); - TimPlc+=0.63; } } @@ -128,7 +125,7 @@ -void PlcRegul(void) //Программа расчет напряжения для модулятора//выполняется 1.25 микросек. +void PlcRegul(void) //Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.) { int PLC_In; @@ -155,17 +152,23 @@ Gyro.PLC_Lern++; //инкрементируем счетчик поиска максимальной амплитуды if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. * Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 + Gyro.CuruAngle = 0; } //работает только первые ~30-40 секунд (37 сек). if(AD_MAX < Gyro.AD_Slow) { AD_MAX = Gyro.AD_Slow; l=0; }//обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. * - else l++; - //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) + else if((l == 100)&&(Gyro.PLC_Error2Mode == 0)) { AD_MAX -= 5107200;k=1;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). + else l++; + + if((k == 1)&&(Gyro.PLC_Error2Mode == 0)) {Spi.DAC_B += 200; k=2;} + //if((k == 2)&&(Gyro.PLC_Error2Mode == 0)) {Spi.DAC_B -= 200; k=0;l=0;} + //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) Gyro.PlC_MaxD=(unsigned int)(AD_MAX-Gyro.AD_Slow); //ищем разницу между желаемой и действительной амплитудами. //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды. - if((l>50)&&(Gyro.PLC_Lern>59)) { AD_MAX -= 3107200; l=0; } //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). + + if(Gyro.RgConA&0x2) { // если контур регулирования замкнут /* else if ( Gyro.PLC_Delta > (3500 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5; Gyro.PLC_ADC_DOld = 0;} // проверка на двух модовость @@ -179,7 +182,7 @@ if(Gyro.PlC_MaxD>(50<<18)) { // 3 режим регулирования tempDac=(unsigned int)(Gyro.PlC_MaxD>>18); - if(tempDac>1500) tempDac=1500; //ограничение на регулирование если очень большая разница амплитуд + if(tempDac>600) tempDac=600; //ограничение на регулирование если очень большая разница амплитуд Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; //новое значение в цап (±1 * значение регулировки) tempDac = Gyro.PLC_ADC_DOld * tempDac; //используется только для выдачи flagmod=3; @@ -201,16 +204,16 @@ tempDac = Gyro.PLC_ADC_DOld * tempDac; flagmod=1; } - - + + /* if(flagmod==3) {k++; //если максимальный режим регулирования //инкрементируем счетчик большого понижения амплитуды - if(k>100){k=0;AD_MAX -= 13107200;} //если счетчик бльше 50 //обнуляем счетчик //уменьшаем максимальную амплитуду. + if(k>100){k=0;AD_MAX -= 6107200;} //если счетчик бльше 50 //обнуляем счетчик //уменьшаем максимальную амплитуду. } else k=0; //если это не серия максимальных регулировок обнуляем счетчик. - + */ - 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;} //проверка на переваливание за границу. else if ( Spi.DAC_B > 63000 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} @@ -221,8 +224,9 @@ if(Gyro.LogPLC==1) { //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, Gyro.PlC_MaxD>>18, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k);//выдаем в терминал для постройки граффика регулировки периметра. + sprintf((Time),"%d %d %d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9, l, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k, Gyro.CuruAngle, Gyro.TermLM);//выдаем в терминал для постройки граффика регулировки периметра. WriteCon(Time); + // Gyro.CuruAngle = 0; } } @@ -253,7 +257,7 @@ else if (Gyro.PLC_DeltaADD > 0) { -// Gyro.PLC_ADC_DOld = (Gyro.PLC_DeltaADD /6553600 )+1; +// Gyro.PLC_ADC_DOld = (Gyro.PLC_DeltaADD /6553600 )+1; Gyro.PLC_ADC_DOld = 1; } else if (Gyro.PLC_DeltaADD < 0)