C51单片机的波形发生器.docx
- 文档编号:23932674
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:19
- 大小:606.65KB
C51单片机的波形发生器.docx
《C51单片机的波形发生器.docx》由会员分享,可在线阅读,更多相关《C51单片机的波形发生器.docx(19页珍藏版)》请在冰豆网上搜索。
C51单片机的波形发生器
通信专业技能实训报告
题目基于Proteus的波形发生器设计
学院信息科学与工程学院
专业通信工程
班级
学生
学号
指导教师魏长智
二〇一九年一月五日
1前言
波形发生器也称函数发生器,作为实验信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。
目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为锯齿波,正弦波,方波,三角波等波形。
作为一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。
函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路。
通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波的函数波形发生器。
本设计主要运用AT89C51单片机为核心硬件,对直流电动机进行速度控制。
并且辅助以硬件部分的驱动、复位、LED显示等电路,软件部分对AT89C51进行模块化程序的输入,通过按钮控制,实现对直流电动机的正转、反转、加速、减速和停止等控制功能。
同时利用DAC0823转换成模拟信号输出,由LED与电动机转速显示控制效果。
利用AT89C51芯片进行低成本直流电动机控制系统设计,简化系统构成、提高系统性能,满足了生产要求。
2硬件设计
2.1启动方式选择
因为本设计要求设计一个波形发生器,要求能产生正弦波、方波、三角波、梯形波、锯齿波,而且由按键控制输出的波形。
故各个波形输出并非同步输出,而是由按键控制,单个输出,并且本例只需要一个DAC,如果选择双缓冲方式就会加大不必要的难度;直通方式不能有效的控制DAC转换,转换时可能会出现数据流失。
故选择单缓冲启动控制方式来驱动DAC0832。
2.2框图设计
根据2.1节的判断,选择AT89c51单片机作控制,实现电路框如下:
图2.1硬件设计框图
2.3电路图设计
根据以上框图,选择+12V的基准电压,选择一级集成运放作放大电路,连接A/D转换电路图如下:
图2.2单片机与DAC的连接方式
3DAC0832性能与特征
3.1D/A转换器与单片机接口探究
D/A转换器与单片机接口具有软硬相依性。
在连接过程中要考虑到数据线、地址线、控制线的连接。
3.1.1数据线连接
D/A转换器与单片机接口要考虑到两个问题:
一个是位数,当高于8位的D/A转换器与8位数据总线的51单片机接口时,51单片机的数据必须分时输出,这时就必须考虑数据分时传送的格式和输出电压“毛刺”问题;二是D/A转化器的内部结构,当D/A转换器的内部结构没有输入锁存器时,必须在单片机与D/A转换器之间增设锁存器或者I/O口。
最常用的是8位带锁存端的D/A转换器与8位单片机的接口,这时只需要将单片机的数据总线和D/A转换器的8位数据输入端一一对应即可。
3.1.2地址线连接
一般的D/A转换器只有片选信号,而没有地址线。
这时单片机的地址线采用全译码或者部分译码,经译码器输出控制片选信号,也可以用某一位I/O线来控制片选信号。
也有少数D/A转换器有少量的地址线,用于选中片内独立的寄存器或者选择输出通道,这时单片机执行的地址线与D/A转换器的地址线对应连接。
3.1.3控制线连接
D/A转换器主要有片选信号、写信号、及启动转换信号等,一般由单片机的有关引脚或译码器提供。
一般来说,写信号多由单片机的信号控制;启动信号常常由片选信号与写信号的组合形式(LE1、LE2)形成,当单片机执行一条输出指令时,传送的地址使转换器的片选信号有效。
3.2DAC0832的认识
图3.1DAC0832的管脚结构
3.2.1DAC0832的结构
DAC0832的结构如图1.1所示,主要由控制逻辑电路、输入寄存器、DAC寄存器和D/A转换器构成。
由上图逻辑控制电路可知:
LE1=(
+
)ILE
LE2=
+
由LE1控制输入寄存器读入数据,由LE2控制输入寄存器向DAC寄存器传输数据,同时开始D/A转换。
3.2.2DAC0832的引脚
DAC0832的引脚如图2.2所示:
DI0~DI7:
8位数据输入线,高电平有效。
ILE:
数据锁存允许控制输入线,高电平有效。
:
片选信号输入线,低电平有效。
:
输入锁存器写选通输入线,负脉冲有效。
输入锁存器的信号就是LE1。
LE1负跳变有效。
:
数据传送控制信号输入线,低电平有效。
:
DAC寄存器写选通信号输入线,负脉冲有效。
DAC锁存信号就是LE2,LE2的负跳变有效。
:
模拟电流输出线。
:
模拟电流输出线,采用单极性输出时,
通常接地。
:
反馈信号输入线。
反馈电阻
被制作在芯片里,用作外接运放的反馈电阻,为D/A转换器提供电压输出。
:
参考电压输入端。
要求外接一精密电压源,电压范围在-10V~+10V之间选定。
通过
的符号来改变输出极性。
:
电源接口。
AGND:
模拟地。
DGND:
数字地。
注:
数字信号的高频噪声很大,如果模拟信地和数字地混合的话,就会把数字的噪声传到模拟部分,造成干扰。
如果分开的话,高频噪声可以在电源处通过滤波来消除掉。
3.2.3DAC0832的启动控制方式
DAC0832有三种启动控制方式:
(1)直通方式:
将信号都接地,ILE信号引脚接高电平,只要数据传送到数据线上,两级锁存器同时开始工作,并启动D/A转换,即转换器处于非受控状态。
在这种工作方式下,转换器的数据线不能直接和单片机的数据线(P0.0~P0.7)相连接。
因为P0口分时复用为低8位的地址总线和数据总线,对输出无锁存能力,会使转换器的输出不确定。
但是可以将ADC的数据线连接到某个I/O口上,执行端口输出指令(MOVPxA)即可启动一次D/A转换。
这种方式很少采用。
(2)单缓冲方式:
两级锁存器接受同一种控制,例如将和直接接地,8位ADC锁存器处于非受控状态,只有8位输入锁存器处于受控状态,即此时仅有LE1控制ADC。
这种方式在不要求多个模拟同步输出时采用。
(3)双缓冲方式:
俩个锁存器都处于受控状态,单片机要对转换器进行两步写操作:
第一次执行指令使LE1有效,称作第一级缓冲,第二次执行指令使LE2有效,称作第二级缓冲。
这种方式的优点是数据接收和启动转换可以异步进行,可在D/A转换的同时接收下一个转换数据,以提高转换速度,还可以实现多个转换器同时启动转换,同步输出。
4程序设计
4.1程序流程图
4.1.1程序设计思路
(1)因为要使用到按钮(本例中选择独立按键),必须使用到键盘扫描,首先要进行键盘消抖,然后通过扫描确定是哪个按键被按下,通过I/O口(本例中为P1口)的数据判断选择五种波形中的哪一个;
(2)根据
(1)中的结果,通过编程产生各个波形的数字信号;
(3)控制DAC转换数字信号为模拟信号。
程序框图如下:
图4.1程序设计思路
4.1.2流程图
在本流程图中分别以k1、k2、k3、k4、k5代表单片机的I/O口P1.0、P1.1、P1.2、P1.3、P1.4;设置flag1、flag2、flag3、flag4、flag5为1时分别代表方波、正弦波、三角波、梯形波、锯齿波。
当确认按键按下时,令相对应的flagx=1,然后用连续的判断程序来选择将要输出的波形。
程序实现了只需按一下按钮便可持续输出对应的波形。
流程图如下:
图4.2程序流程图
4.2用C语言实现
根据程序流程图用C语言编程,C语言实现的代码为:
#include
typedefunsignedcharu8;
typedefunsignedintu16;
sbitk0=P1^0;
sbitk1=P1^1;
sbitk2=P1^2;
sbitk3=P1^3;
sbitk4=P1^4;
sbitled1=P3^0;
sbitled2=P3^1;
sbitled3=P3^2;
sbitled4=P3^3;
sbitled5=P3^4;
u8temp;
u8constcodeSIN_code[256]={
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,
0xa5,0xa8,0xab,0xae,0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,
0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0,
0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,
0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf3,0xf2,
0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,
0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,
0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,
0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x79,0x76,
0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,
0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,
0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,
0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,0x8,0x7,0x6,0x5,0x4,
0x3,0x3,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xc,0xd,
0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,
0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35,0x38,0x3b,0x3d,0x40,
0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,
0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c
};
voiddelay(u16num)
{
u16x,y;
for(x=num;x>0;x--)
for(y=110;y>0;y--);
}
voidmain(void)
{
u8temp,a,t;
a=0x00;
temp=0x00;
P0=0;
while
(1)
{
led4=0;led2=0;led3=0;led1=0;led5=0;
if(k1==0)//juchi
{led2=~led2;
for(temp=0xff;temp<0x00;temp--)
{P0=temp;}
if(temp==0x00)
temp=~temp;
}
if(k2==0)//sanjiao
{led3=~led3;
for(a=0x00;a<0xff;a++)
{P0=a;}
for(a=0xff;a>0x00;a--)
{P0=a;}
}
if(k3==0)//tixing
{led4=~led4;
for(a=0x00;a<0xff;a++)
{P0=a;}delay(3);
for(a=0xff;a>0x00;a--)
{P0=a;}
delay(5);
}
if(k4==0)//zhengxian
{
led5=~led5;
for(t=0;t<255;t++)
{P0=SIN_code[t];}
}
if(k0==0)//juxing
{
led1=1;
P0=temp;delay(30);
P0=~temp;delay(30);
}
}
}
5Proteus仿真及结果
将程序代码在Kill中编译输出.HEX文件,烧写进单片机中,用Proteus仿真软件仿真,得到的输出波形为:
5.1方波:
图5.1输出方波波形
由仿真结果可知,通过键盘输入触发信号选择方波输出后,触发信号经过AT89c51单片机后,根据单片机内写入的程序,通过P0口输出数字信号,数字信号经过DAC转换,成为模拟信号,最后经过运算放大器放大输出,通过示波器显示输出波形。
并且显示波形为方波的led灯点亮。
根据方波信号可以明显看出符合c语言程序设计:
P0=temp;delay(30);P0=~temp;delay(30);
P0口先输出0信号,并延迟30ms,之后再取反输出高电平同样延迟30ms从而形成方波信号。
形成一个方波信号后一直循环该程序,即可完成输出持续的方波信号。
5.2正弦波:
图5.2输出正弦波形
由仿真结果可知,通过键盘输入触发信号选择正弦波输出后,触发信号经过AT89c51单片机后,根据单片机内写入的程序,通过P0口输出数字信号,数字信号经过DAC转换,成为模拟信号,最后经过运算放大器放大输出,通过示波器显示输出波形。
并且显示波形为正弦波的led灯点亮。
根据正弦波信号可以明显看出符合c语言程序设计:
for(t=0;t<255;t++);{P0=SIN_code[t];}
P0口根据循环方式,从事先准备好的由256个数据形成的正弦波采点数组,依次输出数组中数据对应的电平,不同数据输出不同电平,循环256次。
如t=0输出第一个数据的电平;t=11,输出第十二个数据的电平。
形成一个正弦波信号之后一直循环该程序,即可完成输出持续的正弦波信号。
5.3三角波:
图5.3输出三角波形
由仿真结果可知,通过键盘输入触发信号选择三角波输出后,触发信号经过AT89c51单片机后,根据单片机内写入的程序,通过P0口输出数字信号,数字信号经过DAC转换,成为模拟信号,最后经过运算放大器放大输出,通过示波器显示输出波形。
并且显示波形为三角波的led灯点亮。
根据三角波信号可以明显看出符合c语言程序设计:
for(a=0x00;a<0xff;a++){P0=a;}
for(a=0xff;a>0x00;a--){P0=a;}
P0口先输出0信号,并且根据循环输出信号依次升高至0xff,形成三角波的一侧,之后根据循环依次递减至0x00,形成完整的三角波。
形成一个三角波信号之后一直循环该程序,即可完成输出持续的三角波信号。
5.4梯形波:
图5.4输出梯形波形
由仿真结果可知,通过键盘输入触发信号选择梯形波输出后,触发信号经过AT89c51单片机后,根据单片机内写入的程序,通过P0口输出数字信号,数字信号经过DAC转换,成为模拟信号,最后经过运算放大器放大输出,通过示波器显示输出波形。
并且显示波形为梯形波的led灯点亮。
根据梯形波信号可以明显看出符合c语言程序设计:
for(a=0x00;a<0xff;a++){P0=a;}delay(5);
for(a=0xff;a>0x00;a--){P0=a;}delay(3);
P0口先输出0信号,并且根据循环输出信号依次升高至0xff,形成三角波的一侧,再延迟一段时间,之后根据循环依次递减至0x00,再延迟一段时间,形成完整的梯形波。
形成一个梯形波信号之后一直循环该程序,即可完成输出持续的梯形波信号。
5.5锯齿波:
图5.5输出锯齿波形
由仿真结果可知,通过键盘输入触发信号选择锯齿波输出后,触发信号经过AT89c51单片机后,根据单片机内写入的程序,通过P0口输出数字信号,数字信号经过DAC转换,成为模拟信号,最后经过运算放大器放大输出,通过示波器显示输出波形。
并且显示波形为锯齿波的led灯点亮。
根据锯齿波信号可以明显看出符合c语言程序设计:
for(temp=0xff;temp<0x00;temp--){P0=temp;}
if(temp==0x00)temp=~temp;
P0口先输出信号根据循环从高到低开始降低,当降到0信号时P0口输出信号取反回到高电平,从而形成锯齿波信号。
形成一个锯齿波信号之后一直循环该程序,即可完成输出持续的锯齿波信号。
实训结语:
通过一周的课程设计,使我对单片机的结构功能和使用方法有了更深的了解,也加强了我对kill、Proteus的使用熟练度,为以后熟练运用打下了良好的基础,我能将学习的理论知识运用的课程设计的实践中,这加强了我对单片机相关知识、C语言以及数电模电知识的运用与掌握。
设计单片机是一个复杂而且消耗时间很长的过程,需要先进行项目构思,寻找设计方法与思路,去了解相关方面的知识,构思完成后准备工作基本结束了,之后便是仿真硬件设计和软件设计。
硬件设计第一点需要做的是根据设计做出框图,之后根据设计的需要选择元件连接成电路图。
软件设计则需要根据电路原理图考虑到线路的连接方式与相连的端口设计相应的程序,这样才能正确的运行程序,要根据单片机的仿真图与实际运行结果画出程序流程图,根据流程图在KILL中编写程序代码,最后调试排错。
在硬件和软件设计完成后,还需将两者结合,也就是说将程序产生的.HEX文件烧写进单片机,硬件与软件必须衔接恰当,否则就不能正常运行,如果不能运行,就必须调试电路结构或者改变程序,再次检查错误。
比如在这次设计中,针对DAC0832单缓冲启动控制方式的程序就不能直接考入直通方式的电路中,反之亦然。
电路有很多种连法,程序也是灵活多变,所以需要了解的是它们的原理,只有这样才能运用的自如。
我在单片机课程中更加强化了我对C语言的了解,因为C语言太长时间不用有些生疏,所以在本次设计尝试使用C来编写代码是经常遇到困难,让我无从下手,这使我自己认识到对C语言还不熟悉,对C语言的设计思路有时会比较模糊,经验还不足,还需努力,多用多练。
我深知此次在仿真层面的设计与真正制作实物还是有较大的差距,所以今后的日子里还要更加上进,认真学习知识,熟练运用知识,让自己更上一层楼!
参考文献
[1]李念强.单片机原理及应用[M],2版.北京:
机械工业出版社,2013.9
[2]杨波,刘明军.程序设计基础(C语言)[M],第2版.北京:
清华大学出版社,2010.9
[3]童诗白,华成英.模拟电子技术基础[M],4版.北京:
高等教育出版社,2006.5(2014.5重印)
[4]阎石.数字电子技术基础[M],5版.北京:
高等教育出版社,2006.5(2014.12重印)
[5]张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:
电子工业出版社,2007
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 单片机 波形 发生器