本帖最后由 suncand 于 2019-5-7 00:41 编辑
04. 应用软件设计
这款图示仪应用软件的开发是花费时间最多的,而且还在继续完善中。最近又经常出差,没有时间优化。
今天先把基本框架和思路介绍一下。
在总体设计说明部分,已经描述了应用软件的相关模块。如下图:
核心模块包括: 1. 晶体管信息维护:一个独立的界面,负责对晶体管基本信息的增,删,改,查; 2. 晶体管数据:这是一个简单的Sqlite3数据库。存放了晶体管基本信息,输入,输出特性的测量数据,用于同型比较和互补比较的参数,以及比较的结果; 3. 曲线画图与显示:主要是根据晶体管的测量数据化特性曲线图; 4. 主控界面:显示被测管的信息,测量条件,测量结果,比较配对结果等;同时可以控制测量的开始,停止,保存等;主控界面里包括了实际的负责测量的线程。他可以根据设定的测量条件(Ib,Vc),自动测量对应的Vbe,Ic,并将测量结果通过画图模块在主界面画出来; 5. 晶体管模型及特性配对模块:这是一个独立的晶体管类,定义了和数据库里存储的晶体模型对应的属性。用于在内存里保存管子的信息。然后定义了一系列方法用于操作管子的数据。这些方法包括:从数据库里查询晶体的基本信息;查询库里保存的测量数据;将测量结果保存到数据库;对测量结果进行参数化;同型比较算法;配对比较算法等; 6. 设备测量控制:这是一个底层应用,专门负责和硬件设备打交道。所有对设备的操作,例如初始化,发送测试指令,接收测试结果,对发生送数据进行编码,对接收数据进行解码,数据的误差矫正等全部封装在这个类中;
在整个应用中,最核心的模块就是配对比较的算法。配对的实现,最笨办法是让所有管子以完全一样的测试条件,获得测试结果,然后对比每一组结果,看他们的偏差。这基本不现实,也不科学。 最理想的方式是通过测量数据将每个管子用一个数学方程建模。这个模型方程带有一组系数。只要比较不同管子模型方程的系数,就可以知道相似程度。这个方程是存在的,我们常用的仿真软件里就有Spice器件模型。这个模型是建立在半导体物理特性基础上的,按理说是比较准确的模型。但这个模型的参数太多,而且大多数很难通过简单的测量获得。 既然用一个理想模型方程也不现实,那我采用的是一个折中的,也比较实用的办法。学电子电路的同学其实都知道,那就是用拟合函数来表示输入和输出特性曲线。输入特性是一个拟合函数,输出特性曲线是另一个拟合函数。每条特性曲线对应一组函数的系数。只要不同的管子是在同样的ib条件下,测得的输出特性,可以通过比较对应的函数系数就可以。 对于输入特性,通常用以下方程拟合。
这个方程表示,在一定的Uce条件下,ib是Ube的函数。方程的系数是a, b。只要计算出a, b,一条特定条件下(Uce为某一固定值)的输入特性曲线就确定了; 对于输出特性,通常用以下方程拟合:
这个方程表示,在一定的Ib条件下,ic是Uce的函数。方程的系数是A,K,B。只要计算出A,K,B,一条特定条件下(Ib为某一固定值)的输出特性曲线就确定了;
因此配对算法包括两部分: 第一部分是参数化:即对测量得到的每条输入,输出曲线,通过函数拟合的算法,得到每条曲线的方程系数。并保存到数据库;Python自带的函数拟合算法,有时会找不到合适的拟合参数。不过大多数情况下还不错。以后有时间要研究一下,自己写拟合算法。 第二部分是比较:以同型配对为例,先找出所有同样型号的管子,针对每一个目标管,找出和当前被测管相同测试条件(Uce,Ib)下得到的曲线方程参数,形成当前管和目标管的两个参数向量,计算两个向量的欧几里得距离,再归一化,就形成了相似性的结果。 对互补管也是同样的过程,只不过因为PNP,NPN管的测量条件和结果完全相反,需要取他们的绝对值计算特性曲线方程的拟合参数,然后再比较这些参数的相似性。
当然在具体算法实现时,还有些细节需要关注,以后再讨论吧。
|