APP下载

基于SCPI的可编程线性直流电源的程序设计与研究

2016-10-14邵娟王振华

科学与财富 2016年28期

邵娟+王振华

摘 要:本文是在基于SCPI之上对可编程线性直流电源进行了程序设计和研究。该线性直流电源以电压和电流为核心,要求有4 位0.4”LED电压显示和3 位0.4”LED电流显示,并且精确度做到电压±(0.03%的读数+10位)和电流±(0.3%的读数+10位)的输出。数字面板控制和数据保存调取功能,通过USB接口实现了SCPI命令的输入和执行,提高了SCPI的数据采集的通用性、可移植性和可扩展性。

关键词:线性直流电源;SCPI;二叉树链式;三段分析法

一、引言

任何的科学实验都离不开电源,在某些实验中经常会对电压高低、电流大小以及稳定度等都有着特殊的要求,但是目前实验室所用的直流稳压电源多数存在着电压或电流的精度不够,稳定度不高的问题。传统的直流电源一般采用指针式来显示电压值或者电流值,使用电位器来调整电压或电流的输出值,而电位器的阻值特性一般都是非线性的,在调整和使用时是非常不方便的,并伴随着漂移。所设定的电压值或电流值和输出值之前存在的误差,而且输出值精度不高,因此造成所接电路的损坏也经常性的发生。当长时间使用直流电源时,甚至会造成电源的死机。因此,针对以上的这些问题,专门作为一个课题进行研究,保证直流稳压电源良好的性能,可视化的数码管显示,可以调取和存储数据,精度达到小数点后3位,而且要求抗干扰能力强,力求实现智能化、多功能化和美观化。

SCPI即程控仪器标准命令( standard command for program instrument),它是一种用来控制仪器的命令语言,规定了消息的构造和内容,带有多种标准接口。它以ASCII字符组成的标准仪器命令语言,对于测量仪器的每一个功能,SCPI均定义了特定的命令字符。它最大的优点就是在对仪器编程时仅考虑所需要完成的功能,而不用考虑仪器本身具体的操作过程。以一种标准化的方式解决了软件的兼容性问题,而且简单和方便。

基于SCPI和可编程线性直流电源仪器的特点,将两者有机的结合起来,通过软硬件结合能够实现直流电源的远程控制,并且和其他测试仪器想兼容,保证直流电源的稳定性、智能性、多功能性、兼容性等。

二、基于SCPI的可编程线性直流电源的程序设计

2.1 可编程线性直流电源的总体结构

此电源含有数字面板输入控制模块,显示模块,AD转换模块,DA转换模块,电流电压值输出模块,数据存储模块,远程控制模块和智能型温控风扇等。

数字面板输入控制模块通过带指示灯的硅胶按键和旋转编码开关进行数据的输入,显示模块拥有十八个高亮度的LED屏显示,DA转换模块将数字面板所输入的数字值转换为相应的模拟量信号,AD转换模块负责将模拟电路输出的电压或电流信号转换为数字信号,一些状态标志也相应显示在面板上。

2.2可编程线性直流电源的关键流程图

有图1可以看出“电流电压采样值”是整个系统的关键变量:

(1)通过硅胶按键和旋转编码开关输入电流电压设定值,当打开output后经过AD、DA转换得到采样值。

(2)通过CPU输出设定的电流电压采样值。

(3)通过LED显示读取电流电压设定值和电流电压的采样值。

因此本论文将以电流电压采样值为中心进行展开,在Keil开发环境下采用C51语言设计数据语言进行软件的编写和调试。

2.3控制模块

CPU采用Microchip公司的PIC18F85J10,其内部集成了程序存储器和数据RAM,因此可以对程序存储器空间进行寻址,写闪存存储器的程序,实现bootloader功能。Bootloader代码是芯片复位后进入操作系统之前执行的一段代码,主要是完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境。

PIC18F85J10芯片还集成了5个CCP模块和2个MSSP模块,每个模块都可以独立的工作。在电路中17个数码管的显示和93C66外部存储器的DIN和SCLK信号是共用RC4和RC3,RC5作为93C66的输出信号,因此他们可以采用MSSP1模式进行同步发送和接收8位数据。达到数码管的快速显示功能,简化了电子电路的设计。

因为编程和显示的精度要求到达±(0.03%的读数+10位),所以就必须采用高精度的AD和DA模块变换,AD模块采用了AD7792芯片,AD7792是将模拟信号转变成16位的数字信号,刷新速率达到65dB。在电路中AD芯片、DA芯片的DIN和SCLK信号是共用同一个RD4和RD6,即MSSP2,在AD转换中当SCKx出现外部时钟脉冲时发送和接收数据,当最后一位数据被锁存后,中断标志位会置1。这样就可以在中断中进行达到快速转换和数码管显示。

总体结构图

从2图可以看出CPU需要控制的资源有19组LED显示器、12个LED灯、2片AD5545、2片AD7792、4*3键盘矩阵、2颗Ecode S/W、1个蜂鸣器、一片93C66、4个继电器、2个CC/CV灯、一片FT232RL。

该线性直流电源基于SCPI命令标准,实现对输入模拟信号的数据采集,以及输出数字信号的传输、处理和显示。本电源中通信接口采用EUSART串行通信接口,它是单片机系统中常用的串行接口标准,适用于计算机、仪器设备之间的近程连接,其传输距离不大于15米,最大传输速率是20KB/s,可以满足本电源的设计需要。增强型通用同步/异步收发器(Enhanced Universal Synchronous Asychronous Receivers Transmitter,EUSATRT )是两个串行I/O模块之一,一般也将EUSART称为串行通信接口或SCI。配置EUSART使得CPU与个人计算机之间实现全双工异步系统,在设计中通过FT232RL芯片连接。

命令树图用于定义SCPI的命令集,它描述了命令、命令之间的层次关系、相关的参数以及必要的注释

命令树图通常由三部分构成:关键字(KEYWORD)、参数形式(PARAMETER FORM)和注释(NOTES)

根据SCPI的树状层次结构特点,本课题采用树型结构来保存命令信息。语法分析过程可以分为创建树和遍历树的过程。创建树过程就是把特定仪器的命令集,按照一定的结构创建成供查询使用的命令树;遍历树过程就是根据得到的命令,通过遍历命令树,得到命令的相关信息。

命令树的创建:树中的每个节点不是保存关键字信息,而是采用编码的方式,将该SCPI命令多叉树中各个子系统分支视为一棵独立的树,通过先转换各个子系统这样的一棵独立的树为二叉树的结构,再将所有的子系统二叉树组合为一棵完整的二叉树。

该程序采用链式存储结构,链式存储结构利用指针来表达逻辑关系。链式存储结构又分为二叉链表和三叉链表,其特点是程序员不需要担心存储空间大小的问题,但是链式存储的读写速度相对要慢些,并且所需要的存储空间也较顺序存储大;逻辑位置相邻的数据元素物理位置上不必相邻;插入、删除等操作灵活;每个结点都是由数据域和指针域组成的。链式存储适用于任何二叉树,是目前最常用的二叉树存储结构。二叉链表的每一个结点除了数据域(存放结点的数据信息)外,还需要有两个指针域指向它的左、右孩子结点。通过左右两个指针,二叉链表可以很方便的查找已知结点的孩子结点。

因此该程序中关键字节点结构如下:

typedef struct _node{

nodes parantPtr; 指向父节点

const nodes *SonPtr; 指向子节点

const char *MyName; 当前节点的名字

char Length; 节点的长度

int ID; 标记号

}node;

遍历树的过程是采用自上而下的方法,从根出发,自上而下的对输入串中的关键字进行匹配直至树的末端或没有匹配为止。因为系统的输入比较稳定,因此采用自上而下的分析法,其过程可以分为两个步骤,一是根据输入的命令得到每个关键字的编码和参数等信息,然后根据编码查找命令树当前层(或根)与之匹配的信息,有匹配信息时记录当前位置,无匹配信息时需要查询其兄弟节点或回溯到父级继续查询,若符合条件的节点查询完毕也没有找到匹配的信息则给出出错信息。最后得到一个仪器可以识别并能够执行的命令码和参数,同时提交命令码供系统执行相应的功能。

三、总结

本论文对可编程线性直流电源进行了总体上的设计。首先对控制部分进行了设计,包括LED显示部分和键盘输入部分,进行了硬件和软件上的实现,另外还对隔离电路进行了设计。将CPU周围的SPI、AD转换、DA转换、ECCP、bootloader模块和数据精确度的控制进行详细的设计描述。最后对SCPI数据通信进行了设计说明,并有超级终端进行显示并控制直流电源。

基于SCPI命令标准的研究和实现,可以提高SCPI的数据采集的通用性、可移植性和可扩展性,对于以后开发完整的标准化程控命令有一定的参考作用,能有效缩短其他具有SCPI命令的仪器开发时间。

参考文献

[1] 李含光,郑光胜.C语言程序设计教程,清华大学出版社,2011.

[2] 周芝田,靳越.单片机原理与应用,国防工业出版社,2010.

[3] SCPI Consortium.Standard Commands for Programmable Instruments(SCPI).1999,7-8.