diff options
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Control')
4 files changed, 58 insertions, 14 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index cb1be7fa5..8e67de0f1 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -16,7 +16,9 @@ /////////////////////////////////////////////////////////////////////////////////////////// #include "include.h" #include "Modules/General/GeneralHardware.h" + #include "Modules/AlarmHandling/AlarmHandling.h" +#include "Modules/General/MachineStatus.h" #include "MillisecTask.h" #include <driverlib/timer.h> @@ -39,6 +41,8 @@ #include "modules/thread/thread_ex.h" #include "modules/ids/ids_ex.h" +#include "modules/Diagnostics/Diagnostics.h" +#include "Modules/General/MachineStatus.h" #include "drivers/Flash_Memory/Flash_Memory.h" #include "drivers/Flash_Memory/fatfs/ff.h" @@ -49,6 +53,7 @@ #include "Communication/Connection.h" #include "Modules/General/buttons.h" +#include "Drivers/I2C_Communication/Head_Card/PT100/PT100_ADC.h" Task_Handle Millisecond_Task_Handle; /******************** Definitions ********************************************/ @@ -86,14 +91,13 @@ uint32_t Dancer_Data[NUM_OF_DANCERS] = {0}; float Speed_Data = 0; uint32_t DrawerFansStatus = 0; uint32_t SystemFansStatus = 0; -uint8_t Gas_PPM = 0; - bool watchdogCriticalAlarm = false; uint32_t msec_millisecondCounter = 0; extern bool Machine_Idle_Mode; +uint8_t Gas_PPM_Info; MillisecMotorDataStruc ScrewSetMaxSpeedPending = {0}; MillisecMotorDataStruc ScrewMovePending = {0}; MillisecMotorDataStruc MotorData[NUM_OF_MOTORS] = {0}; @@ -109,6 +113,7 @@ static GateMutex_Handle gateMillisecDB; uint32_t Millisec_timerBase = TIMER1_BASE; //Timer handle /******************** Functions ********************************************/ uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); +void CalculateVOCAlarms(void); //********************************************************************** /******************** CODE ********************************************/ //********************************************************************** @@ -414,14 +419,19 @@ uint32_t MillisecLoop(uint32_t tick) }*/ if (PT100Data[Sensor_i].Active == true) { - TemperatureSendSensorDummyClk(Sensor_i); + #ifndef Use_Head_Card + TemperatureSendSensorDummyClk(Sensor_i); + #endif PT100Data[Sensor_i].Active = false; PT100Data[Sensor_i].WaitForData = true; // mark the motor for data request next round break; // one PT100 activitiy per MS } else if (PT100Data[Sensor_i].WaitForData == true) //Read request sent, data is waiting { - TemperatureSensorReadFromFPGA_Res(Sensor_i); //got the data from the FPGA + #ifdef Use_Head_Card + HeadADCPT100_SendReadDataCommand(Sensor_i); + #endif + TemperatureSensorReadFromFPGA_Res(Sensor_i); //got the data from the FPGA PT100Data[Sensor_i].WaitForData = false; PT100Data[Sensor_i].SyncRequired = true; if (PT100Data[Sensor_i].Callback) @@ -430,7 +440,11 @@ uint32_t MillisecLoop(uint32_t tick) } else if (PT100Data[Sensor_i].SyncRequired == true) { + #ifdef Use_Head_Card + HeadADCPT100_StartSync(Sensor_i); + #endif TemperatureSensorSync(Sensor_i); + PT100Data[Sensor_i].SyncRequired = false; PT100Activity--; break; // one PT100 activitiy per MS @@ -482,6 +496,8 @@ void setRapidPressureRead(bool value) { RapidPressureRead = value; } + +uint16_t PumpCounter = 0; uint32_t MillisecLowLoop(uint32_t tick) { uint8_t Motor_i,Disp_i,Heater_i,temp; @@ -491,16 +507,19 @@ uint32_t MillisecLowLoop(uint32_t tick) //call all modules Millisec functions //test dancers and speed encoders //check all callback units (state machine waiting for completion of a change) - bool Ten_msTick, Hundred_msTick , m90msecTick, Onesecond_Tick,O900Millisecond_Tick,OneMinute_Tick; + bool Ten_msTick, Hundred_msTick , m90msecTick, Onesecond_Tick,O900Millisecond_Tick,OneMinute_Tick,OneHourTick; Ten_msTick = (tick%eTenMillisecond == 0) ?true:false; Hundred_msTick = (tick%eHundredMillisecond == 0) ?true:false; m90msecTick = (tick%eHundredMillisecond == 90) ?true:false; O900Millisecond_Tick = (tick%eOneSecond == 900) ?true:false; Onesecond_Tick = (tick%eOneSecond == 0) ?true:false; OneMinute_Tick = (tick%eOneMinute == 0) ?true:false; + OneHourTick = (tick%eOneHour == 0) ?true:false; //gather Motor data from FPGA //ROM_IntMasterDisable(); + //Screw_ENC_Velocity_to_DAC(); - for testing the screw enc + if (Ten_msTick) { //Speed_Data = Calculate_Speed_Sensor_Velocity(); @@ -520,7 +539,7 @@ uint32_t MillisecLowLoop(uint32_t tick) { Speed_Data = Calculate_Speed_Sensor_Velocity(); Read_Buttons_Reg(); - Ink_Cart_Led(); + //Ink_Cart_Led(); for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) { MillisecUpdateTemperatures (Sensor_i,TemperatureSensorRead(Sensor_i)); @@ -542,6 +561,8 @@ uint32_t MillisecLowLoop(uint32_t tick) } ADC_TriggerCollection(); } + DispensersCollectionCall(); + } if ((O900Millisecond_Tick)&&(RapidPressureRead == false)) @@ -565,8 +586,8 @@ uint32_t MillisecLowLoop(uint32_t tick) //KeepAliveOneSecondCall(); for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++) { - if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_SCREW) - continue; // + // if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_SCREW) + // continue; // if (isMotorConfigured(Motor_i)) MotorGetStatusFromFPGA(Motor_i); } @@ -577,7 +598,6 @@ uint32_t MillisecLowLoop(uint32_t tick) Read_Heaters_Current(Heater_i); } } - Gas_PPM = Calculate_Gas_Power_Consumption(); for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) { TemperatureCalc[Sensor_i] = MillisecCalculateTemperatures ( Sensor_i); @@ -589,13 +609,27 @@ uint32_t MillisecLowLoop(uint32_t tick) { Read_MidTank_Pressure_Sensor(Disp_i); } -/* for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++) + MachineUpdateResponseFunc(); + /* for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++) { if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_SCREW) continue; // if (isMotorConfigured(Motor_i)) MotorGetStatusFromFPGA(Motor_i); }*/ + midtankDisplay = 1-midtankDisplay; + Gas_PPM_Info = Calculate_Gas_Power_Consumption(); + + } + if (OneHourTick) + { +#define PUMP_LIMIT 8 + PumpCounter++; + if (PumpCounter>=PUMP_LIMIT) + { + PumpActivation(900); + PumpCounter = 0; + } } //ROM_IntMasterEnable(); @@ -691,7 +725,7 @@ uint32_t getDrawerFansStatus(void) } uint8_t getGasReading(void) { - return Gas_PPM; + return Gas_PPM_Info; } uint32_t getSystemFansStatus(void) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c index a443b4785..6c1b647be 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c @@ -11,7 +11,7 @@ float PIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_P error = _setPoint - _mesuredParam; //In case of error too small then stop integration - if(abs(error) > params->epsilon) + if(fabs(error) > params->epsilon) { *_integral = *_integral + error*params->dt; } @@ -46,7 +46,7 @@ float AdvancedPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_ error = _setPoint - _mesuredParam; //In case of error too small then stop integration - if(abs(error) > params->epsilon) + if(fabs(error) > params->epsilon) { *_integral = *_integral + error*params->dt; } diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index f1e19d851..07214d240 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -158,7 +158,7 @@ uint32_t ControlActivityLed( uint32_t Parameter1) { static bool flag = false; static uint8_t counter; - const uint8_t Blink_Freq = 3;//odd number + const uint8_t Blink_Freq = 7;//odd number if (flag==true) { @@ -479,6 +479,14 @@ uint32_t GetControlLowDevice_i(void) { return ControlLowDevice_i; } +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId) +{ + if (ControlArray[ControlId].ControlActive) + return ControlArray[ControlId].ControlCallbackPtr; + else + return NULL; + +} uint32_t ControlLoop(uint32_t tick) { if (MaxHighDevices == 0xFF) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.h b/Software/Embedded_SW/Embedded/Modules/Control/control.h index 380040e34..450646a68 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.h @@ -48,6 +48,8 @@ uint32_t TemplateDataReadCBFunction (uint32_t deviceId, uint32_t Parameter1); uint32_t GetControlDevice_i(void); uint32_t GetControlLowDevice_i(void); +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId); + extern Task_Handle Control_Task_Handle; extern uint32_t millisecondCounter; |
