简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx
- 文档编号:13367626
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:31
- 大小:5.24MB
简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx
《简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。
设计任务:
(一)利用单片机(AT89C52)及DA转换器(AD7520)作为主要元件设计并制作一信号发生装置,其原理框图如图1所示。
图1:
简易信号发生器原理示意图
(二)利用单片机(AT89C52)及AD转换器(MAX157)作为主要元件设计一信号测试仪测量
(一)中所产生信号的频率、信号幅度等参数,其原理框图如图2所示。
图2:
信号测试仪原理示意图
设计要求:
(一)基本要求
1.信号发生器至少要能够产生正弦波、方波、三角波和锯齿波等四种波形;
2.信号发生器所能产生信号的最高频率不得低于100HZ;
3.信号发生器所能产生信号的最高幅度不得小于5V;
4.信号发生器的所有参数均能通过键盘设置,并用数码管循环显示所设置得各个参数、也可用键盘选择所需要显示的参数;
5.信号测试仪能利用键盘选择在数码管上显示所测得参数;
6.自制系统所需电源。
(二)扩展要求
1.利用计算机设置信号波形、幅度、频率等;
2.利用计算机显示所测得的信号参数;
3.其他(如扫频等)。
四、设计思路
使用C语言进行编程,控制按下键盘中某个键实现特定的功能,通过单片机的I/O口进行输出,产生的信号通过DA转换器变换为模拟信号,并使用数码管进行波形种类和频率、幅度的显示。
五、设计内容
(一)软件部分
1、幅度、频率调节模块
本次实验中,我们所作出的信号发生器需要实现幅度、频率可调,对于幅度,我们可取默认值1V,当按键检测到按下时执行加或减的命令。
而频率的调节可以通过运用中断时间的调节来实现。
elseif(keyboard_status==5)//幅值加1,最大为5
{Asign=Asign+1;
xianshi();
if(Asign>
=5)
{Asign=5;
}}
elseif(keyboard_status==6)//幅值减1,最小为1
{Asign=Asign-1;
if(Asign<
=1)
{Asign=1;
}xianshi();
}
elseif(keyboard_status==7)//频率加1,最大为10ms
{count=count+1000;
if(count>
=10000)
{count=10000;
elseif(keyboard_status==8)//频率减1,最小为1ms
{count=count-1000;
if(count<
=1000)
{count=1000;
2、波形的输出模块
信号发生器需要实现的是方波,三角波,锯齿波和正弦波四种波形,我们采用的是取点法,在一个周期内选择64个点,并将其转化为10位数字量送到DA转换器中。
voidtime(void)interrupt1
{
TH0=(65536-count)/256;
TL0=(65536-count)%256;
if(lx==0)
{
for(m=0;
m<
64;
m++)
{CP=0;
qudian[m]=Asign*1024/5;
P3=qudian[m];
D1=qudian[m]>
>
8;
D2=qudian[m]>
9;
CP=1;
if(m>
=32)
{CP=0;
qudian[m]=0x00;
elseif(lx==1)
32;
m++)
{qudian[m]=Asign*1024*m/64/5;
CP=0;
CP=1}
for(m=32;
m>
=1;
m--)
elseif(lx==2)
elseif(lx==3)
for(m=0;
{qudian[m]=Asign*1024*sin(0.09817477*m)/5;
}
}
voidmain()
EA=1;
ET0=1;
TR0=1;
TMOD=0x00;
while
(1)
{TH0=(65536-count)/256;
TL0=(65536-count)%256;
KeyDown();
//读取按键
a1=0;
a2=0;
a3=0;
a4=0;
a5=0;
if(keyboard_status==0)//复位
count=1000;
Asign=1;
lx=0;
}
elseif(keyboard_status==1)//显示方波
{lx=0;
Squarevalue();
elseif(keyboard_status==2)//显示三角波
{lx=1;
Trianglevalue();
elseif(keyboard_status==3)//显示锯齿波
{lx=2;
Sawtoothvalue();
elseif(keyboard_status==4)//显示正弦波
{lx=3;
Sinvalue();
3.键盘扫描模块
利用键盘扫描来读取键值,检测到按键按下时,会进行相应的操作。
voidKeyDown()//按键检测函数的定义
{
chara=0;
KEY=0x0f;
if(KEY!
=0x0f)//读取按键是否按下
Delay10ms();
//延时10ms进行消抖
=0x0f)//再次检测键盘是否按下
{
//测试列
KEY=0X0F;
switch(KEY)
case(0X07):
keyboard_status=0;
break;
case(0X0b):
keyboard_status;
case(0X0d):
case(0X0e):
//测试行
KEY=0XF0;
case(0X70):
keyboard_status=keyboard_status;
case(0Xb0):
keyboard_status=keyboard_status+4;
case(0Xd0):
keyboard_status=keyboard_status+8;
case(0Xe0):
keyboard_status=keyboard_status+12;
while((a<
50)&
&
(KEY!
=0xf0))//检测按键松手检测
a++;
}}}}
4.延时函数
voidDelay10ms(void)//10ms延时函数定义
unsignedchara,b,c;
for(c=1;
c>
0;
c--)
for(b=38;
b>
b--)
for(a=130;
a>
a--);
5.计算各个波形的有效值
显示时显示的为周期与有效值,因此需要将幅值进行转化,利用的为公式,定义的有效值为全局变量。
voidSinvalue()//正弦波有效值
{floatsum1=0,sum2=0;
for(i=0;
i<
i++)
sum1=Asign*Asign*qudian[i]*qudian[i]+sum1;
sum2=sum1/64;
sum3=sqrt(sum2);
a1=1,a2=0,a3=0,a4=0,a5=0;
LED=LED_tab[1];
shu=10;
while(shu--);
LED=0x00;
voidSquarevalue()//方波有效值
sum2=sum1/64;
sum3=sqrt(sum2);
a1=1,a2=0,a3=0,a4=0,a5=0;
LED=LED_tab[2];
shu=10;
while(shu--);
LED=0x00
voidTrianglevalue()//三角波有效值
LED=LED_tab[3];
voidSawtoothvalue()//锯齿波有效值
sum1=Asign*Asign*qudian[i]*qudian[i]+sum1;
LED=LED_tab[4];
LED=0x00;
}
6.显示模块
通过5位数码管进行显示。
第一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 信号发生器 及其 测试仪 设计 制作