基于单片机的信号发生器有论文程序电路.docx
- 文档编号:9247816
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:21
- 大小:499.52KB
基于单片机的信号发生器有论文程序电路.docx
《基于单片机的信号发生器有论文程序电路.docx》由会员分享,可在线阅读,更多相关《基于单片机的信号发生器有论文程序电路.docx(21页珍藏版)》请在冰点文库上搜索。
基于单片机的信号发生器有论文程序电路
编号:
单片机综合设计
实训(论文)说明书
题目:
信号发生器
院(系):
信息与通信学院
专业:
电子信息工程
姓名:
学号:
指导教师:
2011年12月29日
摘要
本设计主要由键盘输入电路、显示电路、数模转换电路、控制电路、输出功率放大电路等几部分组成,其中核心部分为控制电路和数模转换电路。
控制电路部分采用单片机STC89C52RC构成控制电路以保证电路的频率可控制。
系统控制电路输出后采用DAC0832进行D/A转换,后级输出采用了运放LM358构的成功率放大器以驱动输出信号。
通过数码管和键盘进行人机交流。
系统能输出正弦波、三角波、锯齿波、方波和直流。
经最后实测表明,系统各项指标都达到题目的要求。
关键词:
控制电路;数模转换;功率放大
Abstract
Thedesigningofthemainwhichconsistofkeyboardcircuitandadisplaycircuit,DtoAconverters,controlcircuit,low-frequencyfilter,outputpoweramplifier,Amongthemthecorepartforthecontrolcircuitanddigital-to-analogcircuit.ControlcircuitpartadoptsMCUSTC89C52RCconstitutescontrolcircuittoensurethefrequencycontrolcircuit.SystemcontrolcircuitoutputusedafterDAC0832onD/Atransformation,Afterleveloutputadoptedop-ampLM358amplifierdrivepoweroutput.ThroughdigitalLEDandkeyboardforman-machinecommunication.Systemcanoutputsinewave,trianglewave,thesawtoothwaveandsquare-waveanddc.Resultsofexperimentsshowsthatthepoweramplifierhavegoodperformanceandreachtherequirementsofthesubject.
Keywords:
Controlcircuit;Analog-to-digitalconversion;Poweramplifier
目录
引言………………………………………………………………………………5
1系统方案设计………………………………………………………………7
1.1系统组成框图……………………………………………………………..……7
1.2信号发生电路…………..…………………………………………………..…7
1.3控制电路…………………………………………………………………….…7
1.4控制与显示电路设计思路…………………………………………………….7
1.5数模转换电路选择………………………………………………………….…7
1.6功率放大器的设计思路………………………………………………………8
1.7器件选择………………………………………………………………….……8
2硬件电路设计…………………………………………………………….…8
2.1D/A转换器…………………………………………………………………..…8
2.2数码管显示………………………………………………………………….…8
2.3中断键盘……………………………………………..…………………………9
2.4功率放大器……………………………………………………………………10
3软件设计…………………………………………………………………..…10
3.1程序流程………………………………………………………………………10
4实验测试结果……………………………………………………………..…10
5总结……………………………………………………………………………10
谢辞……………………………………………………………………………13
参考文献…………………………………………………………………………14
附录………………………………………………………………………………15
引言
信号发生器,作为实验用信号源,在当今电子科技化的社会是必不可少的仪器设备之一。
目前,市场上常见的波形发生器多为纯硬件搭接而成,且波形种类有限,多为锯齿、正弦、方波、三角等波形。
如555振荡电路便是产生正弦波、三角波和方波可取的途径之一。
但是这种电路存在波形质量差、控制难、可调范围小、电路复杂和体积大等缺点。
利用单片机通过程序设计方法来产生低频信号,其频率底线很低,具有线路相对简单、结构紧凑、体积小、价格低廉、频率稳定度高、抗干扰能力强、用途广泛等优点。
现介绍利用STC89C52RC单片机和DAC0832D/A转换器组成的数字式低频信号发生器波形信号频率范围为100Hz~100kHz,信号电压范围为3V,输出信号非线性失真低于0.1%,频率很稳定。
1、系统方案设计
1.1系统组成框图
根据课题设计要求使用单片机和D/A等实现任务要求,设计系统组成框图如图1.1所示。
图1.1:
系统组成框图
1.2设计一个低频信号产生电路
题目要求设计一个能产生正弦波、三角波、方波。
1.3设计一个控制电路
题目要求控制电路具有控制输出波形的周期,实现频率从100Hz到500Hz可调节,并能显示频率和波形信息。
根据题意分析可知,系统设计的重点和难点是:
如何兼顾输出波形失真与频率高低?
如何准确输出频率?
如何合理的控制输出?
1.4控制与显示电路设计思路
在单片机的控制下,要D/A在输出一个低频而又准确模拟量超短时间定时并且能进行数码显示扫描时,使得单片机相当繁忙,几乎没有时间去响应键盘输入,而键盘入设置应是最高最快响应级别以及提高输入方便性,所以输入采用2X7中断键盘。
1.5数模转换电路选择
由于采用8位单片机,而输出要求较高频率,所以采用8位数模转换芯片D/A0832.
1.6功率放大器的设计思路
由于D/A输入功率过小,需要进行功率放大;前级功率放大器采用运算放大器,方便控制放大倍数,为输出提供更大的驱动能力。
1.7器件选择
控制运算器件:
用8位单片机STC89C52RC;
D/A转换器件:
用8位并行DAC0832;
输入与输出:
用按键和数码管;
功放器件:
用运放LM358;
2、硬件电路设计
2.1D/A转换器
D/A转换电路和运算放大电路的设计,D/A的输出均采用负极性电压输出,运算放大器选用了LM358,电路如图3.1所示。
DAC0832D/A转换器将P1口输出的数字量变成模拟量,这个模拟量经LM358集成运算放大器负极性输出。
电压变化范围-3V。
图3.1:
D/A转换电路图
2.2数码管显示
显示部分采用的是4位7段共阴LED显示器显示,如图3.2所示。
显示的数据由单片机的并行P2输出高电平段码,为了提供足够驱动电流,在P2口并上1K强上拉排阻;凭借P0口强低电平驱动能力,选高4位作为位选,采用动态扫描的方法进行显示。
通过重新调整P2口段码顺序,利用软件迁就硬件电路。
这样的设计可以节约成本,降低了走线以难度。
如图3.2:
显示电路
2.3中断键盘
按键是系统的输入设备,是控制单片机的途径。
设计中共使用了14个按键,2×7键盘,键盘中包含了0~9的数字键、加“1”、减“1”、加“10”、减“10”和多个波形选择切换键。
如图3.3所示,由于功能键较多,所以在输入控制命令时非常方便。
当采用了中断键盘,键盘入为最高最快响应级别时,可以在单片机相当繁忙时第一时间响应输入,以及提高输入灵敏度和方便性。
原理是:
设置外部中断INT0和INT1中断,当有键入时,进入中断程序进行设置,设置完成然后才继续执行其他操作。
图3.3:
中断键盘
2.4功率放大器
功率放大器主要用于提供足够大的输出功率。
如图3.4所示,从DAC0832输出先经一级放大输出负极性电压,再经下一级LM358组成的功率放大器进行输出。
图3.4:
功率放大器
3、软件设计
3.1程序流程图
图4
主程序主要是初始化和显示,初始化外中断0、1和定时中断1。
设置初始频率为250Hz,循环显示。
定时中断主要是到时间就给P1口送查表值。
外部中断主要是等待按键输入,进行修改定时值和波形切换。
4、实验测试结
电路测试,从键盘输入100Hz至500Hz,在输出端能信能准确地输出100Hz至500Hz,幅度为3V,用键盘中加“+1”或“-1”能实现控制输出+1及-1频率控制功能,用键盘中“4”或“5”能实现控制输出+10及-10频率控制功能,因为采用了外部中断键盘,响应灵敏度高。
在输出最高频率时,会出现数码管闪动,因为在最高频率输出时,单片机CUP无法承受更高的频率输出,在使用DAC0832时,由于DAC0832内在的非线性等失真,当输出频率高于1KHz时,会产生明显失真,当输出10KHz时,波形出现明显严重失真。
本次实训设计中需要改进的地方还有很多,比如,频率的输出达不到要求,难以实现较高输出频率。
5、总结
通过这次的实训,我们拥有了自己学习知识的机会,从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,都对我所学的知识进行了检验。
此次实训的任务是制作低频信号发生器,由于单片机及其程序的运用是我的缺陷,编程运用掌握得不好,为此很有压力,但是压力是动力的源泉,有它才会促使我在困难中前进,收集资料,整理思路,把一个个问题解决。
在本次实训中有很多困难,但是在老师的耐心指导下,在同学们的共同讨论下,让我有机会在困难中艰难前行,解决问题,这样让我收获很大,同时更让我明白,只有在问题中去寻找答案,去思考,这样才会学到更多,往往“会”了,自身反而得不到提高。
在实训中,通过运用以前老师所讲的理论知识以及图书馆的资料,总体而言,我的思路比较清晰,因此有条理地完成每一步,最后还是按时完成了任务,做好了作品,完成了论文。
首先是通过查阅资料,以及在网上搜索相关资料,通过一步步编写程序,修改参数等,使我对低频信号发生器的整个过程有了很好的掌握。
并且通过帮助其他人寻找程序的问题,也让我对其他的设计有了一点的了解和掌握,其中对定时器/计数器运用也比较熟悉。
同时,通过频率计的设计,掌握了定时/计数初值的计算和中断的使用。
本次设计低频信号发生器输出信号的不是很高,能实现在100Hz~500Hz,输出幅为3V度左右,必须对信号稳压等处理,使得输出信号较为稳定,需要输出信号进行功率放大处理等,通过对运放的使用,我较好的掌握了其基本的功率放大工作原理,对后续的使用奠定了较好的基础。
在设计的过程中,进一步;熟悉了低频信号发生器设计的一般原理以及步骤,对低频信号发生器有了一个新的认识。
通过此次实训,我发现了自己的许多不足之处,对各种汇编命令使用较少,C语言掌握不够牢固,操作速度不够快速准确等都反映出自己还有太多的知识要学习,并且要加强动手能力。
要做到能将所学的知识灵活自如的运用到实际中,要不断加强深层次的知识的学习,不断提高自己的综合设计能力!
但最后还是能把理论知识与实践相结合,同时动手能力也得到了提高。
致谢
通过本次试实验的训练,我的理论知识很动手能力得到了整体的提高,同时加深了理论知识与实践的相结合。
在此,我特别要感谢我的指导老师严素清、符强。
他们学识渊博,专业精通,对事业怀着深厚的感情;他们诲人不倦,与同学们保持着良好的沟通并经常给予科学的指导和热心的勉励。
就本设计而言,从提纲、草拟、修改到最后定稿,老师都给予了一而再、再而三的精心指导,每个环节都凝结老师努力的付出和辛劳的汗水。
毋庸讳言,老师的道德文章将成为我人生的座标和里程碑。
从开始老师就指导我们课题方案设计,在选题以及研究设计方法上给予的悉心指导,使我尽快理清思路,通过请教老师以及查找资料使我较快的完成了对软件的编程及调试和顺利完成了论文写作。
整个实训内容都是在老师悉心指导下完成的,老师严谨的治学作风、求实的工作态度使我受益匪浅,更重要的是从老师身上学到了对待任何事情的那种精益求精和一丝不苟的精神和态度,在本次实训中,我遇到了很多难题,然而这些难题让我不断的学习,在困难中进步,本次实训同学们帮了我很多忙,通过同学之间的相互帮助,使我顺利地完成了本次实训。
最后由衷地感谢学校给我们提供实训的机会,感谢指导教师对我的教导,更要感谢给予我很多关心和帮助的同学们,你们对我的关爱让我深深感受到了生活的美好,谢谢你们一直以来给予我的理解、鼓励和支持!
参考文献
[1]王贤勇,赵传申,单片机原理与接口技术[M].北京:
清华大学出版社,2010
[2]杨拴科,模拟电子技术基础[J].北京:
高等教育出版社,2010
[3]李元庆,电路基础[M].广东:
华南理工大学出版社,2007
[4]戴梅鄂,史嘉权.微型计算机技术及应用[M].北京:
清华大学出版社,2002
[5]蒋延彪.单片机原理及应用[M].重庆:
重庆大学出版社,2003
[6]胡汉才.单片机原理及系统设计[M].北京:
清华大学出版社,2002
[7]杨金岩等.8051单片机数据传输接口扩展技术与应用实例[M].北京:
人民
邮电出版社,2005
附录:
#include
#defineucharunsignedchar
#defineuintunsignedint
uchara[4]={0,0,0,0};//显示位选缓冲
ucharj=1,k=1,key=0;//键位
ucharv=100,y;//输出缓冲
ucharki=0;//键入标志
ucharsstsd=0;//输出波形标志
uintdat=0,tim=250;fre=250;//转换电压数据
sbitp00=P0^0;sbitp01=P0^1;
sbitp02=P0^2;sbitp03=P0^3;//输出波形指示
sbitp04=P0^4;sbitp05=P0^5;
sbitp06=P0^6;sbitp07=P0^7;//显示位扫描
codeucharDispCode[11]={0xD7,0x14,0xCD,0x5D,
0x1E,0x5B,0xDB,0x15,0xDF,0x5F,0x00};//数码管段码
//********DAC0832非线性输出修正码表***********
//三角波、正弦波
codeuchartri[100]={0,5,10,15,20,26,31,36,41,46,
51,56,61,66,71,77,82,87,92,97,102,107,112,117,122,
128,133,138,143,148,153,158,163,168,173,179,184,
189,194,199,204,209,214,219,224,230,235,240,245,
250,255,250,245,240,235,230,224,219,214,209,204,
199,194,189,184,179,173,168,163,158,153,148,143,
138,133,128,122,117,112,107,102,97,92,87,82,77,
71,66,61,56,51,46,41,36,31,26,20,15,10,5};
codeucharsin[100]={128,136,143,151,159,167,174,
182,189,196,202,209,215,220,226,231,235,239,243,
246,249,251,253,254,255,255,255,254,253,251,249,
246,243,239,235,231,226,220,215,209,202,196,189,
182,174,167,159,151,143,136,128,119,112,104,96,
88,81,73,66,59,53,46,40,35,29,24,20,16,12,9,6,4,
2,1,0,0,0,1,2,4,6,9,12,16,20,24,29,35,40,46,53,
59,66,73,81,88,96,104,112,120};
//*********函数声明**************************
voidinit(void);//初始化
voidoperation(void);
voidkeyinput(void);//输入数据
voiddisplay(void);//显示
voiddelay1ms(uintj);//延时1mS
//**********主函数*************************
voidmain(void)
{init();
while
(1)
{
display();
}
}
voidinit()//初始化
{P3=0x0C;
p00=0;
TMOD=0x20;
TH1=256-25000/fre;//66//20=500
TL1=256-25000/fre;//66//20=500
EA=1;
EX0=1;
EX1=1;
ET1=1;
TR1=1;
IT0=1;
IT1=1;
}
voidinput0(void)interrupt0//中断0键盘输入
{
P3=0xFB;
switch(P3)
{
case0xFA:
key=0;if(fre!
=0)ki++;break;
case0xF9:
key=1;ki++;break;
case0xEB:
key=2;ki++;break;
case0xDB:
key=3;ki++;break;
case0xBB:
key=4;
ki++;
if(TR1==1&&fre>100)
{fre=fre-10;
TH1=256-25000/fre;}
break;
case0x7B:
key=5;
ki++;
if(TR1==1&&fre<500)
{fre=fre+10;
TH1=256-25000/fre;}
break;
case0xFB:
if(fre<65536)fre++;
if(fre>500)
fre=500;
if(fre<100)
fre=100;
TH1=256-25000/fre;break;
default:
break;
}
if(ki<5&&fre<65536&&P3!
=0xFB&&TR1==0)fre=fre*10+key;
key=0;
if(fre==0)ki=0;
P3=0x0C;
if(sstsd>=5){sstsd=0;P0=0xFF;}
switch(sstsd)
{
case0:
P0=0xFF;p00=0;break;
case1:
P0=0xFF;p01=0;break;
case2:
P0=0xFF;p02=0;break;
case3:
P0=0xFF;P1=0;p03=0;break;
case4:
P0=0xFF;break;
}
}
voidinput1(void)interrupt2//中断1键盘输入
{
P3=0xF7;
switch(P3)
{
case0xF6:
key=6;ki++;break;
case0xF5:
key=7;ki++;break;
case0xE7:
key=8;ki++;break;
case0xD7:
key=9;ki++;break;
case0xB7:
sstsd++;if(sstsd>=5)sstsd=0;break;
case0x77:
if(TR1==1){TR1=0;fre=0;ki=5;}
elseif(TR1==0)
{ki=5;
if(fre>500)
fre=500;
if(fre<100)
fre=100;
TH1=256-25000/fre;//130---666hz
TR1=1;
}break;
case0xF7:
if(fre>0)fre--;
if(fre>500)
fre=500;
if(fre<100)
fre=100;
TH1=256-25000/fre;break;
default:
break;
}
if(ki<5&&TR1==0)fre=fre*10+key;
if(fre==0)ki=0;
key=0;
P3=0x0C;
if(sstsd>=4){sstsd=0;P0=0xFF;}
switch(sstsd)
{
case0:
P0=0xFF;p00=0;break;
case1:
P0=0xFF;p01=0;break;
case2:
P0=0xFF;P1=0;p02=0;break;
case3:
P0=0xFF;break;
}
}
voidtime1(void)interrupt3
{
v--;
switch(sstsd)
{
case0:
y++;if(y==50){P1=~P1;y=0;};break;
case1:
P1=sin[v];break;
case2:
P1=tri[v];break;
}
if(v==0)v=100;
}
voiddisplay(void)//4位数码显示
{uchari=0;
if(fre<19999)
{
a[0]=fre/1000;
a[1]=fre%1000/100;
a[2]=fre%1000%100/10;
a[3]=fre%10;
}
if(a[0]==0)
{a[0]=10;
if(a[1]==0){a[1]=10;if(a[2]==0){a[2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 信号发生器 论文 程序 电路