Dmitry Kovalev
/
LG2
fork
Fork of LG by
Diff: SPI.c
- Revision:
- 128:1e4675a36c93
- Parent:
- 127:6a7472d67804
- Child:
- 140:1fbf117fc120
diff -r 6a7472d67804 -r 1e4675a36c93 SPI.c --- a/SPI.c Mon Apr 11 03:13:42 2016 +0000 +++ b/SPI.c Mon Apr 11 11:04:34 2016 +0000 @@ -63,7 +63,7 @@ Spi.ADC5_Accum = 0; Spi.ADC_NewData = 1; } - + } @@ -74,70 +74,45 @@ 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; // запоминание значения - Gyro.PLC_Delta = PLC_In - Gyro.PLC_Old; // узнаем приращение - Gyro.PLC_DeltaADD = PLC_Delta * Gyro.PLC_ADC_DOld; //приращение с учетом знака (и количества) прошлого приращения - Gyro.PLC_Old = PLC_In; // запоминание значения - if(Gyro.RgConA&0x2) // если включон контур регулирования + if(Gyro.RgConA&0x2) // если включон контур регулирования { - if (Gyro.PLC_Error2Mode > 0) {Gyro.PLC_Error2Mode --;} // если ошибка(нахожление в двух модовом) - else if ( Gyro.PLC_Delta > (1000 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} // проверка на двух модовость - else if ( Gyro.PLC_Delta < (-1000 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} + if (Gyro.PLC_Error2Mode > 0) {Gyro.PLC_Error2Mode --; Gyro.PLC_ADC_DOld = 0; } // если ошибка(нахожление в двух модовом) + else if ( Gyro.PLC_Delta > (3000 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5; Gyro.PLC_ADC_DOld = 0;} // проверка на двух модовость + else if ( Gyro.PLC_Delta < (-3000 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5; Gyro.PLC_ADC_DOld = 0;} + else if (Gyro.PLC_DeltaADD > 0) { - + +// Gyro.PLC_ADC_DOld = (Gyro.PLC_DeltaADD /6553600 )+1; + Gyro.PLC_ADC_DOld = 1; } else if (Gyro.PLC_DeltaADD < 0) { +// Gyro.PLC_ADC_DOld = (Gyro.PLC_DeltaADD /6553600 )-1; + Gyro.PLC_ADC_DOld = -1; } else { - + Gyro.PLC_ADC_DOld = 1; } } else { - Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0 + Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0; } - Spi.DAC_B += Gyro.PLC_ADC_DOld * 4; - if ( Spi.DAC_B < 1000 ) {Spi.DAC_B = 64000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} - if ( Spi.DAC_B > 1000 ) {Spi.DAC_B = 1000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} - - - + + Spi.DAC_B += Gyro.PLC_ADC_DOld * 16; + 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.RgConA&0x2) - { - if (Gyro.PLC_Error2Mode > 0) {Gyro.PLC_Error2Mode --;} // если ошибка(нахожление в двух модовом) - else if ( Gyro.PLC_Delta > (1000 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5;} - else if ( Gyro.PLC_Delta < (-1000 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5;} - else if ((Gyro.PLC_Delta * Gyro.PLC_Znak) > 0) - { - Gyro.PLC_Znak = 1; -// Gyro.PLC_Regul -= ((Gyro.PLC_Delta * Gyro.PLC_Znak)/100); -// Spi.DAC_B -= (((Gyro.PLC_Delta * Gyro.PLC_Znak)/65536))*16; - Spi.DAC_B -= 64; - } - else - { - Gyro.PLC_Znak = -1; -// Gyro.PLC_Regul -= ((Gyro.PLC_Delta * Gyro.PLC_Znak)/100); -// Spi.DAC_B -= (((Gyro.PLC_Delta * Gyro.PLC_Znak)/65536))*16; - Spi.DAC_B += 64; - } -// Spi.DAC_B = (Gyro.PLC_Regul + 0x1fffffff)/65536; - } -else Spi.DAC_B += 16; -*/ - - - - - -} + }