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:
- 155:94e7ac5fea58
- Parent:
- 153:7086895c6ee3
- Child:
- 157:1069c80f4944
--- a/SPI.c Fri May 06 10:45:37 2016 +0000
+++ b/SPI.c Fri May 06 14:08:54 2016 +0000
@@ -131,14 +131,13 @@
-void PlcRegul(void) //Программа расчет напряжения для модулятора
+void PlcRegul(void) //Программа расчет напряжения для модулятора//выполняется 1.25 микросек.
{
+ LoopOn
int PLC_In;
int tempDelta;
int tempDac;
-
-
-// LoopOn
+
@@ -151,8 +150,7 @@
- tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);//ищем разницу между желаемой и действительной амплитудами.
-
+
/*
@@ -177,20 +175,23 @@
- // 3600 (размер моды порядка 3000)
+ // 3600 (размер моды порядка 3000)
if( (Gyro.PLC_Lern<60)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
{
- Gyro.PLC_Lern++;
- Spi.DAC_B += 0x3c;
- if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;
- }
+ Gyro.PLC_Lern++; //инкрементируем счетчик поиска максимальной амплитуды
+ if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.
+ Spi.DAC_B += 0x3c; //добовляем в значение цапа 60
+ } //работает только первые ~30-40 секунд (37 сек).
- 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 раз).
+ if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow; l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды.
+ else l++; //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
+
+ tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow); //ищем разницу между желаемой и действительной амплитудами.
+ //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды.
+ if((l>100)&&(Gyro.PLC_Lern>59)) {AD_MAX -= 3107200; l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз).
- if(Gyro.RgConA&0x2) // если контур регулирования замкнут
+ 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;} // проверка на двух модовость
@@ -211,16 +212,16 @@
if(tempDelta>(50<<18)) // 3 режим регулирования
{
tempDac=(unsigned int)(tempDelta>>18);
- if(tempDac>400) {tempDac=400;}
- Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;
- tempDac = Gyro.PLC_ADC_DOld * tempDac;
+ if(tempDac>400) {tempDac=400;} //ограничение на регулирование если очень большая разница амплитуд
+ Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; //новое значение в цап
+ tempDac = Gyro.PLC_ADC_DOld * tempDac; //используется только для выдачи
flagmod=3;
}
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);
+ tempDac = Gyro.PLC_ADC_DOld * (tempDac); //используется только для выдачи
flagmod=2;
}
else if(tempDelta<(2<<18)) //режим если дельта равна 0;
@@ -238,10 +239,6 @@
}
-
-
-
-
if(flagmod==3){ //если максимальный режим регулирования
k++; //инкрементируем счетчик большого понижения амплитуды
if(k>35) //если счетчик бльше 35
@@ -252,15 +249,7 @@
}
else k=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;}
@@ -272,7 +261,7 @@
sprintf((Time),"%d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9, tempDelta>>18, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k);//выдаем в терминал для постройки граффика регулировки периметра.
WriteCon(Time);
}
-//LoopOff*/
+LoopOff
}
