基于STC89C52的简易波形发生器.docx
- 文档编号:3863518
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:19
- 大小:222.75KB
基于STC89C52的简易波形发生器.docx
《基于STC89C52的简易波形发生器.docx》由会员分享,可在线阅读,更多相关《基于STC89C52的简易波形发生器.docx(19页珍藏版)》请在冰豆网上搜索。
基于STC89C52的简易波形发生器
摘要
本系统是基于STC89C52单片机利用DDS的合成原理的低频信号发生器。
采用STC89C52单片机作为控制核心,外围采用数字/模拟转换电路〔DAC0832〕、运放电路〔LM358〕、按键等构成整个系统。
通过按键控制可产生方波、三角波、正弦波、锯齿波并可以微调频率大小。
通过上位机可以通过PC可以选择波形和波形的频率。
其设计简单、性能优好,频率的精度由DA和系统时钟大小决定,所以很易的实现精度调整,系统的性价比高,可用于多种需要低频信号的场所,具有一定的实用性。
关键词:
STC89C52;DAC0832;LM358;DDS
1.设计任务与要求
①利用单片机组成一个多波信号发生器。
②能输出的波形为三角波、锯齿波、方波、正弦波。
③输出波形频率f=1~100Hz、。
④输出波形频率通过PC机设置。
2.方案设计与论证
2.1系统信号发生的方案设计
方案一、通过专用DDS芯片如AD9850作为信号发生器件,用专用芯片的特点是,产生的信号频率范围宽,可以产生很高的频率,频率的精度高。
但是价格比拟贵。
方案二、通过产生PWM产生方波,通过低通滤波器变为正弦波,在加上其他外围电路可产生三角波、锯齿波、方波、正弦波。
可实现题目要求,这种设计价格便,但是外围比拟复杂,频率不好控制。
方案三、通过单片机外围加上DA芯片代替专用的DDS芯片,同样应用DDS信号合成原理产生任意想要的信号,这样构造的系统简单,用廉价的DAC0832就可产生满足题目要求的低频信号。
结论:
通过上述三个方案可以知道,用专用DDS芯片合成性能比拟高,价格贵,用于本设计就大材小用,用PWM价格廉价,但是性能不好,所以属于中间的DA芯片是理想的选择。
2.2系统控制芯片的方案设计
方案一、选用STM32作为控制芯片,STM32内部资源丰富,时钟速度快,是一块性价比极高的芯片,用本系统会使得系统速度提升。
尽管性价比高,还是比传统51单片机要贵点,控制指令多,相对于51单片机来说程序要比拟复杂。
方案二、选用STC公司的51单片机,STC89C52是对传统51做了增强,但是与传统51是兼容的,所以指令简单易于操作,12MHZ的系统完全满足题目涉及要求。
结论:
通过上述可以知道,STM32’性价比高,性能强大,但是用本系统是大材小用,而STC89C52那么完全能满足题目要求而且价格比STM32要廉价,所以本设计选用STC89C52作为控制芯片。
3硬件系统模块及理论分析
3.1总体设计框架
图3.1
总体系统框架是由按键、最小系统模块、DAC0832、转串口模块组成,这样就可以实现多函数输出和PC机通信。
按键是为了实现波形的切换和频率的大小调节,最小系统是系统的主控制模块,是沟通按键、DAC0832模块、PC机的主控模块,是系统必不可少的模块。
转串口模块式为了实现单片机与PC的通信,PC可以通过上位机控制波形的选择和频率大小设置。
3.2最小系统模块电路
图3.2
图3.2是STC89C52的最小系统图,组成局部有时钟电路和复位电路。
实现的功能是控制DAC0832的模拟输出量的大小和输出的频率,以产生方波、三角波、正弦波、锯齿波,并通过与转串口电路的结合以实现与PC机之间的通信。
3.3DAC0832模块电路
图3.3
上图中DAC0832电路的接法是直通型接法,这种接法的最大特点就是只需要对DAC0832的数据口赋值就可以实现电压的输出,所以操作起来非常方便,而DAC0832输出的并不是电压,而是电流所以要在输出端加上一个运放实现电流到电压的转换。
选用LM358的原因是它输出端的电压可以到达负电压,这样就可以实现单电源供电了。
3.4按键电路
图3.4
按键是通过单片机的P0口进展监控,当单片机检查到有按键按下时,单片机就会根据按键对DA输出进展相应的改变,这样就可以实现按键对输出波形的切换和频率的调节。
3.5转串口电路
图3.5
转串口用的芯片是CH340,CH340产家提供有两种接法,一种是可以把PC机串口的电平转变为USB电平,另外一种可以直接把单片机的电平转换为USB电平,本设计选用的是第二种接法,因为这样接就可以省去了MAX232把单片机电平转换外PC机电平,这样设计电路变得更加可靠稳定了,同时也可以节省本钱,同样本电路也是需要时钟电路让CH340能正常工作。
4.系统软件设计
系统软件由主程序和产生波形的子程序组成,软件设计主要是产生各种波形的子程序的编程,通过编程可得到各种波形。
周期的改变可采用插入延时子程序的方法来实现。
主程序和几种常用波形子程序的流程图如下图。
4.1主流程图
图4.1
由图4.1可以简单的知道,程序的大概思路是,判断按键与上位机是否发送数据来觉得DA的输出量,初始化的时候程序是写输出频率为200HZ的方波信号。
4.2软件模拟仿真
图4.2锯齿波仿真
锯齿波产生是通过P2口将00H送入存放器A中,DAC0832输出A中的内容,读取P2口的状态,取反后作为延时常数,当A中的内容不为0FFH时,A中的内容加1,当A中的内容等于FFH返回开场,从而输出波形。
锯齿波程序
voidjuchibo(void)
{
for(num=0;num<256;num++)
{cs=0;DAC0832=num;cs=1;while(a==0);a=0;}
}
4.3方波仿真图
图4.3方波仿真
方波产生是通过P2口将00H输出给DAC0808,输出对应模拟量,然后读取P2口的状态,取反后作为定时器延时,延时时间到,将FFH输出时,同样输出对应模拟量,再延时,从而得到方波。
方波程序如下:
voidfangbo(void)
{
for(num=0;num<127;num++)
{cs=0;DAC0832=0XFF;cs=1;while(a==0);a=0;};
for(num=127;num>0;num--)
{cs=0;DAC0832=0X00;cs=1;while(a==0);a=0;};
}
4.4按键检测原理
voidchangbo(void)
{
if(P32==0);
delay(20);
if(P32==0)
flag++;
if(flag>=4)
flag=0;}
总结
通过设计简易的函数发生器,我学会了自己查资料,通过大量的资料结合,最终决定了现在所选用的方案,接下来就是运用之前学习过的Protel99se画板技术,成功的画出了电路图。
接着是电路的调试,这一个步骤是最难的,当然遇到的挫折也是最多的,例如开场的时候没有对DAC0832深入了解造成了,电路设计没错就是不能正常工作,最后慢慢的调节,发现原来是自己所选用的参考电压出问题,本来应该选用负电压作为参考电压,按照手册提供的经典电路才能得到一个正电压,但是由于没注意到这点所以画了很多的时间。
能够把电路正常的调处来还要感谢同学对我的帮助,因为他们做过这样给我更加大的信心。
调完了电路后接下来的是进展写程序,开场调式程序的时候有点乱,因为没有画完流程图在调,所以思路会比拟混乱。
不过后来通过参照网上的程序,终于实现了题目所要的功能。
参考文献
[1]周明德.微型计算机系统原理及应用[M].:
清华大学,2002.341~364.
[2]X乐善.微型计算机接口技术及应用[M].:
航空航天大学,2001.258~264.
[3]童诗白.模拟电路技术根底[M].:
高等教育,2000.171~202.
[4]杜华.任意波形发生器及应用[J].国外电子测量技术,2005.1:
38~40.
[5]X友德.单片微型机原理、应用与实践[M].XX:
复旦大学,2004.40~44.
[6]程朗.基于8051单片机的双通道波形发生器的设计与实现[J].计算机工程与应用,2004.8:
100~103.
[7]X永瑞.电子测量技术根底[M].XX:
XX电子科技大学,2006.61~101.
[8]李叶紫.MCS-51单片机应用教程[M].:
清华大学,2004.232~238.
附件
I源程序
/********************************************
时间:
2021年6月23日15:
33:
43
硬件条件:
stc89c52rc单片机上
工程:
函数发生器
龙腾跃
准备知识:
通过DAC0832实现信号的发生,DAC0832选用的是直通型输出方式
修改:
*********************************************/
#include
#include"Delay_time.h"
#include"Uart.h"
#include
//#include"boxing.h"
sbitCS=P3^7;
sbitup=P0^0;
sbitdown=P0^1;
bitflag=0,flag1=0,flag2=1,flag3=0,flag5=0,flag6=1,cont=1;
unsignedintnum4=170,num3=188,num2=0,num1=0;
unsignedcharmark=0;
unsignedchark=1;
unsignedcharN=0x00;
unsignedinttmp;
unsignedchari=0;
unsignedintt=2;
unsignedchartable[4];
voidTriangle();//输出三角波
voidSquare();//方波
voidsin();//正弦波
voidSawtooth();//锯齿波
voidchange();
unsignedcharcodesin_tab[]=//正弦波输出表
{
0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96,0x99,0x9C,0x9F,0xA2,0xA5,0xA8,0xAB,0xAE,
0xB1,0xB4,0xB7,0xBA,0xBC,0xBF,0xC2,0xC5,0xC7,0xCA,0xCC,0xCF,0xD1,0xD4,0xD6,0xD8,
0xDA,0xDD,0xDF,0xE1,0xE3,0xE5,0xE7,0xE9,0xEA,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,0xF5,
0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,
0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEA,0xE9,0xE7,0xE5,0xE3,0xE1,0xDF,0xDD,0xDA,
0xD8,0xD6,0xD4,0xD1,0xCF,0xCC,0xCA,0xC7,0xC5,0xC2,0xBF,0xBC,0xBA,0xB7,0xB4,0xB1,
0xAE,0xAB,0xA8,0xA5,0xA2,0x9F,0x9C,0x99,0x96,0x93,0x90,0x8D,0x89,0x86,0x83,0x80,
0x80,0x7C,0x79,0x76,0x72,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x55,0x51,
0x4E,0x4C,0x48,0x45,0x43,0x40,0x3D,0x3A,0x38,0x35,0x33,0x30,0x2E,0x2B,0x29,0x27,
0x25,0x22,0x20,0x1E,0x1C,0x1A,0x18,0x16,0x15,0x13,0x11,0x10,0x0E,0x0D,0x0B,0x0A,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0D,0x0E,0x10,0x11,0x13,0x15,0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,0x25,
0x27,0x29,0x2B,0x2E,0x30,0x33,0x35,0x38,0x3A,0x3D,0x40,0x43,0x45,0x48,0x4C,0x4E,
0x51,0x55,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x72,0x76,0x79,0x7C,0x7E
};
voidmain()
{
Uart_init();
Delaynms(1000);
send_string("作者:
龙腾跃");
Delaynms(10);
Enter();
send_string("作品:
简易信号发");
Delaynms(10);
send_string("生器");
Enter();
send_string("初始波形为200HZ");
Delaynms(10);
send_string("方波");
CS=0;
up=1;
down=1;
while
(1)
{
if(flag)
Triangle();
if(flag1)
Sawtooth();
if(flag2)
Square();
if(flag3)
sin();
change();
if(flag5&&flag6)
{
if(mark==4&&cont)
{
num4=170-t;
flag=0;
flag1=0;
flag2=0;
flag3=1;
send_data(num4);
}
if(mark==3&&cont)
{
num3=(200.0/t)*188;
flag=0;
flag1=0;
flag2=1;
flag3=0;
send_string("频率:
");
send_data(t);
send_string("HZ");
}
if(mark==2&&cont)
{
num2=t;
flag=0;
flag1=1;
flag2=0;
flag3=0;
send_data(num2);
}
if(mark==1&&cont)
{
num1=5-t/10;
flag=1;
flag1=0;
flag2=0;
flag3=0;
send_data(t);
}
flag5=0;
}
}
}
voidUart(void)interrupt4using1//串口中断子函数
{
if(1==RI)//必须进展判断才可以实现中断的对应响应
{
RI=0;
table[i]=SBUF;
i++;
if(i==4)
{
t=(table[2]-48)*100+(table[3]-48)*10+(table[0]-48);
mark=table[1]-48;
flag5=1;
TR0=0;
i=0;
flag6=~flag6;
cont=1;
}
}
}
/*********************************************************
输出三角波
*********************************************************/
voidTriangle()
{
unsignedcharl;
unsignedintj;
for(l=0;l<255;l=l+k)
{
P2=l;
while(j { j++; } j=0; } for(l=255;l>1;l=l-k) { while(j { j++; } j=0; P2=l; } } /********************************************************* 输出方波函数 *********************************************************/ voidSquare() { unsignedintj=0; N=~N; P2=N; while(j { j++; } j=0; } /********************************************************* 输出正弦波函数 *********************************************************/ voidsin() { unsignedinti,j=0; for(i=0;i<256;i++,j=0) { while(j { j++; } P2=sin_tab[i]; } } /********************************************************* 输出锯齿波函数 *********************************************************/ voidSawtooth() { unsignedcharl; unsignedintj=0; for(l=0;l<255;l++) { while(j { j++; } P2=l;//databyte } } /********************************************************* 调整函数 *********************************************************/ voidchange() { if(! up) Delaynms(15); if(! up) { { k++; } while(! up); if(k==2) { flag=0; flag1=1; flag2=0; flag3=0; } if(k==3) { flag=0; flag1=0; flag2=1; flag3=0; } if(k==4) { flag=0; flag1=0; flag2=0; flag3=1; } if(k==5) { flag=1; flag1=0; flag2=0; flag3=0; k=1; } } if(! down) Delaynms(15); if(! down) { if(mark==4) { num4=num4-10; } if(mark==3) { num3=num3+10; send_data(num3); } if(mark==2) { num2=num2+10; } if(mark==1) { num1=num1+10; } cont=0; while(! down); } } II总电路图 总图PCB 元器件清单 电解电容10uf 1个 瓷片电容30pf 2个 电阻10K 1个 晶振12MHz 1个 按钮开关 2个 LM324集成块 1块 DAC0832 1块 AT89S52 1块 DIP-40封装插座 1个 DIP-20封装插座 2个 导线假设干 星轨
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STC89C52 简易 波形 发生器