NorthStar-Endurance-TestBench/EnduranceTestBench/nehemis/flowmeter.c

96 lines
2.8 KiB
C

/**
* @file flowmeter.c
*
* @copyright Nehemis SARL reserves all rights even in the event of industrial
* property rights. We reserve all rights of disposal such as
* copying and passing on to third parties.
*
* @brief
*
*/
/******************************************************************************
* Include Header Files
******************************************************************************/
#include "nms_types.h"
#include "flowmeter.h"
#include "analogMeasurement.h"
/******************************************************************************
* Type declarations
******************************************************************************/
/******************************************************************************
* Macro Constant Declarations
******************************************************************************/
/******************************************************************************
* Private function Declarations
******************************************************************************/
static void FlowmeterReadVoltage(FlowmeterMain_st * flowmeter_pst);
FlowmeterMain_st *flowmeter_gpst;
/******************************************************************************
* Extern Function Definitions
******************************************************************************/
void FlowmeterInit(FlowmeterMain_st *flowmeter_pst)
{
if (flowmeter_pst == NULL)
{
/* ERROR */
}
flowmeter_pst->mKu_f32 = 5.0f; // Default value
}
void FlowmeterGetFlow(FlowmeterMain_st *flowmeter_pst)
{
if (flowmeter_pst == NULL)
{
/* ERROR */
}
FlowmeterReadVoltage(flowmeter_pst);
flowmeter_pst->rawQ_f32 = flowmeter_pst->mKu_f32 * flowmeter_pst->voltage_f32;
}
float32 FlowmeterGetKu(FlowmeterMain_st *flowmeter_pst)
{
if (flowmeter_pst == NULL)
{
return 0.0f;
}
return flowmeter_pst->mKu_f32;
}
void FlowmeterSetKu(FlowmeterMain_st *flowmeter_pst, float32 ku_f32)
{
if (flowmeter_pst != NULL)
{
flowmeter_pst->mKu_f32 = ku_f32;
}
}
/******************************************************************************
* Private function Definitions
******************************************************************************/
/**
* @brief Function to read ADC voltage data which is directly coming from the sensor.
*
* @param flowmeter_pst : Pointer to main strucutre of the module.
*
* @return ADC output voltage based on sensor reading.
*
*/
static void FlowmeterReadVoltage(FlowmeterMain_st *flowmeter_pst)
{
/* Convert ADC value to voltage (assuming 12-bit resolution and 3.3V reference) */
uint32 adcVal_u32 = 0uL;
AnalogMeasurementReadData(flowmeter_pst->channel_u32, &adcVal_u32);
flowmeter_pst->voltage_f32 = (float32)adcVal_u32 * (ANALOG_MEAS_ADC_REF_VOLTAGE / ANALOG_MEAS_ADC_RESOLUTION);
}