diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2020-06-07 16:29:13 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2020-06-07 16:29:13 +0300 |
| commit | 7ae59a2ae6cf8c4de8b420ea83c6282b8685fed5 (patch) | |
| tree | 79db897a2f49eb966bd4746e89ffe9c7e44dc103 /Software/Embedded_SW | |
| parent | 22eaa079a4bd20c81d221b2fa623756fc338e168 (diff) | |
| parent | 2137dbeeb984f4abcb2c7b7af83a396dd5d40879 (diff) | |
| download | Tango-7ae59a2ae6cf8c4de8b420ea83c6282b8685fed5.tar.gz Tango-7ae59a2ae6cf8c4de8b420ea83c6282b8685fed5.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW')
9 files changed, 98 insertions, 61 deletions
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index c5371b413..a50889e47 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -493,6 +493,7 @@ typedef struct */ +#define MAX_SYSTEM_DISPENSERS 8 typedef struct { diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h index 03d333e04..d7efd45d4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h @@ -74,4 +74,7 @@ double ReadVAC(); extern PowerControlFlag Power_Control_Flag; +float CalculateDispenserPressure (int DispenserId); +void Calculateinit (void); + #endif /* DRIVERS_ADC_H_ */ diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_DispPressSens.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_DispPressSens.c new file mode 100644 index 000000000..a0c59aace --- /dev/null +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_DispPressSens.c @@ -0,0 +1,84 @@ +/* + * ADC_DispPressSens.c + * + * Created on: Jun 7, 2020 + * Author: avi + */ + +#include "include.h" +#include <DataDef.h> +#include "ADC.h" + +#include <Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h> + +float DispenserPressure[MAX_SYSTEM_DISPENSERS] = {0}; + + +float Vlow,VHigh,Bits_Min,Bits_Max,a[MAX_SYSTEM_DISPENSERS]= {0}, b[MAX_SYSTEM_DISPENSERS]= {0}; +void Calculateinit (void) +{ + int DispenserId = 0; + + float Min = 0.0;//default for old pressure sensor + float Max = 1.0;//default for old pressure sensor + + Vlow = 0.004 * 130.0; // 4mA*130ohm = 0.52 V(Min Pascal) + VHigh = 0.020 *130.0; // 20mA*130ohm = 2.6V (Max Pascal) + + Bits_Min = Vlow * 4096.0 / 3.0; // Vlow * 4096bit / 3Vref = 709.973328 bits + Bits_Max = VHigh * 4096.0 / 3.0; // VHigh * 4096bit / 3Vref = 3549.86646 bits + + for(DispenserId = 0;DispenserId < MAX_SYSTEM_DISPENSERS; DispenserId++) + { + if(Dispenser_struct[DispenserId].Read_Disp_EEPROM.bytes.Header == Disp_EEPROM_Header) + { + Min = (float)(Dispenser_struct[DispenserId].Read_Disp_EEPROM.bytes.Minimal_Pressure) / 10000.0; + Max = (float)(Dispenser_struct[DispenserId].Read_Disp_EEPROM.bytes.Maximal_Pressure) / 10000.0; + } + else + { + Report("Dispenser's EEPROM - Wrong header! use default pressure values",__FILE__,__LINE__,DispenserId,RpWarning,(int)Dispenser_struct[DispenserId ].Read_Disp_EEPROM.bytes.Header,0); + } + + a[DispenserId] = (Max - Min) / (Bits_Max - Bits_Min);// Mpascal/Bits = 0.000352125 with default values + + b[DispenserId] = Max - (a[DispenserId] * Bits_Max ); // y = ax + b (x= Bits_Min, y = 0) + } +} + +float CalculateDispenserPressure (int DispenserId) +{ + unsigned short data = 0; + float temp = 0.0; + +/* + data = ADC_GetReading(DispenserIdToPressureSensorId[DispenserId]); + temp = 4096 - data; + temp *= 3; + temp *= 1000; //move to mv + temp /= 4096; + DispenserPressure[DispenserId] = 3000 - temp; + */ + data = ADC_GetReading(DispenserIdToPressureSensorId[DispenserId]); + + if(data<Bits_Min) + data = Bits_Min;//40mA 0Bar + + temp = a[DispenserId] * data + b[DispenserId]; + + DispenserPressure[DispenserId] = temp; // [Mpascal] ( 1 Mpascal = 10 Bar ) + + //unmark one of them to convert from Mpascal to : + //----------------------------------- + //DispenserPressure[DispenserId] /= 1000000; //Pascal + //DispenserPressure[DispenserId] *=10; //Bar; + //DispenserPressure[DispenserId] *=10000000; //uBar; + //DispenserPressure[DispenserId] *=145.0377; //PSI; + + DispenserPressure[DispenserId] *= 10.0; //MPascal -> Bar + + //if(DispenserPressure[DispenserId] < 0 ) //why???? + // DispenserPressure[DispenserId] = 0; + + return(DispenserPressure[DispenserId]); +} diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c index 2b582d71b..5fd916667 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c @@ -25,9 +25,7 @@ #include "PMR/stubs/StubDispenserEEpromRequest.pb-c.h" #include "PMR/stubs/StubDispenserEEpromResponse.pb-c.h" - - -#define I2C_Slave_EEprom_Add 0xA0 //eeprom address - 32kByte & 128kByte +#define I2C_Slave_EEprom_Add 0xA0 //eeprom address - 32kByte & 128kByte #define I2C_Slave_EEprom_Add_2 0xA2 //eeprom address - only in the eeprom of 128kByte diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h index 5fae63651..1a1af1851 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h @@ -9,11 +9,11 @@ #define DRIVERS_I2C_COMMUNICATION_DISPENSERS_EEPROM_MUX_DISP_EEPROM_MUX_H_ +#define Disp_EEPROM_Header 0x55aacc33 - -uint32_t I2C_EEprom_Write_Ch(uint8_t Dispenser_ID); -uint32_t I2C_EEprom_Set_for_Read_Ch(uint8_t Dispenser_ID); -uint32_t I2C_EEprom_Read_Ch(uint8_t Dispenser_ID); +uint32_t I2C_EEprom_Write_Ch(uint8_t Dispenser_ID, uint8_t EEprom_Add); +uint32_t I2C_EEprom_Set_for_Read_Ch(uint8_t Dispenser_ID, uint8_t EEprom_Add); +uint32_t I2C_EEprom_Read_Ch(uint8_t Dispenser_ID, uint8_t EEprom_Add); uint32_t test_disp_eeprom(uint8_t Dispenser_ID , uint8_t EEprom_Add); uint8_t Check_Dispenser_Type(); diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index b1d6110c6..a5ddb694b 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -231,7 +231,7 @@ int main(void) ROM_SysTickIntEnable(); ROM_SysTickEnable(); - Calculateinit(); + //Calculateinit();//moved to HWConfiguration after reading the dispenser EEPROM PortFunctionInit(); //FlashInit(); diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 035a3b3b3..2cf368ebd 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -483,7 +483,11 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) LOG_ERROR (Dispenser_i, "Dispenser identification failed"); //return ERROR; } + + status |= I2C_EEprom_Set_for_Read_Ch(Dispenser_i, 0xA0); + status |= I2C_EEprom_Read_Ch(Dispenser_i, 0xA0); } + Calculateinit(); } else { diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index ad1d5b5c4..b3f21e187 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -12,7 +12,6 @@ #include "PMR/EmbeddedParameters/DispenserRunningData.pb-c.h" #include "PMR/EmbeddedParameters/DispenserData.pb-c.h" -#define MAX_SYSTEM_DISPENSERS 8 typedef enum { LimitSwitchAlarmEmpty_1, //MOTO_DISPENSER_1 = 6, LimitSwitchAlarmEmpty_2, //MOTO_DISPENSER_2 = 7, diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c index 4a4e42b41..470bf974e 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c @@ -21,8 +21,6 @@ HardwareDispenser DispensersCfg[ MAX_SYSTEM_DISPENSERS]; TimerMotors_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS] = {HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8}; -float DispenserPressure[MAX_SYSTEM_DISPENSERS] = {0}; - float GetDispenserPressure(int DispenserId) { return DispenserPressure[DispenserId]; @@ -37,56 +35,6 @@ bool isDispenserInConfig(int DispenserId) return true; } -float Vlow,VHigh,Bits_0Pascal,Bits_1MPascal,a,b; -void Calculateinit (void) -{ - Vlow = 0.004 * 130; // 4mA*130ohm = 0.52 V(0 Pascal) - VHigh = 0.020 *130; // 20mA*130ohm = 2.6V (1M Pascal) - - Bits_0Pascal = Vlow * 4096 / 3; // Vlow * 4096bit / 3Vref = 709.973328 bits - Bits_1MPascal = VHigh * 4096 / 3; // VHigh * 4096bit / 3Vref = 3549.86646 bits - - a = (1 - 0) / (Bits_1MPascal - Bits_0Pascal);// Mpascal/Bits = 0.000352125 - - b = 0 - (a * Bits_0Pascal ); // y = ax + b (x= Bits_0Pascal, y = 0) - -} -float CalculateDispenserPressure (int DispenserId) -{ - unsigned short data = 0; - float temp = 0.0; - -/* - data = ADC_GetReading(DispenserIdToPressureSensorId[DispenserId]); - temp = 4096 - data; - temp *= 3; - temp *= 1000; //move to mv - temp /= 4096; - DispenserPressure[DispenserId] = 3000 - temp; - */ - data = ADC_GetReading(DispenserIdToPressureSensorId[DispenserId]); - - if(data<Bits_0Pascal) - data = Bits_0Pascal;//40mA 0Bar - - temp = a * data + b; - - DispenserPressure[DispenserId] = temp; // [Mpascal] ( 1 Mpascal = 10 Bar ) - - //unmark one of them to convert from Mpascal to : - //----------------------------------- - //DispenserPressure[DispenserId] /= 1000000; //Pascal - //DispenserPressure[DispenserId] *=10; //Bar; - //DispenserPressure[DispenserId] *=10000000; //uBar; - //DispenserPressure[DispenserId] *=145.0377; //PSI; - - DispenserPressure[DispenserId] *= 10; //MPascal -> Bar - - //if(DispenserPressure[DispenserId] < 0 ) //why???? - // DispenserPressure[DispenserId] = 0; - - return(DispenserPressure[DispenserId]); -} uint32_t DispenserConfigMessage(HardwareDispenser * request) |
