//================================================================================================= // // Company: Paul Scherrer Institut // 5232 Villigen PSI // Switzerland // //------------------------------------------------------------------------------------------------- // // Project: Peltier Controller V2 // Author: Noah Piqu� (noah.pique@psi.ch) // //------------------------------------------------------------------------------------------------- // // Module: Peltier Controller // Filename: PECO_PeltierController.c // Date: Handled by Subversion (version control system) // Revision: Handled by Subversion (version control system) // History: Handled by Subversion (version control system) // //------------------------------------------------------------------------------------------------- // // Description: This source file contains all functions dealing with the Peltier Controller Output // //================================================================================================= //================================================================================================= // Section: INCLUDES // Description: List of required include files. //================================================================================================= #include "../PDEF_ProjectDefinitions.h" #include "PECO_PeltierController.h" // Driver #include "../Drivers/ANPO_AnalogPortsOut.h" #include "../Drivers/DIPO_DigitalPorts.h" // Toolbox #include "../Toolbox/UTIL_Utility.h" // include STM32 drivers #include "stm32l4xx_hal.h" #include "cmsis_os2.h" //================================================================================================= // Section: DEFINITIONS // Description: Definition of local constants (visible by this module only). //================================================================================================= #define EVENT_TIMER_UPDATE ((U32)(1<<0)) #define EVENT_FLAGS_ALL ( EVENT_TIMER_UPDATE ) //================================================================================================= // Section: MACROS // Description: Definition of local macros (visible by this module only). //================================================================================================= //================================================================================================= // Section: ENUMERATIONS // Description: Definition of local enumerations (visible by this module only). //================================================================================================= //================================================================================================= // Section: STRUCTURES // Description: Definition of local Structures (visible by this module only). //================================================================================================= //================================================================================================= // Section: LOCAL VARIABLES // Description: Definition of local variables (visible by this module only). //================================================================================================= LOCAL osThreadId_t m_pstThreadID = NULL; LOCAL osTimerId_t m_pstUpdateTimer = NULL; LOCAL osEventFlagsId_t m_pstEventID = NULL; BOOL boEnableOutput = FALSE; //================================================================================================= // Section: LOCAL CONSTANTS // Description: Definition of local constants (visible by this module only). //================================================================================================= LOCAL CONST osThreadAttr_t stTaskAttribute = { "PECO_Thread", // name of the thread osThreadDetached, // attribute bits NULL, // memory for control block 0, // size of provided memory for control block NULL, // memory for stack 1024, // size of stack osPriorityNormal, // initial thread priority (default: osPriorityNormal) 0, // TrustZone module identifier 0, // reserved (must be 0) }; LOCAL CONST osTimerAttr_t stTimerAttribute = { "PECO_UpdateTimer", // name of the timer 0, // attribute bits NULL, // memory for control block 0, // size of provided memory for control block }; LOCAL CONST osEventFlagsAttr_t stEventAttribute = { "PECO_Event_Flags", // name of the event flags 0, // attribute bits NULL, // memory for control block 0, // size of provided memory for control block }; //================================================================================================= // Section: LOCAL FUNCTIONS (PROTOTYPES) // Description: Definition of local functions (visible by this module only). //================================================================================================= PRIVATE VOID PECO_vTask( PVOID arg ); BOOL boSetPeltierVoltage( S16 Voltage ); PRIVATE VOID vEventCallback( PVOID pvData ); //================================================================================================= // Section: EXTERNAL FUNCTIONS // Description: Definition of external (global) functions. //================================================================================================= //================================================================================================= // Section: EXTERNAL VARIABLES // Description: Definition of external (global) variables. //================================================================================================= extern DAC_HandleTypeDef hdac1; //================================================================================================= // Section: GLOBAL FUNCTIONS // Description: Definition (implementation) of global functions. //================================================================================================= //------------------------------------------------------------------------------------------------- // Function: PECO_boInitializeModule // Description: Initializes the module. Function must be called once immediately after power-up. // Parameters: None // Returns: Boolean TRUE if successful //------------------------------------------------------------------------------------------------- BOOL PECO_boInitializeModule( VOID ) { BOOL boOK = TRUE; boOK &= ((m_pstThreadID = osThreadNew( PECO_vTask, NULL, &stTaskAttribute )) == NULL ) ? FALSE : TRUE; boOK &= ((m_pstEventID = osEventFlagsNew( &stEventAttribute )) == NULL) ? FALSE : TRUE; boOK &= (m_pstUpdateTimer = osTimerNew( vEventCallback, osTimerPeriodic, (PVOID)EVENT_TIMER_UPDATE, &stTimerAttribute )) == NULL ? FALSE : TRUE; boSetPeltierVoltage(0); boOK &= (osTimerStart( m_pstUpdateTimer, 1000 ) == osOK ) ? TRUE : FALSE; return( boOK ); } //------------------------------------------------------------------------------------------------- // Function: PECO_boSetTemperature // Description: Sets the Peltier Controller to a Specific Temperature // Parameters: None // Returns: Boolean TRUE if successful //------------------------------------------------------------------------------------------------- BOOL PECO_boSetTemperature( S16 Temperature ){ BOOL boOK = TRUE; boOK &= boSetPeltierVoltage( Temperature ); return( boOK ); } //------------------------------------------------------------------------------------------------- // Function: PECO_Enable // Description: Enables the Peltier Controller Output // Parameters: BOOL boEnable // Returns: None //------------------------------------------------------------------------------------------------- VOID PECO_Enable( BOOL boEnable ){ DIPO_vSetState(DIPO_eEN, boEnable); boEnableOutput = boEnable; } //------------------------------------------------------------------------------------------------- // Function: PECO_isEnabled // Description: Returns true if the Output is enabled // Parameters: None // Returns: BOOL boEnableOutput //------------------------------------------------------------------------------------------------- BOOL PECO_isEnabled( VOID ){ return boEnableOutput; } //================================================================================================= // Section: LOCAL FUNCTIONS // Descriptionn: Definition (implementation) of local functions. //================================================================================================= //------------------------------------------------------------------------------------------------- // Function: PECO_vTask // Description: PECO_vTask // Parameters: None // Returns: None //------------------------------------------------------------------------------------------------- VOID PECO_vTask( PVOID arg ) { UNUSED( arg ); U32 u32Flags; while ( TRUE ) { u32Flags = osEventFlagsWait( m_pstEventID, EVENT_FLAGS_ALL, osFlagsWaitAny, osWaitForever ); if( u32Flags & EVENT_TIMER_UPDATE ) { } } } //------------------------------------------------------------------------------------------------- // Function: boSetPeltierVoltage // Description: Sets the Peltier elements to a specific Voltage // Parameters: S8 Voltage (14V - -8V) // Returns: Boolean TRUE if successful //------------------------------------------------------------------------------------------------- BOOL boSetPeltierVoltage( S16 Voltage ){ BOOL boOK = TRUE; if( Voltage > 14000 ) Voltage = 14000; if( Voltage < -8000 ) Voltage = -8000; boOK &= ANPO_boSetVoltage( ((((FLOAT)Voltage)/1000) + 20.088) / 34.103 ); return( boOK ); } //------------------------------------------------------------------------------------------------- // Function: vEventCallback // Description: Callback for events // Parameters: None // Returns: None //------------------------------------------------------------------------------------------------- PRIVATE VOID vEventCallback( PVOID pvData ) { osEventFlagsSet( m_pstEventID, (U32)pvData ); }