课程设计(论文)-基于单片机的函数发生器设计.doc_第1页
课程设计(论文)-基于单片机的函数发生器设计.doc_第2页
课程设计(论文)-基于单片机的函数发生器设计.doc_第3页
课程设计(论文)-基于单片机的函数发生器设计.doc_第4页
课程设计(论文)-基于单片机的函数发生器设计.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

计算机科学与技术学院2008级电子设计报告摘 要函数发生器是一种多波形的信号源。它可以产生正弦波、方波、三角波、锯齿波,甚至任意波形。有的函数发生器还具有调制的功能,可以进行调幅、调频、调相、脉宽调制和vco控制。本设计中主要利用微控制器、d/a转换器、运算放大器、数码管驱动等器件产生直流、方波、三角波、锯齿波、正弦波、脉冲等函数波形,并实现频率、幅度可调节。微控制器控制整个系统的运行,负责向d/a转化器输出数字型号、键盘操作的读取以及向数码管驱动写入命令;两个d/a转换器,其中一个控制输出信号的幅度,另一个将为控制器写入的波形数据转换成相应的模拟信号;运算放大器用在两个d/a转换器之间和第二个d/a转化器与输出之间,起到将电流信号转换为电压信号以及改变电压范围的作用。关键词:函数发生器; 单片机; d/a转换目 录1 设计任务与要求1 1.1设计的原始要求1 1.2设计的具体要求12 总体方案1 2.1元器件的选择1 2.2系统总体框图设计23硬件方案2 3.1硬件模块设计23.1.1微控制器模块23.1.2 d/a转换模块33.1.3显示模块53.1.4键盘模块6 3.2 硬件系统设计64软件方案7 4.1 软件总体结构7 4.2 波形产生程序8 4.3键盘扫描程序104.3.1 主键盘扫描程序104.3.2 调幅程序104.3.3调频程序105 测试13 5.1 软件测试13 5.2 硬件测试14结论15参考文献16附录16计算机科学与技术学院2008级电子设计报告 第26页1 设计任务与要求1.1设计的原始要求通过本课程设计实现一个函数发生器。通过设置可产生:方波、三角波、锯齿波、正弦波;能够显示频率,改变频率。1.2设计的具体要求a、产生波形:直流、方波、三角波、锯齿波、正弦波、脉冲。b、可以更改频率,频率范围1999hz,分辨率1hz。c、可以更改幅度,幅度范围09.9v,分辨率0.1v。d、显示:五位数码管、八个发光二极管显示;三个数码管显示频率,两个数码管显示幅度;六个发光二极管显示当前的波形;两个发光二极管指示当前的调节项(频率或幅度)。e、键盘:五个按键,一个用于更改波形,一个用于更改调节项,剩下的三个用于调节频率或幅度的数值。2 总体方案2.1元器件的选择该函数发生器主要由四部分构成:控制部分、d/a转换部分、显示部分、键盘部分。(1) 控制部分以单片机为控制核心,本设计中选用由宏晶生产的stc89c52。其内部含有8k字节的flash,512字节的片上sram,4组8位的准双向i/o口,两个16为定时器/计数器。可工作在3v或5v,工作频率040mhz。stc89c51系列单片机具有体积小,功耗低,抗静电,抗干扰,价格低廉等特点。(2) d/a转换部分使用两片dac0832实现数字信号到模拟信号的转换。dac0832是8分辨率的d/a转换集成芯片,此d/a转换器由8位输入锁存器、8位dac寄存器、8位d/a转换电路及转换控制电路构成。这种da芯片价格低廉、接口简单、转换控制容易,在单片机应用系统中应用广泛。运算放大器选择lm324, 它是价格便宜的带有真差动输入的四运算放大器。(3) 显示部分使用max7219驱动数码管和led的驱动。max7219由maxim制造,它是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字led显示,也可以连接条线图显示器或者64个独立的led。其上包括一个片上的b型bcd编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态ram用来存储每一个数据。只有一个外部寄存器用来设置各个led的段电流。(4)键盘部分由于用到的建的个数较少,故采用若干个按键组成独立式键盘,独立式键盘扫描方便,效率较高。2.2 系统框图设计系统有微控制器stc89c52、dac0832、max7219、键盘等部分共同组成,其系统框图如下:3 硬件方案3.1硬件模块设计3.1.1微控制器模块(1)晶振电路由于stc89c51系列单片机内部有时钟电路,所以本设计中使用24mhz的无源晶振和两个30pf的电容组成晶振电路。(2)复位电路实现上点复位和手动复位。3.1.2 d/a转换模块(1)dac0832的引脚特性 dac0832是20引脚的双列直插式芯片。各引脚的特性如下: cs片选信号,和允许锁存信号ile组合来决定是否起作用。 ile允许锁存信号。 wr1写信号1,作为第一级锁存信号,将输入资料锁存到输入寄存器(此时, 必须和、ile同时有效)。 wr2写信号2,将锁存在输入寄存器中的资料送到dac寄存器中进行锁存(此时,传输控制信号必须有效)。 xfer传输控制信号,用来控制 。 di7di08位数据输入端。 iout1模拟电流输出端1。当dac寄存器中全为1时,输出电流最大,当dac寄存器中全为0时,输出电流为0。 iout2模拟电流输出端2。iout1+iout2=常数。 rfb反馈电阻引出端。dac0832内部已经有反馈电阻,所以,rfb端可以直接接到外部运算放大器的输出端。相当于将反馈电阻接在运算放大器的输入端和输出端之间。 vref参考电压输入端。可接电压范围为10v。外部标准电压通过vref与t型电阻网络相连。 vcc芯片供电电压端。范围为+5v+15v,最佳工作状态是+15v。 agnd模拟地,即模拟电路接地端。 dgnd数字地,即数字电路接地端。(2)dac0832的工作方式a、单缓冲方式。单缓冲方式是控制输入寄存器和dac寄存器同时接收资料,或者只用输入寄存器而把dac寄存器接成直通方式。此方式适用只有一路模拟量输出或几路模拟量异步输出的情形。 b、双缓冲方式。双缓冲方式是先使输入寄存器接收资料,再控制输入寄存器的输出资料到dac寄存器,即分两次锁存输入资料。此方式适用于多个d/a转换同步输出的情节。 c、直通方式。直通方式是资料不经两级锁存器锁存,即 cs,xfer ,wr1 ,wr2 均接地,ile接高电平。此方式适用于连续反馈控制线路和不带微机的控制系统,不过在使用时,必须通过另加i/o接口与cpu连接,以匹配cpu与d/a转换本设计中采用单缓冲方式,将wr2、xfer接地,cs、wr1接片选mcu的相关管脚以接收片选信号。dac0832的输出是电流信号,运算放大器u6的作用是将dac0832(1)输出的电流信号转换为电压信号vout1=-vref1*(dac0832(1)的输入数字量/256),此输出即为dac0832(2)的参考电压。系统的信号输出是运算放大器u7的输出vout=-vref2*(2*dac0832(2)的输入数字量-255)= vref1*(dac0832(1)的输入数字量/256)* (2*dac0832(2)的输入数字量-255)3.1.3显示模块显示模块中用一片max7219驱动五位数码管和八个led。max7219的管脚特性din串行数据输入端口。在时钟上升沿时数据被载入内部的16位寄存器。 dig 0dig7八个数据驱动线路置显示器共阴极为低电平。关闭时此管脚输出高电平。 gnd地线。load载入数据。连续数据的后16位在load端的上升沿时被锁定。 cs 片选端。该端为低电平时串行数据被载入移位寄存器。连续数据的后16位在cs端的上升沿时被锁定。 clk时钟序列输入端。最大速率为 10mhz。在时钟的上升沿,数据移入内部移位寄存器。下降沿时,数据从dout端输出。 seg aseg e、dp7 段和小数点驱动,为显示器提供电流。当一个段驱动关闭时,此端呈低电平。 set通过一个电阻连接到vdd 来提高段电流。 v+正极电压输入,+5v。 dout串行数据输出端口,从din输入的数据在16.5个时钟周期后在此端有 效。当使用多个max7219时用此端方便扩展。为了方便作图在此处以一位数码管代替8个led。在实际的电路焊接过程中要在max7219的vcc和gnd之间加一个104去耦电路以提高max7219的抗干扰性能。3.1.4键盘模块由于本设计中的按键较少,故采用独立式键盘。3.2硬件系统设计系统各部分的连接如下图所示,由于stc89c51系列的单片机的p0端口内部没有上拉电阻,为提高其输出信号的强度必须要在p0端口接排阻。4 软件方案4.1 软件总体结构系统通过控制mcu向dac写数据改变输出波形,通过设置时钟中断来达到定时的目的。正常工作时,系统不断地执行扫描键盘的程序,当中断到来时,进入终端服务程序改变dac中寄存器的值,达到改变系统输出电平的目的。另外,直流信号的输出电平不变,故当输出是直流信号时无需打开时钟中断。正常程序流程图中断服务程序流程图4.2 波形产生程序当用于产生波形的数据需要临时计算且计算量比较大(比如含有乘除运算)时,mcu将要花较长的时间进行这些计算。在输出低频信号时不会有太大影响,而当输出信号的频率较高时mcu内部的中断间隔就比较短,会出现mcu在两个中断之间无法完成相应的计算,这将导致频率的失真。故本系统中采用查表的方法对dac0832写数据,避免较多的乘除运算。sin_code=128,120,112,104,96,88,81,74,66,59,53,46,40,35,29,24,20,16,12,9,6,4,2,1,0,0;正弦函数的数据表。表示输出0+vref的25个点。jc_code=255,250,244,239,234,229,223,218,213,207,202,197,191,186,181,176,170,165,160,154,149,144,139,133,128;锯齿和三角波的数据表,表示-vref0v的25个点。锯齿波每周期输出-vref+vref之间的50个点,三角波和正弦波每周期输出-vref+vref之间的100个点;方波每周期输出两次:-vref和+vref;脉冲函数输出+vref后立即再输出0v。锯齿波、三角波、正弦波输出中所要用到的其他点可以通过将表中的数据经过简单的变换得到。设置一个标志变量count来记录当前输出数据是本周期中的第几个。其初值为99。另外本设计中使用的晶振频率为24mhz,以6t模式运行(六个时钟周期有一个机器周期),故机器周期f为4mhz。16位定时器的计数初值:x=65536-n(n为计数值,n=4000000/65536=61hz。为了让函数发生器的范围表示较低的频率,当方波的频率小于40hz,三角波的频率小于2hz,脉冲信号的频率小于80hz时每周期产生100次中断,其中大多数中断不向dac0832写数据。产生三角波和正弦波的流程图三角波流程图正弦波流程图4.3键盘扫描程序键盘扫描程序中主要有三个部分:主键盘扫描程序、调幅程序、调频程序。4.3.1 主键盘扫描程序4.3.2 调幅程序更具键盘输入向dac0832(1)写数据,所写数据为:输入值*255/vref1。4.3.3调频程序更改定时器计数初值部分代码:switch(mode)case 0: fun_jieyue();break;case 1: delay_m=50;break;case 2: delay_m=2;break; case 5: delay_m=100;break; default:delay_m=1;break; count=99;timetemp=65536-(int)(40000*delay_m/freq+0.5);time_th=timetemp/256;time_tl=timetemp%256;5 测试5.1软件测试测试软件简介:设计中利用proteus进行软件方面的测试,proteus软件是英国labcenter electronics公司出版的eda工具软件。它不仅具有其它eda工具软件的仿真功能,还能仿真单片机及外围器件。proteus是世界上著名的eda工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到pcb设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、pcb设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、hc11、pic10/12/16/18/24/30/dspic33、avr、arm、8086和msp430等,2010年增加还了cortex和dsp系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持iar、keil和mplab等多种编译器。测试结果: 直流 方波 锯齿波 三角波 正弦波 脉冲信号5.2硬件测试实物图:输入参考电压值:正常工作:2.1v 230hz的方波输出结论本课程设计的函数发生器可产生直流、方波、锯齿波、三角波、正弦波、脉冲这六种信号。频率、幅度可调,幅度范围为09.9v(具体视参考电压而定),方波信号、脉冲信号的的频率范围为1999hz,锯齿波、三角波、正弦波的频率范围为1399hz。锯齿波每周期采样50次,三角波、正弦波每周期采样100次范围均为-a+a。参考文献1 周荷琴,吴秀清.微机原理与接口技术.合肥:中国科学技术大学出版社 2008.2 杨恢先,黄辉先.单片机原理及应用.北京:人民邮电出版社 2006.3 康华光,陈大钦,张林.电子技术基础.北京:高等教育出版社 2006.附录程序清单:#include#include #define uchar unsigned char#define uint unsigned intsbit din=p12;sbit load=p11;sbit clk=p10;sbit cs_0832_1=p03;sbit cs_0832_2=p02;uchar mode,led,a_f_flag,time_th,time_tl,d_0832_1,delay_m;uchar ucode11=0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x80;uchar mode_code=0x80,0x40,0x20,0x10,0x08,0x04;uchar sin_code=128,120,112,104,96,88,81,74,66,59,53,46,40,35,29,24,20,16,12,9,6,4,2,1,0,0;uchar jc_code=255,250,244,239,234,229,223,218,213,207,202,197,191,186,181,176,170,165,160,154,149,144,139,133,128;uint freq,count;float extent;/step_sj,step_jc;float vref1;void write_7219(uchar addr,uchar data_in);void init_7219();void delay(uchar num);void vol_set();void write_0832_1(uchar data);void write_0832_2(uchar data);void key_scan();void f_set();void a_set();void fun_jieyue();void main()init_7219();vol_set();mode=0;freq=10;extent=vref1;write_7219(0x01,ucode0);write_7219(0x02,ucode1);write_7219(0x03,ucode0);write_7219(0x04,ucode(uchar)(vref1)|0x80);write_7219(0x05,ucode(uchar)(vref1*10)%10);write_7219(0x06,mode_codemode);d_0832_1=255;write_0832_1(255);write_0832_2(0);/step_jc=2.602;/step_sj=5.204;tmod=0x01;ea=1;et0=1;while(1) key_scan();void write_7219(uchar addr,uchar data_in)uchar i;load=0;_nop_();for(i=0;i8;+i)clk=0;din=(addr&0x80)?1:0;addr=addr1;_nop_();clk=1;_nop_();for(i=0;i8;+i)clk=0;din=(data_in&0x80)?1:0; data_in=data_in1;_nop_();clk=1;_nop_();load=1;void delay(uchar num) uchar j,k; while(num-!=0) for(j=0;j120;j+) /43for(k=0;k399)mode=5;led=mode_codemode|a_f_flag;write_7219(0x06,led);count=99;switch(mode)case 0: fun_jieyue();break;case 1: delay_m=50;break; case 2: delay_m=2;break;case 5: delay_m=100;break;default:delay_m=1;break;if(mode=1&freq40|mode=2&freq2|mode=5&freq=2) count=49;timetemp=65536-(int)(40000*delay_m/freq+0.5);time_th=timetemp/256;time_tl=timetemp%256;if(mode) tr0=1;else tr0=0;if(mode=5)write_0832_1(255);else write_0832_1(d_0832_1);break;case 0xe8: /a/f键a_f_flag=(a_f_flag=2)?0:+a_f_flag;led=mode_codemode|a_f_flag;write_7219(0x06,led);break;case 0xd8: /digit键if(a_f_flag=1) f_set();else if(a_f_flag=2) a_set();break;/case 0x78: ; /ok键 void f_set()uchar digit3;uchar temp,dtemp;uint timetemp=0;digit0=freq/100;digit1=(freq%100)/10;digit2=freq%10;dtemp=2;temp=0;while(1)if(p3&0xe0)!=0xe0)delay(0x01);if(temp=p3&0xe0)=0xe0) continue;while(p3&0xe0)!=0xe0); /松手检测switch(temp)case 0xc0: dtemp=(dtemp=0)?2:-dtemp; break;/digit键case 0xa0: digit0+dtemp=(digit0+dtemp=9)?0:digit0+dtemp+1; if(mode=2|mode=3|mode=4)&digit0=4) digit0=0;break;/up键case 0x60: freq=digit0*100+digit1*10+digit2; break; if(temp=0x60)switch(mode)case 0: fun_jieyue();break;case 1: delay_m=50;break;case 2: delay_m=2;break;case 5: delay_m=100;break;default:delay_m=1;break; count=99;if(mode=1&freq40|mode=2&freq2|mode=5&freq=2) count=49;timetemp=65536-(int)(40000*delay_m/freq+0.5);time_th=timetemp/256;time_tl=timetemp%256;break;write_7219(0x01+dtemp,0x00);delay(0x10);write_7219(0x01+dtemp,ucodedigit0+dtemp);delay(0x10);void a_set()uchar digit2,digit12;uchar temp,dtemp;digit0=extent;digit1=(int)(extent*10)%10;digit10=vref1;digit11=9;dtemp=1;temp=0;while(1)if(p3&0xe0)!=0xe0)delay(0x01);if(temp=p3&0xe0)=0xe0) continue;while(p3&0xe0)!=0xe0); /松手检测switch(temp)case 0xc0: dtemp=dtemp?0:1; break;/digit键case 0xa0: digit0+dtemp=(digit0+dtemp=digit1dtemp)?0:digit0+dtemp+1;break;/up键case 0x60: extent=digit0+digit1*0.1; break; if(temp=0x60)if(extentvref1) extent=vref1;d_0832_1=extent*255/vref1;write_0832_1(d_0832_1);break;write_7219(0x04+dtemp,0x00);delay(0x10);if(dtemp=0)write_7219(0x04,ucodedigit0|0x80);else write_7219(0x05,ucodedigit1);delay(0x10);void init_7219()write_7219(0x0a,0x0f);/亮度地址0ahwrite_7219(0x0b,0x05);/扫描led个数write_7219(0x0c,0x01);/工作模式地址write_7219(0x0f,0x00); /normalwrite_7219(0x09,0x00);/编码模式void fun_jieyue()write_0832_2(0);void fun_fangbo()if(freq=40)if(count=99)write_0832_2(0);count=0;elsewrite_0832_2(255);count=99;elseif(count=99) write_0832_2(0);if(count=49) write_0832_2(255);count=(count=0)?99:-count;void fun_juchi()if(freq=2)if(count24) write_0832_2(jc_code49-count);else write_0832_2(255-jc_codecount);/write_0832_2(count*step_jc);count=(count=0)?49:count-1;else/if(count%2)wr

温馨提示

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

评论

0/150

提交评论