您的位置 首页 解答

Cortex-M3学习日志(六)– ADC试验

DAC方面的知识,好吧,这次再来总结一下ADC方面的东东。ADC即Analog-to-DigitalConverter的缩写,指模数转换器或者模拟数字转换器。现

DAC方面的常识,好吧,这次再来总结一下ADC方面的东东。ADC即Analog-to-Digital Converter的缩写,指模/数转化器或许模仿/数字转化器。实践国际是由模仿信号组成的,关于为什么要用模数转化器,这大约与现在数字存储技能有关吧,例如温度、压力、声响或许图画等只需转化成数字量才干便利的存储在硬盘、U盘等数码存储介质中,或许某天咱们的技能发展了,数字存储能够用某些模仿量存储,或许咱们就用不着这么费事的转来换去了。好了,闲话不多扯,来简略总结一下ADC的原理。模仿信号转化为数字信号<�ONT-FAMILY: 宋体">坚持电路中完结,后两过程则在ADC中完结。关于它的原理,首要有以下几种模型:

1、积分型ADC(如TLC7135)

积分型ADC作业原理是将输入电压转化成时刻(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器取得数字值。其长处是用简略电路就能取得高分辩率,但缺陷是由于转化精度依赖于积分时刻,因而转化速率极低。初期的单片AD转化器大多选用积分型,现在逐次比较型已逐渐成为干流。

2、逐次比较型ADC(如TLC0831)

逐次比较型AD由一个比较器和DA转化器经过逐次比较逻辑构成,从MSB开端,次序地对每一位将输入电压与内置DA转化器输出进行比较,经n次比较而输出数字值。其电路规划归于中等。其长处是速度较高、功耗低,在分辩率较低(<12位)时价格便宜,但高精度(>12位)时价格很高。

3、并行比较型/串并行比较型ADC(如TLC5510)

并行比较型AD选用多个比较器,仅作一次比较而实施转化,又称Flash(快速)型。由于转化速率极高,n位的转化需求2n-1个比较器,因而电路规划也极大,价格也高,只适用于视频AD转化器等速度特别高的范畴。

串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型AD转化器合作DA转化器组成,用两次比较实施转化,所以称为Half flash(半快速)型。还有分红三步或更多步完结AD转化的叫做分级(Multistep/Subrangling)型AD,而从转化时序视点又可称为流水线(Pipelined)型AD,现代的分级型AD中还加入了对屡次转化成果作数字运算而批改特性等功用。这类AD速度比逐次比较型高,电路规划比并行型小。

4、Σ-Δ(Sigma?/FONT>delta)调制型ADC(如AD7705)

Σ-Δ型AD由积分器、比较器、1位DA转化器和数字滤波器等组成。原理上近似于积分型,将输入电压转化成时刻(脉冲宽度)信号,用数字滤波器处理后得到数字值。电路的数字部分根本上简略单片化,因而简略做到高分辩率。首要用于音频和丈量。

5、电容阵列逐次比较型ADC

电容阵列逐次比较型AD在内置DA转化器中选用电容矩阵办法,也可称为电荷再分配型。一般的电阻阵列DA转化器中大都电阻的值有必要共同,在单芯片上生成高精度的电阻并不简略。假如用电容阵列替代电阻阵列,能够用低价本钱制成高精度单片AD转化器。最近的逐次比较型AD转化器大多为电容阵列式的。

6、压频变换型ADC(如AD650)

压频变换型(Voltage-Frequency Converter)是经过直接转化办法完结模数转化的。其原理是首先将输入的模仿信号转化成频率,然后用计数器将频率转化成数字量。从理论上讲这种AD的分辩率简直能够无限添加,只需采样的时刻能够满意输出频率分辩率要求的累积脉冲个数的宽度。其长处是分辩率高、功耗低、价格低,可是需求外部计数电路共同完结AD转化。

DAC的内部电路构成无太大差异,一般按输出是电流仍是电压、能否作乘法运算等进行分类。大大都DAC由电阻阵列和多个电流开关(或电压开关)构成。按数字输入值切换开关,发生份额于输入的电流(或电压)。此外,也有为了改进精度而把恒流源放入器材内部的。DAC分为电压型和电流型两大类,电压型DAC有权电阻网络、T型电阻网络和树形开关网络等;电流型DAC有权电流型电阻网络和倒T型电阻网络等。

1电压输出型(如TLC5620)。电压输出型DAC虽有直接从电阻阵列输出电压的,但一般选用内置输出放大器以低阻抗输出。直接输出电压的器材仅用于高阻抗负载,由于无输出放大器部分的推迟,故常作为高速DAC运用。

2电流输出型(如THS5661A )。电流输出型DAC很少直接运用电流输出,大多外接电流-电压转化电路得到电压输出,后者有两种办法:一是只在输出引脚上接负载电阻而进行电流-电压转化,二是外接运算放大器

3乘算型(如AD7533)。DAC中有运用安稳基准电压的,也有在基准电压输入上加沟通信号的,后者由于能得到数字输入和基准电压输入相乘的成果而输出,因而称为乘算型DAC。乘算型DAC一般不只能够进行乘法运算,并且能够作为使输入信号数字化地衰减的衰减器及对输入信号进行调制的调制器运用。

4一位DAC。一位DAC与前述转化办法全然不同,它将数字值转化为脉冲宽度调制或频率调制的输出,然后用数字滤波器作均匀化而得到一般的电压输出,用于音频等场合。

选用ADC时要注意这几个参数:取样与坚持时刻、量化与编码办法、分辩率、转化差错、转化时刻、肯定精准度、相对精准度等。

1、取样与坚持

由于取样时刻极短,取样输出为一串断续的窄脉冲。要把每个取样的窄脉冲信号数字化,是需求必定的时刻。因而在两次取样之间,应将取样的模仿信号暂时贮存到下个取样脉冲到来,这个动作称之为坚持。在模仿电路设计上,因而需求添加一个取样-坚持电路。为了确保有正确转化,模仿电路要保留着还未转化的数据。一个取样-坚持电路可确保模仿电路中取样时,取样时刻的安稳并贮存,一般运用电容组件来贮存电荷。依据数字信号处理的根本原理,奈奎斯特(Nyquist)取样定理(懒猫记住这个定理应该是在《信号与线性系统》这本课上学的^_^),若要能正确且忠实地出现所撷取的模仿信号,有必要取样频率至少高于最大频率的2倍。例如,若是输入一个100Hz的正弦波的话,最小的取样频率至少要2倍,便是200Hz。尽管理论值是如此,但真正在使用时,最好是挨近10倍才会有不错的复原效果(因取样点越多)。若针对多信道的A/D转化器来说,就有必要乘上信道数,这样均匀下去,每一个通道才不会有失真的状况发生。

2、量化与编码

量化与编码电路是A/D转化器的中心组成的部分,一般对取样值的量化办法有下列两种:

(1)只舍去不进位

首先取一最小量化单位Δ=U/2n,U是输入模仿电压的最大值,n是输出数字数值的位数。当输入模仿电压U在0~Δ之间,则归入0Δ,当U在Δ~2Δ之间,则归入1Δ。透过这样的量化办法发生的最大量化差错为Δ/2,并且量化差错总是为正,+1/2LSB。

(2)有舍去有进位

假如量化单位Δ=2U/(2 n+1–1),当输入电压U在0~Δ/2之间,归入0Δ,当U在Δ/2~3/2Δ之间的话,就要归入1Δ。这种量化办法发生的最大量化差错为Δ/2,并且量化差错有正,有负,为±1/2LSB。量化成果也造成了所谓的量化差错。

3、解析度

指A/D转化器所能分辩的最小模仿输入量。一般用转化成数字量的位数来表明,如8-bit,10-bit,12-bit与16-bit等。位数越高,分辩率越高。若小于最小改变量的输入模仿电压的任何改变,将不会引起输出数字值的改变。选用12-bit的AD574,若是满刻度为10V的话,分辩率即为10V / 212 = 2.44mV。而常用的8-bit的ADC0804,若是满刻度为5V的话,分辩率即为5V / 28 = 19.53mV。挑选适用的A/D转化器是适当重要的,并不是分辩率越高越好。不需求分辩率高的场合,所撷取到的大多是噪声。分辩率太低,会有无法取样到所需的信号。

4、转化差错

一般以相对差错的方法输出,其表明A/D转化器实践输出数字值与抱负输出数字值的不同,并用最低有用位LSB的倍数表明。

5、转化时刻

转化时刻是A/D转化完结一次所需的时刻。从发动信号开端到转化完毕并得到安稳的数字输出值停止的时刻距离。转化时刻越短则转化速度就越快。

6、精准度

关于A/D转化器,精准度指的是在输出端发生所设定的数字数值,其实践需求的模仿输入值与理论上要求的模仿输入值之差。精确度依核算办法不同,能够区分为:肯定精确度与相对精确度。所谓的肯定精确度是指实践输出值与理论输出值的挨近程度,其相关的联系是如下式子所列:

相对精准度指的是满刻度值校准今后,恣意数字输出所对应的实践模仿输入值(中心值)与理论值(中心值)之差。关于线性A/D转化器,相对精准度便是它的线性程度。由于电路制造上影响,会发生像是非线性差错,或是量化差错等减低相对精准度的要素。相对精确度是指实践输出值与抱负理论满刻输出值之挨近程度,其相关的联系是如下式子所列:

根本上,一个n-bit的转化器就有n个数字输出位。这种所发生的位数值是等效于在A/D转化器的输入端的模仿巨细特性值。假如外部所要输入电压或是电流量较大的话,所转化后的的位数值也就较大。透过并排端口接口或是微处理机衔接A/D转化器时,有必要了解怎么去操控或是驱动这颗A/D转化器的问题。因而需求了解到A/D转化器上的操控信号有哪些。

懒猫为了总结学过的东东,翻箱坍毁柜,总算找到了大学的讲义,又在大学城的图书保证里边坐了几个小时,当然了懒猫不也在网上转了N久,所以呢,以上常识大部分来历网络,懒猫囫囵吞枣的咽进了肚里,但大部分也开端消化了,嘻嘻……好了,这ADC有常识先暂时总结到这,下面说一说这次试验的思路(是思路不是丝路^_^)及电路图,并简略的总结一下LPC1768内部集成的ADC。

LPC1768内部集成的是12位主次迫临式的模数转化器,具有8个通道,它的根本时钟由APB时钟供给,它还包括一个可编程分频器,能够将APB时钟调整为主次迫临转化所需的时钟(最大可达13MHz)。与ADC相关的引脚装备包括功用装备也即装备引脚功用挑选寄存器PINSEL,一般ADC是第二功用,这次试验的电路衔接的是ADC0.2通道所以要把P0.25装备成ADC功用,即PINCON->PINSEL1 |= (1<<18);。还要把电源参阅引脚衔接上参阅电源一般是接3V或与VCC电压持平。与ADC相关的寄存器包括:

1、外围器接口电源办理寄存器PCONP,要把这个寄存器的第12位即PCADC方位位,这一位是ADC的电源操控与时钟操控位。

2、A/D操控寄存器ADCR,首要是操控ADC转化的一些操作如通道挑选,作业形式挑选等等,AD转化开端前,有必要设置ADCR寄存器来挑选作业形式。

3、A/D大局数据寄存器ADGDR,它包括最近一次A/D转化的成果。

4、A/D中止使能寄存器ADINTEN,假如运用转化完中止时,需求装备此寄存器,它包括的使能位操控每一个A/D通道的DONE符号是否用来发生中止。

5、A/D通道n数据寄存器ADDRn,共有8个,它包括在通道n上完结的最近一次转化成果。

6、A/D状况寄存器AD0STAT,它包括一切A/D通道的DONE标志和OVERRUN标志,以及A/D中止标志。


关于这几个寄存器的各位代表是什么意思,怎么设置,这儿就不总结了,芯片的数据手册上写的很清楚,假如你觉得看英文不舒服能够参阅一下周公那公司翻译的中文版,应该对初学者有所协助。下面说一下这次试验的电路图:

1-1电位器分压电路图

试验电路很简略,便是一个电位器来分压,然后由AD转化器的通道2来采样电压,然后再把收集到的电压经过串口0发送的到串口以便调查采样的电压值,好了,电路这块就不多费口舌了,留点翰墨说一下程序吧,下面先贴出ADC的源代码:

一、AdcFunc.c源代码(首要便是与ADC相关的一些函数)

#include”adc.h”

void AdcInit(void)

{

SC->PCONP |= (1 << 12);

PINCON->PINSEL1 |= (1<<18);

ADC -> ADCR |= ( 1 << 2 )

|( ( 18000000 / ADC_CLK – 1 ) << 8 )

|( 0 << 16 )

|( 1 << 21 )

|( 1 << 24)

|( 0 << 27) ;

}

unsigned int AdcConver(void)

{

unsigned int i = 0;

unsigned long ulADCbuf = 0;

unsigned intulADCData = 0;

for(i=0;i

{

ADC -> ADCR |= 1 << 24;

while (!(ADC ->ADSTAT & (1 << 2)));

ADC -> ADCR |= (1 <<24);

while ((ADC ->ADSTAT & (1 << 2)) == 0);

ulADCbuf= ADC ->ADDR2;

ulADCbuf= (ulADCbuf >> 4) & 0xfff;

ulADCData += (unsigned int)ulADCbuf;

}

//ADC -> ADCR &= ~(1<<21)&(~(1<<24));

ulADCData = (ulADCData/ADC_CNT);

ulADCData = (ulADCData*3300)/4096;

returnulADCData;

}

这个源代码,首要便是ADC初始化与ADC采样程序,程序中我已将用到的寄存器都注释了,关于初学者来说应该不是太难了,下面贴出主程序的部分代码:

二、mian.c(首要调度函数及使用函数)

void AdcDisVal(void)

{

unsigned int adcval = 0;

unsigned int hh = 0;

unsigned int hi = 0;

unsigned int ll = 0;

unsigned int lo = 0;

adcval = AdcConver();

if(adcval != AdcValOld)

{

if(((adcval+1)!=AdcValOld)&&((adcval+2)!=AdcValOld)&&((adcval+3)!=AdcValOld))

{

if(((adcval-1)!=AdcValOld)&&((adcval-2)!=AdcValOld)&&((adcval-3)!=AdcValOld))

{

hh = adcval/1000;

hi = adcval00/100;

ll = adcval0/10;

lo = adcval;

AdcVal[38] = (unsigned char)hh + 0x30;

AdcVal[40] = (unsigned char)hi + 0x30;

AdcVal[41] = (unsigned char)ll + 0x30;

AdcVal[42] = (unsigned char)lo + 0x30;

UARTSend(0,AdcVal,50);

AdcValOld =adcval;

}

}

}

}


下面是程序履行成果:

1-2程序履行成果

这仅仅部分代码,具体的源代码请参阅附件。这段代码是将收集到的数据转化成字符发送到串口显现,里边没有什么杂乱的核算,都是烂大街的程序,由于懒猫也不是什么高手,也说不出什么深邃的理论,只能总结点简略的东西,期望这些简略的试验能起到抛砖引玉的效果,让初学者赶快能迈入单片机这扇门,万事开头难,徜徉在门口的感觉最欠好爱,懒猫也曾徘徊过,也曾无法过,也曾痛苦过,也曾诉苦过,但路途尽管高低,只需你坚持就能爬到山顶。懒猫深知很多人面临电子有着极大的爱好,但却无从下手,没有高手辅导,没有教材参阅,这种感觉真实欠好爱,所以懒猫有空便会写下自己的学习日志,尽量简略,尽量具体,俗话说师傅引进门,修行靠个人,当你熬过阵痛,迈进电子这扇门之后,剩余的事便是发挥你的聪明才智,尽力的发明美妙的未来!仍是那句老话,学无难易,贵在坚持!

好了,今日先总结到这吧,最近手头上的事有点多,所以自学的时刻有点紧,学习的事推了又推,但不管怎样,懒猫仍然是懒猫,懒猫仍然会坚持开始的愿望,一向尽力的走下去……

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部