system: [SYSTEM]

user: 5. 测量处理软件实现 5.1. 软件实现指导思想 · 正常状态下，以无液体即空气时的测量值和充满液体时的测量值——建立比较运算基础； · 根据各段测量值与其空气基础值与充满液体基础值的关系，确定液–气混合段——粗略判断； · 根据“混合段液位比例”与其“前段充满液体值的变化量”修正各段“液–气基础值”——温度、湿度与介质变化补偿； · 根据测量值与液体位置的线性对应关系计算混合段的准确液体位置——精确计算。 5.2. 测量控制算法建模 设正常状态下各段空气值为s[i]、满程值为f[i]；各段长度均为H，实测值为m[i]。电容测量段从0开始、由下向上编号。 各段电容变化量： (4) 空气、液体、液–气混合段： (5) 图8. 最大测量一致性PCB板示例图 混合段液体相对全段的比例： (6) 混合前段满程值的变化： (7) 混合后段空气值的变化： (8) 混合前段温度、湿度与介质变化量： (9) 特别地，混合段为首段，计算后段空气温度、湿度与介质变化量： (10) 基础值修正： (11) 混合段的液体位置： (12) 液体位置： (13) 5.3. 电容传感模块配置 电容传感模块的配置是整个系统软件设计的关键，包括确定测量电容通道数、扫描周期的设置、转换结束中断的选用、工作参数的配置和内部补偿校验的确立，等。对于内部集成模块，还包括时钟的选择分配、IO端口的配置及其关联模拟比较模块等的选择。下面给出了AD7148的初始化代码，通过IIC接口一级驱动实现，属于二级驱动程序： void AD7148_vInit(void) // 电容传感器模块初始化 { IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x07; // 所有转换完成中断 IICBuf[ 2 ] = 0x00; IICBuf[ 3 ] = 0x10; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x01; // 内部补偿修正使能 IICBuf[ 2 ] = 0x00; IICBuf[ 3 ] = 0x00; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x02; // 通道充放电比较电压 IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x03; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x04; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x05; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x06; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x80; // 五通道电容均连接正极 IICBuf[ 2 ] = 0x3C; IICBuf[ 3 ] = 0x02; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x88; IICBuf[ 2 ] = 0x3C; IICBuf[ 3 ] = 0x08; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x90; IICBuf[ 2 ] = 0x3C; IICBuf[ 3 ] = 0x20; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x98; IICBuf[ 2 ] = 0x3C; IICBuf[ 3 ] = 0x80; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0xA0; IICBuf[ 2 ] = 0x3E; IICBuf[ 3 ] = 0x00; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x81; // 通道1~5 IICBuf[ 2 ] = 0x50; IICBuf[ 3 ] = 0x03; IIC0_Write(4); DelayAD7148(1000); ...... IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0xA1; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x82; // 五通道AFE偏移 IICBuf[ 2 ] = 0x30; IICBuf[ 3 ] = 0x00; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x8A; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x92; IICBuf[ 2 ] = 0x2E; IICBuf[ 3 ] = 0x00; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x9A; IICBuf[ 2 ] = 0x2C; IICBuf[ 3 ] = 0x00; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0xA2; IICBuf[ 2 ] = 0x2A; IICBuf[ 3 ] = 0x00; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x83; // 五通道灵敏度 IICBuf[ 2 ] = 0x5F; IICBuf[ 3 ] = 0x5F; IIC0_Write(4); DelayAD7148(2000); ...... IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0xA3; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x84; // 五通道低偏移 IICBuf[ 2 ] = 0x00; IICBuf[ 3 ] = 0x00; IIC0_Write(4); DelayAD7148(2000); ...... IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0xA4; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x85; // 五通道高偏移 IICBuf[ 2 ] = 0xFF; IICBuf[ 3 ] = 0xFF; IIC0_Write(4); DelayAD7148(2000); ...... IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0xA5; IIC0_Write(4); DelayAD7148(2000); IICBuf[ 0 ] = 0x00; IICBuf[ 1 ] = 0x00; // 工作方式:正常，不休眠 IICBuf[ 2 ] = 0x00; IICBuf[ 3 ] = 0x50; IIC0_Write(4); DelayAD7148(2000); } 5.4. 程序流程及其设计[ 6 ] [ 7 ] 嵌入式软件应用系统，采用作者的“Cortex-M系列微处理器软件体系架构工具”快速自动产生，在此基础上迅速展开功能性应用程序设计： 循环周期采样每个测量电容段，每轮采样结束产生中断数据接收。 系统及其电容传感模块初始后，每次达到滤波要求数据数目时开始对采样数据做均值处理、混合段判断、实时温度–湿度与介质变化补偿、精确液体位置计算。 设置对应RS485通信的异步串行传输UART (Universal Asynchronous Receiver/Transmitter)接收中断，根据外部要求，完成传感器ID编号设置、滤波系数设置、基础运算值设置和运算液体位置数据外传。 基础运算值包括空气基础值和满程基础值，采用单片机内部集成的Flash闪存作非易失存储。 均值滤波，基本次数选择为5，对应滤波系数为0，其它滤波系数m对应实际滤波次数为5 m。显然，滤波系数越大，测量精度越高，但测量数据变化周期增大，测量表现迟钝了。 系统主程序流程如图9所示。 限于篇幅，就此略去各个中外处理程序与运算判断子程序流程及其相关核心代码。 5.5. 测试–调试–运行 在高低温–湿箱中，反复测试，调整并优化算法、程序。 图9. 嵌入式软件应用系统主程序流程图 在调试阶段完成基础运算值的测定和初始编程相关参数的设置。 实验结果： · 测量位置精度0.01 mm； · 工作温度范围−40℃~85℃； · 适合介质：水、汽油、柴油、等。 试运行：客、货车油箱安装，接入行车记录系统，连续一年运行。