From 4ec08a2f6bccdad0ead9cddc837e964addb7a211 Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Thu, 11 Jun 2020 16:25:07 +0300 Subject: Add support of ARC pressure sensor board --- .../Embedded/Drivers/Heater/TemperatureSensor.c | 25 ++-- .../I2C_Communication/Head_Card/IO_Ports/Head_IO.c | 15 ++- .../I2C_Communication/Head_Card/IO_Ports/Head_IO.h | 3 + .../Head_Card/PT100/Head_PT100_ADC.c | 140 +++++++++++++++------ .../Head_Card/PT100/Head_PT100_ADC.h | 1 + .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 19 +++ .../Embedded/Drivers/I2C_Communication/I2C_Task.h | 1 + 7 files changed, 155 insertions(+), 49 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Drivers') diff --git a/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.c b/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.c index ef37ffcee..23accb66a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Heater/TemperatureSensor.c @@ -432,7 +432,8 @@ int32_t RTD(uint32_t Resistance_mult_by_100) //Resistance * 100 uint32_t CalculateTemperatures(TEMPERATURE_SENSOR_ID_ENUM SensorId, uint32_t Data) { - int32_t Current_Measurement_C = 0, temp = 0; + int32_t Current_Measurement_C = 0; + float temp = 0.0; uint32_t Resistance_mult_by_100; @@ -456,21 +457,25 @@ uint32_t CalculateTemperatures(TEMPERATURE_SENSOR_ID_ENUM SensorId, uint32_t Dat uint32_t NoOfAvrSamples = 5;//TODO - how many Samples Status = Filter_Temparature_Measurement(SensorId, Current_Measurement_C, NoOfAvrSamples); #else - if((Head_Type == HEAD_TYPE_STAPLE_SPUN) && (( SensorId == HEAD_PT100_ZONE_6_0X84_1) || ( SensorId == HEAD_PT100_ZONE_8_0X86_1)))//pressure sensors + if((Head_Type == HEAD_TYPE_STAPLE_SPUN) && (( SensorId == HEAD_PT100_ZONE_6_0X84_1) || ( SensorId == HEAD_PT100_ZONE_8_0X86_1) || ( SensorId == HEAD_PT100_ZONE_5_0X84_0) || ( SensorId == HEAD_PT100_ZONE_7_0X86_0)))//pressure sensors //if((Head_Type == HEAD_TYPE_STAPLE_SPUN) && (( SensorId == HEAD_PT100_ZONE_5_0X84_0) || ( SensorId == HEAD_PT100_ZONE_7_0X86_0)))//pressure sensors { //Head Staple spun pressure sensors //bits to mvolts - temp = TempSensorResponse[SensorId].PT100_ADC_Reading_Bits* 3.3 *1000; - temp /= 8388608;//mV - TempSensorResponse[SensorId].Temperature_C_mult_by_100 = temp;///mV - Current_Measurement_C = temp;///mV - } - else - { - TempSensorResponse[SensorId].Temperature_C_mult_by_100 = Current_Measurement_C; + float temp1 = 3.3;//3.3V ref + float temp2 = 8388608.0;//2^23 (24bit) + float temp3 = 100.0;// V_mult_by_100 + + temp = Data & 0x00FFFFFF;//24bit + temp *= temp1; + temp /= temp2; + temp *= temp3; + + Current_Measurement_C = (int32_t)(temp);///V_mult_by_100 } + TempSensorResponse[SensorId].Temperature_C_mult_by_100 = Current_Measurement_C; + #endif return Current_Measurement_C; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c index 1a161b9f4..d7b7fc98f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c @@ -121,6 +121,12 @@ uint32_t Head_IO_Init() Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_HTIN_LATCH_RST = 0x01; Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_HTOT_LATCH_RST = 0x01; + if(Head_Type == HEAD_TYPE_STAPLE_SPUN)// Set 24 to pressure sensor in arc head + { + Head_I2C_EXP2_0x42.bits.OUTPUT_MAG_EN = ENABLE; + Head_I2C_EXP2_0x42.bits.OUTPUT_MAG_DIR = 0x00; + } + //Head_I2C_EXP4_0x46.bits.INPUT_ACTLOW_LIMIT_740W = 0x01; Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = 0x01;// on - short Active low Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = 0x01;// on - short Active low @@ -299,10 +305,11 @@ uint32_t HeadCard_DeActivateHeadMagnet() uint32_t HeadCard_HeadMagnet_Disable() { uint32_t status = OK; - - Head_I2C_EXP2_0x42.bits.OUTPUT_MAG_EN = DISABLE; - status |= Head_Write_IO_Reg(0x42,LOW); - + if(Head_Type == HEAD_TYPE_SYLKO) + { + Head_I2C_EXP2_0x42.bits.OUTPUT_MAG_EN = DISABLE; + status |= Head_Write_IO_Reg(0x42,LOW); + } return status; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h index a3a35d5d3..ceab3b2b4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h @@ -191,6 +191,9 @@ uint32_t HeadCard_ActivateHeadMagnet(); uint32_t HeadCard_DeActivateHeadMagnet(); uint32_t HeadCard_HeadMagnet_Disable(); +uint32_t HeadCard_ActivateHeadPressureArcBlowers(); +uint32_t HeadCard_DeActivateHeadPressureArcBlowers(); + uint32_t HeadCard_Valve_Control(bool Direction); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c index a6db745cd..35d0a0b1e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c @@ -30,11 +30,13 @@ ADDR 0x8E #include "ADS122X04.h" #include "drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h" #include "Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.h" +#include uint32_t Detect_Head_PT100_Faults(TEMPERATURE_SENSOR_ID_ENUM SensorId); HeadBoardTempSensConfigStruc HeadTempSensConfig[MAX_HEAD_CARD_TEMP_SENS_ID];//using only from HEAD_PT100_ZONE_1_0X80_0 + uint32_t I2C_ADC_ADS122C04_SLAVE_ADD = 0x80; //A0-GND A1-GND 4-Bit, 4-Channel, 2-kSPS, ADC ------ PT100 ADC – 0x80 … 0x87. uint8_t Save_Sel_Status = UNKNOWN; @@ -205,6 +207,8 @@ uint32_t HeadADCPT100_SendReadDataCommand(TEMPERATURE_SENSOR_ID_ENUM SensorId) Status |= I2C_Write_SensorId(I2C_ID_HEAD_CARD, SensorId, Write_Buf, 1); //Status |= I2C_Write(I2C_ID_HEAD_CARD, I2C_ADC_ADS122C04_SLAVE_ADD, Write_Buf, 1); + //delayms(10); + Status |= I2C_Read_SensorId(I2C_ID_HEAD_CARD, SensorId, temp, 3); if (Status) Report("HeadADCPT100_SendReadDataCommand error", __FILE__,Arb_Loss_Count,Status, RpMessage,SensorId, 0); @@ -250,20 +254,20 @@ uint8_t HeadADCPT100_InitConfigReg() if (Head_Type >= HEAD_TYPE_UNKNOWN_WITH_CARD)//adjust the limit switches { + for(i=HEAD_PT100_ZONE_1_0X80_0;i < MAX_HEAD_CARD_TEMP_SENS_ID;i++) // for now we are using the same configuration to all of them { - if((Head_Type == HEAD_TYPE_STAPLE_SPUN) && (( i == HEAD_PT100_ZONE_6_0X84_1) || ( i == HEAD_PT100_ZONE_8_0X86_1)))//pressure sensors - //if((Head_Type == HEAD_TYPE_STAPLE_SPUN) && (( i == HEAD_PT100_ZONE_5_0X84_0) || ( i == HEAD_PT100_ZONE_7_0X86_0)))//pressure sensors + if((Head_Type == HEAD_TYPE_STAPLE_SPUN) && (( i == HEAD_PT100_ZONE_6_0X84_1) || ( i == HEAD_PT100_ZONE_8_0X86_1) || ( i == HEAD_PT100_ZONE_5_0X84_0) || ( i == HEAD_PT100_ZONE_7_0X86_0)))//pressure sensors { // - - - - - - - - - - Reg0 - - - - - - - - - - HeadTempSensConfig[i].Reg0.bits.PGA_BYPASS = ADS122X_PGA_BYPASS ;//Bit 0 HeadTempSensConfig[i].Reg0.bits.GAIN = ADS122X_GAIN_1 ;//Bits 1-3 - //HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_ODD_PT100_MUX ;//Bits 4-7 + HeadTempSensConfig[i].Reg0.bits.MUX = ADS122X_MUX_AIN0_AIN1 ;//Bits 4-7 // - - - - - - - - - - Reg1 - - - - - - - - - - HeadTempSensConfig[i].Reg1.bits.TS = ADS122X_TEMP_SENSOR_OFF ;//Bit 0 HeadTempSensConfig[i].Reg1.bits.VREF = ADS122X_VREF_AVDD ;//Bits 1-2 - HeadTempSensConfig[i].Reg1.bits.CM = ADS122X_CONVERSION_CONTINUOUS ;//Bit 3 + HeadTempSensConfig[i].Reg1.bits.CM = ADS122X_CONVERSION_SINGLE_SHOT ;//Bit 3 HeadTempSensConfig[i].Reg1.bits.MODE = ADS122X_OP_MODE_NORMAL ;//Bit 4 HeadTempSensConfig[i].Reg1.bits.DR = ADS122X_DATA_RATE_20SPS ;//Bits 5-7 @@ -311,14 +315,30 @@ uint8_t HeadADCPT100_InitConfigReg() for(i=HEAD_PT100_ZONE_1_0X80_0;i < HEAD_PT100_ZONE_2_0X80_1;i++) { - HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_ODD_PT100_MUX ;//Bits 4-7 - HeadTempSensConfig[i].SEL = HEAD_CONFIG_ODD_PT100_PT_SEL; + //if((Head_Type == HEAD_TYPE_STAPLE_SPUN) && (( i == HEAD_PT100_ZONE_5_0X84_0) || ( i == HEAD_PT100_ZONE_7_0X86_0)))//pressure sensors + //{ + HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_ODD_PT100_MUX ;//Bits 4-7 + HeadTempSensConfig[i].SEL = HEAD_CONFIG_ODD_PT100_PT_SEL; + //} + //else + //{ + // HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_ODD_PT100_MUX ;//Bits 4-7 + // HeadTempSensConfig[i].SEL = HEAD_CONFIG_ODD_PT100_PT_SEL; + //} } for(i=HEAD_PT100_ZONE_2_0X80_1;i < HEAD_PT100_RESERVE_0X8E_1;i++) { - HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_EVEN_PT100_MUX ;//Bits 4-7 - HeadTempSensConfig[i].SEL = HEAD_CONFIG_EVEN_PT100_PT_SEL; + if((Head_Type == HEAD_TYPE_STAPLE_SPUN) && (( i == HEAD_PT100_ZONE_6_0X84_1) || ( i == HEAD_PT100_ZONE_8_0X86_1)))//pressure sensors + { + HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_ODD_PT100_MUX ;//Bits 4-7 + } + else + { + HeadTempSensConfig[i].Reg0.bits.MUX = HEAD_CONFIG_EVEN_PT100_MUX ;//Bits 4-7 + } + HeadTempSensConfig[i].SEL = HEAD_CONFIG_EVEN_PT100_PT_SEL; + } HeadTempSensConfig[i].Config = 0; @@ -326,9 +346,9 @@ uint8_t HeadADCPT100_InitConfigReg() HeadTempSensConfig[i].MUX_Status = UNKNOWN; } - else +/* else ??? { - + for(i=HEAD_PT100_ZONE_1_0X80_0;i