历史上的今天
返回首页

历史上的今天

今天是:2024年11月16日(星期六)

2019年11月16日 | 基于51单片机的波形发生器的设计

2019-11-16 来源:51hei

1 引言
1.1 题目要求及分析

题目:基于51单片机的波形发生器设计,即由51单片机控制产生正弦波、方波、三角波等的多种波形。1.1.1 示意图

图1:系统流程示意图


1.2 设计要求

(1) 系统具有产生正弦波、三角波、方波三种周期性波形的功能。

(2) 用键盘控制上述三种波形(同周期)的生成,以及由基波和它的谐波(5次以下)线性组合的波形。

(3) 系统具有存储波形功能。

(4) 系统输出波形的频率范围为1Hz~1MHz,重复频率可调,频率步进间隔≤100Hz,非正弦波的频率按照10次谐波来计算。

(5) 系统输出波形幅度范围0~5V。

(6) 系统具有显示输出波形的类型、重复频率和幅度的功能。

2 波形发生器系统设计方案

设计并制作一个波形信号发生器,能够产生正弦波、方波、三角波的波形,其中不使用DDS和一些专用的波形产生芯片。并让系统的频率范围在1Hz~1MHZ可调节,在频率范围在1HZ~10KHz时,步进小于或等于10Hz,在频率范围在10KHz~1MHz时,步进小于或等于100Hz,并且电压在0~5V范围,能够实时的显示波形的类型、频率和幅值。

2.1 方案的设计思路

以AT89C51单片机作为系统的控制核心,其中P0口接DAC0832作为信号输入同时进行数模转换,P1口用来接键盘,P2口接LED显示器,由程序来控制P0口产生的波形,再由按键和按键次数控制波形的种类、频率和幅值的大小,并且能够通过按键来控制波形频率值和幅度值。由运算放大器DAC0832来实现输出电流到电压的转换,即实现数字信号到模拟信号的转换。另外在LED上显示实时的频率值和幅度值,产生的波形在示波器显示。并且通过按键来决定波形数据的存储方式,在按键按下后,就把当时的波形所对应的幅度值、频率值等参数存储下来。

波形的合成:在波形的合成时,通过外部中断高低电平的延时的时间来进行解码,在采样的时,对正弦波,三角波,方波都只取了20个采样点,因为采样点越少,其频率能够达到的值就会越大,合成时就是对幅值点进行一个叠加来输出一组波形。2.2 设计框图及系统介绍

系统主要部分设计框图如下图所示:


图2:框图设计
2.3 选择合适的设计方案

方案一:采用模拟分立元件或单片函数发生器就可以产生正弦波、方波、三角波,方法简单。通过调整外部元件也可以实现输出频率的改变,但采用模拟元器件造成元件分散性太大,从而产生的频率稳定性较差、抗干扰能力低、灵活性较差、而且精度低,不能实现任意波形转换和波形运算输出等方面自主控制功能。

方案二:采用专业的锁相式频率合成方案,这种锁相式频率合成是一种高稳定度和高精确度的大量离散技术,他能够准确的产生波形,可以很好的解决频率稳定精确的情况下又要求频率在较大的范围内可调的问题。但是频率受VCO可变频率范围上的影响,高低频率比无法做到很高,还有其只能产生正弦波或方波,不能满足产生三角波的要求。

方案三:采用AT89C51单片机和数模转换器DAC0832实现波形的产生。波形的产生方法是用AT89C51单片机执行波形程序,向DAC0832转换器的输入端输入相应的数据,从而在DA转换电路输出端再通过运放电路转换得到相应的电压波形。在AT89C51的P1口接按键控制波形的种类和波形的频率,每种波形对应一种按键方式。此方案原理简单,同时适合操作,实现起来也相对较容易。

经比较,方案三的设计能够更好的实现和完成题目的要求,产生的三种波形和频率可由按键控制,并通过按键改变来转换不同的波形,也能够在示波器上显示出所要求的波形。波形的频率步进也可以实现调节,具有线路简单、可行性高、符合设计要求等优点。在本设计的基础上,加上LED数码显示管,从而能够在LED上显示出频率值、幅度值信息。输出的波形也较稳定,精度较高,通过滤波电路使得系统的抗干扰性增强,电路简单,性价比高。综上所述,我们选择了第三种方案。

3 主要硬件电路及器件介绍
3.1 80C51单片机

图3:8051引脚图

80C51单片机按功能划分,由8个部件组成:微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、四个I/O口(P0口、P1口、P2口、P3口)、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)的集中控制方式[1]。

各功能部件的介绍:

(1) 数据存储器(RAM):片内为128个字节单元,片外最多可扩展至64K字节。用以存放数据,我们称之为片内数据存储器。

(2) 程序存储器(ROM/EPROM):片内ROM为4K,片外最多可扩展至64K字节。

(3) 中断系统:具有5级中断的中断系统,2级中断优先权。

(4) 定时器/计数器:2个16位的定时器/计数器,具有四种工作方式。

(5) 串行口:1个全双工的串行通信接口,具有四种工作方式。

(6) 特殊功能寄存器(SFR)共有21个,每个寄存器占一个存储单元。

(7) 微处理器:为8位CPU,内部具有一个8位CPU(位处理器),不仅可处理字节数据,还可以进行位变量的处理。

另外还有四个8位双向并行的输入/输出(I/O)端口,每个端口都有八条引线和一个输出驱动器和一个输入缓冲器。这四个端口的功能不完全相同。P0口既可作一般I/O端口使用,又可作地址/数据总线使用;P1口是一个准双向并行口,作通用并行I/O口使用;P2口除了可作为通用I/O使用外,还可在CPU访问外部存储器时作高八位地址线使用;P3口是一个多功能口除具有准双向I/O功能外,还具有第二功能。

控制引脚介绍:

(1) 电源:单片机使用的是5V电源,其中40引脚接电源正级,20引脚接地。

(2) 时钟引脚XTAL1、XTAL2时钟引脚外接晶体与片内反相放大器构成了振荡器,产生片内CPU时钟控制信号。此引脚也可外接晶体振荡器。

(3) RST:当时钟电路开始工作时,在此引脚上出现24个时钟周期以上的高电平能够使单片机复位。另外我们在此引脚与VCC之间连接一个24兆欧的下拉电阻,在外接电路之间连接二个36微法的电容,可以保证有效的复位。在单片机正常工作时,此引脚应为≤0.5V低电平。

(4) ALE:当访问外部程序存储器时ALE(地址锁存允许)输出脉冲用于16位地址中的低8位的锁存信号,以便P0口实现地址/数据复用。当不去访问外部锁存器时,ALE端将输出一个1/6的时钟频率正脉冲信号输出,此频率约为时钟振荡器的1/6。但是每当访问外部数据存储器时,在两个机器周期中ALE只出现一次,即ALE会跳过一个脉冲。因此,严格来说,用户不能用ALE做时钟源或定时。ALE端可以驱动8个TTL负载

(5) /PSEN(29脚):此引脚是单片机访问片外ROM存储器的读选通信号。在执行访问片外ROM的MOVC指令期间,每个机器周期PSEN上产生一个负脉冲,用于对于片外ROM数据存储器选通,这两次有效的/PSEN信号不出现。其他情况下,/PSEN线均为高电平封锁状态。

(6) /EA/VPP(31脚):当EA端保持高电平时并且程序地址小于4KB时,读取内部存储器指令,但在PC值超过4KB程序地址时则执行外部存储器内的程序;当/EA保持低电平时,不管地址大小则只访问外部程序存储器,一律读取外部程序存储器指令[2]。
3.2 DAC0832

图4:DAC0832引脚图

DAC0832是8分辨率的D/A转换芯片,集成电路内有两级输入寄存器。由8位输入锁存器、8位DAC 寄存器、8 位D/A 转换器及转换控制电路四部分构成。8位输入锁存器用于存放主机送来的数字量,使输入数字得到缓冲和锁存,并加以控制。DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压[3]。DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。

DAC0832的引脚功能如下:

(1) D0~D7:数字信号输入端。

(2) ILE:输入寄存器允许,高电平有效。

(3) CS:片选信号,低电平有效。

(4) WR1:写信号1,低电平有效。

(5) XFER:传送控制信号,低电平有效。

(6) WR2:写信号2,低电平有效。

(7) IOUT1、IOUT2:DAC电流输出端。

(8) RFB:是集成在片内的外接运放的反馈电阻。

(9) VREF:基准电压(-10~10V)。

(10) Vcc:是源电压(+5~+15V)。

(11) AGND:模拟地 NGND:数字地,可与AGND接在一起使用。3.3 数码显示管

通过控制7个笔画段的亮或暗,和控制一个小数点的亮和暗来实现数码管显示。LED 显示器有共阴极和共阳极2 种形式。共阳极显示器是发光二极管的阳极连接在一起,当需要显示某字符时,只需要将共阳极端接高电平,根据显示需要让a-h中某些位置接低电平。共阴极显示器是发光二极管的阴极连接在一起,当需要显示某字符时,只需要将共阴极端接低电平,a-h 中某些位接高电平即可。

显示器的工作方式分为静态显示方式和动态显示方式两种:

(1) 静态显示方式就是显示器在显示一个字符时,相应的发光二极管恒定的导通或截止,例如a、b、c、d、e、f导通,g截止时显示“0”,这种使显示器显示字符的字形数据常称为段数据。静态显示方式的每一个七段显示器,需要由一个8 位并行口控制。优点是显示稳定,提高了工作效率,缺点是位数较多时显示口随之增加。

(2) 动态显示方式是一位一位的轮流点亮各位显示器,对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。调整电流和时间参数可以实现亮度较高较稳定的显示,如显示器的位数不大于8位,则控制显示器公共极的电位只需要一个8位口(位数据口),控制字形也需要一个8位口(段数据口)。要使显示管显示不同的数字或者字符,需要使端口输出相应的字型码

4 系统的硬件设计
4.1 硬件原理框图

对于该波形发生器的设计,我们采用了以AT89C51 单片机芯片作为核心处理器,编程实现各种不同类型信号的产生,最后通过D/A转换输出到示波器。结构简单,思路井井有条。根据设计的基本要求,我们又把其细分为不同的功能模块,各个功能模块相互联系,相互协调,通过单片机程序构成一个统一的整体。其整体电路原理框图如图5 所示:



图5:电路原理框图(见附件)


4.2 89C51系统设计

89C51单片机是该波形发生器的核心,具有2个定时器,32个并行I/O口,1个串行I/O口,5个中断源[4]。由于本设计功能简单,数据处理容易,数据存储空间也足够,因为我们采用了片选法选择芯片,进行芯片的选择和地址的译码。在单片机最小系统中,单片机从P1口接收来自键盘的信号,并通过P0口输出控制信号,通过DA转换芯片最终由示波器显示输出波形,P2控制显示器段选码,P3口中的P3.4-P3.6通过74LS138译码器控制位选码,输出显示信息。如果有键盘按下,则在控制器端产生一个读信号,使单片机读入信号,如果有信号输出,则在写控制端产生一个写信号,并通过示波器和显示器显示相应的信息。

单片机引脚分配如下:

RST:用于复位电路;

XTAL1,XTAL2:外接晶振,产生时钟信号;

P0 口:键盘输出信号。

P1 口:8 位数字信号输出,外接DAC0832; 具体为:P1.0、P1.1 波形选择;P1.2、P1.3、P1.4 频率个位,十位,百位调节;P1.5 频率加减控制;P1.6 跳出循环。

P2 口:LED 显示器段选码;

P3 口:P3.0 锁存器74HC573 片选信号;P3.2 中断控制;P3.4-P3.6 为74LS138 输入信号,译码控制LED 显示器位选。P3.7 为74LS138 片选码。4.3 时钟电路

单片机的时钟信号通常用两种电路形式得到:内部振荡和外部振荡方式。在引脚XTAL1 和XTAL2 外接晶体振荡器,构成了内部振荡方式。由于单片机内部有一个高增益的反相放大器,当外接晶振后,就构成了自激振荡,并产生振动时钟脉冲。晶振通常选用6MHZ、12MHZ、24MHZ。我们选择了24MHZ和晶振分别接引脚XTAL1 和XTAL2,电容C1,C2 均选择为30pF,对振荡器的频率有稳定作用,当频率较大时,正弦波方波、三角波中每一点的延时时间为几微秒,故延时时间还要加上指令时间才能获得较大的频率波形。


图6:时钟电路
4.4 复位电路

复位引脚RST 通过一个施密特触发器与复位电路相连,施密特触发器用来抑制噪声。复位电路通常采用上电自动复位和按钮复位两种方式。在每个机器周期的S5P2,施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。本设计选择了按键复位如图7, 在系统运行时,按一下开关,就在RST 断出现一段高电平,使图6 时钟电路图器件复位。此时ALE、PSEN、P0、P1、P2、P4 输出高电平,在RST 上输入返回低电平以后,就退出复位状态开始工作。


图7:按键复位4.5 键盘接口电路

常用的键盘电路一般为矩阵式,但是对于此设计,为了方便程序的简单化,我们采用了一般的键盘接口输出信号。具体实现方法:P1.0、P1.1用来作为波形选择,其中当P1.0=0,P1.1=0 输出正弦波,当P1.0=0,P1.1=1 输出三角波,当P1.0=1,P1.1=1 输出方波。P1.2、P1.3、P1.4 用来作为频率个位,十位,百位调节;P1.5 控制频率加减;P1.6 跳出循环。


图8:键盘接口电路

4.6 LED显示电路

本设计选择了8位共阴极数码管如图9,它的8个发光二极管的阴极(二极管正端)连接在一起,通常公共阴极接低电平,其它管脚接驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的位置导通电流,还需根据外接电源及额定位置导通电流来确定相应的限流电阻。显示电路用于显示信号的波形种类和信号的频率,并且使系统能根据按键实时显示相关信息。该系统中添加74LHC573 锁存器,用于驱动数码显示管,使其更易于控制,增加显示的准确性。使用74LS138 译码器,利用P3.4-P3.6 控制数码管的位选。

1




图9:数码管显示电路


4.7 数模转换器

由于单片机输出的是数字信号,因为要得到模拟信号的波形就必须对其进行数模换。我们采用了DAC0832 数模转换器,该芯片由8 位输入锁存器、8 位DAC 寄存器、8 位D/A 转换器及转换控制电路四部分构成。由于其输出为电流输出,因为外加运算放大器OP07 使之装换为电压输出。最后通过示波器显示输出的波形。


图10:D/A转换电路



5 系统软件设计
5.1 流程图:

图11:流程图(见附件)


5.2 产生波形图

本设计将各种波形的数据通过P1.0 口和P1.1 口选择,送往在单片机的程序储存器里,通过改变信号的频率的个位,十位,百位来改变这个频率,然后计算其技术初值,开启中断,通过改变D/A 转换器输出波形。

5.2.1 正弦波

图12:仿真正弦波

正弦波程序如下:

void zhengxuanbo()

         {

           uint k=0;

           while(1)

          {

             P0=table[k++];

             delay(t);

             xianshiqi(t);

             if(k==182)

             {

              k=0;

            }

            if(s5==0)

            {

              t=t+1;

            }

           if(s6==0)

            {

               t=t-1;

             }

           }

}5.2.2 三角波

产生三角波的原理:三角波产生是通过P0口将00H送入寄存器A中,DAC0832输出A中的内容,通过A中数值的加1递升,同时延时,当A中的内容为0FF时,A中的内容减1递减,从而循环产生三角波[5]。


图13:仿真三角波

三角波程序:void sanjiaobo()  

{

            uint j=0;

              while(1)

            {

                            P0=j;

                            delay(t);

                            j=j+1;

              P0=j;

              delay(t);

                 xianshiqi(t);

                            if(j==256)

                            {

                             if(j!=0)

                             {

                                         j=j-1;

                                         P0=j;

                                           delay(t);

                                           xianshiqi(t);

                      if(s5==0)

                                {

                                  t=t+1;

推荐阅读

史海拾趣

FOTEK公司的发展小趣事

福禄克公司成立于1948年,初期专注于电气测试工具的研发与生产。创始人敏锐地察觉到,随着战后全球工业化的加速,对高质量电气测试工具的需求将急剧增长。公司投入大量资源于技术研发,成功推出了首款高精度数字万用表,这一创新产品迅速在市场上占据一席之地,为福禄克奠定了技术创新的基石。此后,福禄克不断推出新品,如热成像仪、绝缘电阻测试仪等,持续引领行业技术潮流。

Epistar Corp公司的发展小趣事

Epistar的成立之初,正是LED(发光二极管)技术逐渐崭露头角的时代。公司创始人看到了LED技术的巨大潜力,决定投身这一领域。起初,Epistar面临技术壁垒高、市场接受度低等问题。然而,公司团队通过不懈的研发和技术积累,逐渐攻克了技术难关,并成功开发出多款性能优异的LED产品。这些产品在市场上取得了良好的反响,为Epistar的后续发展奠定了坚实的基础。

Boundary Devices公司的发展小趣事

近年来,电子行业面临着诸多变革和挑战,如物联网的快速发展、人工智能的崛起等。面对这些变革,Boundary Devices积极调整战略,加强在物联网和人工智能领域的研发投入,推出了一系列符合市场趋势的新产品。同时,公司还加强与高校和研究机构的合作,共同推动电子行业的创新与发展。

DALLAS公司的发展小趣事

在1980年代,Dallas公司凭借其创新的DS1820温度传感器产品,成功打开了新市场的大门。这款温度传感器以其高精度、低功耗和易于集成的特性,赢得了众多客户的青睐。它的推出不仅为Dallas公司带来了显著的收入增长,也为公司后续的产品研发和市场拓展奠定了坚实的基础。

辉芒微(FMD)公司的发展小趣事

在快速发展的过程中,辉芒微积极寻求外部合作与资本支持。2017年,公司与芯天下达成重要交易,通过股权转让的方式,将SPI NOR Flash产品线转让给芯天下,并获得了丰厚的现金回报和股权收益。这一战略举措不仅为公司带来了短期的财务收益,更为后续的发展提供了更多的资本支持和战略灵活性。此后,辉芒微还成功吸引了多家知名投资机构的关注和支持,为其未来的发展注入了强劲的动力。

巨盛电子(Chesen)公司的发展小趣事

随着国内市场的饱和,巨盛电子(Chesen)开始寻求国际化发展。公司制定了一系列国际化战略,包括拓展海外市场、建立海外生产基地、与国际品牌合作等。通过这些努力,巨盛电子成功进入了欧美、东南亚等市场,实现了品牌的全球化布局。同时,公司还积极与国际品牌合作,共同开发新产品,提高了品牌知名度和市场份额。

问答坊 | AI 解惑

RETALLMSG(1,(TEXT(":::SPL_IOControl.\r\n")));输出函数的理解

RETALLMSG(1,(TEXT(\":::SPL_IOControl.\\r\\n\"))); 这样一个函数的作用是什么? 相对于单片机有输出如P1.0=1; 这样输出效果很明显 RETALLMSG(1,(TEXT(\":::SPL_IOControl.\\r\\n\")));这样一个函数的输出效果是这样,执行了这条语句能看到什么 ...…

查看全部问答>

这是什么错误了阿 !!!

makeimg: run command: res2exe -r -c C:\\WINCE600\\OSDesigns\\2450\\2450\\RelDir\\smdk2450_ARMV4I_Release\\0409\\bthpnl.res C:\\WINCE600\\OSDesigns\\2450\\2450\\RelDir\\smdk2450_ARMV4I_Release\\bthpnl.cpl makeimg: Check for C:\\WI ...…

查看全部问答>

wince6上弄nor分区求助!!!

最近在弄nor分区, 遇到了一些问题, 想请教一下. 具体的情况是这样的: WINCE6, 板子是pxa270, 克隆的bsp是mainstonIII, 板子上有一块stratad的nor flash, 容量是32MB, 这块板子用来存放bootloader(不到1MB)和nk(20MB左右)之后还剩下10MB左右的空 ...…

查看全部问答>

关于交通灯程序延迟问题!!!!急!!!!!!

P控制规律如下:南北路口的绿灯、东西路口的红灯同时亮30秒;                 南北路口的黄灯闪烁5次,同时东西路口的红灯继续亮;              ...…

查看全部问答>

如何检查一个驱动dll是否被加载?

我这里碰到的一个问题是,不知道如何确定一个dll是否被系统加载了. 我这里自己想的思路就是: 1.打印串口调试信息,信息打印出来了,就表示加载了.     这个方法相对而言比较简单,但是有的时候不太方便. 2.通过USB连接之后,通过进程查看 ...…

查看全部问答>

C# 单片机 的问题

我是一个小公司,公司现在要开发一个煤矿管理系统,现在单片机的程序研发结束了。 单片机的数据格式,命令及命令格式,都以文档的形式给我了。 我现在想用C#与其通讯。 单片机:P89V51R 单片机接口:现用的是电话线。RS-232接口同时也在开发中 ...…

查看全部问答>

我用超级终端调试ARM板,可是在一个进程启动后就不能结束了!

进入超级终端手工开始这个进程倒可以结束(CTRL+C),但当我把这个进程写到开机自动启动脚本后就不能用CTRL+C结束了,这个进程的左右是不断往串口发数据并读取串口回复。现在整个超级终端的界面都是布满了发送的那几个数,导致不能控制这个ARM板子了 ...…

查看全部问答>

TDA7294PCB原理图,做成了,音质good!

非常棒的TDA7294,音质非常好!…

查看全部问答>

430F1101A

请问各位大侠 430F1101A下载程序后再无法写入了 请问如何擦写程序 本人新手 多谢指教啊…

查看全部问答>

RF屏蔽箱设计技术资料

产 品 简 介  JC-P505是一种手动屏蔽箱,开盖和闭合都只需要一个动作完成。 开盖后箱体的上盖有两个液压支撑杆支撑住,结实可靠。 本机适用于生产或实验室使用,可根据客户要求,添加各种连接端口。 基 本 参 数  箱体尺寸: 外形尺寸: (L ...…

查看全部问答>