123 lines
3.2 KiB
C
123 lines
3.2 KiB
C
|
|
/*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
* IAR Development Kits
|
|||
|
|
* on the
|
|||
|
|
*
|
|||
|
|
* Nano130
|
|||
|
|
*
|
|||
|
|
* Filename : adc_calculate.h
|
|||
|
|
* Version : V1.00
|
|||
|
|
* Programmer(s) : Qian Xianghong
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef USER_ADC_CALCULATE_PRESENT
|
|||
|
|
#define USER_ADC_CALCULATE_PRESENT
|
|||
|
|
|
|||
|
|
// <20><>ģ<EFBFBD><C4A3><EFBFBD>ִ<F3B2BFB7><D6B4><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><CDB9><EFBFBD>Һλ<D2BA><CEBB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
typedef uint8_t u8;
|
|||
|
|
typedef char s8;
|
|||
|
|
typedef uint16_t u16;
|
|||
|
|
typedef int16_t s16;
|
|||
|
|
typedef uint32_t u32;
|
|||
|
|
typedef int32_t s32;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>峣<EFBFBD><E5B3A3><EFBFBD><EFBFBD>
|
|||
|
|
#define PI (3.1415926)
|
|||
|
|
|
|||
|
|
#define CAP_K_C1 245 // <20><><EFBFBD><EFBFBD>KֵУ<D6B5><D0A3>C1<43><31>pF<70><46>
|
|||
|
|
#define CAP_K_C2 1045 // <20><><EFBFBD><EFBFBD>KֵУ<D6B5><D0A3>C2<43><32>pF<70><46>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ʽ<EFBFBD><CABD>糣<EFBFBD><E7B3A3>
|
|||
|
|
extern const float e_Src[];
|
|||
|
|
|
|||
|
|
typedef struct // size = 10 if --float=32
|
|||
|
|
{
|
|||
|
|
float k; // <20><><EFBFBD>յ<EFBFBD><D5B5>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4>ۺϼ<DBBA><CFBC><EFBFBD><EFBFBD>õ<EFBFBD>
|
|||
|
|
s16 nl_len; // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ܳ<EFBFBD><DCB3>ȣ<EFBFBD>mm<6D><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2>֣<EFBFBD>
|
|||
|
|
s16 base_d; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(mm)<29><><EFBFBD><EFBFBD><EFBFBD>㴫<EFBFBD><E3B4AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><CDB9><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ķ<EFBFBD>϶<EFBFBD>߶<EFBFBD>
|
|||
|
|
s16 base_len; // <20>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զγ<D4B6><CEB3>ȣ<EFBFBD>mm<6D><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>ڹ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ĸ߶<C4B8>
|
|||
|
|
} Sensor_Model;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
extern const Sensor_Model Adc_Sensor_Tables[1];
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۲<EFBFBD><DBB2><EFBFBD>
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>(L)
|
|||
|
|
u32 v;
|
|||
|
|
u32 ve; // <20><>Ч<EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD>ɳ<EFBFBD>װ<EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>
|
|||
|
|
u16 v0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u16 zero_height; // <20><><EFBFBD>߶<D7B8>
|
|||
|
|
|
|||
|
|
s16 nl_len; // <20>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2>߶<EFBFBD>
|
|||
|
|
|
|||
|
|
// dp=h*density*g => h=dp/g/density
|
|||
|
|
// <20><><EFBFBD><EFBFBD>dpΪ<70><CEAA>ѹ, hΪҺλ<D2BA>߶<EFBFBD>, densityΪ<79>ܶ<EFBFBD>, gΪ9.8
|
|||
|
|
// Ϊ<><CEAA><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ-><3E>߶ȵ<DFB6>ת<EFBFBD><D7AA>ϵ<EFBFBD><CFB5>
|
|||
|
|
|
|||
|
|
// dp<64><70>KPaΪ<61><CEAA>λ, <20>߶<EFBFBD><DFB6><EFBFBD>mmΪ<6D><CEAA>λ, density<74><79>kg/LΪ<4C><CEAA>λ
|
|||
|
|
// LSrc_k = 1/g/density*1000=1000/g/density
|
|||
|
|
// h = dp * LSrc_k
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ҺԴΪLNG, LSrc_k = 1000/9.8/0.42 = 242.9543
|
|||
|
|
float LSrc_k;
|
|||
|
|
} Bottle_Data;
|
|||
|
|
|
|||
|
|
extern Bottle_Data Theoretical_Param;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۲<EFBFBD><DBB2><EFBFBD>: ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><DEBB>Թޣ<D4B9>
|
|||
|
|
u8 Calculate_Theoretical_Params();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Һλ<D2BA>߶<EFBFBD><DFB6><EFBFBD>ֱ<EFBFBD><D6B1>֮<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3>Һ<EFBFBD><D2BA><EFBFBD><EFBFBD><EFBFBD>п۳<D0BF><DBB3><EFBFBD>
|
|||
|
|
// v0: <20><><EFBFBD><EFBFBD>Һ<EFBFBD><D2BA>
|
|||
|
|
u32 Calculate_Volume(u16 d, float h, u32 v, u16 v0);
|
|||
|
|
u32 Calculate_Volume_Stand(u16 d, u16 L, float h, u16 v0);
|
|||
|
|
|
|||
|
|
// <20>жϲɼ<CFB2><C9BC><EFBFBD><EFBFBD>ݷ<EFBFBD>Χ<EFBFBD>Ƿ<EFBFBD><C7B7>Ϸ<EFBFBD>
|
|||
|
|
// <20><><EFBFBD>룺<EFBFBD>ɼ<EFBFBD>ֵ<EFBFBD><D6B5>У<EFBFBD><D0A3>ֵ<EFBFBD><D6B5>У<EFBFBD><D0A3>ֵ
|
|||
|
|
// <20><><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>ֽ<EFBFBD>
|
|||
|
|
u8 ADC_Validate(u32 adc, u32 zero, u32 full);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>룺adc<64><63>Уֵ<D7BC><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ
|
|||
|
|
float ADC_Calculate(u32 adc, u32 zero, u32 full, s32 low, s32 high);
|
|||
|
|
|
|||
|
|
// ð<><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void sort(u32 numbs[], s8 cnt);
|
|||
|
|
|
|||
|
|
// KPaת<61><D7AA><EFBFBD><EFBFBD>mmH2O
|
|||
|
|
float KPa2mmH2O(float KPa);
|
|||
|
|
// KPaת<61><D7AA><EFBFBD><EFBFBD>MPa
|
|||
|
|
float KPa2MPa(float KPa);
|
|||
|
|
// KPaת<61><D7AA><EFBFBD><EFBFBD>PSI
|
|||
|
|
float KPa2PSI(float KPa);
|
|||
|
|
|
|||
|
|
// <20><>ѹת<D1B9><D7AA>ΪҺλ<D2BA>߶<EFBFBD>
|
|||
|
|
float Diff2Level(float dp); // <20><>λKPa<50><61>mm
|
|||
|
|
|
|||
|
|
// <20>߶<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
u32 Level2Vol(float h); // <20><>λmm<6D><6D>L
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
u32 Vol2Quantity(float v); // <20><>λL<CEBB><4C>kg
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
u32 Quantity2Vol(float quantity); // <20><>λkg<6B><67>L
|
|||
|
|
|
|||
|
|
s16 adc_k_convert(s16 adc, s16 c1ADC, s16 c2ADC, s16 c1, s16 c2);
|
|||
|
|
float Cap_Calculate(s16 cap, s16 base, s16 ref);
|
|||
|
|
|
|||
|
|
int16_t PT100_CalTempr(s32 adc1, s32 adc2, s16 cTx10, s16 cRx10);
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
float PT100_CalResit(s32 adc1, s32 adc2);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ݱ궨ֵ<EAB6A8><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵IJ<CCB5><C4B2><EFBFBD>ֵ
|
|||
|
|
void PT100_Calculate_Theoretical_Params(int16_t lowRange, int16_t highRange);
|
|||
|
|
|
|||
|
|
extern const float PT100_Resis[281];
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|