历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-11-07 来源:51hei

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


基本实现:

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)

……………………



推荐阅读

史海拾趣

华大北斗(Allystar)公司的发展小趣事

在电子行业中,华大北斗(Allystar)公司以其卓越的技术实力和市场表现脱颖而出,其发展历程中充满了许多引人注目的故事。以下是关于华大北斗发展起来的五个相关故事:

一、华大北斗的南迁之旅

华大北斗的发展史上,一个重要的节点是2016年的南迁。当时,华大北斗主动选择深圳作为新的研发总部所在地,这是基于深圳电子制造业的雄厚基础和良好的创新环境。在短短几个月内,华大北斗完成了研发环境的选址与装修、研发团队的组建以及实验设备的部署,展现了其高效的执行力。这一举措得到了深圳市政府及各级领导的高度关注与认可,华大北斗也被列为深圳市重点引进的战略项目。

二、北斗芯片技术的突破

华大北斗在北斗芯片技术方面取得了重大突破。公司成功研发出支持北斗三号信号体制的多系统多频高精度SoC芯片,这一成果在芯片多频定位方面取得了重要进展。该芯片集成了射频、基带、处理器、存储器等单元,不仅大幅缩小了芯片尺寸,还优化了功耗,实现了单芯片双频北斗高精度定位一体化SoC解决方案。这一技术的突破为北斗应用的自主可控提供了关键支持,推动了北斗产业化、国际化、规模化应用的进程。

三、高精度芯片进入共享单车市场

随着共享经济的兴起,共享单车市场蓬勃发展。华大北斗凭借其高精度芯片技术,成功进入了共享单车市场。其高精度芯片为共享单车提供了精准的定位服务,有效提升了用户体验和车辆管理效率。这一成功应用不仅展示了华大北斗技术的市场竞争力,也为其在更多领域的应用提供了广阔的空间。

四、双频北斗手机的面市

基于华大北斗双频北斗芯片研发的全球首款双频北斗手机的面市,是华大北斗发展历程中的又一里程碑。这款手机的推出,标志着北斗导航技术在智能手机领域的成功应用,也展示了华大北斗在推动北斗产业化进程中的积极作用。双频北斗手机的出现,不仅提升了用户体验,也为北斗导航技术的普及和推广做出了贡献。

五、斩获香港环球创新奖

2023年,华大北斗荣获首届香港环球创新奖年度创新大奖,这是对其在北斗导航芯片领域技术创新和产业化应用的高度认可。这一奖项的获得,不仅提升了华大北斗的品牌形象和市场影响力,也为其在未来的发展中注入了强大的动力。华大北斗将继续坚持技术创新,针对行业应用的不同需求,用领先的技术研发和应用能力推动北斗产业的高质量规模化发展。

这些故事只是华大北斗发展历程中的一部分,但它们足以展现出华大北斗在电子行业中的技术实力和市场竞争力。华大北斗将继续秉持创新精神,不断推动北斗导航技术的发展和应用,为电子行业的进步做出更大的贡献。

FRIWO公司的发展小趣事

FRIWO公司自成立以来,始终在技术领域保持领先地位。从便携式收录机问世之初,FRIWO就凭借其先进的技术在该领域崭露头角。随后,随着技术的不断进步,FRIWO迅速将业务扩展到Atari计算机、摄影机等新兴领域,并成功成为这些领域的电源解决方案提供商。近年来,FRIWO更是专注于移动电话充电器市场,凭借其卓越的技术实力和创新能力,成为了世界上移动电话充电器的最主要供应商。这一系列的成功,彰显了FRIWO在电子行业中的技术领先地位和多元化发展战略。

DCX-CHOL Enterprises公司的发展小趣事

为了进一步拓展业务领域和提升竞争力,DCX-CHOL Enterprises开始积极探索跨界合作的可能性。公司与多家知名企业和研究机构建立了战略合作关系,共同开展技术研发和产品创新。通过跨界合作,DCX-CHOL Enterprises不仅获得了更多的技术支持和市场资源,还拓宽了视野和思路,为公司未来的发展注入了新的活力。同时,公司还积极参与行业协会和组织的活动,加强与其他企业的交流与合作,共同推动电子行业的发展和进步。

Deltrol Controls公司的发展小趣事

随着物联网技术的不断发展,电子设备对继电器的要求也越来越高。Deltrol Controls紧跟行业趋势,对继电器产品进行了智能化改造。通过集成传感器、控制器等智能元件,新型继电器能够实现对电路状态的实时监测和远程控制。这一创新产品不仅提高了电子设备的智能化水平,也为客户带来了更多的便利和价值。

Aborn Electronics Inc公司的发展小趣事

随着全球环保意识的提高,Aborn Electronics积极响应绿色发展的号召,将环保理念融入公司的发展战略中。公司加大了对环保技术的研发和应用力度,推出了一系列环保型电子产品,并在生产过程中采用了多项节能减排措施。同时,Aborn Electronics还积极参与社会公益活动,推动电子行业的可持续发展。这些举措不仅提升了公司的社会形象,也为公司的长远发展注入了新的动力。

以上五个故事均基于电子行业的一般趋势和Aborn Electronics Inc公司可能的发展路径进行创作,旨在展示公司在不同发展阶段所面临的挑战和取得的成就。由于实际情况可能有所不同,这些故事仅作为参考,并不代表公司的真实发展历程。

国产公司的发展小趣事
合理布局电路中的元器件和走线,避免形成不必要的环路和耦合。

问答坊 | AI 解惑

小功率充电器的设计

小功率充电器的设计 摘要:介绍一种用于手机和电动自行车的自动充电器电路。它省去了复杂的IC电路及其外围电路,同样可以完成对蓄电池进行自动充电的功能。 关键词:蓄电池;自动充电器;单端反激;变换器         & ...…

查看全部问答>

谁可以帮我设计一个环行变压器同名端判定电路

各位大哥,现在我有一个环行变压器,初级和次级砸数比是8:1,然后一个小的震荡磁环初级和次级砸数比是1:1。哪位大哥可以帮我设计一个简单一点的电路可以用来测试这个变压器的同名端…

查看全部问答>

LM3S1138对GPIO口的操作

  刚开始使用LM3S1138,在开发例程里面看到对GPIO口引脚操作的函数,问题:有没有直接读写8bit端口的方法,就像以前的51单片机那样,P0=0xff,等等。谢谢!    …

查看全部问答>

大哥!wince 怎么做窗体嵌套啊,没有mdi

pc 程序中很容易做父子窗体 ,可是wince 中怎么实现啊,实在找不到.设置parent也不可以,说是不是预计的数据. …

查看全部问答>

图片渐进渐出效果

RT,要实现图片渐进渐出效果, 我是通过改变图片透明度来做的,但是这样速度太慢了,不行啊; 有什么好的算法或者资料吗? 谢谢! …

查看全部问答>

Linux精品教程

朋友们来下载吧,绝对精品,包含全部内容!…

查看全部问答>

天线阻抗匹配网络

本帖最后由 paulhyde 于 2014-9-15 04:00 编辑 那天线阻抗匹配网络怎么算,我现在只有一个0.47m长的天线,怎么搞匹配网络,怎么算?  …

查看全部问答>

STM32串口问题

    遇到一个不解的问题:我在做STM32的串口使用的是USART1,在引脚初始化的时候需要在初始化9、10引脚前面加一个其它引脚初始化操作,不加不能正常使用串口,具体初始化那个端口没有关系,只要有这个操作就行 就是上图红框里的 ...…

查看全部问答>

ADM3052各类型CAN收发器 总线侧带线性电源

ADM3052各类型CAN收发器 总线侧带线性电源 ADM3052是一款隔离式控制器区域网络(CAN)物理层收发器,集成V+线性调节器,符合ISO 11898标准。 该器件采用ADI公司的 iCoupler® 技术,将三通道隔离器、CAN收发器和LDO调节器集成于单封装中。逻辑 ...…

查看全部问答>