51单片机入门教程(4)——波形发生器

这篇具有很好参考价值的文章主要介绍了51单片机入门教程(4)——波形发生器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、总述

2、系统硬件设计

 3、系统软件设计思路

 3、测试与分析

(1)Proteus仿真测试

(2)直流稳压电源测试

(3)实物测试


1、总述

该篇为51单片机入门教程的实战篇,本篇介绍了以51单片机和DAC0832数模转换芯片为核心的波形发生器,并对DAC0832和UA741的结构和工作原理以及电路连接加以说明。该波形发生器通过AT89C51控制DAC0832产生所需电流,然后使用运算放大器UA741将其电流输出线性地转换成电压输出,结合程序控制,通过4输入与门74LS21控制4个开关,可实现锯齿波、三角波、方波和正弦波之间的切换,输出不同的波形。

2、系统硬件设计

本系统以51单片机为控制核心,对系统进行初始化,主要完成对开关的响应、发送指令等功能的控制,起到总控和协调各模块之间工作的作用。波形的具体产生是通过数模转换模块产生。系统主要包括主控器AT89C51,数模转换电路,幅度、频率调节电路,晶振电路以及外加复位电路组成。本设计的特点是数字信号波形的产生通过程序控制,因而波形输出非常稳定,修改控制程序可实现波形参数的任意改变,同时波形的选择可利用外接开关进行改变。

51单片机入门教程(4)——波形发生器

     

PCB原理图如下:

51单片机入门教程(4)——波形发生器

直流稳压电源电路原理图如下:

51单片机入门教程(4)——波形发生器

 3、系统软件设计思路

(1)锯齿波的实现原理:锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。在本程序中初值为00H,最大值为0FFH。

(2)三角波的实现原理:三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作。此程序输入的VREF的电压是+5V,因此该波形输出的最大频率是初值为00H和最终值为0FFH,且步数为1,这样输出的波形是最大的。

(3)方波的实现原理:此波形的实现只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。

(4)正弦波的实现原理:正弦波的实现过程是把一个周期分为了四部分,提前写一个内含19个数的数组,以此执行,便可得到正弦波的第一个1/4周期。第二个1/4周期则是将数组倒过来执行,第三和第四个1/4周期就是前两个1/4周期的取反过程。通过上述过程,即可完成一个完整周期的正弦波。

至于按键检测部分的程序,属于比较经典的代码。大致思路就是在中断函数中,通过对高低电平的判断,来检测按键或开关是否闭合。

#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define DAC 0x7FFF //定义DAC端口地址
uchar code SINTAB[]={0x7F, 0x89, 0x94, 0x9F, 0xAA, 0xB4, 0xBE, 0xC8,0xD1, 0xD9,
											0xE0, 0xE7, 0xED,0xF2, 0xF7,0xFA, 0xFC, 0xFE, 0xFF};
uchar bdata Tbase = 0x20;
sbit KST = Tbase^0; //阶梯波标志
sbit KTRI = Tbase^1; //三角波标志
sbit KSQ = Tbase^2;  //方波标志
sbit KSIN = Tbase^3;//正弦波标志
sbit K1=P1^0; //K1健
sbit K2=P1^2; //K2键
sbit K3=P1^4; //K3键
sbit K4=P1^6; //K4键
//延时函数
void delay()
{  
	uchar i;
	for(i = 0; i<0xff;i++);
}
//阶梯波函数
void st()
{
	uchar i = 0;
	while(KST)
	{
		XBYTE[DAC] = i++;//启动DAC
	}
}
//三角波函数
void tri()
{
	uchar i = 0;
	XBYTE[DAC] = i; //启动DAC
	do
	{
		XBYTE[DAC] = i;  //上升沿
		i++;
	}while(i<0xff);
	do
	{
		XBYTE[DAC] = i;//下降沿
		i--;
	}while(i>0x00);
}
//方波
void sq()
{
	XBYTE[DAC] = 0x00;//启动DAC
	delay();
	XBYTE[DAC] = 0xff;
	delay(); 
}
//正弦波
void sin()
{
	uchar i;
	for(i=0;i<18;i++)
	{
		XBYTE[DAC] = SINTAB[i];//第一个1/4周期
	}
	for(i=18;i>0;i--)
	{
		XBYTE[DAC] = SINTAB[i];//第二个1/4周期
	}
	for(i=0;i<18;i++)
	{
		XBYTE[DAC] = ~SINTAB[i];//第三个1/4周期
	}
	for(i=18;i>0;i--)
	{
		XBYTE[DAC] = ~SINTAB[i];//第四个1/4周期
	}
}
//主函数
main()
{
	EX0=1;IT0=1;EA=1;
	while(1)
	{
		if(KST==1)
		{
			st();
		}
		
		if(KTRI==1)
		{
			tri();
		}
		
		if(KSQ==1)
		{
			sq();
		}
		
		if(KSIN==1)
		{
			sin();
		}
		
	}
}
//中断服务
int0() interrupt 0 using 1
{
	if(K1==0)  //判阶梯波键是否按下
	{
		Tbase = 0;
		KST = 1;
	}
	if(K2==0)  //判三角波键是否按下
	{
		Tbase = 0;
		KTRI = 1;
	}
	if(K3==0)  //判方波键是否按下
	{
		Tbase = 0;
		KSQ = 1;
	}
	if(K4==0)  //判正弦波键是否按下
	{
		Tbase = 0;
		KSIN = 1;
	}
}

 3、测试与分析

(1)Proteus仿真测试

在利用Proteus搭建的仿真电路中,我们可以很容易地进行实验仿真测试,在信号输出端口接一个模拟示波器,切换四个开关,即可观察不同的波形。

51单片机入门教程(4)——波形发生器

由于刚开始我给运放提供的是±5V的直流电压,仿真之后会发现波形失真,因此最后选择用±12V的直流电压对运放UA741进行供电,这样得到的波形才能做到无失真。

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

(2)直流稳压电源测试

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

(3)实物测试

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

51单片机入门教程(4)——波形发生器

利用AT89C51和DAC0832以及其他基本模块完成了总体电路的设计,并用开关来控制各种波形的发生及转换,用单片机输出后,经过模数转换器生成波形,最终可以通过示波器观察到较为理想的波形。通过仿真测试运行结果和实物测试结果表明,该波形发生器能够很好满足实际要求,具有重要的应用价值。 文章来源地址https://www.toymoban.com/news/detail-478818.html

到了这里,关于51单片机入门教程(4)——波形发生器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 瑞萨MCU入门教程(非常详细的瑞萨单片机入门教程)

    得益于瑞萨强大的MCU、强大的软件开发工具(e² studio),也得益于瑞萨和RA生态工作室提供的支持,我们团队编写了《ARM嵌入式系统中面向对象的模块编程方法》,全书37章,将近500页: 讲解面向对象编程在单片机开发中的使用 结合FSP软件包实例分析外设驱动 讲解如何使用RASC配

    2024年02月08日
    浏览(45)
  • 单片机入门教程:第七章 1602LCD液晶显示模块

    在单片机的人机交互系统中,常常需要显示系统运行中的某些信息和数据,例如,字符、汉字或者图形等。液晶显示器(LCD)正好可以完成此项任务,它是一种功耗很低的显示器,在电子表、计算器、数码相机、计算机的显示器和液晶电视上都可以看到它的身影。液晶显示器

    2024年02月09日
    浏览(52)
  • 基于51单片机的DAC0832波形发生器

    输出1HZ正弦波、三角波、方波、锯齿波 使用LCD1602显示 DAC0832的D0~D7数据输入口,IOUT1、IOUT2互补输出口,RFB反馈端口、 VREF基准电压值(一般是5V)。用定时器控制段码表输出速度来控制波形的频率。 (定时数值)*10^(-6)*256=波形频率。 ( 1 )锯齿波的实现原理:   锯齿波的实现

    2024年02月06日
    浏览(85)
  • 洋桃电子STM32F407单片机入门教程笔记九:低功耗模式

      此文档作为对洋桃电子STM32F407单片机视频的整理,B站链接: 第28集)低功耗模式_哔哩哔哩_bilibili         在之前的程序里应用程序在while(1)主循环中反复执行,ARM内核以100%的功率工作。这样的设计简单稳定,内核全速运行的功耗也只有几十毫安,对于外接电源的设备

    2024年01月23日
    浏览(59)
  • STC8H系列单片机入门教程之GPIO基本知识(一)

    IO口即输入输出口,STC8H系列单片机支持四种工作模式, 即准双向口、推挽输出、高阻输入、开漏输出,每个IO通过两个寄存器进行配置,如下图所示,注:n = 0,1,2,3,4,5,6,7。 PnM1 PnM0 I/O 口工作模式 0 0 准双向口(弱上拉),灌电流可达 20mA ,拉电流 150-270uA 0 1 推挽输出,强上拉

    2024年04月14日
    浏览(65)
  • 洋桃电子STM32F407单片机入门教程笔记一:RCC时钟设置

    此文档作为对洋桃电子STM32F407单片机视频的整理,B站链接:2023更新 STM32入门F4= STM32F407单片机入门教程=WIFI连接阿里云物联网+CubeMX+HAL库+TFT彩屏+杜洋主讲_哔哩哔哩_bilibili 由于单片机内部的时钟结构都是相互关联的,一个时钟源出发可以供给多个功能,类似于树根、树杆、树

    2024年02月04日
    浏览(44)
  • STC8H系列单片机入门教程之ADC基础知识(四)

    目录 一、A/D转换过程 二、ADC转换流程图 三、采样定理 四、ADC基本参数 4.1、分辨率 4.2、采样速率 4.3、转换时间 4.4、量程  4.5、最低有效位 五、静态参数 5.1、微分非线性 5.2、积分非线性 六、逐次逼近型模数转换器 七、ADC常用分压电路 八、示例代码 ADC即模数转换器,用来

    2024年04月11日
    浏览(57)
  • 第1章_瑞萨MCU零基础入门系列教程之单片机程序的设计模式

    本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总 : https://blog.csdn.net/qq_35181236/article/details/132779862 本章目标 理解裸机程序设

    2024年02月09日
    浏览(48)
  • 20、基于51单片机的函数发生器四种波形频率系统设计

    设计了一个基于DAC0832的信号发生器,使之输出不同频率的正弦波、三角波、锯齿波和方波,并通过按键切换不同的波形,也可以改变频率以及频率变化的步进。本方案选择了DAC0832作为核心芯片,并与51单片机结合,设计出一款建议的高精度频率信号发生器,具有体积小功率等

    2024年02月04日
    浏览(51)
  • 【51毕业设计案例】【006】波形发生器(正弦波、矩形波、三角波、锯齿波)-基于51单片机

    功能介绍: 1.输出 正弦波、矩形波、三角波、锯齿波 波形 2.设定波形输出频率 3.设定修改频率的步进值 整体功能简述: 通过按键可以修改输出的波形,一共可以输出四种波形,分别是:正弦波、矩形波、三角波、锯齿波 ;波形也可以修改频率,频率范围为50Hz~0.1Hz。并且可

    2024年02月09日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包