Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LG by
Diff: SPI.c
- Revision:
- 188:4c523cc373cc
- Parent:
- 179:2b4e6bc277df
- Child:
- 189:8a16378724c4
--- a/SPI.c Mon Aug 01 14:03:08 2016 +0000
+++ b/SPI.c Fri Aug 19 14:02:02 2016 +0000
@@ -10,7 +10,8 @@
int temp9;
int AD_MAX=0;
int k=0,l=0,r=0;
-int flagmod=0;
+int flagmod=0,Bdelta;
+
unsigned int Temp_ADC_2;
unsigned int Temp_ADC_3;
unsigned int Temp_ADC_4;
@@ -125,28 +126,29 @@
int tempDac;
- PLC_In =Gyro.AD_Slow; //выбираем даные для фильтрации
+ PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации
// PLC_In = (unsigned int)(PLC_In>>1);
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=1;} //если изменился коэфициент усиления ФД //3600 (размер моды порядка 3000)
+ 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) для определения максимальной амплитуды.
Gyro.PLC_Lern++; //инкрементируем счетчик поиска максимальной амплитуды
Spi.DAC_B += 0x3c; //добовляем в значение цапа 60
if(AD_MAX < PLC_In){AD_MAX = PLC_In;} //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.
- else if ((AD_MAX>PLC_In)&&(AD_MAX>1502800000)) r++; //если текущая амплитуда меньше максимально найденной то инкрементируем счетчик.
- if (r>5){Gyro.PLC_Lern=150;Gyro.PLC_Error2Mode=5;} //если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска
+ else if ((AD_MAX>PLC_In)&&(AD_MAX>1500800000)) r++; //если текущая амплитуда меньше максимально найденной то инкрементируем счетчик.
+ if (r>10){Gyro.PLC_Lern=150;Gyro.PLC_Error2Mode=8;} //если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска
Gyro.CuruAngle = 0; //не считаем угол пока ищем максивальную амплитуду.
} //работает только первые ~30-40 секунд (37 сек).
- if(AD_MAX < PLC_In) {AD_MAX = PLC_In; l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. *
- else if((l == 150)&&(Gyro.PLC_Error2Mode == 0)) {AD_MAX -= 5107200;k=30;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз).
- else if(Gyro.PLC_Error2Mode == 0) l++; //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
+ 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--;
@@ -175,13 +177,16 @@
Spi.DAC_B -= 12500;
Gyro.PLC_Error2Mode=4;
}
+ if (Bdelta>20)
+ {AD_MAX=1510800000;}
if(Gyro.RgConA&0x8) {
if(Gyro.PlC_MaxD>(50<<17)) { // 3 режим регулирования
tempDac=(unsigned int)(Gyro.PlC_MaxD>>19);
- if(tempDac>600) tempDac=600; //ограничение на регулирование если очень большая разница амплитуд
+ if(tempDac>600) {tempDac=600; Bdelta++; } //ограничение на регулирование если очень большая разница амплитуд
Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; //новое значение в цап (±1 * значение регулировки)
tempDac = Gyro.PLC_ADC_DOld * tempDac; //используется только для выдачи
flagmod=3;
+
}
else if(Gyro.PlC_MaxD>(12<<17)) { // 2 режим регулирования
tempDac=(unsigned int)(Gyro.PlC_MaxD>>19);
@@ -218,7 +223,7 @@
//////////лог//////////
///////////////////////
if(Gyro.LogPLC==1) {
- sprintf((Time),"%d %d %d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9, r, tempDac, flagmod, AD_MAX, PLC_In, (Gyro.Frq>>16), Gyro.AmpPer, Gyro.CuruAngle);//выдаем в терминал для постройки граффика регулировки периметра.
+ sprintf((Time),"%d %d %d %d %d %d %d %d %d %d\r\n", Gyro.AD_Slow, temp9, r, tempDac, flagmod, AD_MAX, PLC_In, (Gyro.Frq>>16), Spi.DAC_A, Gyro.In2);//выдаем в терминал для постройки граффика регулировки периметра.
WriteCon(Time);
}
}
