单片机函数发生器.docx

上传人:1513****116 文档编号:96668906 上传时间:2024-02-25 格式:DOCX 页数:15 大小:982.75KB
返回 下载 相关 举报
单片机函数发生器.docx_第1页
第1页 / 共15页
单片机函数发生器.docx_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《单片机函数发生器.docx》由会员分享,可在线阅读,更多相关《单片机函数发生器.docx(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、简易函数信号发生器摘要函数发生器承受 AT89S52 单片机作为掌握核心,外围承受模拟/数字转换电路DAC0832、倍频电路CD4046、运放电路LM324、按键和 LCD 液晶显示电路等。电路承受 AT89S52 单片机和一片 DAC0832 数模转换器组成数字式信号发生器。函数信号发生器,它具有价格低、性能高和在低频范围内稳定性好、操作便利、体积小、耗电少等特点。由于承受了LM324 运算放大器,使其电路更加具有较高的稳定性能,性能比高。此电路清楚,消灭故障简洁查找错误,操作简洁、便利。通过按键掌握可产生方波、三角波、正弦波,同时用 1602 显示对应的波形和频率。所产生的波形 V 范围为

2、 05 V,频率范围为 1Hz 1MHz,并实现占空比P-P可调,波形准确并且平滑。本系统设计简洁、性能优良,具有肯定的有用性。本设计主要应用 AT89S52 作为掌握核心。硬件电路简洁,软件功能完善,掌握系统牢靠,性价比较高等特点,具有肯定的使用和参考价值。AbstractFunction generator controlled by ATM89S52 MCU as the core,External analog / digital conversion circuit (DAC0832), double frequency circuit (CD4046), operational a

3、mplifiers (LM324), buttons and LCD indicator circuit. AT89S52 MCU and a DAC0832 composed digital signal generator. Function signal generator, it has low cost, high performance and low frequency range, good stability, easy operation, small size, low power consumption, etc. As a result of the LM324 op

4、 amp, make the circuit more stable performance with high performance. The circuit is clear, easy to find failure error, simple and convenient.It can produce a square wave, triangle wave, sine wave, through the button .Show frequency and the waveform. Waveform Amplitude range of 0 5 V , frequency ran

5、ge of 1Hz 1MHz, and to achieve adjustable duty cycle, waveform accurate and smooth. The design of the main application is AT89S52 as the control center. Simple hardware circuit, software, functional, and reliable control system, high cost performance characteristics such as a certain reference value

6、 for the use.11、总体方案比较与论证方案 1. 承受模拟分别元件或单片压控函数发生器可产生方波,三角波,正弦波。通过调整外部元件的参数可以实现频率及占空比的调整,但是由于元件太过分散,即使使用单片压控函数发生器,参数也与外部元件有关。因而产生的波形稳定性较差,精度低,抗干扰力量差,价格高,且敏捷性较差。方案 2. 承受单片机AT89S52和数模转换芯片DAC0832实现波形的产生,波形的产生是通过 AT89S52 执行波形发生程序,向 D/A 的输入端按肯定的规律发送数据,经过 D/A 和 LM324 处理后输出相应的波形用 CD4046 和 CD4518 分频实现倍频,可以到达

7、 1MHZ。通过键盘掌握可产生不同波形,且能实现频率预置,频率步进功能和占空比可调的功能。此方案通过编程简化了外部单路,原理简洁,实现简洁。方案选择:经比较,方案 2 能更好地实现题目要求,三种波形的产生可由程序掌握,并通过按键选择波形输出。波形的周期与频率步进也可以用程序转变,方波占空比通过按键加减,具有线路简洁、构造紧凑,系统稳定等优点。通过按钮设定所需要的波形频率,并在 LCD 上显示信号类型、频率。输出波形稳定,精度高, 滤波好,抗干扰效果强。因此我们设计中承受方案 22、硬件电路设计2.1 根本原理低频信号发生器系统主要由 CPU、D/A 转换电路、基准电压电路、电流/电压转换电路、

8、按键和波形指示电路、电源等电路组成。其工作原理为当分别按下四个按键中的任一个按键就会分别消灭方波、锯齿波、三角波、正弦波,并且有四个发光二极管分别作为不同的波形指示灯依据题目要求,经过认真考虑,充分考虑各种因素,制定了整体设计方案: 系统主要由 MCU、D/A 转换电路、基准电压电路、电流/电压转换电路、按键和LCD、电源等电路组成。以 ATL89S52 单片机为掌握核心,P0 口接 DAC0832 信号输入并数模转换,程序掌握产生三种波形,通过 P1 口接 8 个按键,掌握频率、幅值和占空比,由按键选择三种波形的输出。由 LM324 运放实现 DAC0832 输出电流到电压的转换,通过 CD

9、4046 与 CD4060 组成的 100 倍频电路,尽量到达题目频率要求。在LCD1602 上实时显示频率与幅值,波形在示波器上显示。LCD1602AT89S52DAC0832LM324独立键盘基准电压倍频电路输出2.2 波形产生原理系统总体框图2.1单片机向 0832 发送数字编码,产生不同的输出。先利用采样定理对各波形进展抽样,然后把各采样值进展编码,收到的数字量存入各个波形表,执行程序时通过查表方法依次取出,经过 D/A 转换后输出就可以得到波形。假设 N 个点构成波形的一个周期,则 0832 输出 N 个样值点后,样值点形成运动轨迹,即一个周期。重复输出N 个点,成为其次个周期。利用

10、单片机的晶振掌握输出周期的速度,也就是掌握了输出的波形的频率。这样就掌握了输出的波形及其幅值和频率。具体连接如图2.3 资源安排软、硬件设计是设计中不行缺少的,为了满足功能和指标的要求。资源安排为:单片机用 12M 晶振,P0 口与 DAC0832 相连;P1 口接八个按键,实现频率、幅度、占空比的调整,以及波形选择;P2 口接 LCD1602 液晶显示器。2.4 单片机最小系统AT89S51 外接 12M 晶振作为时钟频率,并承受电源复位设计。复位电路承受上电复位,它的工作原理是,通电时,电容两端相当于短路,于是RST 引脚上为高电平,然后电源通过对电容充电。RST 端电压渐渐下降,降到肯定

11、程序,即为低电平,单片机开头工作。AT89S52 引脚图2.42.5 波形转换(D/A)电路功能:将波形样值的编码转换成模拟值,完成的波形输出。由一片 0832 和两片 LM324 运放组成。DAC0832 是一个具有两个输入数据存放器,20 条引线的双列直插式 CMOS 器件,它内部具有两级数据存放器,完成 8 位电流 D/A 转换,故不需要外加电路。DAC0832 是电流输出型,示波器上显示波形,通常需要电压信号,电流信号到电压信号的转换可以由运算放大器 LM324 实现。2.5.1 DAC0832 与单片机的连接方式DAC0832 与单片机连接有很多方案:主要有单缓冲方式,双缓冲方式和直

12、通方式。单缓冲方式具有适用于只有一路模拟信号输出或几路模拟信号非同步输出的情形的优点,但是电路线路连接比较简洁。而双缓冲方式适用于在需要同时输出几路模拟信号的场合,每一路模拟量输出需一片 DAC0832 芯片,构成多个DAC0832 同步输出电路,程序简洁化,但是电路线路连接比较简单。依据以上分析,选择了直通方式,使用便利,程序简洁,易操作。单片机与DAC0832 的连接图2.5.142.5.2 DAC0832 与 LM324 的连接方式DAC0832 与反相比例放大器相连,实现电流到电压的转换,因此输出模拟信号的极性与参考电压的极性相反,数字量与模拟量的转换关系为Vout1=-Vref数字码

13、/256 假设 D/A 转换器输出为双极性,如图 2.5.2 所示。U1VfbDAC0832Iout1+5VR1=2 RBI167R3=2 R CR2=R98Vout2Iout2510Vout 1I2RVref=( 数字码-1 28 )/1 28D/A 转换器双极性输出电路图2.5.2图 2.5.2 中,运算放大器 A 的作用是把运算放大器 A21的单向输出电压转换成双向输出电压。其原理是将 A 的输入端通过电阻 R 与参考电压 V 相连,V21REFREF经 R 向 A 供给一个偏流I ,其电流方向与 I 相反,因此运算放大器 A12122的输入电流为 I 、I 之代数和。则 D/A 转换器

14、的总输出电压为:12V= -(R /R ) V+(R /R ) VOUT2设 R =R =2RR =R,则32OUT131REF132V= -(2V +V )2.6 倍频电路OUT2OUT1REF功能:实现 100 倍频,使输出频率到达题目要求。CD4046 是通用的 CMOS 锁相环集成电路,其特点是电源电压范围宽为 3V18V,输入阻抗高(约 100M),动态功耗小,在中心频率 f0 为 10kHz 下功耗仅为 600W,属微功耗器件。CD4518 是一个同步加计数器,在一个封装中含有两个可互换二/十进制计数器,其功能引脚分别为 17 和 915.该 CD4518 计数器是单路系列脉冲输入

15、1 脚或 2 脚;9 脚或 10 脚,4 路 BCD 码信号输出3 脚6 脚;11脚14脚。由锁相环 CD4046 与计数器 CD4518 实现 100 倍倍频。当从14 脚输入频率 f1 的信号时,在 3 脚相位比较信号输入信号、4 脚压控振荡器输出信号之间接计数器 4518,输出端 4 脚频率 f2=100f1。具体电路连接如图 2.5 所示。52.7 显示电路图 2.6 倍频电路功能:驱动 LCD1602 液晶显示,扫描按钮。由 LCD1602 液晶显示器和 7 个按钮组成。当某一按钮按下时,扫描程序扫描到之后,通过 P2 口将数字信号发送到 LCD1602。LCD1602 种特地用于显

16、示字母、数字、符号等点阵式 LCD,它的外接电压也是+5V。扫描利用软件程序实现,当某一按键按下时,扫描程序马上检测到,随后调用子程序,执行相应的功能。LCD1602 仿真图2.763、软件设计及流程设定频率、幅度键盘扫描初始化程序显示函数LCD是否到达设定值?输出参考文献1 李勋,刘源.单片机有用教程.北京:北京航空航天大学出版社,2023.2 李珍付,植桐.单片机原理与应用技术.北京:清华大学出版社,2023.3 张毅刚,等.MCS-51 单片机应用设计M.哈尔滨:哈尔滨工业大学出版社.4 何立民.单片及应用文集1M.北京航天航空大学出版社.7附录原理图8仿真图仿真结果正弦波图 1方波图

17、29程序清单#include #define uchar unsigned char sbit rs=P30;sbit rw=P31; sbit eg=P32;uchar code table=“Volt“;uchar code table2=”0”,”1”,”2”,”3”,”4”,”5”,”6”,”7”,”8”,”9”;uchar code tosin256=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc

18、5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0x ee,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,0

19、xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0 xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0x a8,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,0x5

20、5,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,0x0 1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0

21、x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0 b,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,0x80 ;/正弦波数据uchar b=0,c=0,d=0,e=0,

22、i,k,tl,th;int ww=0,qw=0,bw=9,sw=3,gw=3,n=20,chh=50;/ww 为万位数字,qw 为千位数字,bw 为百位数字,/sw 为十位数字,gw 为个位数字.int t,f,m,choice=1,zk=50; /t 为时间变量,f 为频率变量,choice 为波形类型选择变量,zk 为占 空 比 变 量 , 默 认 占 空 比 为 50%/ 延 时 程 序 , 延 时Xms*void delay(unsigned int x)int i,j; for(i=0;ix;i+)10for(j=0;j120;j+);/写指令函数* void writezl(uns

23、igned char zl)rs=0;rw=0;/满足写指令的条件; P2=zl;delay(5); eg=1; delay(5); eg=0;/写数据函数* void writesj(unsigned char sj)rs=1;rw=0;/满足写数据的条件; P2=sj;delay(5); eg=1; delay(5); eg=0;/初始化程序* void initialeg=0;writezl(0x38);/显示模式设置;writezl(0x0c);/开显示,不开光标,光标不闪耀;writezl(0x06);/写数据时,每写一个数据,指针后移动一位,但是整屏不动; writezl(0x80

24、+0x00);/在显示器的第一行第一位开头写数据;/显示函数* void displayint i;for(i=0;i3;i+) writesj(tablei); writezl(0x80+0x04) ; writesj(table2chh/10); writezl(0x80+0x05); writesj(”.”); writezl(0x80+0x06);writesj(table2chh%10); writezl(0x80+0x07); writesj(”V”);writezl(0x02);/去除指针,但是不清楚显示内容; writezl(0x80+0x40);/跳转到下行的第一位开头置显示

25、; writesj(”F”);writezl(0x80+0x41); writesj(”r”); writezl(0x80+0x42); writesj(”e”); writezl(0x80+0x43); writesj(table2ww); writezl(0x80+0x44); writesj(table2qw); writezl(0x80+0x45); writesj(table2bw); writezl(0x80+0x46); writesj(table2sw); writezl(0x80+0x47); writesj(table2gw); writezl(0x80+0x48); wr

26、itesj(”H”); writezl(0x80+0x49); writesj(”z”); writezl(0x80+0x50); writesj(” ”);/*键选择发波类型,1 为正弦波,2 为三角波,3 为方波*/ void key1(void)if(choice4) choice=choice+1; elsechoice=1;/幅度加*/ void key2(void)if(chh!=50)chh+; else chh=chh;/幅度减*/ void key3(void)if(chh!=0)chh-;void key4(void)/*频率加*/ void key5(void)if(n=

27、3000)n=n+100;void key6(void)if(n!=20)n=n-100;/*方波占空比加大*/ void key7(void)if(zk=1) zk=zk-1; else zk=0;/*计算显示数字 */ void jisuan(void)TR0=0;/关闭定时器f=n;t=1000000/f; th=(65536-t)/256; tl=(65536-t)%256;ww=f/10000; f=f%10000;qw=f/1000; f=f%1000;bw=f/100; f=f%100;sw=f/10; gw=f%10; TR0=1;/*键盘扫描*/ void judge(voi

28、d)uchar temp;P1=0xfe;/第一行扫描 11111110; temp=P1;temp=temp&0xf0;/消退低四位; if(temp!=0xf0)/推断是否有键按下;delay(5);/消抖动程序; if(temp!=0xf0)temp=P1; switch(temp)case 0x7e:key1; break;case 0xbe:key2; break;case 0xde:key3; break;case 0xee:key4; break;P1=0xfd;/其次行扫描 11111101; temp=P1;temp=temp&0xf0; if(temp!=0xf0)dela

29、y(5);/消抖延时if(temp!=0xf0)temp=P1; switch(temp)case 0x7d:key5; break;case 0xbd:key6; break;case 0xdd:key7; break;case 0xed:key8;break;void main(void)initial; TMOD=0X01; TR0=1;th=-t/256; tl=-t%156; TH0=th; TL0=tl; ET0=1; EA=1;while(1)jisuan; display; judge; void time0_int(void) interrupt 1 TR0=0;if(choice=1) P0=tosinb*chh/50; b+; else if(choice=2)if(c=128)P0=c*chh/50; else P0=(255-c)*chh/50;c+;else if(choice=3)k=zk*256/100; d+;if(d=k)P0=0x00; else P0=0xff*chh/50;TH0=th;TL0=tl;TR0=1;/中断效劳程序/正弦波/三角波/ 方波

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com