您的位置 首页 分销

Cortex-M3学习日志(五)– — DAC试验

终于逮了个忙里偷闲的机会,就再学一下LPC1768的外围功能吧,循序渐进是学习的基本规则,也许LPC1768的DAC与8位单片机16位单片机里面集成的

总算逮了个忙里偷闲的时机,就再学一下LPC1768的外围功用吧,按部就班是学习的根本规矩,或许LPC1768的DAC与8位单片机16位单片机里边集成的DAC操作相似,可是已然这是懒猫的学习日志,就顺便把DAC再好好温习一下了,或许能品出个什么味来^_^DAC是Digital to Analog Converter的缩写,中文名便是数模转化器,D/A转化器一般由数码寄存器、模仿电子开关电路、解码网络、求和电路及基准电压等几部分组成。如下图所示:

图1-1 DAC原理框图

数字量以串行或并行方法输入,存储于数码寄存器中,数码寄存器输出的名位数码别离操控对应的模仿开关,使数码为1的位在位权网络上产生与其值成正比的电流值或电压值,再由求和电路将各权值相加,即得到数字量对应的模仿量。按解码网络结构不同能够将DAC转化器分红T型电阻网络D/A转化器、倒T型电阻网络D/A转化器、权电流D/A转化器、权电阻网络转化器。

1、T型电阻网络D/A转化器,其简略模型如下图所示:

图1-2 T型电阻网络D/A转化器模型

2、倒T型电阻网络D/A转化器简易模型

图1-3倒T型电阻网络D/A转化器

3、权电流D/A转化器简易模型如下图所示:

图1-4权电流D/A转化器简易模型

4、权电阻网络转化器简易模型如下图所示:

1-5权电阻网络转化器简易模型

按模仿电子开关的电路的不同,也能够将D/A转化器分为CMOS开关型D/A转化器(速度要求不高),双极型D/A转化器。而双极型D/A转化器双能够划分为电流开关型(速度要求较高)与ECL电流开关型(转化速度更高)两种。假如对欧姆规律不生疏的话,我想上面各个模型是怎么输出电压的应该就能够理解了,在这儿就不总结公式了,因为这仅仅模型,对应,实践电路与模型是有所收支的,在实践运用中要侧重重视一下以下几个参数:

1、分辩率

D/A转化器的分辩率用最小分辩电压VLSB与满量程输出电压VFSV的比值来表明:


从上式能够看出D/A转化器的分辩率只与输入二进制数的位数n有关,因而大部分情况下咱们直接把n做为分辩率如8位,10位,12位等,由此咱们也能够知道分辩率值越小,分辩才能越高。

2、转化精度

在D/A转化器中,一般用转化差错来描绘转化精度。DAC转化差错是指实践输出模仿电压值与抱负值的最大差错。转化差错是一个综合性的静态目标,主要由三部分构成:

1)非线性差错:一般是因为模仿电子开关的导通电阻和导通压降及R、2R电阻值的差错引起。

2)漂移差错:一般是因为运算放大器的零点漂移引起。

3)增益差错:一般是因为参阅电压违背规范值、运放增益不安稳引起。

3、转化速度

转化速度一般由树立时刻决议,从输入由全0骤变全1起,到输出电压安稳(最大输出电压正负二分之一最小输出电压)止,称为DAC转化时刻。它是DAC最大呼应时刻。例如,DAC 5G7520呼应时刻不大于500ns。

除了以上三个常见的目标D/A转化器的目标还包含电源按捺比、功率耗费、温度系数以及输入高、低逻辑电平的数值等技能目标。关于D/A的运用,应该说在电子体系中运用适当广泛,除了在微机体系中将数字量转化为模仿量典型运用之外,还常用于波形生成,名种数字式的或编程运用等。

好了,关于D/A转化器的常识暂时总结到这,更深化的知道还需求翻一下模电,信号与线性体系(如同里边有奈奎斯特定理,与采样有关),微电子,放大器等方面的书本。下面简略总结一下LPC1768内部集成的D/A转化器。LPC1768内部集成的是10位模数转化器,它是电阻串联结构的,而且带有缓冲输出,最大输出频率为1MHz。电阻串联结构模型如下图所示:

1-6电阻串联结构

涉及到D/A的引脚主要有DAC输出脚P0.26,参阅电压引脚,用来给D/A转化器供给参阅电压,模仿电源与数字电源VDD/VSS,这个两个电源要分隔供给,再不运用DAC时也要将这两个引脚连接到电源,不能悬空,否则体系会不安稳。

DAC的装备也很简略,首要便是将P0.26设置为DAC形式,再一个便是装备DAC操控寄存器DACDR。DAC的操控寄存器DACDR的6-15位是DAC的输出电压数字值,这个数字决议了要输出的电压巨细,DAC输出电压的计算方法是:


公式中VDAC即指AC的操控寄存器DACDR的6-15位的值,VREF指的是参阅电压,在这次试验电路顶用的是3.3V。LPC1768的DAC功用还有DAM中止和守时操控功用,它选用又缓冲方法输出。在这儿简略总结一下DAM形式,所谓的DAM形式也便是Direct Memory Access,汉语的意思便是直接内存拜访,是一种不经过CPU而直接从内存存取数据的数据交换形式。在DMA形式下,CPU只须向DMA操控器下达指令,让DMA操控器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率,能够大大节约体系资源。DMA形式又能够分为Single-Word DMA(单字节DMA)和Multi-Word DMA(多字节DMA)两种,其间所能到达的最大传输速率也只要16.6MB/s。DMA有两个技能特征,首要是直接传送,其次是块传送。

DMA作业进程

当进程要求设备输入数据时,CPU把预备寄存输入数据的内存开始地址以及要传送的字节数别离送入DMA操控器中的内存地址寄存器和传送字节计数器。

宣布数据传输要求的进行进入等候状况。此刻正在履行的CPU指令被暂时挂起。进程调度程序调度其他进程占有CPU。

输入设备不断地盗取CPU作业周期,将数据缓冲寄存器中的数据源源不断地写入内存,直到所要求的字节悉数传送完毕。

DMA操控器在传送完一切字节时,经过中止请求线宣布中止信号。CPU在接收到中止信号后,转入中止处理程序进行后续处理。

中止处理完毕后,CPU返回到被中止的进程中,或切换到新的进程上下文环境中,持续履行。

DMA与中止的差异

中止方法是在数据缓冲寄存器满之后宣布中止,要求CPU进行中止处理,而DMA方法则是在所要求传送的数据块悉数传送完毕时要求CPU进行中止处理。这就大大削减了CPU进行中止处理的次数。

中止方法的数据传送是在中止处理时由CPU操控完结的,而DMA方法则是在DMA操控器的操控下,不经过CPU操控完结的。这就排除了CPU因并行设备过多而来不及处理以及因速度不匹配而形成数据丢掉等现象。

在DMA方法中,因为I/O设备直接同内存产生成块的数据交换,因而I/O功率比较高。因为DMA技能能够进步I/O功率,因而在现代计算机体系中,得到了广泛的运用。许多输入输出设备的操控器,特别是块设备的操控器,都支撑DMA方法。

经过上述剖析能够看出,DMA操控器功用的强弱,是决议DMA功率的关键因素。DMA操控器需求为每次数据的传送做很多的作业,数据传送单位的增大意味着传送次数的削减。别的,DMA方法盗取了时钟周期,CPU处理功率降低了,要想尽量少地盗取时钟周期,就要设法进步DMA操控器的功用,这样能够较少地影响CPU出理功率。

好了,关于DAM的常识先总结到这,要想运用LPC1768的DAM功用,需求装备D/A转化操控寄存器DACCTRL与DAC转化计数寄存器DACCNTVAL。这次试验仅仅简略的学习怎样运用DAC,所以没有用到DAM。下面说一下试验电路,便是把DAC转化的电压经过放大器输出到Speaker,电压值不同,则Speaker的响度就不相同,如下图所示:

1-7 DAC试验电路图

关于LM386M已经是烂大街的芯片,关于它的运用网上有成大堆的材料可供参阅,这儿就不总结它的用法了,下面贴上这次试验的程序:

关于LM386M已经是烂大街的芯片,关于它的运用网上有成大堆的材料可供参阅,这儿就不总结它的用法了,下面贴上这次试验的程序:

一、dac.c程序源代码

#include”includes.h”

void DACInit( void )

{

PINCON -> PINSEL1 = 0x00200000;

}

void DacOut(unsigned int val)

{

DAC -> DACR = ((val << 16)/3300) | DAC_BIAS;

}

二、main.c程序部分源代码

void DacConver(unsigned int val)

{

unsigned int hi = 0;

unsigned int low = 0;

hi= val/1000;

low = val00/100;

DacVal[16]= (unsigned char)hi + 0x30;

DacVal[18]= (unsigned char)low + 0x30;

DacOut(val);

UARTSend(0,DacVal,25);

}

int main(void)

{

unsigned int i = 0;

SystemInit();

SysTick_Config(SystemFrequency/1000 – 1);

PortInit();

DACInit();

UARTInit(0,19200);

for(i=0;i<7;i++)

{

UARTSend(0,OpenString[i],50);

}

DacConver(2000);// 2.0v

DacConver(2500);// 2.5v

DacConver(3000);// 3.0v

DacConver(3300);// 3.0v

//LedOnMeg[4] = 4+0x30;

//UART0_SendString (KeyMeg);

while(1)

{

KeyScan();//按键扫描

KeyHandle(); //按键处理

LedHandle(); // Led处理程序

}

}

程序很简略,便是简略的测验,能从Speaker听到响声,一起我也把成果发送到了串口显现,下面是试验的成果:


1-8试验履行成果

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/263314.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部