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
Revision 150:29c9f7671bac, committed 2016-05-04
- Comitter:
- Kovalev_D
- Date:
- Wed May 04 14:01:57 2016 +0000
- Parent:
- 149:abbf7663d27d
- Child:
- 151:d565ce4d58c8
- Commit message:
- PLC
Changed in this revision
--- a/CntrlGLD.c Tue May 03 05:12:26 2016 +0000
+++ b/CntrlGLD.c Wed May 04 14:01:57 2016 +0000
@@ -66,9 +66,9 @@
/*
void GLD_Status(void) //r.---------- допусковый контроль параметров ГЛД --------------------------
{
- static uint32_t Device_Mode_Old = DM_INT_10KHZ_LATCH/*DM_EXT_LATCH_DELTA_SF_PULSE*/;
+ static uint32_t Device_Mode_Old = DM_INT_10KHZ_LATCH DM_EXT_LATCH_DELTA_SF_PULSE ;
- /* if ( loop_is_closed(GLD_ON) == 0 ) {
+ if ( loop_is_closed(GLD_ON) == 0 ) {
open_all_loops();
GLD_Stop();
}
@@ -222,7 +222,7 @@
}
} // GLD_Pulse
-
+/*
void contrl_GLD(void) //r.========== процедура управления прибором ===============================
{
GLD_Start(); //r. запустить прибор, если есть запрос
@@ -230,7 +230,7 @@
GLD_Stop(); //r. остановить прибор, если необходимо
GLD_Pulse(); //r. генерация импульса поджига при наличии запроса
GLD_Output(); //r. режимы выдачи данных из гироскопа
-} // contrl_GLD
+} */// contrl_GLD
--- a/Command.c Tue May 03 05:12:26 2016 +0000
+++ b/Command.c Wed May 04 14:01:57 2016 +0000
@@ -1016,18 +1016,18 @@
Spi.DAC_B -= 200;
}
////////////////////////////////////////////////////////////////////////////////
- /*Запись лога настройки частоты*/
+ /*Запись лога регулировки частоты*/
if (Time[0] == 'y') Gyro.LogHZ=1; //включит передачу
if (Time[0] == 'u') Gyro.StrayHZ_flag = 1; //LPC_TIM1->MR0+1000 вносим помеху
if (Time[0] == 'i') Gyro.StrayHZ_flag = 0; //LPC_TIM1->MR0 убираем помеху
if (Time[0] == 'o') Gyro.LogHZ=0; //Отключить передачу
////////////////////////////////////////////////////////////////////////////////////
- /*Запись лога настройки периметра*/
+ /*Запись лога регулировки периметра*/
if (Time[0] == 'g') Gyro.LogPLC=1; //включит передачу
- if (Time[0] == 'h') Gyro.StrayPLC_flag = 1; //LPC_TIM1->MR0+1000 вносим помеху
- if (Time[0] == 'j') Gyro.StrayPLC_flag = 0;
- if (Time[0] == 'b') Gyro.StrayPLC_flag = 3; //LPC_TIM1->MR0-1000 вносим помеху
- if (Time[0] == 'n') Gyro.StrayPLC_flag = 2; //LPC_TIM1->MR0 убираем помеху
+ if (Time[0] == 'h') Gyro.StrayPLC_flag = 1; //LPC_TIM1->MR0+1000 вносим помеху +
+ if (Time[0] == 'j') Gyro.StrayPLC_flag = 0; //LPC_TIM1->MR0 убираем помеху
+ if (Time[0] == 'b') Gyro.StrayPLC_flag = 3; //LPC_TIM1->MR0-1000 вносим помеху -
+ if (Time[0] == 'n') Gyro.StrayPLC_flag = 2; //LPC_TIM1->MR0+2500 большая помеха.
if (Time[0] == 'k') Gyro.LogPLC=0; //Отключить передачу
//////////////////////////////////////////////////////////////////////////////////////
if (Time[0] == '8') { // выдача технологическая
--- a/Global.c Tue May 03 05:12:26 2016 +0000
+++ b/Global.c Wed May 04 14:01:57 2016 +0000
@@ -71,6 +71,9 @@
Gyro.StrayPLC_2Mode = 2000;
Gyro.StrayPLC_flag = 0;
Gyro.LogPLC = 0;
+ Gyro.PLC_Lern=0;
+ Gyro.PLC_Error2Mode = 55; // начальная задержка (работает СРП)
+
/////////////////////////////////////////////
/////////////////////////////////////////////
--- a/HFO_Reg.c Tue May 03 05:12:26 2016 +0000
+++ b/HFO_Reg.c Wed May 04 14:01:57 2016 +0000
@@ -22,7 +22,7 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//r. фильтрация выхода ампл. детектора перед передачей в контур ГВЧ
- /*int HFO_MovAverFilt (int Input)
+ int HFO_MovAverFilt (int Input)
{
static __int64 smooth_HF = 0;
@@ -38,11 +38,11 @@
i_HF &= (BUF_SIZE-1);
return (smooth_HF>>22); //shift on additional 6 bits for smoothing 2^6 = 64
- }*/
+ }
-// HFO_SHIFT - число разрядов дробной части в 32-хбитовой переменной hf_reg32
- /* Input.StrIn.HF_out = HFO_MovAverFilt(Input.StrIn.HF_out<<HFO_SHIFT);
+ HFO_SHIFT - число разрядов дробной части в 32-хбитовой переменной hf_reg32
+ Input.StrIn.HF_out = HFO_MovAverFilt(Input.StrIn.HF_out<<HFO_SHIFT);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Output.Str.HF_dif = L_sub(Device_blk.Str.HF_ref, Input.StrIn.HF_out); // HF_dif = HF_out - Device_blk.Str.HF_ref;
--- a/MTimer.c Tue May 03 05:12:26 2016 +0000
+++ b/MTimer.c Wed May 04 14:01:57 2016 +0000
@@ -53,7 +53,7 @@
Event1K --;
Time1K++;//первый ++ работает каждые 125 (event100kHz)второй был в 100 кГц
Time500Hz++;
- LoopOn
+ //LoopOn
if (Time1K == 1000)
{
Time1K = 0;
@@ -65,7 +65,7 @@
Time500Hz = 0;
Event500Hz ++;
}
- LoopOff
+ // LoopOff
}
}
--- a/MTimer.h Tue May 03 05:12:26 2016 +0000 +++ b/MTimer.h Wed May 04 14:01:57 2016 +0000 @@ -8,7 +8,9 @@ extern void enable_timer2(void); extern unsigned int CountV31; extern unsigned int CountV255; +extern unsigned int Init_TIM1 (unsigned int TimerInterval); +extern unsigned int Init_TIM2 (void); extern void Event_500Hz(void); extern void Event_1Hz(void); // событие раз в 1 Гц extern void Event_1KHz(void) ; // событие раз в 1 кГц
--- a/SPI.c Tue May 03 05:12:26 2016 +0000
+++ b/SPI.c Wed May 04 14:01:57 2016 +0000
@@ -8,7 +8,8 @@
int AD_Regul = 0;
int temp9;
int AD_MAX=0;
-
+int k=0,l=0;
+ int flagmod=0;
unsigned int Temp_ADC_2;
unsigned int Temp_ADC_3;
unsigned int Temp_ADC_4;
@@ -50,8 +51,8 @@
if (Gyro.ADF_Count > 15) // если прошло 16 тактов виброподвеса
{
- Gyro.AD_Fast = Gyro.ADF_Accum << 12; //обновляем данные и приводим в один масштаб
- Gyro.ADF_Count = 0;
+ Gyro.AD_Fast = Gyro.ADF_Accum << 12; //обновляем данные и приводим в один масштаб
+ Gyro.ADF_Count = 0;//
Gyro.ADF_Accum = 0;
Gyro.ADF_NewData = 1;
}
@@ -130,12 +131,12 @@
void PlcRegul(void) //Программа расчет напряжения для модулятора
{
- int k;
+
int PLC_In;
int tempDelta;
int tempDac;
- int flagmod;
-
+
+ LoopOn
PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации
// PLC_In = Gyro.AD_Fast;
//или+,или-(знак)
@@ -145,9 +146,31 @@
//AD_MAX=1943420832;
//15728640
//AD_MAX=1943400;
- if(AD_MAX<Gyro.AD_Slow)
- {AD_MAX=Gyro.AD_Slow/*+2621440*10;*/;}
- tempDelta=AD_MAX-Gyro.AD_Slow;
+ if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;l=0;}
+ else l++;
+ if(flagmod>2){
+ k++;
+ if(k>30)
+ {
+ k=0; //1948558064
+ AD_MAX -= 13107200; //= 50
+ }
+ } // 5242880 = 20
+ else k=0;
+ if(l>30) {AD_MAX -= 13107200; l=0;}
+ tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);
+
+ if( (Gyro.PLC_Lern<51)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(50*0х3с=0хВВ8) для определения максимальной амплитуды.
+ {
+ Gyro.PLC_Lern++;
+ Spi.DAC_B += 0x1e;
+ if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;
+ sprintf((Time)," Gyro.AD_Slow=%d Spi.DAC_B=%d AD_MAX=%d\r\n", Gyro.AD_Slow,Spi.DAC_B,AD_MAX);
+ WriteCon(Time);
+ }
+
+
+
if(Gyro.RgConA&0x2) // если включон контур регулирования
{
if ( Gyro.PLC_Error2Mode > 0) {Gyro.PLC_Error2Mode --; Gyro.PLC_ADC_DOld = 0;} // если ошибка(нахожление в двух модовом)
@@ -160,25 +183,30 @@
Gyro.PLC_ADC_DOld = 1;
}
}
- else
- {
- Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;
- }
- if(((tempDelta>>18)>30)||((tempDelta>>18)<(-30)))
+ else {Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;}
+
+
+ if(((tempDelta>>18)>50)||((tempDelta>>18)<(-50)))
{
tempDac=(unsigned int)(tempDelta>>18);
- if(tempDac>450) {tempDac=400;}
- Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac/*Gyro.PLC_Delta>>18*/;
+ if(tempDac>400) {tempDac=400;}
+ Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;
tempDac = Gyro.PLC_ADC_DOld * tempDac;
flagmod=3;
}
- else if(((tempDelta>>18)>10)||((tempDelta>>18)<(-10)))
+ else if(((tempDelta>>18)>20)||((tempDelta>>18)<(-20)))
{
tempDac=(unsigned int)(tempDelta>>18);
- Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac);
- tempDac = Gyro.PLC_ADC_DOld * (tempDac);
+ Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac-5);
+ tempDac = Gyro.PLC_ADC_DOld * (tempDac-5);
flagmod=2;
}
+ else if(tempDelta>>18<2)
+ {
+ tempDac=5;
+ Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;
+ flagmod=1;
+ }
else
{
tempDac=(unsigned int)(tempDelta>>19);
@@ -190,15 +218,13 @@
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;}
-
-k=1;
if(Gyro.LogPLC==1)
{
- sprintf((Time),"%d %d %d %d %d\r\n", Spi.DAC_B, temp9,tempDelta>>18,tempDac,flagmod/*(Gyro.PLC_ADC_DOld * Gyro.PLC_Delta>>18)*/);//выдаем в терминал для постройки граффика регулировки периметра.
+ sprintf((Time),"%d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9,tempDelta>>18,flagmod,tempDac,AD_MAX, Gyro.AD_Slow, k/*(Gyro.PLC_ADC_DOld * Gyro.PLC_Delta>>18)*/);//выдаем в терминал для постройки граффика регулировки периметра.
WriteCon(Time);
}
-
+LoopOff
}
--- a/main.c Tue May 03 05:12:26 2016 +0000
+++ b/main.c Wed May 04 14:01:57 2016 +0000
@@ -36,27 +36,29 @@
int main (void)
{
SystemInit1(); // Инициализация контроллера: установка тактовых частот
-SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz
+SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 103MHz
GLD_Init();
- UART_InitSet (0, 921600, 0x03); // надо проверить, мож чо с ногам
+ UART_InitSet (0, 921600, 0x03);
// UART_InitSet (1, 921600, 0x03);
UART_InitSet (1, 115200, 0x03);
- IntLatch_Init(); // инициализация внутренней защелки.
- ExtLatch_Init(); // инициализация внешней защелки.
- LoadFlashParam(FromFLASH); //загрузка параметров.
- init_PLC(); //Инициализация СРП(регулировка периметра)
- init_Dither_reg(); //инициализация вибропривода
+// IntLatch_Init(); // инициализация внутренней защелки.
+// ExtLatch_Init(); // инициализация внешней защелки.
+// LoadFlashParam(FromFLASH); //загрузка параметров.
+// init_PLC(); //Инициализация СРП(регулировка периметра)
+// init_Dither_reg(); //инициализация вибропривода
Out_G_photo(200,200); //запись в буфер мастера принятые от функции данные (60,60) и установка флага старта передачи и занятой шины.
WriteCon1("\n\r ...GL start programm uart ACK.... ");
WriteCon("\n\r ...GL start programm uart Tech.... ");
sprintf(Time,"\r\nCompiled: %s %s.",__DATE__, __TIME__ ); //Подготовка даты и времени компиляции
WriteCon(Time);
+
-Gyro.PLC_Error2Mode = 10; // начальная задержка (неработает СРП)
- while ( 1 ) { //основной цикл.
+
+while ( 1 ){ //основной цикл.
+
G_Photo_Exchange();
Concol (); // Проврка 0 консоли (вход и выход)
Concol1 (); // Проврка 0 консоли (вход и выход)
@@ -71,29 +73,37 @@
Event_500Hz();
Event_1Hz();
Event_Vibro();
-
- switch(Gyro.ModeOut) {
- case 1:
- if(Gyro.Rate1_Event == 1) CMD_Rate();
- break;
- case 2:
- if(Gyro.Rate2_Event == 1) CMD_Rate2();
- break;
- case 3:
- if(Gyro.Delta500_Event == 1) CMD_Delta_500Hz();
- break;
- case 4:
- if(Gyro.EXT_Latch == 1) CMD_Delta_Ext();
- break;
- }
- if (Spi.ADC_NewData == 1) {ADS_Acum(); } // был приход новых данных по ацп сдесь сделать обработку информации и подготовку для выдачи делается 1 раз за вибро
- if (Gyro.ADF_NewData == 1) {Gyro.ADF_NewData = 0; } // был приход новых данных После быстрого фильтра AD
- if (Gyro.ADS_NewData == 1) {Gyro.ADS_NewData = 0; PlcRegul(); } // был приход новых данных После Медленного фильтра AD
- if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0; VibroFrqRegul(); } //Регулеровка частоты виброподвеса
- if (Gyro.VibroAMPRegulF == 1) {Gyro.VibroAMPRegulF = 0; VibroAMPRegul(); } //Регулеровка Амплитуды виброподвеса
- if (Gyro.VibroNoiseF == 1) {Gyro.VibroNoiseF = 0; CalcAmpN(); }//регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды
- if(Gyro.VibroOutF == 1) {Gyro.VibroOutF = 0; VibroOut(); }// установка ног в регисторе тоже подумать , зачем отделный флаг? наверно
- if( (Gyro.LogHZ == 1)&&(Gyro.Event_500Hz==1))
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////выдача параметров через Rate////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ switch(Gyro.ModeOut) {
+ case 1: if(Gyro.Rate1_Event == 1) CMD_Rate(); break;
+ case 2: if(Gyro.Rate2_Event == 1) CMD_Rate2(); break;
+ case 3: if(Gyro.Delta500_Event == 1) CMD_Delta_500Hz(); break;
+ case 4: if(Gyro.EXT_Latch == 1) CMD_Delta_Ext(); break;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////контуры регулировки///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ if (Spi.ADC_NewData == 1) {ADS_Acum(); } // был приход новых данных по ацп сдесь сделать обработку информации и подготовку для выдачи делается 1 раз за вибро
+ if (Gyro.ADF_NewData == 1) {Gyro.ADF_NewData = 0; } // был приход новых данных После быстрого фильтра AD
+ if (Gyro.ADS_NewData == 1) {Gyro.ADS_NewData = 0; PlcRegul(); } // был приход новых данных После Медленного фильтра AD (гдето раз в 38 - 40 секунд )//регулировка периметра.
+ if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0; VibroFrqRegul(); } // Регулеровка частоты виброподвеса
+ if (Gyro.VibroAMPRegulF == 1) {Gyro.VibroAMPRegulF = 0; VibroAMPRegul(); } // Регулеровка Амплитуды виброподвеса
+ if (Gyro.VibroNoiseF == 1) {Gyro.VibroNoiseF = 0; CalcAmpN(); } // регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды
+ if (Gyro.VibroOutF == 1) {Gyro.VibroOutF = 0; VibroOut(); } // установка ног в регисторе тоже подумать , зачем отделный флаг? наверно
+
+
+
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////выдача частоты в терминал длля записи лога///////////////////////////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //////G=1,K=0 в терменале
+ if((Gyro.LogHZ == 1)&&(Gyro.Event_500Hz==1)) //Запись длля Ориджина.
{
Gyro.Event_500Hz=0;
sprintf((Time),"%d \r\n",LPC_TIM1->MR0);
--- a/system_LPC17xx.c Tue May 03 05:12:26 2016 +0000
+++ b/system_LPC17xx.c Wed May 04 14:01:57 2016 +0000
@@ -703,8 +703,6 @@
void SystemInitDef (void)
-
-
{
--- a/tabel.txt Tue May 03 05:12:26 2016 +0000 +++ b/tabel.txt Wed May 04 14:01:57 2016 +0000 @@ -95,7 +95,7 @@ |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | | | | Gyro.Termo=Spi.ADC2_Accum >> 5; | | Gyro.DeltaT | данные с второго АЦП | unsigned int | ------------------------------ | Spi.ADC2_Accum - накопленные | -| | (градиент температур между двумя термодатчиками (Hel509) | | ------------------------------ | данные за такт виброподвеса | +| | (градиент температур между двумя термодатчиками0 | | ------------------------------ | данные за такт виброподвеса | | | | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | | | | Gyro.Termo=Spi.ADC3_Accum >> 5; |
--- a/vibro.h Tue May 03 05:12:26 2016 +0000
+++ b/vibro.h Wed May 04 14:01:57 2016 +0000
@@ -17,6 +17,7 @@
#define TIME_INTERVAL (7812)
+
extern int tempAMP;
typedef struct _Gyro {
@@ -30,7 +31,7 @@
unsigned int StrayPLC_2Mode;
unsigned int StrayPLC_flag;
unsigned int LogPLC;
-
+ unsigned int PLC_Lern;
unsigned int Test_time;
@@ -293,6 +294,8 @@
extern void VibroOut(void);
extern void Discharg (void);
extern void BackLight (void);
+extern void VibroAMPRegul(void);
+extern void VibroFrqRegul(void);
extern unsigned int FrecTp;
extern int Pulse_midl;
extern struct VIBRO Vib;
