initial check in based on SVN revision 575
This commit is contained in:
141
source/adc.h
Normal file
141
source/adc.h
Normal file
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* adc.h
|
||||
*
|
||||
* Created on: Mar 31, 2023
|
||||
* Author: Keith.Lloyd
|
||||
*/
|
||||
|
||||
#ifndef ADC_H_
|
||||
#define ADC_H_
|
||||
|
||||
|
||||
#include "arm_math.h"
|
||||
|
||||
#define ADC_NUM_AVERAGES 10 //number of samples averaged for measurements
|
||||
|
||||
#define ADC_VREF 3.3 //3.23 //ADC reference voltage = 3v3 supply (Measured @ 3.23v)
|
||||
#define ADC_HALF_COUNTS 2048 //half of max ADC reading
|
||||
#define ADC_OFFSET_MAX_ERROR 30 //maximum allowed error for ADC offset measurement
|
||||
|
||||
|
||||
|
||||
|
||||
#define ADC_USE_NOISE_OFFSET 1 //Use a standard noise offset
|
||||
#define ADC_NOISE_OFFSET_COUNTS 13 //ADC offset due to precision rectifier noise conversion to DC
|
||||
|
||||
#define ADC_CORRECT_FOR_CURRENT_NOISE 1 //Correct current measurement for noise from the precision rectifier
|
||||
|
||||
|
||||
#define ADC_USE_CURRENT_TABLE 1 //Use the current table to scale current measurements
|
||||
#define ADC_TABLE_COLUMNS 2 //number of columns for current and voltage tables
|
||||
#define ADC_TABLE_COLUMNS2 3 //number of columns for current and voltage tables with offset
|
||||
#define ADC_TABLE_FREQ 0 //frequency column in current and voltage tables
|
||||
#define ADC_TABLE_SCALE 1 //scale column in current and voltage tables
|
||||
#define ADC_TABLE_OFFSET 2 //offset column in current tables
|
||||
|
||||
|
||||
#define ADC_LOW_GAIN_CURR_CLIP_THRESH 1050 //LOW gain current measurement clipping threshold (in ADC counts)
|
||||
#define ADC_HIGH_GAIN_CURR_CLIP_THRESH 800 //HIGH gain current measurement clipping threshold (in ADC counts)
|
||||
|
||||
#define ADC_LOW_GAIN_VOLT_CLIP_THRESH 1050
|
||||
#define ADC_HIGH_GAIN_VOLT_CLIP_THRESH 800
|
||||
|
||||
#define ADC_MEASUREMENT_TEST 0 //Collect ADC data @ adc sampleRate when triggered. FOR TESTING
|
||||
|
||||
#if ADC_MEASUREMENT_TEST
|
||||
#define ADC_NUM_TEST 40 //10mS samples
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
bool measure; //measure ADC values in timer ISR
|
||||
//current measurement offset
|
||||
bool iosOK; //current offset within limits, use it
|
||||
uint32_t I_OffsetAdc; //Current channel offset - measured @ startup
|
||||
uint32_t rawCurrent; //raw current measurement used for offset
|
||||
|
||||
//Voltage measurement offset
|
||||
bool vosOK; //voltage offset error within limits, use it
|
||||
uint32_t V_OffsetAdc; //VOltage channel offset - measured @ startup
|
||||
uint32_t rawVoltage; //raw voltage measurement used for offset
|
||||
|
||||
bool currentClipping; //Current measurement clip status (for LOW and HIGH gains)
|
||||
bool voltageClipping; //Voltage measurement clip status (for LOW and HIGH gains)
|
||||
|
||||
|
||||
//storage for raw ADC values (0 - 4096). Sum up samples
|
||||
uint32_t V_ID1_RAW; //ch5 Port A identifier.
|
||||
uint32_t V_ID2_RAW; //ch6 Port B identifier
|
||||
uint32_t V_CHK_RAW; //ch7 Incoming voltage eg. 110V
|
||||
uint32_t V_PSU_RAW; //ch3 Power supply monitor
|
||||
uint32_t V_TMP_RAW; //ch8 External temperature
|
||||
uint32_t I_OUT_RAW; // ch0 Current out
|
||||
uint32_t V_OUT_RAW; // ch1 Volts Out
|
||||
uint32_t V_BAT_RAW; //ch4 Battery Voltage
|
||||
uint32_t V_BID_RAW; //ch10 Battery ID
|
||||
|
||||
//Storage for scaled value - float32_t
|
||||
float32_t V_ID1;
|
||||
float32_t V_ID2;
|
||||
float32_t V_CHK;
|
||||
float32_t V_BID;
|
||||
float32_t V_BAT;
|
||||
float32_t I_OUT;
|
||||
float32_t V_OUT;
|
||||
float32_t V_TMP;
|
||||
float32_t V_PSU;
|
||||
|
||||
//Storage for filtered values - float32_t
|
||||
float32_t I_OUT_SlowFilt;
|
||||
float32_t V_OUT_SlowFilt;
|
||||
float32_t V_OUT_FastFilt;
|
||||
float32_t I_OUT_FastFilt;
|
||||
float32_t Ohms_slowfilt;
|
||||
|
||||
|
||||
// Delay Lines for filters
|
||||
float32_t V_OUT_Delay;
|
||||
float32_t I_OUT_Delay;
|
||||
float32_t V_OUT_FastDelay;
|
||||
float32_t I_OUT_FastDelay;
|
||||
float32_t Ohms_FastDelay;
|
||||
float32_t Ohms_SlowDelay;
|
||||
|
||||
#if 1 //ADC raw current filtering - This is for testing
|
||||
float32_t IRaw;
|
||||
float32_t IRawFilt;
|
||||
float32_t IRawDelay;
|
||||
#endif
|
||||
|
||||
#if 1 //ADC raw voltage filtering - This is for testing
|
||||
float32_t VRaw;
|
||||
float32_t VRawFilt;
|
||||
float32_t VRawDelay;
|
||||
#endif
|
||||
uint32_t diag_bat; // commented test value for battery diagnosis
|
||||
//TESTING - faster current measurement without averaging
|
||||
#if ADC_MEASUREMENT_TEST
|
||||
bool testCollectData;
|
||||
uint32_t testIndex;
|
||||
//storage for sampled data
|
||||
float32_t testData1[ADC_NUM_TEST];
|
||||
float32_t testData2[ADC_NUM_TEST];
|
||||
|
||||
|
||||
float32_t testIout;
|
||||
float32_t testIoutDelay;
|
||||
|
||||
float32_t testVout;
|
||||
float32_t testVoutDelay;
|
||||
|
||||
#endif
|
||||
|
||||
}ADC_t;
|
||||
|
||||
|
||||
void ADC_Init2(void);
|
||||
void ADC_MeasureCurrentOffset(void);
|
||||
void ADC_Update(void);
|
||||
float32_t FILT_ExpAvgF32(float32_t input, float32_t *temp, float32_t k);
|
||||
|
||||
|
||||
#endif /* ADC_H_ */
|
||||
Reference in New Issue
Block a user