/************************************************************************************************************************ * Heater.c * Heater Driver **************************************************************************************************************************/ #include #include #include #include #include #include "include.h" #include "heater.h" #include "TemperatureSensor.h" #include "inc/hw_memmap.h" #include "driverlib/rom.h" #include "driverlib/gpio.h" #include "driverlib/sysctl.h" #include #include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h" #include #include #include "PMR/Hardware/HardwarePIDControl.pb-c.h" #include "PMR/Diagnostics/HeaterType.pb-c.h" #define MAX_HEATERS_NUM HARDWARE_PID_CONTROL_TYPE__MixerHeater+1 typedef struct { //uint32_t m_port; uint32_t m_pin; bool Active; } GPIOIntPortMap; uint32_t HeaterActive = 0; extern F2_CTRL_REG F2_CTRL_Reg; extern F1_GPO_REG F1_GPO_Reg; extern F3_GPO_01_REG F3_GPO_01_Reg; static GPIOIntPortMap portMap[MAX_HEATERS_NUM] = { {SPARE_SSR12_CTRL, false}, // Spare {DRYER_SSR1_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain {DRYER_SSR2_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary {DYEINGH_SSR8_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 - Head Heater #1 - rightmost {DYEINGH_SSR7_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 - Head Heaters #2 #3 #4 {DYEINGH_SSR6_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3 - Head Heaters #5 #6 #7 #8 {DYEINGH_SSR5_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 - Head Heaters #9 - leftmost {DYEINGH_SSR10_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 {DYEINGH_SSR11_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 {MIXCHIP_SSR4_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__MixerHeater }; HeaterType HeaterPidtoHeaterId[HARDWARE_PID_CONTROL_TYPE__HeadBlower_2+1]= { HEATER_TYPE__DryerAirHeater,HEATER_TYPE__DryerMainHeater,HEATER_TYPE__DryerSecondaryHeater, HEATER_TYPE__HeaterZone1,HEATER_TYPE__HeaterZone2, HEATER_TYPE__HeaterZone3,HEATER_TYPE__HeaterZone4,HEATER_TYPE__HeaterZone5,HEATER_TYPE__HeaterZone6,HEATER_TYPE__MixerHeater, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*motors and dispensers*/ HEATER_TYPE__HeaterZone7, HEATER_TYPE__HeaterZone8, HEATER_TYPE__HeaterZone9, HEATER_TYPE__HeaterZone10, HEATER_TYPE__HeaterZone11, HEATER_TYPE__HeaterZone12, HEATER_TYPE__HeadCoverHeater1,HEATER_TYPE__HeadCoverHeater2,0xFF,0xFF}; HardwarePidControlType HeaterIdtoHeaterpid[HEATER_TYPE_MAX_HEATERS ]= { HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6,HARDWARE_PID_CONTROL_TYPE__MixerHeater, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1,HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2}; HeaterType HeaterTypetoHeadHeater[HEATER_TYPE_MAX_HEATERS] = {HEATER_TYPE_MAX_HEATERS,HEATER_TYPE_MAX_HEATERS,HEATER_TYPE_MAX_HEATERS,HEADCARD_HIT_ZN1,HEADCARD_HIT_ZN2,HEADCARD_HIT_ZN3,HEADCARD_HIT_ZN4,HEADCARD_HIT_ZN5,HEADCARD_HIT_ZN6, HEADCARD_HIT_MIXER,HEADCARD_HIT_ZN7,HEADCARD_HIT_ZN8,HEADCARD_HIT_ZN9,HEADCARD_HIT_ZN10,HEADCARD_HIT_ZN11,HEADCARD_HIT_ZN12,HEADCARD_UPPER_HIT_IN1,HEADCARD_UPPER_HIT_OUT1}; HEADCARD_HEATERS_ENUM HeadHeatertoHeaterType[HEADCARD_HIT_MIXER+1] = {HEATER_TYPE__HeaterZone1,HEATER_TYPE__HeaterZone2,HEATER_TYPE__HeaterZone3,HEATER_TYPE__HeaterZone4,HEATER_TYPE__HeaterZone5,HEATER_TYPE__HeaterZone6, HEATER_TYPE__HeaterZone7,HEATER_TYPE__HeaterZone8,HEATER_TYPE__HeaterZone9,HEATER_TYPE__HeaterZone10,HEATER_TYPE__HeaterZone11,HEATER_TYPE__HeaterZone12, HEATER_TYPE__HeadCoverHeater1,HEATER_TYPE_MAX_HEATERS,HEATER_TYPE_MAX_HEATERS,HEATER_TYPE_MAX_HEATERS, HEATER_TYPE__HeadCoverHeater2,HEATER_TYPE_MAX_HEATERS,HEATER_TYPE_MAX_HEATERS,HEATER_TYPE_MAX_HEATERS, HEATER_TYPE__MixerHeater}; bool isHeater(HardwarePidControlType HeaterId) { switch (HeaterId) { case HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature: case HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain: case HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6: case HARDWARE_PID_CONTROL_TYPE__MixerHeater: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11: case HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12: case HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1: case HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2: return true; default: return false; } } uint32_t ActivateHeater (int HeaterId) { assert(isHeater(HeaterIdtoHeaterpid[HeaterId])); if (HeaterId == HEATER_TYPE__DryerAirHeater) { return OK; } if (HeaterId<=HEATER_TYPE__DryerSecondaryHeater) { #ifndef EVALUATION_BOARD F2_CTRL_Reg.ushort |= portMap[HeaterId].m_pin; F2_CTRL = F2_CTRL_Reg.ushort; if (portMap[HeaterId].Active == false) ReportWithPackageFilter(WasteFilter,"Heater activated",__FILE__,__LINE__, HeaterId,RpMessage,portMap[HeaterId].m_pin,0); portMap[HeaterId].Active = true; //--------------------------------------------------------------------------------------- HeaterActive |= 1 << HeaterId; #endif } else { //F2_CTRL |= portMap[HeaterId].m_pin; if(Head_Type > HEAD_TYPE_FLAT_WITHOUT_CARD) HeadCard_Control_Heaters(HeaterTypetoHeadHeater[HeaterId],ON); else { if (HeaterId >= HEATER_TYPE__HeaterZone7) return OK; #ifndef EVALUATION_BOARD if(HeaterId == HEATER_TYPE__HeaterZone5) { //F1_gpo_01 |= portMap[HeaterId].m_pin; F1_GPO_Reg.ushort |= portMap[HeaterId].m_pin; F1_gpo_01 = F1_GPO_Reg.ushort; } else if(HeaterId == HEATER_TYPE__HeaterZone6) { //F3_GPO_01_bus |= portMap[HeaterId].m_pin; F3_GPO_01_Reg.ushort |= portMap[HeaterId].m_pin; F3_GPO_01_bus = F3_GPO_01_Reg.ushort; } else { //F2_CTRL |= portMap[HeaterId].m_pin; F2_CTRL_Reg.ushort |= portMap[HeaterId].m_pin; F2_CTRL = F2_CTRL_Reg.ushort; } #endif //--------------------------------------------------------------------------------------- // if(HeaterId < HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1) // Turn On FPGA LED // F3_GPO_01_bus |= (0x01 << HeaterId); // else // F3_GPO_01_bus |= BIT4; // if (HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1) // STATUS_GREEN_LED_ON; // if (HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2) // ACTIVITY_RED_LED_ON; // if (HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3) // COMM_RED_LED_ON; //--------------------------------------------------------------------------------------- portMap[HeaterId].Active = true; //--------------------------------------------------------------------------------------- HeaterActive |= 1 << HeaterId; // } ----------------------------------------- //--------------------------------------------------------------------------------------- } //Activate_Head_Card_Heaters(HeaterTypetoHeadHeater[HeaterId]); } return OK; } uint32_t DeActivateHeater (int HeaterId) { assert(isHeater(HeaterIdtoHeaterpid[HeaterId])); if (HeaterId<=HEATER_TYPE__DryerSecondaryHeater) { #ifndef EVALUATION_BOARD if (portMap[HeaterId].Active == true) ReportWithPackageFilter(WasteFilter,"Heater Deactivated",__FILE__,__LINE__, HeaterId,RpMessage,portMap[HeaterId].m_pin,0); //F2_CTRL &= ~portMap[HeaterId].m_pin; F2_CTRL_Reg.ushort &= ~portMap[HeaterId].m_pin; F2_CTRL = F2_CTRL_Reg.ushort; portMap[HeaterId].Active = false; HeaterActive &= ~(1 << HeaterId); #endif } else { if(Head_Type > HEAD_TYPE_FLAT_WITHOUT_CARD) HeadCard_Control_Heaters(HeaterTypetoHeadHeater[HeaterId],OFF); else { if (HeaterId >= HEATER_TYPE__HeaterZone7) return OK; #ifndef EVALUATION_BOARD if(HeaterId == HEATER_TYPE__HeaterZone5) { //F1_gpo_01 &= ~portMap[HeaterId].m_pin; F1_GPO_Reg.ushort&= ~portMap[HeaterId].m_pin; F1_gpo_01 = F1_GPO_Reg.ushort; } else if(HeaterId == HEATER_TYPE__HeaterZone6) { //F3_GPO_01_bus &= ~portMap[HeaterId].m_pin; F3_GPO_01_Reg.ushort &= ~portMap[HeaterId].m_pin; F3_GPO_01_bus = F3_GPO_01_Reg.ushort; } else { //F2_CTRL &= ~portMap[HeaterId].m_pin; F2_CTRL_Reg.ushort &= ~portMap[HeaterId].m_pin; F2_CTRL = F2_CTRL_Reg.ushort; //--------------------------------------------------------------------------------------- // if(HeaterId < HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1) // Turn Off FPGA LED // F3_GPO_01_bus &= ~(0x01 << HeaterId); // else // F3_GPO_01_bus &= ~BIT4; // if (HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1) // STATUS_GREEN_LED_OFF; // if (HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2) // ACTIVITY_RED_LED_OFF; // if (HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3) // COMM_RED_LED_OFF; //HeaterActive = false; //--------------------------------------------------------------------------------------- portMap[HeaterId].Active = false; HeaterActive &= ~(1 << HeaterId); // } ----------------------------------------- } #endif } //Deactivate_Head_Card_Heaters(HeaterTypetoHeadHeater[HeaterId]); } return OK; } bool GetHeaterState (int HeaterId) { assert(isHeater(HeaterIdtoHeaterpid[HeaterId])); if (HeaterId<=HEATER_TYPE__DryerSecondaryHeater) { return portMap[HeaterId].Active; } else { if(Head_Type > HEAD_TYPE_FLAT_WITHOUT_CARD) { return(Get_HeadCard_Heater_State(HeaterTypetoHeadHeater[HeaterId])); } else { return portMap[HeaterId].Active; } } }