摘 要:采用Cypress公司生产的PSoC3芯片实现了一个数字电压表的设计。设计使用芯片集成的A/D转换模块完成模数转换,并且通过程序调用读取相应的数字量及芯片强大的LCD显示模块,将转换后的数字量和相应的模拟量显示出来。本设计具有硬件设计简单、软件设计图形化、可以充分利用PSoC提供的固件元件的优点。
关键词:PSoC3;电压表;A/D;LCD;PSoC creator
随着电子技术的发展,电子测量技术对测量精度和功能的要求也越来越高,而数字电压表作为实验室的基本测量设备,可以很好地满足测量的精度和功能。数字电压表DVM(Digital Voltmeter)采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表[1]。在设计的过程中,通常要用到A/D转换芯片,一般在A/D转换芯片的模拟输入端输入模拟信号(电压),然后通过微型机的I/O端口读取A/D转换芯片数字量输出端的数字信号,接着通过线性化处理得到相应的模拟量并显示出来。在这个过程中,为了验证转换的准确性,会使用电压表测量转化的输入电压与转化后的显示电压进行比较。在这个过程中,会遇到两个问题:(1)一般的电压表精度不够;(2)不能看到此时的数字量。本设计采用PSoC3很好地解决了这个问题,PSoC3中集成的A/D转换模块转换精度最大可以达到16位,基本可以满足所有的精度要求;通过模块化的调用,还可以读取相应的数字量,并且使用LCD显示模块实时显示出来。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求。数字电压表的设计和开发已有很多类型和款式,采用PSoC设计的数字电压表,具有精度高、抗干扰能力强,可扩展性强、集成方便等优点。
1 系统总体设计
图1为基于PSoC的数字电压表设计的原理方框图。其工作原理:利用模拟总线将外部的电压信号传送到A/D转换模块,将得到的数字信号传送给LCD驱动模块,然后通过数字总线将要显示的内容传送给外部的LCD液晶显示屏。在本设计中采用Cy83c3866AXI-040作为控制芯片,此处理器为PSoC3可编程混合信号处理器。此处理器以8051作为内核,包含了非易失性存储子系统、编程和调试子系统、输入和输出、时钟资源、电源、数字子系统及模拟子系统。在本设计中主要使用芯片上集成的8051处理器、ADC模块及LCD驱动模块来实现数字电压表的设计。
Cypress半导体公司推出的可编程片上系统PSoC(Programmable System on Chip),集微控制器、可编程数字阵列和可编程模拟阵列为一体,实现“在系统可编程”,既满足了一般电子系统的资源要求,又顺应了现代电子设计方法的发展方向,非常适合用于模数混和的嵌入式系统设计[2-3]。新一代产品PSoC3分别包含8位8051微处理器、32位ARMCortex-M3微处理器。
2 软件设计
2.1 开发环境PSoC Creator简介
PSoC Creator是一个功能齐全的图形化软硬件设计及编程环境,带有创新性的图形设计界面,可以对PSoC3芯片进行硬件设计、软件设计及调试、工程的编译和下载。
图形化的设计入口简化了配置一个特殊元件的任务。设计者可以从元件库内选择所需要的功能,并将其放置在设计中。所有的参数化元件都有一个编辑器对话框,允许设计者根据需要对功能进行裁减。
PSoC Creator软件平台自动配置时钟和布线I/O到所选择的引脚,并且为给定的应用程序接口函数API对硬件进行控制。在开发的任意阶段,能自由地修改硬件配置,甚至是目标处理器,也可修改C编译器和进行性能评估。
PSoC Creator软件平台的特点主要有:集成了原理图捕获功能用于设备配置;提供了丰富的元件IP核资源;集成了源代码编辑器;内置调试器;支持自定义元件创建(设计重用)功能;PSoC 3编译器——Keil CA51(无代码大小限制);PSoC 5编译器——CodeSourcery TM的Sourcery TM Lite版[4]。
图2为在PSoC Creator下实现的数字电压表程序功能图。在本设计中包含INPUT、ADC_Delsig及CharacterLCD三个模块,INPUT用来将外部电压信号输入到ADC_Delsig,ADC_Delsig将范围为(0~Vdda)V的电压转换成12位的二进制数字量,通过线性化处理可以得到相应的电压值,并通过CharacterLCD驱动模块连接外部的LCD显示屏,将数字量和模拟量都显示出来。
图3为INPUT参数配置图。在这个对话框中,设置Type为“Analog”,因为在这个设计中,要求从外部输入模拟电压信号,所以采用模拟输入模式。
2.3 程序流程图设计
图7为数字电压表总体程序流程图设计。在PSoC Creator开发环境支持下,编译器自动生成了固件元件的C语言源代码。但是,中断子程序和main子程序仅提供了程序框架,子程序内容需要开发者根据固件元件原理图所要完成的任务来编写。在工作空间浏览区找到元件的源程序,打开后在编辑区找到中断子程序框架,在里面嵌入应用的源代码即可。在main主函数中需要对使用的元件进行初始化和启动(有的元件不需要),根据应用程序流程调用元件的子程序和函数。数字电压表的程序见下所示:
#include<device.h>
#include"stdio.h"
#include"math.h"
void main()
{ uint32 result;
uint32 value;
char displayStr[15]={′0′};ADC_DelSig_1_Start();
ADC_DelSig_1_StartConvert();
LCD_Char_1_Start();
LCD_Char_1_Position(0u,0u);
LCD_Char_1_PrintString("ADC Output:");
LCD_Char_1_Position(1u,0u);
LCD_Char_1_PrintString("voltage:");
for(;;)
{ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);result=ADC_DelSig_1_GetResult16();
value=result*3300/4096.0;
if((value<0)||(value>3400))value=0;
LCD_Char_1_Position(0,strlen("ADC Output:"));
LCD_Char_1_PrintInt16(ADC_DelSig_1_GetResult16());
sprintf(displayStr,"%7ldmV",value);
LCD_Char_1_Position(1,7);
LCD_Char_1_PrintString(displayStr); }
}
利用PSoC强大的图形化集成开发环境Creator提供的固件元件实现数字电压表的设计,通过简单的软件设计实现硬件电路是一种值得重视和推广的嵌入式系统开发方法。
参考文献
[1] 徐毅,赵龙,王海峰.基于单片机的新型数字电压表设计[J].河南科技,2010(11):44-45.
[2] 叶朝辉,华成英.可编程片上系统(PSoC)原理及实训[M].北京:清华大学出版社,2008.
[3] 王莹,李健.PSoC3和PSoC5:可编程嵌入式SoC的新时代[J].电子产品世界,2009(10):7-9.
[4] Cypress发布PSoC Creator 集成开发环境.http://www.mcuol.com/News/214/33438.htm[OL].