1课设题目:
波形发生器设计——按键控制波形
2内容摘要:
近年来,波形发生器在各种领域中得到越来越广泛的应用。本系统主要通过研究51单片机的功能,外加D/A转换器等其它器件,进行硬件设计和软件编程,完成锯齿波、梯形波、三角波、方波和正弦波共五种波形的形成。波形频率的变化由程序来控制,即通过改变定时器的初值来改变输出波形相邻两点的时间间隔,从而实现波形频率的改变。
3设计任务和要求:
3.1 课程设计任务:
利用DAC0832产生三角波,锯齿波和方波。在矩形按键中任选三个按键作为按键“1”,“2”,“3”。按“1”键产生三角波;按“2”键产生锯齿波;按“3”键产生方波。波形频率为100Hz。用示波器观察输出。
3.2 课程设计基本要求:
课题分析,查阅资料,方案论证,方案实现,系统联调,撰写实验设计报告
成果要求:
(1)系统方案      (2)硬件电路原理图
(3)软件源程序    (4)设计说明书(课程设计报告)
4设计方案
4.1 总体设计思路
  本次设计采用AT89C51及其外围扩展系统,软件方面主要是应用C语言设计程序。系统以AT89C51为核心,配置相应的外设及接口电路,用Keil及C等软件开发,用C语言编程,组成一个多功能信号发生器。用户通过按键选择输出实验室中经常使用到的几种基本波形:方波、锯齿波和三角波。方波由AT89C51单片机将最大值和最小值输出给D/A进行转换,并由用户通过键盘选择波形周期。
可采用单片机程序产生以上3种波形,并通过一片D/A转换器输出。另外可采用一片D/A转换器来控制前一片D/A转换器的参考电压,从而可以改变输出波形幅值。通过外接键盘来设定波形的类型、幅值和频率。
 
                  4-1总体方案结构图
实验程序参考实验设计书(xl2000实验指导手册)中的实验6(端口按键判断技术(按键显示数字))和实验12(DA 转换dac0832 的原理与应用)的相应程序,再根据我们小组的课设实际要求,适当改变其程序,改写出适合我们小组的程序。
我们小组利用端口按键判断技术(按键显示数字)中的按键设计。端口按键判断部份由8
个轻触按键组成, 一端接地, 一端由JP48引出, 当按下按键时, 相应端口为低电平。我们需要这个键盘去对应相应的波形, 通过按键盘上的K01,K02,K03三个按键, 实现相应的波形输出。
然后我们应用实验12 DA 转换DAC0832 的原理与应用来实现波形的变换。锯齿波我们在实验课上就已经实现了,而三角波我们在考试的时候也实现了,剩下的矩形波比较简单,根据书本上的程序就可以得出相应的结果。
4.2 设计方法——硬件设计
51单片机的最小系统由振荡电路、电源电路、复位电路、EA及应用程序组成。它有三种联接方式。一种是两级缓冲器型,即输入数据经过两级缓冲器型,即输入数据经过两级缓冲器后,送入D/A转换电路。第二种是单级缓冲型,输入数据经输入寄存器直接送入DAC寄存器,然后送D/A转换电路。第三种是两个缓冲器直通,输入数据直接送D/A转换电路进行转换。本电路仿真图如下:DAC0832的引脚及功能:
DAC0832是双列直插式8D/A转换器完成数字量输入到模拟量输出的转换。
图3-2 DAC0832引脚图
DAC0832结构:
D0~D7 :8位的数据输入端,D7为最高位,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
ILE:数据锁存允许控制信号输入线,高电平有效;
CS:片选信号输入线(选通数据锁存器),低电平有效;
WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ms)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ms)有效。
WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ms)有效。由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换;
IOUT1模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0
IOUT2模拟电流输出端2IOUT2与IOUT1的和为一个常数
Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
Vcc:电源输入端,范围为(+5~+ 15)V
VREF:基准电压输入线,流程图转换为ns图范围为(-10~+10)V
AGND:模拟信号地;
DGND:数字信号地。
4.3 设计方法——软件设计
系统软件由主程序和产生波形的子程序组成,软件设计主要是产生各种波形的子程序的编程。通过编程可得到各种波形。频率的改变可采用插入延时子程序的方法来实现。
实验流程图:
                            4-2 实验流程图
本电路仿真图如下:
图4-3 电路仿真图
                              图4-4三角波仿真图
图4-5锯齿波仿真图
                        图4-6方波仿真图
4.4 波形的产生:
锯齿波:
void ju()                //锯齿波函数
  {
  uchar i;
  cs=0;                  //拉低片选位
  wr=0;                  //拉低写数据位
for(i=0;i<255;i++)
{DATA=i;delay();delay();}
}                                         
三角波:
void san()                  //三角波函数                                       
{
  uchar i;
  cs=0;    //拉低片选位
  wr=0;    //拉低写数据位       
  for(i=0;i<255;i++)
  {DATA=i;delay();}
  for(i=255;i>0;i--)
  {DATA=i;delay();}
方波:
void fang()
    { cs=0;        //拉低片选位
    wr=0;        //拉低写数据位
    DATA=0xff;
    delay1(); delay1(); delay2();          //延迟
    DATA=0;
    delay1(); delay1(); delay2(); 
}                                                                                           
5 系统调试
5.1 使用的主要仪器和仪表
XL2000 单片机综合仿真试验仪主机一台,USB 通信电缆一根,系统连接数据线若干,装有WINDOWS XP系统的电脑一台,DS5022ME示波器一台
5.2 实验步骤
接线方法:
1 用一个1PIN数据线一端插入CPU 部份JP53P3 口)的P3.4,另外一端插入DAC0832 部份的输入端JP24
WR 端。
2 用一个1PIN数据线一端插入CPU 部份JP53(P3 口)的P3.1,另外一端插入DAC0832 部份的输入端JP24
CS 端。
3 用一根8PIN的数据排线, 一端插入DAC0832 部份的数据输入端JP27, 另一端插入CPU部份JP51(P0)
4 用一台示波器,在J2 口观察DA 转换后的输出信号。 建议调整到Y 0.2V/ X1MS/.
5 按键接到P1 口。用一条8PIN数据排线,把按键部份的JP48,接到CPU部份的P1 JP44.
完成接线以后,将实验箱连到电脑上。接着运用Keil生成.hex文件,并通过XLISP程序写入实验箱中的芯片,然后打开示波器,将示波器连接线接到实验箱的J2接口。就可以在示波器上观察到相应波形。按K1产生三角波,按K2产生锯齿波,按K3产生方波。即可以得到实验所求。
5.3 整理性能测试数据和波形,并与设计要求比较分析
对于本波形发生器,其硬件电路的调试可以按如下步骤进行
1)硬件电路的总体检查
2)单元电路调试
3)波形输出电路调试
实验结果图:
图5-1三角波波形图
图5-2锯齿波波形图
                      图5-3 方波波形图
5.4调试中出现的故障、原因及排除方法
(1)第一次我们编完程序以后,发现按键无法改变波形,一直显示的是锯齿波。但是我们反复检查程序,无法查出有错误之处。后来在老师的指导下,我们换了一个实验箱,就得出了正确的实验结果。这是实验箱的问题,由于按键老化接触不良。
(2)在换完箱子之后,波形一切正常。但是频率不正确,没有达到实验要求的100Hz。我们小组查阅了资料,改动程序之后,三角波和锯齿波的波形频率是正常的,但是方波的频率不太正常。我们通过网上查阅资料,改变延迟函数可以改变频率,但是我们小组成员改变了之后还是不能得到正确结果。后来经过老师的提醒,是keil的晶振频率和实验箱上的频率没有对上。改好以后,波形的频率就正常了。
6 设计结论:
本次的课程设计我是利用AT89C51DAC0832来完成电路的设计的,用开关来控制各种波形的发生及转换,用单片机输出后,经过模数转换器生成波形,最终可以通过示波器观察。
在这次的软件设计中,程序设计采用的是C语言。因为C语言简洁高效,是最贴近硬件的高级编程语言,并且我又有C语言的基础,所以编译起来比较容易。
由于此次是第一次进行课设,很多东西都没有接触过,因此还不是很得心应手,所以在设计中遇到了很多问题及难点。比如:D/A转换器和锁存器的结构、功能等等,这些都需要自己去查资料了解这些。但是毕竟是参考书和资料,做到后来发现很多程序都是不完整的,这让我们伤透了脑筋。看着别的小组都弄得有模有样了,可是我们连一个程序都还没有定好。好不容易又到了相关类似的程序,可是结果还是很不尽人意。程序接线什么的都弄好了,调试也没有问题,可是就是无法达到预期想要的结果。课程设计这种东西最后还是要靠大家一起动脑筋。然后我们大家一起齐心协力,从平时做的实验﹑老师上课的举例﹑书本上的知识以及老师的辅导和其他同学的帮助下终于完成了课程设计的过程中,当我们碰到不明白的问题时,老师总是耐心的讲解,给我们的设计以极大的帮助,使我们获益匪浅。因此非常感谢老师的教导。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名学生,这程设计是很有意义的。更重要的
是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。