信号发生器设计_第1页
信号发生器设计_第2页
信号发生器设计_第3页
信号发生器设计_第4页
信号发生器设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。本次课程设计使用的 AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑等优点。在本设计的基础上,加上按钮控制和 LED 显示器,则可通过按钮设定所需要的波形频率,并在 LED 上显示频率、幅值电压,波形可用示波器显示。 二、系统设计 波形发生器原理方框图如下所示。波形的产生是通过 AT89S51 执行某一波形发生程序,向D/A 转换器的输入端按一定的规律发生数据,从而在 D/A 转换电路的输出端得到相应的电压波形。在 AT89S51 的 P2 口接 5 个按扭 ,通过软件编程来选择各种波形、幅值电压和频率,另有 3 个 P2 口管脚接 TEC6122 芯片,以驱动数码管显示电压幅值和频率,每种波形对应一个按钮。此方案的有点是电路原理比较简单,实现起来比较容易。缺点是,采样频率由单片机内部产生故使整个系统的频率降低。 1、波形发生器技术指标 1)波形:方波、正弦波、锯齿波; 2)幅值电压: 1V、 2V、 3V、 4V、 5V; 3)频率: 10HZ、 20HZ、 50HZ、 100HZ、 200HZ、 500HZ、 1KHZ; 2、操作设计 1)上电后,系统初始化,数码显示 6 个 ,等待输入设置命令。 2)按钮分别控制 “幅值 ”、 “频率 ”、 “方波 ”、 “正弦波 ”、 “锯齿波 ”。 3) “幅值 “键初始值是 1V,随后再次按下依次增长 1V,到达 5V 后在按就回到 1V。 4) “频率 “键初始值是 10HZ,随后在按下依次为 20HZ、 50HZ、 100HZ、 200HZ、 500HZ、1000HZ 循环。 三、硬件设计 本系统由单片机、显示接口电路,波形转换( D/A)电路和电源等四部分构成。电路图 2 附在后 1、单片机电路 功能:形成扫描码,键值识别、键处理、参数设置;形成显示段码;产生定时中断;形成波形的数字编码,并输出到 D/A 接口电路和显示驱动电路。 AT89S51 外接 12M 晶振作为时钟频率。并采用电源复位设计。复位电路采用上电复位,它的工作原理是,通电时,电容两端相当于短路,于是 RST 引脚上为高电平,然后电源通过对电容充电。 RST 端电压慢慢下降,降到一定程序,即为低电平,单片机开始工作。 AT89S51 的 P2 口作为功能按钮和 TEC6122 的接口。 P1 口做为 D/A 转换芯片 0832 的接口。用定时 /计数器作为中断源。不同的频率值对应不同的定时初值,允许定时器溢出中断。定时器中断的特殊功能寄存器设置如下: 定时控制寄存器 TCON 20H; 工作方式选择寄存器 TMOD=01H; 中断允许控制寄存器 IE=82H。 2、显示电路 功能:驱动 6 位数码管显示,扫描按钮。 由集成驱动芯片 TEC6122、 6 位共阴极数码管和 5 个按钮组成。当某一按钮按下时,扫描程序扫描到之后,通过 P2 口将数字信号发送到 TEC6122 芯片。 TEC6122 是一款数字集成 芯片。它的外接电压也是 +5V,并且由于数码管的载压较小,为了保护数码管,必须在两者间接电阻,大约是 560 欧。 扫描利用软件程序实现,当某一按键按下时,扫描程序立即检测到,随后调用子程序,执行相应的功能。 3、 D/A 电路 功能:将波形样值的编码转换成模拟值,完成双极性的波形输出。 由一片 0832 和两块 LM358 运放组成。 DAC0832 是一个具有两个输入数据寄存器的 8 位DAC。目前生产的 DAC 芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。另一类芯片内部没有 数据寄存器,输出信号随数据输入线的状态变化而变化,因此不能直接与微型计算机接口,必须通过并行接口与微型计算机接口。DAC0832 是具有 20 条引线的双列直插式 CMOS 器件,它内部具有两级数据寄存器,完成8 位电流 D/A 转换,故不需要外加电路。 0832 是电流输出型,示波器上显示波形,通常需要电压信号,电流信号到电压信号的转换可以由运算放大器 LM358 实现,用两片 LM358可以实现双极性输出。 单片机向 0832 发送数字编码,产生不同的输出。先利用采样定理对各波形进行抽样,然后把各采样值进行编码,的到的数字量存入 各个波形表,执行程序时通过查表方法依次取出,经过 D/A 转换后输出就可以得到波形。假如 N 个点构成波形的一个周期,则 0832 输出 N个样值点后,样值点形成运动轨迹,即一个周期。重复输出 N 个点,成为第二个周期。利用单片机的晶振控制输出周期的速度,也就是控制了输出的波形的频率。这样就控制了输出的波形及其幅值和频率。 四、 软件设计 主程序和子程序都存放在 AT89S51 单片机中。 主程序的功能是:开机以后负责查键,即做键盘扫描及显示工作,然后根据用户所按的键转到相应的子程序进行处理,主程序框图如图 1 所示。 子程序的功能有:幅值输入处理、频率输入处理、正弦波输出、锯齿波输出、方波输出、显示等。 下面是程序 include #define uchar unsigned char #define uint unsigned int sbit LCP=P22; sbit SCP=P21; sbit SI=P20; sbit S1=P23; sbit S2=P24; sbit S3=P25; sbit S4=P26; sbit S5=P27; sbit DA0832=P33; sbit DA0832_ON=P32; uchar fun=0,b=0,c=0,d=0,tl,th; uchar code tab10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; uchar code tosin256=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5 ,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5 ,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd ,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda ,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51 ,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 ; void display(unsigned char command) unsigned char i; LCP=0; for(i=8;i0;i-) SCP=0; if(command & 0x80)=0) SI=0; else SI=1; command=1; SCP=1; LCP=1; void key1(void) fun+; if(fun=4) fun=0x00; void key2(void) tl+; if(tl=0x1f) th+; void key3(void) tl-; if(tl=0x00) th-; void key4(void) double t; int f; TR0=0; t=(65535-th*256-tl)*0.4; f=(int)(1000/t); S3=tabf%10; f=f/10; S2=tabf%10; f=f/10; if(f=0) S1=0; else S1=tabf; TR0=1; void key5(void) tl-; if(tl=0x00) th+; void judge(void) uchar line,row,de1,de2,keym; P1=0x0f; keym=P1; if(keym=0x0f)return; for(de1=0;de1200;de1+) for(de2=0;de2125;de2+); P1=0x0f; keym=P1; if(keym=0x0f)return; P1=0x0f; line=P1; P1=0xf0; row=P1; line=line+row; /*存放特征键值 */ if(line=0xde)key1(); if(line=0x7e)key2(); if(line=0xbd)key3(); if(line=0x7d)key4(); void time0_int(void) interrupt 1 /中断服务程序 TR0=0; if(fun=1) DA0832=tosinb; /正弦波 b+; else if(fun=2) /锯齿波 if(c128) DA0832=c; else DA0832=255-c; c+; else if(fun=3) / 方波 d+; if(d=128) DA0832=0x00; else DA0832=0xff; TH0=th; TL0=tl; TR0=1; void main(void) TMOD=0X01; TR0=1; th=0xff; tl=0xd0; TH0=th; TL0=tl; ET0=1; EA=1; while(1) display(); judge(); 五、心得体会 开始的时候由于没有经验,不知如何下手,所以就去图书管找了一些书看,尽管有许多的设计方案,可是总感觉自己还是有许多的东西弄不太清楚,于是就 请教同学。他常做一些设计,有一些经验。经过他的解释分析各方案之后,决定用查表的方法来做。这样可以降低一些硬件设计的难度,初次设计应切合自己的水平。用 8031 需要扩展 ROM,这样还要进行存储器扩展。而且现在 8031 实际中已经基本上不再使用,实际用的 AT89S51 芯片有 ROM,这样把经过采样得到的数值制成表,利用查表来做就简单了。我认为程序应该不大,片内 ROM应该够用的。用 LED 显示频率和幅值,现有集成的接口驱动芯片,波形可通过示波器进行显示,单片机接上 D/A 转换芯片即可,这样硬件很快就搭好了。 我以为这些 做好了,构思也有了,写程序应该是相对容易的。谁知道,写起程序来,才想到功能键要有扫描程序才行呀,我真的感到很难。那时真的有点想放弃?于是就去请教了老师,老师帮忙分析了一下,自己又查阅

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论