- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一款低频任意波形发生器的设计与实现
摘要:本文介绍的波形发生器是基于PC机与单片机共同实现的,用户用鼠标拖动绘制任意波形,就可以实现输出端相应波形的输出。
关键词:波形发生器;任意波形
中图分类号:TP271文献标识码:A文章编号:1009-3044(2008)05-10ppp-0c
1 引言
各种电子系统都离不开波形发生器,但常见的波形发生器一般是输出固定的几种波形如方波、锯齿波、函数波等,对于一些不规则的波形就不能发生。
生产实践和实验模拟中,对不规则波的需求是很多的。如为了测试汽车的参数,需要模拟道路不规则的(或无序的)起伏、摩擦系数等情况,这就要求信号发生器能产生任意的波形。本文介绍的任意波形生器就是由PC机和单片机共同构成一个发生系统,通过鼠标给出任意波形,再将波形在输出端输出的一种信号发生器。
2 系统简介
图1是该系统原理图,我们用PC机做为人机交互的设备,将波形的设置做到计算机的桌面上,用户只要有桌面上用鼠标做出波形,就可以在呼出端输出。
图1 系统原理图
8951单片机是波形输出的另一个核心,它要将PC机传送来的关键参数进行产生,并通过D/A转换来进行输出。
本系统实现的最初思路是将波形的产生参数推迟到了波形产生的时候,在用户做出波形的同时,系统也获得了波形的关键参数,针对该波形来进行合成。
3 系统结构
系统分为PC 机和单片机系统两部分。从系统图上可见,本系统的硬件部分比较简单,在其它系统中常见。因此,我们选用0832做转换器 , 用62256做存储器,实现双极性电压输出,在后面由跟随器改善带负载能力,再作MAX232 实现电平转换。
本系统的关键部分是软件,特别是通讯部分。现分别介绍如下:
3.1 PC 机部分
作为面向对象的程序设计语言,VB具有事件驱动编程模式并可以使用添加的控件,能够十分方便地作出良好的人机界面。所以我们在PC 机采用VB 编程,用VB 作出直观的人机界面,使用户可以在图片框中方便地绘制波形。
在通信模块设计上,MSComm 控件的直接引用使通讯设计变得更加便捷。该控件是一个标准的十位串行通信接口,可通过设置串行通信的串口状态及串口通信格式和协议,提供事件驱动和查询两种处理方法。事件驱动法是当串口处于以下三种状态:A接收到数据、B发送完数据、C当状态发生改变时,MSComm控件将触发OnComm事件,应用程序可通过检查Com2 mEvent 属性的值来获知所发生的事件情况,从而进入子程序进行相应的处理。查询法则是在每个重要的程序后进行查询MSComm控件的属性值来检测事件和通讯错误。
本设计采用的是查询法。我们进行如下设置:通信模块内设置了MSComm控件的Inputmode 属性为1 ,则收发的是二进制数据,如为0.则收发字符。需要强调的是,由于用鼠标绘图形的随意性很强,我们需要编程来均匀插点值,以使曲线平滑。同时,为了保证数据通信的正确,我们采用了应答和累加和的两种检验方法。
本设计选用“00H、FFH、00H、FFH”作握手信号。PC 机与89C51 之间的通信程序用VB 编写,程序段如下:
Private Sub Command1 Click()
.′定义数组变量
Command1. Enabled = False
MSComm1. CommPort = 1 ′设置端口号
MSComm1. Settings =“9600 ,n ,8 ,1” ′设置波特率等通讯协议
MSComm1. InputLen = 1′一次读一个字节
MSComm1. PortOpen = True ′打开串口
MSComm1. InputMode = 1′接收二进制数
outbuf (0) = 0
outbuf (1) = 255
outbuf (2) = 0
outbuf (3) = 255
MSComm1. Output = outbuf ′发握手信号
Do
DoEvents
Loop Until MSComm1. InBufferCount = 1
inbyte =MSComm1. Input
If inbyte (0)〈〉5 Then′MCU 准备好吗?
MsgBox″通讯错误05 ,重发!″,vbExclamation
Exit Sub
End If
.
sum= 0
ReDim bytebuf (0 To n)
For i = 0 To n
bytebuf
文档评论(0)