单片机多功能信号发生器设计.docx
- 文档编号:10848410
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:19
- 大小:730.47KB
单片机多功能信号发生器设计.docx
《单片机多功能信号发生器设计.docx》由会员分享,可在线阅读,更多相关《单片机多功能信号发生器设计.docx(19页珍藏版)》请在冰豆网上搜索。
单片机多功能信号发生器设计
单片机课程设计
题目:
多功能信号发生器设计
班级:
姓名:
学号:
指导教师:
设计时间:
评语:
成绩
目录
目录I
1.问题分析及解决方案-1-
1.1题目要求-1-
1.2题目分析-1-
1.2.1信号的产生-1-
1.2.2信号幅度控制-1-
1.2.3信号频率控制-1-
1.2.4波形切换-2-
1.3程序设计流程-2-
1.4解决方案-2-
2.单片机选型及硬件配置-3-
2.1单片机及元件选择-3-
2.2I/O地址分配-3-
2.3系统硬件原理图-4-
3.DAC0832简介-4-
4.软件实现-6-
4.1软件代码-6-
4.2程序调试-9-
5.心得体会-14-
参考书目-16-
1.问题分析及解决方案
1.1题目要求
多功能信号发生器设计
(1)信号发生器能产生50-200Hz的正弦波、方波、三角波、锯齿波,数码管显示信号频率;
(2)输出哪一种波形由四个按键控制;
(3)波形的极性、幅度、周期、占空比可由按键操作设置和修改。
1.2题目分析
1.2.1信号的产生
利用8位D/A转换器DAC0832,可以将8位数字量转换成模拟量输出。
数字量输入的范围是0~255之间,对应的模拟量输出范围在正负参考电压之间。
由此,可以利用单片机的并行口输出的数字量,产生波形。
1.2.2信号幅度控制
因DAC0832的模拟量输出范围在正负参考电压之间,也就是说,当数字量输入为00H时,DAC0832的输出是Vref-,当数字量输入为FFH时,DAC0832的输出是Vref+。
所以,为了调节输出波形的幅度,只要调节VREF即可,可在Vref+端接一电位器,调节VREF的电压,即可达到调节波形电压的目的。
1.2.3信号频率控制
在单片机的P2口接8位的拨码开关,将其开关状态转换为8位二进制数,作为延时常数,即可调节输入信号的频率。
1.2.4波形切换
利用4位DIP开关来选择波形,并通过4个LED进行指示。
1.3程序设计流程
图1程序设计流程
1.4解决方案
由于输出信号的频率较低,可选用AT89C51作为控制器,其中方波,锯齿波,三角波只通过一定的延时完成波形的输出,正弦波还需用查表法来,单片机输出的为数字量而生活中用到的为模拟量,故需经过D/A转换器DAC0832把数字量变为模拟量输出。
而DAC0832输出的为电流信号,而我们需要的是电压信号,故采用了一个集成运放将电流信号转换为电压信号,再通过一级集成运放将单极性的电压信号转换为双极性的电压信号。
输出波形的类型以及频率均是通过拨码开关来控制的,由于单片机输出四种波形故用了4个拨码开关,这样每一位能够控制一中波形的输出。
波形频率的控制通过8位拨码开关来控制,这样控制精度可以达到1Hz,范围为1Hz-255Hz。
输出波形的幅值是通过一个调节DAC0832的参考电压来实现的。
2.单片机选型及硬件配置
2.1单片机及元件选择
表1单片机及元件选择
元件名称
型号
元件名称
型号
单片机
AT89C51
集成块
DAC0832
晶振
12MHZ
拨码开关
DIPSW_8
电容
22u
拨码开关
DIPSW_4
2.2I/O地址分配
P0口用于输出波形,P0口输出的数字量通过DAC0832转换为模拟量,也就是电压信号,然后通过示波器就可以观察单片机输出的波形。
P1.0~P1.3用于点亮不同的LED指示灯,从而指示单片机输出波形的类型。
当P1.0=0时第一个LED等被点亮表示单片机输出的为方波,当P1.1=0时第二个LED等被点亮表示单片机输出的为锯齿波,当P1.2=0时第三个LED等被点亮表示单片机输出的为三角波,当P1.3=0时第四个LED等被点亮表示单片机输出的为三角波。
P2口输入8位拨码开关状态控制波形频率,这样输出波得频率可以在1-255Hz之间任意选择。
P3.0~P3.3.用于输出波形类型的控制,主要通过四位拨码开关的输入量的不同让单片机输出相应的波形,拨码开关的四种状态如下:
P3.0=0,P3.1=1,P3.2=1,P3.3=1时输出方波;
P3.0=1,P3.1=0,P3.2=1,P3.3=1时输出锯齿波;
P3.0=1,P3.1=1,P3.2=0,P3.3=1时输出三角波;
P3.0=1,P3.1=1,P3.2=1,P3.3=0时输出正弦波。
P3.6用于给DAC0832给写数据信号。
2.3系统硬件原理图
图2信号发生计硬件原理电路
3.DAC0832简介
DAC0832是一个8位D/A转换器。
单电源供电,从+5~+15V均可正常工作。
基准电压的范围为-10V~+10V;电流建立时间为1us;COMS工艺,低功耗20Mw。
DAC0832转换芯片为20引脚,双列直插式封装。
其引脚图如下图:
图3DAC0832引脚图
D/A转换电路是一个R-2RT型电阻网络,实现8为数据的转换。
其引脚信号说明如下:
DI0~DI7:
转换数据输入。
:
片选信号输入,低电平有效。
ILE:
数据锁存允许信号输入,高电平有效。
:
第1写入信号输入,低电平有效。
:
第2写入信号输入,低电平有效。
:
数据传送控制信号输入,低电平有效。
:
电流输出1;
:
电流输出2;
:
反馈电阻端。
:
基准电压,其电压可正可负,范围为-10V~+10V。
DGND:
数字地。
AGND:
模拟地。
VCC:
芯片工作电源,从+5~+15V均可正常工作。
4.软件实现
4.1软件代码
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#definedac0832XBYTE[0xffff]
sbitSQU_K=P3^0;//P3^0-P3^3为拨码开关输入,用来控制输出波形
sbitSAW_K=P3^1;
sbitTRI_K=P3^2;
sbitSIN_K=P3^3;
sbitSQU_L=P1^0;//P1^0-P1^3点亮LED灯,用来指示拨码开关的状态
sbitSAW_L=P1^1;
sbitTRI_L=P1^2;
sbitSIN_L=P1^3;
sbitINTad=P3^3;
ucharcodesin_tab[]={0,0,0,0,1,2,3,4,5,6,8,//输出正弦波时用查表的方法
9,11,13,15,17,19,22,24,
27,30,33,36,39,42,46,49,
53,56,60,64,68,72,76,80,
84,88,92,97,101,105,110,114,
119,123,128,132,136,141,145,150,
154,158,163,167,171,175,179,183,
187,191,195,199,202,206,209,213,
216,219,222,225,228,231,233,236,
238,240,242,244,246,247,249,250,
251,252,253,254,254,255,255,255};
//*************************************************
//方波发生函数
//*************************************************
voidsquare()
{
uchara,b;
for(a=0;a<127;a++)
{
dac0832=0xff;
P2=0xff;
b=P2;
while(b--);
}
for(a=0;a<127;a++)
{
dac0832=0;
P2=0xff;
b=P2;
while(b--);
}
}
//*************************************************
//锯齿波发生函数
//*************************************************
voidsawtooth()
{
uchara,b;
for(a=0;a<255;a++)
{
dac0832=a;
P2=0xff;
b=P2;
while(b--);
}
}
//*************************************************
//三角波发生函数
//*************************************************
voidtriang()
{
uchara,b;
for(a=0;a<254;a=a+2)
{
dac0832=a;
P2=0xff;
b=P2;
while(b--);
}
for(a=254;a>1;a=a-2)
{
dac0832=a;
P2=0xff;
b=P2;
while(b--);
}
}
//*************************************************
//正弦波发生函数
//*************************************************
voidsinwave()
{
uchara,b;
for(a=0;a<92;a++)
{
dac0832=sin_tab[a];
P2=0xff;
b=P2;
while(b--);
}
for(a=91;a>0;a--)
{
dac0832=sin_tab[a];
P2=0xff;
b=P2;
while(b--);
}
}
//*************************************************
//主函数
//*************************************************
voidmain()
{
P1=0xff;
P2=0xff;
P3=0xff;
while
(1)
{
dac0832=0;
if(SQU_K==0)//输出方波LED灯和波形同频率闪烁
{
SQU_L=0;
square();
}
SQU_L=1;
if(SAW_K==0)//输出锯齿波LED灯和波形同频率闪烁
{
SAW_L=0;
sawtooth();
}
SAW_L=1;
if(TRI_K==0)//输出三角波LED灯和波形同频率闪烁
{
TRI_L=0;
triang();
}
TRI_L=1;
if(SIN_K==0)//输出正弦波LED灯和波形同频率闪烁
{
SIN_L=0;
sinwave();
}
SIN_L=1;
}
}
4.2程序调试
(1)首先点击图4中呈蓝色的小图标在出现的对话框中单击"output"在"CreateHEXFi"选项前打上“√”,其它选项为默认设置,单击确定,这样在编译程序时就可生成用于下载到单片机中的.hex文件。
图4生成.hex文件对话框
(2)在Proteus下对搭建好的电路进行仿真时,首先需给单片机下载程序,将鼠标放到单片机上双击,弹出如图5所示的对话框,在“ProgramFile”一栏中点击右面的“
”按钮,找到在KeilC下生成的.HEX文件将其选中,点击“确定”按钮即可将程序下载到单片机中。
图5添加.hex文件对话框
(3)程序下载好后,点击运行按钮,进行仿真,仿真界面如图6所示。
图6仿真界面显示
(4)拨动拨码开关使P1.0=0,P2=50,此时单片机输出频率为50Hz的方波,如图7所示。
图750hz时方波波形
(5)改变单片机输出频率为200Hz,波形如图8所示。
图8200hz方波波形显示
(6)拨动拨码开关使P1.1=0,P2=50,此时单片机输出频率为50Hz的锯齿波,如图9所示。
图950hz时锯齿波波形
(7)改变单片机输出频率为200Hz,波形如图10所示。
图10200hz锯齿波波形显示
(8)拨动拨码开关使P1.2=0,P2=50,此时单片机输出频率为50Hz的三角波,如图11所示。
图1150hz时三角波波形
(9)改变单片机输出频率为200Hz,波形如图12所示。
图12200hz三角波波形显示
(10)拨动拨码开关使P1.3=0,P2=50,此时单片机输出频率为50Hz的正弦波,如图13所示。
图1350hz时正弦波波形
(11)改变单片机输出频率为200Hz,波形如图14所示。
图14200hz正弦波波形显示
5.心得体会
通过这次课程设计,使我对单片机以及D/A转换器有了更加深入的理解,其中包括各自的原理、结构、各引脚的含义作用以及在电路中的连接方式等。
并且更为深入的了解了电路的分析与搭建方法和过程。
其次,通过电路的搭建,使我对PROTEUS软件的使用更加熟练、自如,而且深刻体会到了仿真的便捷和优势。
此外,在报告的完成过程中,也使我更加熟悉了排版的方法和技巧,并且可以灵活应用。
参考书目
[1]杨居义,杨尧,杨晓琴,王益斌.单片机课程设计指导[M].北京:
清华大学出版社,2009.
[2]周润景,徐宏伟,丁莉.单片机电路设计、分析与制作[M].北京:
机械工业出版社,2010.
[3]李华,王思明,张金敏.单片机原理及应用[M].兰州:
兰州大学出版社,2001.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 多功能 信号发生器 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)