历史上的今天

今天是:2024年11月07日(星期四)

正在发生

2019年11月07日 | 单片机DAC0832波形发生器实验报告

发布者:快乐的旅程 来源: 51hei关键字:单片机  DAC0832  波形发生器 手机看文章 扫描二维码
随时随地手机看文章

一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。


基本实现:

5个按键,每按一次按键后输出对应波形
5个led指示对应波形

示波器中显示2~3个周期波形时,正弦波波形要光滑              
双极性电压输出,电压幅值可调.


仿真原理图如下

实验报告

实验名称:波形发生器


单片机实验——DA转换实验

DA转换器是将数字量转换为模拟量的电路,主要用于数据传输系统、自动测试设备、医疗信息处理、电视信号的数字化、图像信号的处理和识别、数字通信和语音信息处理等。按数字量输入方式:并行输入和串行输入DA转换器。按模拟量输出方式:电流输出和电压输出DA转换器。按DA转换的分辩率:低分辩率、中分辩率和高分辩率DA转换器。学习并熟悉如何设置DA转换对于科学研究等将产生重要影响。


1实验目的

  • 了解常用DA转换芯片的结构组成,工作原理。

  • 掌握DAC0832的引脚功能,与单片机连接。

  • 理解单、双极输出方式的电路结构原理,学会用这两种方式。

      ( 4 )  设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。


2 D/A转换器工作原理

任D/A是将数字量转换成模拟量的器件,D/A的输出是电压或电流信号。衡量D/A性能的主要参数是:

分辨率:即输出模拟量的最小变化量。

满刻度误差:即输入为全1时,实际输出电压与理想值之差。

输出范围

转换时间:从转换器的输入改变到输出稳定的时间间隔。

是否容易与CPU接口。


3 DAC0832工作方式

DAC0832三种工作方式

  • 单缓冲方式:若应用系统中只有一路D/A转换或虽然有夺路转换,但并不要求各路信号同步输出时,则采用单缓冲的方式来接口。方法是:使锁存器和DAC寄存器同时接收数据。

  • 双缓冲方式:当多路D/A信号要求同步输出时,则采用双缓冲方式。方法是:分别使其输入锁存器接收数据;同时传送数据到其DAC寄存器,以实现多路转换同步输出。

  • 直通方式:所有控制信号均有效,适宜连续控制时。

D/A转换

D/A芯片DAC0832的应用:DAC0832是8位              D/A芯片,片内带数据锁存器,电流输出。该系列产品包括DAC0830——32,它们可以完全相互代换。它由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路组成

ADC0808引脚如图,各引脚功能如下:

  • DI0-DI7:数据输入线,TLL电瓶。

  • ILE:数据锁存允许控制信号输入线,高电平有效。

  • CS:片选信号输入线,低电平有效。

  • WR1:为输入寄存器的写选通信号。

  • XFER:数据传送控制信号输入线,低电平有效。

  • WR2:为DAC寄存器写选通输入线。

  • Iout1:电流输出线。当输入全为1时Iout1最大。

  • Iout2:电流输出线。其值与Iout1之和为常数。

  • Rfb:反馈信号输入线,芯片内部有反馈电阻。

  • Vcc:电源输入线(+5v~+15v)

  • Vref:基准电压输入线(-10v~+10v)

  • AGND:模拟地,模拟信号和基准信号参考地。

  • DGND:数字地,两种地线在基准电源处共地比较好。

  • 主要功能电路


4.0 电路图

4.1转换电路


4.2波形指示灯


4.3按键电路


4.4单片机电路


4.5 运行结果

三角形

方波

锯齿波

梯形波

正弦波


5. 总结

方波拟合成功,其他波形拟合存在问题。


单片机源程序如下:


#include "reg52.h"

#include


#define ADC_PORT P2 //如图,ADC0832连接端口


//老师要求的5种波

#define W_SINE 0

#define W_SQU 1

#define W_TRI 2

#define W_TRA 3

#define W_SAW 4


#define PI 3.1415926f //圆周率好像是这个数


//简化类型符写法

typedef unsigned char u8;

typedef unsigned int u16;

typedef unsigned long u32;


sbit ADC_CS_WR=P3^0; //如图,ADC0832使能口


//老师要求的5个LED,接P0口

sbit LED0=P0^0;

sbit LED1=P0^1;

sbit LED2=P0^2;

sbit LED3=P0^3;

sbit LED4=P0^4;


//图给出的5个按键

sbit KEY0=P1^0;

sbit KEY1=P1^1;

sbit KEY2=P1^2;

sbit KEY3=P1^3;

sbit KEY4=P1^4;


//全局变量

u8 mode;//模式:正弦波……

u16 freq;//频率

u8 time;//计次参数

u8 AM;//调幅



void Timer0Init(void);

void scanKey(void);

void sys_init(void);


void sine_wave(u8 location);//正弦波

void squ_wave(u8 location);//方……

void tri_wave(u8 location);//三……

void tra_wave(u8 location);//梯……

void saw_wave(u8 location);//锯……


void Timer0Init(void)                //100微秒@12.000MHz

{

        TMOD &= 0xF0;                //设置定时器模式

        TMOD |= 0x02;                //设置定时器模式

        TL0 = 0x9C;                //设置定时初值

        TH0 = 0x9C;                //设置定时重载值

        TF0 = 0;                //清除TF0标志

        TR0 = 1;                //定时器0开始计时

        EA = 1;         //开总中断

        ET0 = 1;        //开定时器0中断

}


void scanKey(void)//按键扫描

{

        if(KEY0==0)

        {

                mode=0;

                P0=0xFF;//灭所有灯

                LED0=0;

        }

        

        if(KEY1==0)

        {

                mode=1;

                P0=0xFF;//灭所有灯

                LED1=0;

        }

        

        if(KEY2==0)

        {

                mode=2;

                P0=0xFF;//灭所有灯

                LED2=0;

        }

        

        if(KEY3==0)

        {

                mode=3;

                P0=0xFF;//灭所有灯

                LED3=0;

        }

        

        if(KEY4==0)

        {

                mode=4;

                P0=0xFF;//灭所有灯

                LED4=0;

        }

}


void sys_init(void)//系统初始化

{

        time=0;

        ADC_CS_WR=0;

        ADC_PORT=0;

        mode=0;//默认输出正弦波

        freq=100;//默认频率100Hz

        AM=255;//最大幅度

}

void sine_wave(u8 location)//输出正弦波

{

        double x=(double)location/50*PI;//把0-100放缩到0-2派(pai,没有那个符号,好难受(╯﹏╰))

        u8 y=(sin(x)*(AM/2)+(AM/2));//算出y,并放缩到0-254(因为ADC范围0-AM,感觉这个芯片好落后)

        ADC_PORT=y;

}


void squ_wave(u8 location)//方……

{

        if(location<50)

                ADC_PORT=AM;

        else

                ADC_PORT=0x0;//这个好简单

}


void tri_wave(u8 location)//三……

{

        //为了简化,在单周期输出V字形

        u8 y;

        if(location<50)

                y=(50-location)*AM/50;

        else

                y=(location-50)*AM/50;

        ADC_PORT=y;

        //偶函数,信不?当然你说奇函数也没错

}

void tra_wave(u8 location)//梯……

{

        u8 y;

        if(location<25)

                y=0xFF;

        else if(location<50)

                y=(50-location)*AM/25;

        else if(location<75)

                y=0;

        else

                y=(location-75)*AM/25;

        ADC_PORT=y;

}

void saw_wave(u8 location)//锯……

{

        ADC_PORT=location*AM/100;

        //用(100-location)也以变成反向锯齿

}


void Timer0Work() interrupt 1 //中断服务函数

{

        switch(mode)

……………………



关键字:单片机  DAC0832  波形发生器 引用地址:单片机DAC0832波形发生器实验报告

上一篇:dht11和ds18b20温湿度控制 单片机程序
下一篇:蓝牙定时开关APP软件(附51单片机参考程序)

推荐阅读

彬彬有礼的机器人在门口迎客,厨艺高超的“厨师机器人”炒好菜,再由闪着蓝光的送餐机器人端到你面前……在科幻电影中,人们如此想象未来餐厅的样子。 近日,中国火锅连锁企业海底捞联手日本电器推出智能餐厅,通过配菜机器人实现后厨自动化,引发网友和业界热议。这是餐饮业的“黑科技”还是炒作噱头? 成都市锦江区蝶语餐厅经营业主李凯最近新添置...
全球存储市场持续稳定增长,SSD大规模替代机械硬盘大潮涌现,中国势力不断崛起。2019年到2022年闪存应用方向以SSD和移动应用为主,SSD市场的增速持续上扬。SSD出货量又以消费级SSD为主,同时消费级SSD和企业级SSD均呈现良好的增长势头。 近日,搭载了国产高端NVMe SSD主控忆芯STAR1000P的阿斯加特AN3+固态硬盘,一经面世就引来业界广泛关注。 阿斯加特AN3...
近日,上海临芯投资管理有限公司(“临芯投资”)作为领投方,携君桐资本、厦门建发、杭州国改等多家机构组成中资买方团,实现了杭州中欣晶圆半导体股份有限公司(“中欣晶圆”)“混改”和扩产增资轮投资的完美收官,项目交易金额近40亿元人民币。自7月初达成合作意向至项目收官,该项目历时仅四个月,较预期提前两月有余。中欣晶圆成立于2017年,系由日...
摆脱芯片供应短缺问题 双芯片代工策略见效 11月4日,高通股价飙涨逾12%,相较同业,高通在面对芯片更显得心应手,并看好明年业绩将持续成长。 高通执行长 Crisano Amon 于电话会议上表示,预计12月底供应问题将明显好转,明年下半年将有足够的供应满足需求,预期 2022财年EPS有望年增20%。 Lily点评:芯片短缺一直影响5G手机的出货量。高通作为全...

史海拾趣

问答坊 | AI 解惑

典型的嵌入式系统组成

嵌入式系统是专用计算机应用系统,它具有一般计算机组成的共性,也是由硬件和软件组成。 图1-1完整地描述了嵌入式系统的软硬件各部分的组成结构。 字串8 2.1 嵌入式系统的硬件基本结构 嵌入式系统的硬件架构如图1-1下半部分所示,是以嵌入 ...…

查看全部问答∨

要在atmega16 的 A1口输出一串数

本信息来自合作QQ群:AVR单片机学习与交流群(17727270) 群管理员在坛子里的ID:铜河 小弟请教一个问题 如果要在atmega16 的 A1口输出一串数 要怎么写 在icc avr中 能写PORTA.1=???吗…

查看全部问答∨

模拟示波器的校正

示波器与其它仪器一样(如万用表等),在使用之前都必需要先对其进行校正。而所谓对示波器的校正,是将示波器的原来波形在测试之前正确调试出来。也就是说,校正出来的波形要与示波器本身所设定的参数一致(这些参数通常会在校正的测试点标志出来) ...…

查看全部问答∨

犹豫不知学哪种语言好?

我现在正在学习单片机,有的老师说单片机好,但现在我在网上看好像大多都是C51,我真不知道是选择哪种好,各位请帮参谋一下,说一下现在的形势,我给学哪种好,谢了!…

查看全部问答∨

每天就签协议 帮看看这课程 和我基础可以吗?

   自己时师范大学电子系的学生 也大四了  大一大二一直玩WOW 总游戏时间都365天了   大三才认识危机 一年的时间将挂的10几门必修课都修完了     现在的有个机会去培训 嵌入式LUNIX软件工程师   ...…

查看全部问答∨

我的毕业设计不知从和下手,哪位能否给我一些指点?

毕业设计的题目是:嵌入式系统环境下自动测试工具的安装与使用,我对此不了解,不知道该怎么做,从和下手,实现什么功能,哪位能否给我一些建议或者指导,先谢了!…

查看全部问答∨

关于9B96的FLASH擦写次数

根据官方给出的最新版本勘误表 对于C3 和C5版本的芯片 FLASH 最大擦写次数为100次, 所以童鞋们注意了,最好还是在SRAM里调程序,而不要烧到FLASH里去 下面是相应的说明截图 …

查看全部问答∨

出kb101闲置板一块

本帖最后由 ddllxxrr 于 2016-1-7 17:06 编辑 出kb101 stm32闲置板一块 有意向的童鞋点击 …

查看全部问答∨

程序里怎么写一个函数的微分?

加入知道一个变量了。 想求出它的微分…

查看全部问答∨

有关TI的BQ24620的充电电流问题

有谁用过这个芯片,求指教,如何提升BQ24620的充电电流,按照技术文档上写的调节 ISET 两端的电压,但调节作用不明显,还请告知,不胜感激! The ISET1 input sets the maximum charging current. Battery current is sensed by resistor RSR conn ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved