论文--信号发生器.doc_第1页
论文--信号发生器.doc_第2页
论文--信号发生器.doc_第3页
论文--信号发生器.doc_第4页
论文--信号发生器.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

单片机系统实训 (论文)说明书题 目: 信号发生器 院 (系): 信息与通信学院 专 业: 电子信息工程 学生姓名: 苏勇坚 学 号: 1101120424 指导教师: 符强 2012 年 12 月 31 日1摘 要本文以STC89C52单片机为核心设计了一个低频函数信号发生器。信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,DAC0832可输出自定义波形,如正弦波、方波、三角波、三角波,波形的频率和幅度在一定范围内可任意改变。波形和频率的改变通过软件控制,幅度的改变通过硬件与软件实现。介绍了波形的生成原理、硬件电路和软件部分的设计原理。本系统可以产生最高频率20HZ的波形。该信号发生器具有体积小、价格低、性能稳定、功能齐全的优点。关键词: 低频信号发生器;单片机STC89S52;D /A转换;AbstractThis paper STC89C52 single-chip microcomputer as the core design a low frequency function signal generator. Signal generator with digital waveform synthesis technology, through the hardware circuit and software program, combining can output custom waveform, such as sine, square wave, triangle wave, triangle wave, wave frequency and amplitude in a certain range can be arbitrary change. Waveform and frequency change through the software control, amplitude change through the hardware and software realization. Introduces the waveform generation principle, hardware circuit and software part of the design principle. This system can produce the highest frequency and hz waveform. The signal generator has small volume, low price, stable performance, fully functional advantages.Key words: Low frequency signal generator; SCM STC89S52; D/A conversion;2目 录绪论错误!未定义书签。1 系统硬件介绍11.1 硬件主控芯片概述及功能介绍11.1.1主控芯片STC89S5211.1.2 STC89S52特性11.1.3 STC89S52参数11.2 硬件电路21.2.1STC89S52主控部分21.2.2LCD1602显示部分31.2.3DAC0832模-数转换部分42 系统软件设计52.1细分程序的设计52.1.1主函数流程图62.1.2主函数程序62.1.3按键程序流程图82.1.4按键程序82.1.5显示程序流程图102.1.6显示程序113 硬件制作与调试113.1 系统PCB板的设计113.2 系统硬件调试123.3 软件及联机调试123.4 主控程序调试124 实训心得体会13谢 辞14参考文献15附 录1623绪论随着电子的快速发展,人们所需要的测量仪器也越来越多,精度也要求越来越高,而波形发生器就是这些重要仪器中的一种,一下设计便是初步对波形发生器的了解所设计的,其目的是对波发生器有一定的了解。1 系统硬件介绍1.1硬件主控芯片概述及功能介绍STC89S52是基于一个低功耗、高性能CMOS8位微控制器,并带有8kB的嵌入的高速Flash 存储器。128 位宽度的存储器接口和独特的加速结构使8 位代码能够在最大时钟速率下运行。 1.1.1主控芯片STC89S52STC89S52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,2个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。1.1.2 STC89S52特性8K字节程序存储空间,512字节数据存储空间,内带2K字节EEPROM存储空间,可直接使用串口下载。1.1.3 STC89S52参数1. 增强型8051单片机,6 时钟/机器周期和12 时钟/机器周期可以任意 选择,指令代码完全兼容传统8051.1。2. 工作电压:5.5V3.3V(5V单片机)/3.8V2.0V(3V 单片机)。3.工作频率范围:040MHz,相当于普通8051 的080MHz,实际工作 频率可达48MHz。4. 用户应用程序空间为8K字节。5. 片上集成512 字节RAM。6. 通用I/O 口(32 个),复位后为:P0/P1/P2/P3 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无 需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片。8. 具有EEPROM 功能。9. 具有看门狗功能。10. 共3 个16 位定时器/计数器。即定时器T0、T1、T2。11.外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒。12. 通用异步串行口(UART),还可用定时器软件实现多个UART。13. 工作温度范围:-40+85(工业级)/075(商业级)。14. PDIP封装。1.2 硬件电路1.2.1 STC89S52主控部分以STC89S52为主控组成的单片机最小系统,主要有几部分组成,如图1.2.1.1所示,由S0、C3、R1组成的单片机复位电路;由C1、C2、Y1组成的单片机频率输入部分,其中C1、C2为谐振电容,20PF30PF均可,Y1为12MHZ晶振;J6组成单片机下载口,J1为单片机P0口的10K上拉电阻,其中P0口为液晶LCD1602的数据接口;P1为DAC0832数据接口;P32、P33为按键以及LCD1602控制接口。 图1.2.1.1 单片机主控部分1.2.2LCD1602显示部分 显示部分主要由LCD1602来显示,如图1.2.2.1,1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形,但用它来显示字符与数字完全足够了,而且操作简单方便,PCB布线也简单,有较好的显示效果,所以这里用它来做显示部分。图1.2.2.1 显示部分1.2.3DAC0832模-数转换部分由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。本设计选用直通方式。DAC0832的数据口和单片机的P1口相连。CSDA:片选信号输入线(选通数据锁存器),低电平有效;WR:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存。模-数转换部分如图1.2.3.1所示。图1.2.2.1 模-数转换部分LM324的3管脚与DAC0832的(IOUT2)12管脚相连,LM324的2管脚与DAC0832的(IOUT1)11管脚相连,LM324的1管脚与DAC0832的REF(9)管脚相连.第一级运算放大器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算放大器的作用是将V1通过反向放大电路-(R4/R3)倍。本次试验设计的输出电压在0-5V可调,而V1的电压大约是5V,所以R1选择10K的电阻,R2选择20K的电位器,这样最大的输出电压为2*(10/2)=10,最小电压为0。在第二个运算放大器的输出端连了一个低通滤波器。如果不加低通滤波器,也能够生成波形,但是产生的信号中毛刺很多,加一个低通滤波器不仅起到的滤波的作用,还起到了平滑的作用。低通滤波器的截止频率F=1/(2*pi*R3*C6),这里我们选择R5 为100欧姆电阻,C4为104电容,截止频率F=16KHZ。实验表明,此时的输出波形效果相对较好。2 系统软件设计本系统的主要硬件是DAC0832模-数转换电路,以及LCD1602显示电路。软件部分主函数中主要是扫描按键以及显示,利用定时器中断对DAC0832进行送数据让其进行模-数转换,外部中断0与1主要是用来对频率、波形选择的调节。2.1 细分程序的设计2.1.1主函数流程图 2.1.2主函数程序/* * 名称 : main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 */void main() lcd_dis(); disgeshibai( ); TMOD=0X01; IT0=1; IT1=1; EA=1; EX0=1; EX1=1; ET0=1; IP=0X05; TR0=1;while(1) ;2.1.3按键程序流程图 2.1.4按键程序/* * 名称 : void int0() interrupt 0 * 功能 : 键盘扫描函数 * 输入 : 无 * 输出 : 无 */void it1() interrupt 2if(key3=0)delay(10); if(key3=0) cho=cho+1; if(cho=3) cho=0; boxingxshi(); while(key3=0); /等待 void it0() interrupt 0/以下为K2键判断 * if(key2=0) delay(10); if(key2=0) z=z+1; if(z=65535) z=3; disgeshibai( ); while(key2=0);/等待 TIME0_H=(0xffff-z)/256; TIME0_L=(0xffff-z)%256;/定时器中断处理程序。 void intt0() interrupt 1TH0=TIME0_H;TL0=TIME0_L; switch(cho) case 0: P1=sinb; /调SIN正弦波码表 b+;if(b=128)b=0;break; /正弦波 case 1: P1=d; if(m)d=d+4;if(d=256)m=0; if(!m)d=d-4;if(d=0)m=1;break; /三角波 case 2: e+;if(e=v) P1=0xff; else P1=0x00; if(e=128)e=0;break; / 方波 2.1.5显示程序流程图 3 硬件制作与调试3.1 系统PCB板的设计PCB即印刷电路板,是电子电路的承载体。在现代电子产品中,几乎都要使用PCB。PCB板的设计是电路设计的最后一个环节,也是对原理电路的再设计。因此PCB板的设计是理论设计到实际应用一个十分重要的内容。印制电路板(PCB)是电子产品中电路元件和器件的支撑件它提供电路元件和器件之间的电气连接。PCB设计的好坏对抗干扰能力影响很大因此,在进行PCB设计时必须遵守印制电路板设计原则和抗干扰措施的一般原则,并应符合抗干扰设计的要求。本次设计采用Altium公司PROTEL系列设计完成SCH到PCB的设计,并且手工完成电路焊接以及整机的装配。3.2 系统硬件调试本系统的硬件调试分为以下阶段进行调试: (1)逻辑错误调试样机硬件的逻辑错误是由于设计错误和加工过程中的工艺性错误所造成的。这类错误包括:错线、开路、短路等几种,其中短路是最常见的故障。(2)器件调试元器件失效的原因有两个方面:一是器件本身已损坏或性能不符合要求;二是由于组装错误造成的元器件失效,如电解电容、二极管的极性错误,集成块安装方向错误等。(3)可靠性调试引起系统不可靠的因素很多,如金属化孔、接插件接触不良会造成系统时好时坏;内部和外部的干扰、电源纹波系数过大、器件负载过大等造成逻辑电平不稳定;另外,走线和布局的不合理等也会引起系统可靠性差。3.3 软件及联机调试 Keil 4是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。Keil 4件是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为Vision(通常称为V2)。Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案, 3.4 主控程序调试应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存建立工程并添加源文件设置工程编译/汇编、连接,产生目标文件程序调试。成功编译/汇编、连接后,选择菜单Debug-Start/Stop Debug Session(或按Ctrl+F5键)进入程序调试状态,Keil提供对程序的模拟调试功能,内建一个功能强大的仿真CPU以模拟执行程序。Keil能以单步执行(按F11或选择Debug-Step)、过程单步执行(按F10或选择Debug-Step Over)、全速执行等多种运行方式进行程序调试。如果发现程序有错,可采用在线汇编功能对程序进行在线修改(Debug-Inline Assambly),不必执行先退出调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行调试的程序行,可采用断点设置的方法处理(Debug-Insert/Remove Breakpoint或Debug-Breakpoints等)。在模拟调试程序后,还须通过编程器将.hex目标文件烧写入单片机中才能观察目标样机真实的运行状况。4 实训心得体会通过这次单片机实训,我感觉收获良多,对单片机的了解、编程和protel绘制电路图等各个方面的能力有了进一步的提高,把课本上的知识应用到实践,整个过程受益匪浅。实训开始在硬件系统的设计时,初步设计包括显示部分,按键部分,主控部分,模数转换部分,因为在大专的时候有过做板的经验,所以整体来说硬件没有什么大的调试,就是在转印过程中,墨太少,则转印到铜板上就显得很少了,后来用油性笔补上就可以了。但是在载程序进去调试的时候还是发现有些线路出现了问题,下载程序的时候按按键时LCD字幕显示乱码,后来经查发现是因为有个单片机的管脚短接焊在一起了,重新焊接后故障排除了。在软件系统的设计上,确实花了很大的功夫,首先考虑到利用外部中断0与1对频率与幅度进行调节,在优先等级上这两个中断都应该较高,所以这里选择定时器1中断来进行时间轴上的建立,开始调程序的时候没注意到定时器1和外部中断的优先级关系,导致了P33按键无法使用,最后经过同学的帮忙才把这问题解决;其次当其中定时器进行DAC0832模数转换时,按键进行波形转换以及频率与幅度调节时,显示字符很久才显示出一个字符出来,后来通过仔细思考以及同学的提点,想到了是由定时器中断引起的,每过一段时间中断一次,打乱了显示的读数据的时序,所以才会很久才显示出来,后来每次按键让其显示字符时,在显示之前先把定时器中断关掉,然后显示完所需的字符后再打开定时器中断,经过实践验证,我的想法是正确的,存在的问题也引刃而解;再次,显示频率时算法出现了问题,浮点数进行乘除时,那个数也必须是浮点数才能得出所需的值,调节频率时,频率显示错乱了,第一次显示频率正确,但是调节时频率显示就有误了,我是调节定时器初值来进行频率调节的,后来经过同学的提醒,其实可以反过来想,也就是说对频率进行加减调节,然后通过转换函数把频率转换成定时器初值,然后再去执行,这样无论调节度还是精确度都有了一定的提高;最后是输出的频率很低,只有20多HZ,经过仔细排查原因,问题出来幅度调节那里,因为每次给数据之前都要进行一次乘除运算,增加了CPU的负担同时大大延迟了CPU送出数据的时间,所以频率就会很低,后来想到其实可以通过控制电子开关去选择运放的反馈电阻进行幅度调节,这样大大提高了CPU的利用率,但是硬件方面却要复杂一点,但是后来由于时间问题,也没时间再去修改硬件了。这次实训自己所设计的的不完美,由于时间的关系,另外一个关系就是自己对单片机方面的知识也欠缺,导致很多功能还未完全弄清楚,尤其是频率转换方面还没弄好,如果时间可以充裕,相信自己可以慢慢弄清楚。谢 辞学期期末的实训就快结束了,在实训的过程中,虽然很忙,有苦也有甜,但是对于我来说,能从中学到东西是这次实训最大的成功。首先,感谢信息与通信学院为我们电子信息工程学生提供了一次实训学习的平台。通过这次实训,我对电子设计的认识有了进一步的了解,同时也认识到自己在硬件和软件方面的缺陷。主要表现在对很多原理知识掌握的不是很清楚,对硬件设计的正确方法掌握不多,造成了很多的重复性工作,特别是在系统设计的过程中,从方案的对比到方案确定、芯片元件的选择、程序代码的编写、最后的仿真等等,都存在一定程度上的不足。在硬件方面,学院提供了很好的实训平台,并且为学生免费提供大量需使用的电子元件,为能够成功完成这次实训创造了很好的条件。还要感谢老师,为学生提供帮助,同时也要感谢实训期间为我提供帮助的同学,正是因为在我有些程序调试方面不懂的时候,他们能不吝赐教,让我获益良多,使我顺利的完成了每次实验课程以及这次的实训。 参考文献1 郭天祥.新概念51单片机C语言教程 入门、提高、开发、拓展全.北京.电子工业出版社 2009.12 杨栓科.模拟电路技术基础.西安交通大学电子学教研组 编.高等教育出版社 2003.13 张志良 主编 :单片机原理及控制技术(第2版)北京:机械工业出版社,20054 张毅刚主编 :单片机原理及应用.北京:高等教育出版社,20065 黄仁欣 主编 :单片机原理及应用技术.北京:清华大学出版社,20076 冯育长 主编 :单片机系统设计与实例分析.西安:西安电子科技大学出版社,20077 梅开乡主编 :数字逻辑电路(第2版)北京:电子工业出版社,20058 吉雷 主编 :Protel99从入门到精通西安:西安电子科技大学出版社,2004 附录 图1 PCB图图2仿真图图3正弦波实验图图4三角波实验图图5 LCD显示方波图5 LCD显示三角波总程序:/*主程序:#include#include#include#includevoid main() lcd_dis(); disgeshibai( ); TMOD=0X01; IT0=1; /设置中断触发方式,下降沿 IT1=1; EA=1; EX0=1;/开外部中断0 EX1=1;/开外部中断1 ET0=1; IP=0X05; /按键中断级别高 TR0=1;while(1) ;/*O832.H处理头文件程序#ifndef _0832_h_#define _0832_h_TIME0_H=0xff,TIME0_L=0xd9;unsigned char cho=0; sbit key3=P33; sbit key2=P32;sbit RW=P26; /LCD控制sbit E=P27; /LCD使能信号sbit RS=P25; /LCD数据/命令选择信号#define uchar unsigned char#define uint unsigned int#define uint unsigned intuchar code tab_L1312=sin_wave,tri_wave,squ_wave;uchar code tab_L212=Fre:00000Hz;uchar code table=0123456789;j;n;y=0;b=0,d=0,e=0;uint z=3; v=64;m=1;fre; /*函数声明区*void lcd_dis(); /lcd显示函数void lcd_init(); /LCD初始化函数void write_com(uchar); /写命令函数void write_data(uchar); /写数据函数void delay(uchar); /延时函数void disgeshibai(void);void delayxh(void);void xinhaofasheng(void);/*void disgeshibai(void) write_com(0x80+0x49); write_data(table1000000/(z+2)*128)/100%10);/计算千位频率 write_com(0x80+0x48); write_data(table1000000/(z+2)*128)/1000); /计算百位频率 write_com(0x80+0x4A); write_data(table1000000/(z+2)*128)/10%10); /计算十位频率 write_com(0x80+0x4B); write_data(table1000000/(z+2)*128)%10); /计算个位频率 /*lcd显示函数开始*void lcd_dis()uchar n; lcd_init();write_com(1);write_com(0x80+4); /设置光标位置for(n=0;n9;n+) /显示第二排字符write_data(tab_L10n);delay(2);write_com(0x80+0x43); / 设置光标位置for(n=0;n0;i-)for(j=100;j0;j-);void boxingxshi() switch(cho) /显示不同波形 case 0:write_com(0x80+4); /设置光标位置 for(n=0;n3;n+) /正弦波显示 write_data(tab_L10n);break; case 1:write_com(0x80+4); /设置光标位置 for(n=0;n3;n+) /三角波显示 write_data(tab_L11n);break; default:write_com(0x80+4); /设置光标位置 for(n=0;n=3) cho=0; boxingxshi(); while(key3=0); /等待 void it0() interrupt 0 if(key2=0) delay(10); if(key2=0) z=z+1; if(z=65535) z=10; disgeshibai( ); while(key2=0);/等待 TIME0_H=(0xffff-z)/256; TIME0_L=(0xffff-z)%256;/定时器中断处理程序。 void intt0() interrupt 1TH0=TIME0_H;TL0=TIME0_L; switch(cho) case 0: P1=sinb; /调SIN正弦波码表 b+;if(b=128)b=0;break; /正弦波 case 1: P1=d; if(m)d=d+4;if(d=256)m=0; if(!m)d=d-4;if(d=0)m=1;break; /三角波 case 2: e+;if(e=v) P1=0xff; else P1=0x00; if(e=128)e=0;break; / 方波 /*SIN.H正弦函数码表/正弦表;每半个周期256个取值,最大限度保证波形不失真。/各个值通过MATLAB算出,并四设五如取整。具体程序如下#ifndef _sinx_h_#define _sinx_h_unsigned char code sin128= 0x7F,0x85,0x8B,0x92,0x98,0x9E,0xA4,0xAA,0xB0,0xB6,0xBB,0xC1,0xC6,0xCB,0xD0,0xD5,0xD9,0xDD,0xE2,0xE5,0xE9,0xEC,0xEF,0xF2,0xF5,0xF7,0xF9,0xFB,0xFC,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFC,0xFB,0xF9,0xF7,0xF5,0xF2,0xEF,0xEC,0xE9,0xE5,0xE2,0xDD,0xD9,0xD5,0xD0,0xCB,0xC6,0xC1,0xBB,0xB6,0xB0,0xAA,0xA4,0x9E,0x98,0x92,0x8B,0x85,0x7F,0x79,0x73,0x6C,0x66,0x60,0x5A,0x54,0x4E,0x48,0x43,0x3D,0x38,0x33,0x2E,0x29,0x25,0x21,0x1C,0x19,0x15,0x12,0x0F,0x0C,0x09,0x07,0x05,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0

温馨提示

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

评论

0/150

提交评论