沈铁军++郑燕青
[摘 要]本文主要介绍的是基于AD7545的波形发生器的上层软件的策划,开发,构思以及程序的设计,调试等工作。本软件是通过用户输入所需要的波形的振幅周期、振幅、偏移量,以及波形类型和与该波形相关等数据进行处理,实现波形在计算机屏幕上的显示,并且在对波形进行数据采集后,通过RS-232-C向下层单片机/测试设备进行发送。
[关键词]AD7545,波形发生器,数据采集,RS-232-C
中图分类号:TM935 文献标识码:A 文章编号:1009-914X(2016)09-0002-01
1 引言
随着电子技术的发展,在通信、测量、仪器仪表和控制等领域的信号处理系统中,经常要使用到正弦波以及其他波形发生器。但在很多地方,如测试测量领域,需要输出的波形能够精确地定位在某一整数值上,通常由于ADC参考电平的限制,使之很难达到所需的精度,给系统的调试及软件设计带来诸多不便。为此就要求设计出一种精度较高的波形发生器来满足工作发展的需求。
2 程序的设计和构思
2.1设计的总体思路
基于Windosw9X/NT/2000/XP 平台用VC 编写可视化人机交互界面的软件,完成的功能包括:(1)允许用户编辑、绘制所需波形;(2)设置输出信号的幅度、频率;(3)通过RS232 口将数据送给单片机/测试设备。
2.2程序流程图
3 源程序的设计
3.1 GDI坐标系的映射
在绘图时需要一个参照坐标,以便确定图形的位置或文本的绘制位置。Windows的坐标系分为逻辑坐标和设备坐标两种,GDI支持这两种坐标系。一般而言,GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠标所得到的鼠标位置设备坐标。逻辑坐标系是面向环境的坐标系,这种坐标不考虑具体的设备类型,而在实验绘图是,Windows会根据当前映射模式将逻辑坐标系转换为设备坐标。
逻辑坐标映射关系:设备(视口)坐标=逻辑坐标-窗口原点坐标+视口原点坐标
3.2图形设备的初始化
CRect rectClient;
GetClientRect(rectClient); //得到客户区
pDC->SetMapMode(MM_ANISOTROPIC);//映射模式设顶为MM_ANISOTROPIC
pDC->SetWindowExt(1000,1000);//定义逻辑窗口
pDC->SetViewportExt(rectClient.right,-rectClient.bottom);
//定义输出视口
pDC->SetViewportOrg(rectClient.left,rectClient.bottom/2);
//设置视口原点
3.3坐标系的绘制
pDC->MoveTo(0,0);
pDC->LineTo(1000,0);//X轴坐标
pDC->MoveTo(500,500);
pDC->LineTo(500,-500);//Y轴坐标
3.4波的绘制(以正弦波为例)
正弦波的绘制是比较简单的,因为C++的MATH库函数.中已经有了SIN这个函数的定义所以相对方波和三角波要简单的多。要做的只需将振幅,周期以及偏移量三个数值加入就好。然后再逐段画出波形就好。
Xpoint=0; //X轴的初始化
Ypoint=0; //Y轴的初始化
Xpoint1=0;
Ypoint1=0;
while(jishuqi<=1000)
{
jishuqi++;
Xpoint=(int)jishuqi; //当前X轴的计算
Ypoint=(int)(sin(jishuqi/pinlv)*zhenfu); //当前Y轴的计算
pDC->MoveTo(Xpoint1,Ypoint1+(int)piancha);
pDC->LineTo(Xpoint,Ypoint+(int)piancha); //画出当前线段
Xpoint1=Xpoint;
Ypoint1=Ypoint;
由于篇幅原因,至于三角波、方波等不这一一的介绍。
3.5数据的传输
使用MSComm控件属性:(1).CommPort:设置或传回通信连接端口代号;(2)Settings:设置初始化参数。以字符串的形式设置或传回连接速度、奇偶校验、数据位、停止位等4个参数;(3)PortOpen:设置或传回通信连接端口的状态?;(4)Input:从输入寄存器传回并移除字符;(5)Output:将一个字符串写入输出寄存器;(6)InputLen:指定由串行端口读入的字符串长度;?(7)InBufferCount:传回在接收寄存器中的字符数。具体设置如下所示。
m_Com.SetCommPort(1);//设置端口号
m_Com.SetInBufferSize(1024);//设置输入缓存大小
m_Com.SetOutBufferSize(512);//设置输出缓存大小
if(!m_Com.GetPortOpen())//打开端口
m_Com.SetPortOpen(true);
m_Com.SetInputMode(1);//设置端口模式
m_Com.SetSettings("2400,n,8,1");//设置SETTING控制字
m_Com.SetRThreshold(1);//设置事件响应
CByteArray array;
array.RemoveAll();
Count=103;
array.SetSize(Count);
for(i=0;i m_Com.SetOutput(COleVariant(array));//发送数据 4 结束语 此系统在实际的应用中,尤其在PWM方面效果较为显著,在交流伺服电机/步进电机控制中、D/A转换测试应用中使用方便,整个控制系统灵活方便,具有很大的实用性。 参考文献 [1] 王育坚 《Visual C++ 面向对象编程教程》 清华大学出版社 [2] 李现勇 《Visual C++ 串口通信技术与工程实践》 第二版 人民邮电出版 [3] 《Visual C++网络教程》 Visual C++王朝网络 [4] 苏彦华《Visual C++数字图象识别技术典型案例》 人民邮电出版社 2004