测控技术与仪器专业课程设计基于51单片机的函数发生器和示波器.docx_第1页
测控技术与仪器专业课程设计基于51单片机的函数发生器和示波器.docx_第2页
测控技术与仪器专业课程设计基于51单片机的函数发生器和示波器.docx_第3页
测控技术与仪器专业课程设计基于51单片机的函数发生器和示波器.docx_第4页
测控技术与仪器专业课程设计基于51单片机的函数发生器和示波器.docx_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

智能仪器仪表设计基础课程设计报告单 位: 自动化学院 学生姓名: 专 业: 测控技术与仪器 班 级: 学 号: 指导老师: 成 绩: 设计时间:2013 年 5月重庆邮电大学自动化学院制一、 题目:基于单片机的多波形信号发生器设计二、 指导教师: 三、 设计要求:设计一个信号发生器,实现如下功能:(1) 可产生正弦波、方波、三角波、脉冲等波形;(2) 通过按钮或键盘选定输出波形;(3) 波形频率可设定;(4) 波形可通过液晶屏显示。四、 给定条件:1、8051单片机最小系统;2、ADC,DAC器件;五、 设计:1、 方案论证,并确定设计方案2、 给出信号发生器的整体设计框图3、 硬件电路设计4、 软件设计(画出程序流程图,并给出相应模块程序代码)5、 完成设计报告六、 具体设计过程及实验结果:七、 设计的心得体会:八、 附件:(可选)完成心率波、指数上升和指数下降波形;九、 参考书目:给出主要参考书目(如:单片机原理与应用、电子测量技术、单片机C语言程序设计等),包括作者,书目名称,出版社等。基于51单片机的波形发生器引言波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。函数波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。本系统通过对51单片机的控制,用DA-AD等模块实现了正弦波、方波、三角波和锯齿波的产生,同时可以通过按键实现波形的选择和波形频率的改变。在实现波形的发生的同时又实现了波形图线的显示,通过NoKia5110对AD实时采集数据的显示、波形类型和波形频率的显示。摘要:本系统采用单片C8052为控制核心,通过其端口实现数字量的输出,然后由DAC0832把数字量转换成模拟量;但是DAC芯片输出的是电流信号,本系统用LM324运放把电流信号转换为电压信号。然后利用LM358搭建一个同相比例放大器,将转换后的电压信号按可调比例放大一定倍数。波形显示利用NoKia5110液晶屏,显示其波形、频率和实时的图像。显示其图像的时候我们利用ADC0804模数转换芯片将产生的模拟信号转换为数字信号,把AD实时读取到的值等比例显示到液晶屏上。本系统通过按键实现波形的选择以及波形频率的改变。关键字:STC89C52 DAC0832 Nokia5110 ADC0804 LM324 独立按键一、设计题目分析(一)设计任务:设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。图 1(二)设计功能:1、实现正弦波、三角波、方波、锯齿波的产生;2、实现波形的频率可调;3、实现波形类型、频率的显示;4、实现波形实时图像的显示。(三)设计方案:方案一:通过软件控制51单片机实现波形的数字输出,然后通过DA实现波形的数模转换,最后通过Nokia5110实现显示。方案二:通过硬件搭建积分电路实现方波、正弦波、三角波、锯齿波的产生,通过控制源信号的频率改变实现波形频率的改变。方案三:通过FPGA编程实现波形的产生于频率的改变,通过软件控制FPGA逻辑整列完成。(四)方案分析:方案一硬件设计简单,主要通过软件来控制;方案二硬件设计复杂,不便于控制,对输出波形的频率控制也存在很大的误差。方案三虽然控制实现容易,但是很少人接触过这个FPGA,所以学习起来相对困难。因此我们这里选择方案一。二、总体系统方案设计题目要求实现的任务是设计并制作一个函数信号发生器,能够产生正弦波、方波、三角波,要求必须用51单片机和AD-DA芯片,频率可调(范围不定),能够实时的显示波形的类型及其频率,同时实现波形的实时数据图像显示。现在对方案一进论证和验证。(一)总体设计思路根据题目的要求,经过仔细的考虑各种要素,制定了整体方案:以STC89C51单片机为控制核心,P0口接DAC0832信号输入并进行数模转换,P2口接矩阵键盘,P1口接液晶显示器Nokia5110,由程序控制P0口产生波形(分别是正弦波、方波、三角波),再由按键控制产生波形的种类及频率在一定范围内可调。由运放LM324实现DAC0832输出电流到电压的转换,即实现数字信号到模拟信号的转换,同时由LM358搭建的同相放大器将电压波形放大。在Nokia5110上实时的显示波形的频率,同时我们通过ADC0804读取放大器出来的电压信号,把对应的电压信号对应比例显示到液晶屏上,绘制出波形。我们通过按键确定,一旦按键按下后,就把当时的波形对应的参数改变显示。图 2系统总体框图(二)单元设计电路1、电源模块:电源通过充电电池提供7.2V电源,然后经过一个470uf的大电容滤波,滤波出来后经过一个5V稳压芯片,稳压源的输出与输入都接一个10uf和一个100nf电容滤波,减小电源纹波等。稳压出来的5V电压经过开关,开关后接一个指示灯LED,用于显示电源接通。5V电源给芯片,等器件供电。5V后面通过一个3.3V稳压芯片,同样稳压源的输出与输入都接一个10uf和一个100nf电容滤波,这样出来的3.3V电容给Nokia5110提供电源。图 3 电源模块2、串口通信模块:串口通信模块通过一个DB9接口与电脑相连接,通过一个MAX232芯片和单片机的P31、P30端口相连接,该电路主要用于单片机的程序下载,与单片与电脑的通信,方便调试。图 4串口通信3、DAC0832数模转换电路:DAC0832的WR1、WR2、XFER接地,TLE和VREF接高电平,其CS片选端接单片机的P23口。其数据段接锁存器的输出端。图 5 DAC08324、ADC0804模数转换电路: ADC0804数模转化的CS、RD、WR、INTR分别接单片机的P24、P25、P26、P32;其数据段接单片机的P0口,用于读取模数转换结果。图 6 ADC08045、Nokia5110液晶显示电路:5110有RST、CS、DC、DIN、CLK五个控制口分别接单片机的P12、P13、P14、P15、P16。电源连接3.3V电源7LED背光口接一个滑动变阻器用一个调节5110的背光。图 7 Nokia5110液晶6、放大设计电路:一级运算放大器主要用与把电流转换为电压信号,二级运算放大为同相放大器用于把电压信号放大。图 8 运放电路7、整体电路设计:将以上电路图组建起来,就得到总电路图,如图9所示图 9 整体设计电路(三)软件设计1、主程序流程图开始波形点绘制初始化变量和端口1234方波数据处理锯齿数据处理三角波数据处理正弦波数据处理扫描按键图 10 主程序流程图2、中断程序选读取AD然后向DAC端口赋值模数转换,不同的定时周期实现不同的频率波形输出。3、正弦波的产生过程通过手动的方法计算出输出各点的电压值,形成数组sintab100,反复顺序输出这组数据到DAC0832,就在系统输出端得到正弦波。4、方波的产生过程按照设定的周期值改变输出的电压(分别向DAC0832输0x00或0xff)。5、锯齿波的产生过程将一个周期(360度)分为128个点递增,当128个点输出后再从0开始输出数据到DAC0832,就在系统输出端得到锯齿波。6、三角波的产生过程将三角波的一个周期(360度)分为256个点,相邻点等差,前128个点递增,后128个点递减,分别把数据到DAC0832,就在系统输出端得到三角波。7、程序代码#include#include#include #include LCD5510_V1.H#define PI 3.14sbit LOCK = P37; /锁存功能sbit Wave =P20;sbit up =P21;sbit down =P22;sbit DAC_cs=P23;sbit AD_CS=P24;sbit AD_RD=P25;sbit AD_WR=P26;sbit AD_INT=P10;unsigned int temp=0;char flag_display;int i=0;unsigned int AD_data=0;void DrawPoint(int x,int y);char flag;unsigned char code SIN100=127,135,143,151,159,166,174,181,188,195,202,208,214,220,225,230,234,238,242,245,248,250,251,252,253,254,253,252,251,250,248,245,242,238,234,230,225,220,214,208,202,195,188,181,174,166,159,151,143,135,127,119,111,103,95,88,80,73,66,59,52,46,40,34,29,24,20,16,12,9,6,4,3,2,1,0,1,2,3,4,6,9,12,16,20,24,29,34,40,46,52,59,66,73,80,88,95,103,111,119;int Set_Hz; /频率void zhengxian(); void sanjiao(); void juchi(); void fangbo(); void scan();void LCD_clr_row(unsigned char num);/* 名称 : Time0_Init()* 功能 : 定时器的初始化,11.0592MZ晶振,50ms* 输入 : 无* 输出 : 无*/void Time0_Init()TMOD = 0x01;TH0 =(65536-Set_Hz)/256;TL0 =(65536-Set_Hz)%256;IE = 0x82;TR0 = 1;void AD_start()AD_CS=0;/允许AD转换AD_WR=0;_nop_();AD_WR=1;/AD开始转换while(AD_INT);/等待转换结束AD_CS=1;/禁止转换void AD_read()AD_CS=0;/允许读取AD_RD=0;/读取转换结果_nop_();AD_data=P0;AD_RD=1;AD_CS=1; /停止AD读取 /*主函数*/void main(void)unsigned char j=0;unsigned int y=0;int temp4=0,0,0,0;Set_Hz=1000;flag=1;DAC_cs=0; flag_display=1;LCD5510_Init();Time0_Init();while(1)i+;scan();temp3=temp2;temp2=temp1;temp1=temp0;temp0=AD_data;y=temp4;if(flag!=4)if(ytemp3) y=temp3;if(ytemp2) y=temp2;if(ytemp1) y=temp1;if(ytemp0) y=temp0;else y=AD_data;y=(y8;DrawPoint(i,y);/* 名称 : Time0_Int()* 功能 : 定时器中断,中断中实现 Count 加一* 输入 : 无* 输出 : 无*/void Time0_Int() interrupt 1TH0 =(65536-Set_Hz)/256;TL0 =(65536-Set_Hz)%256;TR0 = 0;AD_start();AD_read();switch(flag)case 1: zhengxian(); break;case 2: sanjiao(); break;case 3: juchi(); break;case 4: fangbo(); break;default : break;if(flag_display=1)flag_display=0;switch(flag)case 1: LCD_clr_row(0); LCD_clr_row(1); LCD_prints(0, 0, ZX F); if(Set_Hz=1000) LCD_prints(5, 0, 10HZ); if(Set_Hz=1050) LCD_prints(5, 0, 9.5HZ); if(Set_Hz=1100) LCD_prints(5, 0, 9HZ); if(Set_Hz=1150) LCD_prints(5, 0, 8.6HZ); if(Set_Hz=1200) LCD_prints(5, 0, 8.3HZ); if(Set_Hz=1250) LCD_prints(5, 0, 8HZ); if(Set_Hz=1300) LCD_prints(5, 0, 7.8HZ); break;case 2:LCD_clr_row(0);LCD_clr_row(1); LCD_prints(0, 0, SJ F); if(Set_Hz=1000) LCD_prints(5, 0, 7.8HZ); if(Set_Hz=1050) LCD_prints(5, 0, 7.4HZ); if(Set_Hz=1100) LCD_prints(5, 0, 7.1HZ); if(Set_Hz=1150) LCD_prints(5, 0, 6.8HZ); if(Set_Hz=1200) LCD_prints(5, 0, 6.5HZ); if(Set_Hz=1250) LCD_prints(5, 0, 6.2HZ); if(Set_Hz=1300) LCD_prints(5, 0, 6HZ);break;case 3:LCD_clr_row(0); LCD_clr_row(1); LCD_prints(0, 0, JC F); if(Set_Hz=1000) LCD_prints(5, 0, 3.9HZ); if(Set_Hz=1050) LCD_prints(5, 0, 3.7HZ); if(Set_Hz=1100) LCD_prints(5, 0, 3.5HZ); if(Set_Hz=1150) LCD_prints(5, 0, 3.4HZ); if(Set_Hz=1200) LCD_prints(5, 0, 3.2HZ); if(Set_Hz=1250) LCD_prints(5, 0, 3.1HZ); if(Set_Hz=1300) LCD_prints(5, 0, 3HZ);break;case 4:LCD_clr_row(0); LCD_clr_row(1); LCD_prints(0, 0, FB F); if(Set_Hz=1000) LCD_prints(5, 0, 7.8HZ); if(Set_Hz=1050) LCD_prints(5, 0, 7.4HZ); if(Set_Hz=1100) LCD_prints(5, 0, 7.1HZ); if(Set_Hz=1150) LCD_prints(5, 0, 6.8HZ); if(Set_Hz=1200) LCD_prints(5, 0, 6.5HZ); if(Set_Hz=1250) LCD_prints(5, 0, 6.2HZ); if(Set_Hz=1300) LCD_prints(5, 0, 6HZ);break;default : break;if(i83)i=0;LCD_clr_row(2); LCD_clr_row(3);LCD_clr_row(4); LCD_clr_row(5);TR0 = 1;/Y的0-31各点用来显示波形 32-47用来显示文字/* * 函数:DrawPoint * 功能:在(x,y)坐标上绘制点,屏幕左下角坐标为(0,0) * 输入参数:x:横坐标值,Range:0-83 * y:纵坐标值,Range:0-47 * 返回参数:当超过规定范围,默认为0 */void DrawPoint(int x,int y)int YIndex = 0;int bitIndex = 0;if(x83) x=0;if(y47)y=0;y = 47-y; /坐标变换YIndex = y/8;bitIndex = y%8; LCD_pos_byte(x,YIndex);LCD_write_dat(0x00|(1(bitIndex)&0xff);/*正弦波函数*/void zhengxian() static int i=0;LOCK=1;P0=SINi*0.5;LOCK=0;if(i100)i+;else i=0;/*三角波*/void sanjiao()static int m=0,n=0; LOCK=1; P0=2*m; LOCK =0;if(n=m&m0)n=m;m-;else n=m=0;/*锯齿波函数*/void juchi()static int m=0;LOCK=1; P0=2*m;LOCK=0;if(m64)m=m+1;else m=0;/*方波函数*/void fangbo()static int m=0,n=0;if(n=m&m=0)n=m;LOCK=1;P0=0x00;LOCK=0;m-;else m=n=0; /*键盘扫描函数*/ void scan() if(Wave=0) /波形选择while(!Wave);if(flag=4)flag=1;else flag+;flag_display=1;if(up=0) /频率增加while(!

温馨提示

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

评论

0/150

提交评论