本文实现了多功能波形发生器的设计。系统采用ATC51单片机控制,DAC0832完成模数转换,键盘控制波形的频率、幅度。发生器产生三角波、方波、正弦波等波形,波形的频率可通过键盘控制,波形清晰、频率调整十分方便、稳定性好,产生合成波形只需修改源程序,不需改装电路。单片机的输出数字信号通过DAC0832转换成模拟信号,接入示波器就可以清晰的显示出系统产生的波形。该系统由仿真软件产生波形,具有线路简单、结构紧凑、价格低廉、性能优越等特点。
关键词 : 波形发生器,ATS52单片机,D/ A转
1波形发生器简介
1.1波形发生器的概述
信号源有很多种,包括正弦波信号源、函数发生器、脉冲发生器、扫描发生器、任意波形发生器、合成信号源等。一般来讲任意波形发生器是一种特殊的信号源,综合具有其它信号源生成能力,因而适合各种仿真实验的需要。
在基础实验中设计一种电路,需要验证其性能、可靠性与稳定性,就需要给它施加理想的波形以辨别真伪。如可使用信号源的DC补偿功能对固态电路控制DC偏压电平,可对一个怀疑有故障的数字电路,利用信号源的方波输出作为数字电路的时钟,同时使用方波加DC补偿产生有效的逻辑电平模式输出,观察该电路的运行状况,而证实故障缺陷的地方,总之,利用任意波形发生器这方面的基础功能能仿真基础实验室所必须的信号[1]。在实际的电子环境所设计的电路在运行中,由于各种干扰和响应的存在,实际电路往往存在各种信号缺陷和瞬变信号,例如过脉冲、尖峰、阻尼瞬变等(见图1.1,图1.2),这些情况的发生,如在设计之初没有考虑进去,有的将会产生灾难性的后果。例如图1.1中a处过剑峰脉冲,如果给一个抗过冲能力差的电路,将可能会导致整个设备“烧坏”。
图1.1 尖峰干扰脉冲 图1.2 阻尼瞬变
由于任意波形发生器特殊的功能,为了增强任意波形生成能力,它往往依赖计算机通讯输出波形数据。在计算机传输中,通过波形编辑软件生成波形,有利于扩充仪器的能力,更进一步仿真模拟实验。同时由于编辑一个任意波形有时需要花费很长的时间和精力,并且每次编辑的波形可能有所差异,一般会在任意波形发生器内配置一定数量的非易失性存储器。可以把所需要的波形从计算机接口下载到任意波形发生器的存储器中。
综上所述,不论是在生产还是在科研与教学上,任意波形发生器是电子工程师信号仿真实验的最佳工具。随着我国经济和科技的发展,对相应的测试仪器和测试手段也提出了更高的要求,而任意波形发生器己成为测试仪器中至关主要的一类,因此开发任意波形发生器具有重大意义。
1.2研制波形发生器的目的及意义
任意波形发生器是信号源的一种,它是具有信号源所具有的特点,更因它高的性能优势而倍受人们青睐。信号源主要给被测电路提供所需要的己知信号(各种波形),然后用其它仪表测量感兴趣的参数。可见信号源在各种实验应用和试验测试处理中,它不是测量仪器,而是根据使用者的要求,作为激励源,仿真各种测试信号,提供给被测电路,以满足测量或各种实际需要。
目前我国己经开始研制任意波形发生器,并取得了可喜的成果。但总的来说,我国任意波形发生器还没有形成真正的产业。就目前国内的成熟产品来看,多为一些PC仪器插口,的仪器和VX工系统的模块很少,并且我国目前在任意波形发生器的种类和性能都与国外同类产品存在较大的差距,因此加紧对这类产品的研制显得迫在眉睫。
见于这种情况下,本文实现了多功能波形发生器的设计。系统采用ATC51单片机,DAC0832完成模数转换,键盘控制波形的频率、幅度。系统产生三角波、方波、正弦波等波形,波形的频率可通过键盘控制,波形清晰、频率调整十分方便、稳定性好,产生较复杂的波形只需修改源程序,不需改装电路。将单片机的输出数字信号通过DAC0832转换成模拟信号,接入示波器就可以清晰的显示出系统产生的波形。本系统具有线路简单、结构紧凑、价格低廉、性能优越等特点。
2 Proteus的简介
2.1 Proteus界面
进入Proteus ISIS双击桌面上的ISIS 6 Professional图标或者单击屏幕左下方的“开始”→“程序”→“Proteus 6 Professional” →“ISIS 6 Professional”。
Proteus ISIS的工作界面是一种标准的Windows界面,如图2.1所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。
图2.1 Proteus 工作界面
2.2基本操作
图形编辑的基本操作包括:
1对象放置
2.选中对象
3.删除对象
4.拖动对象
5.拖动对象标签
6.调整对象大小
7.调整对象的朝向
8.拷贝所有选中的对象
9.移动所有选中的对象
10.删除所有选中的对象
2.3原理图的绘制
原理图绘制可按照如下步骤进行
1.画导线
2 .画总线
3.画总线分支线
4. 放置总线将各总线分支连接起来
5. 跳线
6. 放置线路节点
3 单片机ATC51概述
开发环境连接了ATC51。本文讨论了这种测试环境的设计和原理,它的和各种硬件、软件环境部件的交互性,以及如何使用ATC51。
ATC51单片机的功能参数
·8031 CPU与MCS-51 兼容
· 4K字节可编程FLASH存储器
· 全静态工作:0Hz-24KHz
· 三级程序存储器保密锁定
· 128*8位内部RAM
· 32条可编程I/O线
· 两个16位定时器/计数器
· 6个中断源
· 可编程串行通道
· 低功耗的闲置和掉电模式
· 片内振荡器和时钟电路
单片机引脚图说明如图3.1。
图3.1 ATC51引脚图
Vcc:电源电压;
GND:地;
P0 口:P0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用。作为输出口用时,每位能吸收电流的方式驱动8 个TTL 逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻;
P1 口:P1 是一个带内部上拉电阻的8 位双向I/O 口,P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作为输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash 编程和程序校验期间,P1 接受低8 位地址;
P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作为输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位四肢的外部数据存储器(例如执行MOVX @DPTR指令)时,P2 口送出高8 位地址数据;
P3 口:P3 是一个带有内部上拉电阻的8 位双向I/O 口,P3 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作为输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL);
RST:复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将使单片机复位;
ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的1/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是,每当访问外部数据存储器时将跳过一个ALE 脉冲。对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG);
PSEN:程序存储允许输出是外部程序存储器的读选通型号,当C51 由外部存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的PSEN 信号不出现;
EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000H—FFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA 端状态。如EA 端为高电平(接Vcc 端),CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12v 的编程允许电源Vpp,当然这必须是该器件使用12v 编程电压Vpp
XTAL1:振荡器反相放大器及内部时钟发生器的输入端;
XTAL2:振荡器反相放大器的输出端。C51 中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1 和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图5。外接石英晶体或陶瓷谐振器及电容C1、C2 接在放大器的反馈回路中构成并联振荡电路。对电容C1、C2 虽没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性,如果使用石英晶体,我们推荐电容使用30Pf±10 Pf,而如使用陶瓷谐振器建议选择40Pf±10Pf。用户也可以采用外部时钟。这种情况下,外部时钟脉冲接到XTAL1 端,即内部时钟发生器的输入端XTAL2 则悬空。
4总体设计
波形的产生是通过ATC51 执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。在ATC51的P1口接3个按扭,通过软件编程来选择各种波形和频率。此方案的有点是电路原理比较简单,实现起来比较容易。缺点是,采样频率由单片机内部产生故使整个系统的频率降低。
4.1 单片机电路
ATC51外接12M晶振作为时钟频率。并采用电源复位设计。复位电路采用上电复位,它的工作原理是,通电时,电容两端相当于短路,于是RST引脚上为高电平,然后电源通过对电容充电。RST端电压慢慢下降,降到一定程序,即为低电平,单片机开始工作。
ATC51的P0口做为D/A转换芯片0832的接口。用定时/计数器作为中断源。不同的频率值对应不同的定时初值,允许定时器溢出中断。定时器中断的特殊功能寄存器设置如下:
定时控制寄存器TCON=20H;
工作方式选择寄存器TMOD=01H;
中断允许控制寄存器IE=82H。
ATC51单片机原理接口如图3.2。
图3.2 单片机电路图
4.2 D/A电路及接口
功能:将波形样值的编码转换成模拟值,完成双极性的波形输出。DAC0832是一个具有两个输入数据寄存器的8位DAC。目前生产的DAC芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。另一类芯片内部没有数据寄存器,输出信号随数据输入线的状态变化而变化,因此不能直接与微型计算机接口,必须通过并行接口与微型计算机接口。DAC0832是具有20条引线的双列直插式CMOS器件,它内部具有两级数据寄存器,完成8位电流D/A转换,故不需要外加电路。
单片机向0832发送数字编码,产生不同的输出。先利用采样定理对各波形进行抽样,然后把各采样值进行编码,的到的数字量存入各个波形表,执行程序时通过查表方法依次取出,经过D/A转换后输出就可以得到波形。假如N个点构成波形的一个周期,则0832输出N个样值点后,样值点形成运动轨迹,即一个周期。重复输出N个点,成为第二个周期。利用单片机的晶振控制输出周期的速度,也就是控制了输出的波形的频率。这样就控制了输出的波形及其幅值和频率。
D/A转换电路原理如图3.3。
图3.3 D/A电路图
4.3 系统软件设计
软件系统由按键、单片机、D/A转换、放大电路等模块组成。波形的产生是通过ATC51 执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形,再通过放大器放大即可得到相应的波形。
程序流程框图如图3.4和图3.5。
图3.4 主程序流程图 图3.5定时器中断服务程序
系统主程序
#include //unsigned char TIME0_H=0xec,TIME0_L=0x78; //定时器0的初值设置;全局变量 #include #include<0832.h> void main() { TMOD=0X01; TH0=0xff; TL0=0xd9; IT0=1; //设置中断触发方式,下降沿 EA=1; EX0=1; ET0=1; IP=0X01; //键盘中断级别高 TR0=1; while(1) { // square(); ; } } #ifndef __0832_h__ #define __0832_h__ unsigned char i,sqar_num=128; //最大值100,默认值50 unsigned char cho=0; //0:正弦波。1:方波。2:三角波 unsigned char num=0; unsigned char TIME0_H=0xff,TIME0_L=0xd9; //定时器0的初值设置;全局变量.对应正弦波(50HZ) sbit chg= P1^0; //三角波100Hz. sbit freq_u=P1^1; sbit freq_d=P1^2; sbit cs =P3^7; bit flag=0; unsigned int FREQ=50;//初始化频率,50HZ //调节部分——频率 void freq_ud(void) { unsigned int temp; if(freq_d==0) { FREQ=FREQ-5; if(FREQ==0) FREQ=100; } else if(freq_u==0) { FREQ=FREQ+5; if(FREQ>=100) FREQ=5; } if(cho==1) { temp=0xffff-3906/FREQ; //方波默认为100hz,切换后频率也为50HZ 65336-10^6/(256*FREQ) TIME0_H=temp/256; TIME0_L=temp%256; } else if(cho==0|cho==2){ //正弦波 三角波默认周期50hz 65536-10^6//(512*FREQ) temp=0xffff-1953/FREQ; TIME0_H=temp/256; TIME0_L=temp%256; } } //波形发生函数 void sint(void) { if(!flag) { cs=0;P2=sin_num[num++];cs=1; if(num==0){num=255;flag=1;} } else if(flag) { cs=0;P2=sin_num[num--];cs=1; if(num==255){num=0;flag=0;} } } void square(void) { if(i++ } void stw(void) { if(~flag) { cs=0;P2=num++;cs=1; if(num==0){num=255;flag=1;} } else if(flag) { cs=0;P2=num--;cs=1; if(num==255){num=1;flag=0;} } } //按键中断处理程序。 void it0() interrupt 0 { if(chg==0) { if(++cho==3) {cho=0;num=0;}} //num=0;所有数据从新开始,保证波形的完整性 else if(freq_u==0|freq_d==0) {freq_ud();} else ; } //定时器中断处理程序。 void intt0() interrupt 1 { switch(cho) { case 0:{TH0=TIME0_H;TL0=TIME0_L;sint();break;} //正弦波 case 1:{TH0=TIME0_H;TL0=TIME0_L;square() ;break;} //方波 case 2:{TH0=TIME0_H;TL0=TIME0_L;stw();break;} //三角波 default: ; } } #endif //正弦表;每半个周期256个取值,最大限度保证波形不失真。 //各个值通过MATLAB算出,并四设五如取整。具体程序如下 #ifndef __sinx_h__ #define __sinx_h__ unsigned char code sin_num[]={ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 22, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 54, 55, 56, 57, 59, 60, 61, 63, , 66, 67, 68, 70, 71, 73, 74, 75, 77, 78, 80, 81, 83, 84, 86, 87, , 90, 92, 93, 95, 96, 98, 99, 101,102, 104, 106, 107, 109, 110, 112, 113, 115, 116, 118, 120, 121, 123, 124, 126, 128, 129, 131, 132, 134, 135, 137, 139, 140, 142, 143, 145, 146, 148, 149, 151, 153, 154, 156, 157, 159, 160, 162, 163, 165, 166, 168, 169,171,172,174,175,177,178,180,181,182,184,185,187,188,1,191,192,194,195,196,198,199,200,201,203,204,205,206,208,209,210,211,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,230,231,232,233,234,235,236,237,237,238,239,240,240,241,242,243,243,244,245,245,246,246247,247,248,248,249,249,250,250,251,251,251,252,252,253,253,253,253,254,254,254,254,254,255,255,255255,255,255,255,255,255 }; #endif 5 系统模拟调试 选中单片机ATC51,左键点击ATC51,在出现的对话框里点击Program File按钮,找到刚才编译得到的HEX文件,然后点击“OK”按钮就可以模拟了。点击模拟调试按钮的运行按钮 ,进人调试状态。点击按键“切换波形”,在示波器上可以显示正弦波、方波和三角波;点击按键“频率升高”会看到波形的频率变大;点击按键“频率降低”波形的频率也相应减小。在观察波形过程之中可能会发现波形失真,这时可以调节示波器的幅度、频率、通道等功能,使波形清晰效果最好。 5.1仿真结果 正弦波 图5.1 正弦波 方波 图5.2 方波 三角波 图5.3 三角波 周期变换后的波形 图5.4 周期变换后的正弦波 图5.5 周期变换后的方波 图5.6周期变换后的方波 5.2结果分析 经过长时间的研究,终于完成了预定的设计任务。完成了仿真的测试,输出波形稳定。可输出步进为10Hz,频率范围1KHz~10MHz的正弦波、三角波、方波。本设计成果及收获如下: 具有产生正弦波、方波、三角波三种周期性波形的功能。 输出波形的频率范围为100HZ~1KHZ,频率可调,频率步进间隔为100HZ。 完成了波形发生器单片机控制系统的软件设计。 掌握了电子系统设计的流程,熟悉了各种硬件电路以及软件编程方法。 掌握了仿真软件 由于本设计还涉及到功放以及软件编程等众多知识领域及本人在相关领域知识的缺乏,所以,出现幅值不稳定,输出波形失真。使用运算放大器将频率放大到需要的幅值并稳定,后续工作就是进一步采取稳幅措施,使波形稳定可靠,失真小。调节示波器就可以改变信号频率,调节电位器可改变信号幅值。 心得体会 通过这次设计,自己在很多方面都有很大的收获,使我学会了怎么把各科知识综合应用,养成了对问题细致思考的习惯,同时对所学的知识也有了更深一步的巩固和升华。在系统的设计过程中体会到知识要学以致用的深刻道理,也加深了对单片机和一些基本电路知识的了解。在这次设计过程中,由于先前对知识的掌握程度不够全面,遇到了诸多的问题和疑点,不过在导师和同学的帮助下,通过自己的努力成功解决了问题。 在此特别感谢导师的细心指导和帮助,在设计过程中为我提供了有力的指导和帮助。他对本设计的思路和许多地方给予了我深入的指导,使得设计和论文得以顺利完成。同时也感谢我的同学在这次设计中给予我的建议和帮助,在论文撰写过程中,提供了许多宝贵的思路和建议及相关文献资料。 真诚向各位老师致敬,非常感谢各位老师四年以来对我的精心培养和帮助,让我在学校不仅学到文化知识也让我深刻理解学习的重要性。 再次对所有支持和帮助过我的老师和同学们表示诚挚的谢意! 参考文献 [1] 华中科技大学电子技术课程组编,康华光主编,陈大钦,副主编. 电子技术基础模拟部分. 第5版. 北京:高等教育出版社.,2006 [2] 清华大学电子学教研组编,阎石主编. 数字电子技术基础. 第4版. 北京:高等教育出版社,1998 [3] 王松武,赵旦峰,于蕾,王扬编,鸣主审. 常用电路模块分析与设计指导. 北京:清华大学出版社,2007 [4] 傅恩锡主编,杨四秧副编. 电路分析简明教程. 北京:高等教育出版社,2004 [5] 王宝祥主编. 信号与系统. 哈尔滨工业大学出版社,2000 [6] 林志琦,蒋惠萍编著. 信号发生电路原理与实用设计. 北京:人民邮电出版社, 2010 [7] 周润景,郝晓霞编著. Multisim & LabVIEW虚拟仪器设计技术. 北京: 北京航空航天大学出版社, 2008下载本文