MSP430ADDA转换器的应用.docx
- 文档编号:3843329
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:34
- 大小:742.02KB
MSP430ADDA转换器的应用.docx
《MSP430ADDA转换器的应用.docx》由会员分享,可在线阅读,更多相关《MSP430ADDA转换器的应用.docx(34页珍藏版)》请在冰豆网上搜索。
MSP430ADDA转换器的应用
第6章A/D、D/A转换器的应用
6.1A/D、D/A转换器的工作原理
6.1.1D/A转换器的工作原理
D/A转换器(DigitaltoAnalogConverter)是一种能把数字量转换成模拟量的电子器件;A/D转换器(AnalogtoDigitalConverter)则相反,它能把模拟量转换成相应的数字量。
在微机控制系统中,经常要用到A/D和D/A转换器。
D/A转换器从工作原理分为T型电阻网络、倒T型电阻网络、权电阻网络几种形式。
倒T型电阻网络的工作原理如图6.1所示。
图6.1倒T型电阻网络型D/A转换器
输出电压的大小与数字量具有对应的关系。
D/A转换器的主要性能指标:
1)分辨率是指输入数字量的最低有效位(LSB)发生变化时,所对应的输出模拟量(电压或电流)的变化量。
它反映了输出模拟量的最小变化值。
分辨率与输入数字量的位数有确定的关系,可以表示成FS/2n。
FS表示满量程输入值,n为二进制位数。
对于5V的满量程,采用8位的DAC时,分辨率为5V/256=19.5mV;当采用12位的DAC时,分辨率则为5V/4096=1.22mV。
显然,位数越多分辨率就越高。
2)线性度(也称非线性误差)是实际转换特性曲线与理想直线特性之间的最大偏差。
常以相对于满量程的百分数表示。
如±1%是指实际输出值与理论值之差在满刻度的±1%以内。
3)绝对精度(简称精度)是指在整个刻度范围内,任一输入数码所对应的模拟量实际输出值与理论值之间的最大误差。
绝对精度是由DAC的增益误差(当输入数码为全1时,实际输出值与理想输出值之差)、零点误差(数码输入为全0时,DAC的非零输出值)、非线性误差和噪声等引起的。
绝对精度(即最大误差)应小于1个LSB。
4)建立时间是指输入的数字量发生满刻度变化时,输出模拟信号达到满刻度值的±1/2LSB所需的时间。
是描述D/A转换速率的一个动态指标。
电流输出型DAC的建立时间短。
电压输出型DAC的建立时间主要决定于运算放大器的响应时间。
根据建立时间的长短,可以将DAC分成高速(<1μS)、中速(100~1μS)、低速(≥100μS)几档。
应当注意,精度和分辨率具有一定的联系,但概念不同。
DAC的位数多时,分辨率会提高,对应于影响精度的量化误差会减小。
但其它误差(如温度漂移、线性不良等)的影响仍会使DAC的精度变差。
6.1.2典型的D/A转换器DAC0832
DAC0832芯片由8位输入寄存器、8位DAC寄存器、8位D/A转换及控制电路三部分组成,如图6-2所示。
DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适应于各种需要,如要求多路D/A异步输入、同步转换等。
D/A转换结果采用电流形式输出,若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。
运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。
DAC0832属于倒T型电阻网络型D/A转换器,内部无运算放大器。
DAC0832的主要技术指标:
1)分辨率8位
2)电流建立时间1µs
3)只需在满量程下调整其线性度
4)可单缓冲、双缓冲或直接数字输入;
5)低功耗20mW
6)单一电源+5~+15V
图6.2DAC0832内部结构
DI0~DI7:
数据输入线,TLL电平。
ILE:
数据锁存允许控制信号输入线,高电平有效。
CS:
片选信号输入线,低电平有效。
WR1:
为输入寄存器的写选通信号,低电平有效。
XFER:
数据传送控制信号输入线,低电平有效。
WR2:
为DAC寄存器写选通输入线,低电平有效。
Iout1:
电流输出线。
当输入全为1时Iout1最大。
Iout2:
电流输出线。
其值与Iout1之和为一常数。
Rfb:
反馈信号输入线,芯片内部有反馈电阻.
Vcc:
电源输入线(+5v~+15v)
Vref:
基准电压输入线(-10v~+10v)
AGND:
模拟地,摸拟信号和基准电源的参考地.
DGND:
数字地,两种地线在基准电源处共地比较好.
6.1.3A/D转换器的工作原理
A/D转换器的按工作原理分为积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型等。
积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。
其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低。
初期的单片AD转换器大多采用积分型,现在逐次比较型已逐步成为主流。
下面重点讲述逐次逼近式A/D转换器的工作原理。
逐次逼近式A/D转换器是一种采用对分搜索原理来实现A/D转换的方法,逻辑框图如图6-3所示。
图6.3逐次逼近式A/D转换器逻辑框图
逐次逼近转换过程和用天平称重物非常相似。
天平称重物过程是,从最重的砝码开始试放,与被称物体进行比较,若物体重于砝码,则该砝码保留,否则移去。
再加上第二个次重砝码,由物体的重量是否大于砝码的重量决定第二个砝码是留下还是移去。
照此一直加到最小一个砝码为止。
将所有留下的砝码重量相加,就得此物体的重量。
仿照这一思路,逐次比较型A/D转换器,就是将输入模拟信号与不同的参考电压作多次比较,使转换所得的数字量在数值上逐次逼近输入模拟量对应值。
图6.3逐次逼近式A/D转换器工作原理:
启动信号START发出后,在第一个时钟脉冲作用下,控制逻辑使N位寄存器的最高位置1,其他位置0,其值送入D/A转换器。
输入电压首先与D/A转换器输出电压(VREF/2)相比较,如VIN≥VREF/2,比较器输出为1,若VIN 比较结果存于数据寄存器的Dn-1位。 然后在第二个脉冲作用下,N位寄存器的次高位置1,其他低位置0。 如最高位已存1,则此时VN=(3/4)VREF。 于是VIN再与(3/4)VREF相比较,如VIN≥(3/4)VREF,则次高位Dn-2存1,否则Dn-2=0;……。 以此类推,逐次比较得到输出数字量。 A/D转换器的主要技术指标 1)ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。 常用二进制的位数表示。 例如12位ADC的分辨率就是12位,或者说分辨率为满刻度FS的1/212。 一个5V满刻度的12位ADC能分辨输入电压变化最小值是5V×1/212=1.22mV。 2)偏移误差是指输入信号为零时,输出信号不为零的值,所以有时又称为零值误差。 假定ADC没有非线性误差,则其转换特性曲线各阶梯中点的连线必定是直线,这条直线与横轴相交点所对应的输入电压值就是偏移误差。 3)满刻度误差又称为增益误差。 ADC的满刻度误差是指满刻度输出数码所对应的实际输入电压与理想输入电压之差。 4)线性度有时又称为非线性度,它是指转换器实际的转换特性与理想直线的最大偏差。 5)绝对精度是指在一个转换器中,任何数码所对应的实际模拟量输入与理论模拟输入之差的最大值,称为绝对精度。 对于ADC而言,可以在每一个阶梯的水平中点进行测量,它包括了所有的误差。 6)ADC的转换速率是能够重复进行数据转换的速度,即每秒转换的次数。 而完成一次A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。 实例6-1D/A转换器应用一: 锯齿波、三角波和方波发生器 任务要求: 以MSP430F249为控制核心,DAC0832为数模转换器,设计一个简易波形发生器,分别产生锯齿波、三角波和方波,周期均为100ms,产生的波形如图6.4所示。 图6.4锯齿波、三角波和方波示意图 1)硬件电路设计 数模转换器采用通用的8位D/A转换芯片DAC0832,DAC0832接成直通方式工作,工作和参考电源均为+5V。 反相放大电路采用通用运放uA741,工作电源为±15V,反馈电阻直接采用DAC0832的内部电阻。 MSP430F249单片机的P4口作为数据输出口,D/A转换结果由仿真软件的虚拟示波器进行观察。 系统硬件电路如图6.5所示。 图6.5简易波形发生器硬件电路 2)程序设计 为了精确控制输出波形的周期,单片机CPU时钟采用XT2外接8MHz晶振。 设置MSP430F249单片机的P4口为输出,P4口输出的数据由小到大,例如从0到0xFF就能产生锯齿波。 要求产生的锯齿波周期为100ms,因此,单片机输出的每个数据保持时间为100000/256=390.625us;P4口输出的数据由小到大,再由大到小,例如从0加一变化到0xFF,再从0xFF减一变化到0就能产生三角波,单片机输出的每个数据保持时间为锯齿波的一半,即195us;方波高电平-1V,低电平-5V,对应的P4口数据分别51和255,方波高电平和低电平时间各为50ms。 #include"MSP430F249.h" #defineCPU_F((double)8000000)//系统时钟为8MHz #definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0)) #definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0)) voidsawtooth(void) { chari; P4OUT=i++;//i的值从0到255,不断循环 delay_us(390);//微秒的延时 } voidtriangular(void) { chari; for(i=0;i<255;i++) {P4OUT=i;//i的值从0到255 delay_us(195);//微秒的延时 } for(i=255;i>0;i--) {P4OUT=i;//i的值从0到255 delay_us(195);//微秒的延时 } } voidsquare(void) { P4OUT=51; delay_ms(50);//毫秒的延时 P4OUT=255; delay_ms(50);//毫秒的延时 } voidmain(void) {unsignedinti; WDTCTL=WDTPW+WDTHOLD;//关看门狗 BCSCTL1&=~XT2OFF;//使TX2有效,TX2上电时默认为关闭的. do {IFG1&=~OFIFG;//清振荡器失效标志 for(i=0xff;i>0;i--);//延时,待稳定. } while((IFG1&OFIFG)! =0);//若振荡器失效标志有效 BCSCTL2|=SELM1;//使MCLK=XT2 P4DIR=0XFF; while (1) { sawtooth();//锯齿波 //triangular();//三角波 //square();//方波 } } 在IAR软件430的编译器里面我们可以利用它内部的延时子程序来实现我们想要的高精度软件延时,方法如下: 将以下代码复制到你的*.C源文件中。 #defineCPU_F((double)8000000) #definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0)) #definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0)) 在#defineCPU_F((double)8000000)语句里8000000修改成你当前MSP430CPU的主频频率,即CPU的MCLK。 单位为HZ。 本例中的8000000为MCLK=8MHZ的意思。 __delay_cycles()是编译系统函数。 3)仿真结果与分析 通过子程序调用,分别仿真运行后得到仿真结果如图6.6至图6.8所示,三种波形的幅值、周期均满足课题要求。 图6.6周期100ms的锯齿波 图6.7周期100ms的三角波 图6.8周期100ms的方波 思考: 1.本电路运放需要±15v电源,请问能采用单电源运放完成本课题任务吗? 2.本电路输出电压为负,要得到正电压输出怎么实现? 实例6.2D/A转换器应用二: 正弦波发生器 任务要求: 在实例6-1的简易波形发生器基础上实现正弦波信号输出,最大值±5v,频率为50Hz。 1)硬件电路设计 图6.5简易波形发生器硬件电路只能输出0~-5V电压,本课题要求输出最大值±5V正弦信号,运放电路采用两级设计,第二级为加法电路,可以实现双极性输出。 正弦波发生器如图6.9所示,当V1out=0时,V2out=+5V;当V1out=-2.5V时,V2out=0;当V1out=-5V时,V2out=-5V。 因此,图6.9双极性电路就能实现输出±5V电压信号。 图6.9正弦波发生器电路 2)程序设计 由单片机产生正弦波信号一般方法是事先建立一张正弦波数据表,单片机按查表方式经D/A输出得到正弦波信号。 我们采用的DA转换器是8位的,因此正弦波数据表最多256个值。 一般单片机输出64点或128点,经DA电路后得到的正弦波波形就比较完美了,下面我们以128点输出为例完成本课题任务。 要求正弦波频率为50Hz,那么周期就是20ms,20000/128=156.25us,即单片机输出的每个数据保持156us。 为了得到128点的正弦波数据表,我们在matlab环境中新建如下的m文件。 x=0: 1: 127;%取128点 Y=round(127*sin(2*pi*x/128))+128;%得到正弦波数据 fid=fopen('d: \sin256.txt','w');%新建并打开d: \sin256.txt文件,写允许 fprintf(fid,'%d,',Y);%将数据写入d: \sin256.txt文件 fclose(fid);%关闭d: \sin256.txt文件 plot(x,Y)%画图查看正弦曲线 matlab语句说明: round()为取整数函数,四舍五入,DA转换值只能是正数;fopen()和fclose()分别为文件打开和关闭函数。 以上程序运行后,可以到d盘根目录中找到sin256.txt文件,得到正弦波数据。 #include"MSP430F249.h" #defineCPU_F((double)8000000)//系统时钟为8MHz #definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0)) #definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0)) chardata_Sin[128]={ 128,134,140,147,153,159,165,171,177,182,188,193,199,204,209,213, 218,222,226,230,234,237,240,243,245,248,250,251,253,254,254,255, 255,255,254,254,253,251,250,248,245,243,240,237,234,230,226,222, 218,213,209,204,199,193,188,182,177,171,165,159,153,147,140,134, 128,122,116,109,103,97,91,85,79,74,68,63,57,52,47,43,38,34,30,26, 22,19,16,13,11,8,6,5,3,2,2,1,1,1,2,2,3,5,6,8,11,13,16,19,22,26,30, 34,38,43,47,52,57,63,68,74,79,85,91,97,103,109,116,122};//128点正弦波样本值intmain(void) { chari; WDTCTL=WDTPW+WDTHOLD; P4DIR=0xFF;//P4口输出 while (1) { for(i=0;i<128;i++) { P4OUT=data_Sin[i]; delay_us(156);//微秒的延时 } } } 3)仿真结果与分析 图6.10D/A输出的正弦波信号 A通道是最大值范围±5V,频率50Hz的正弦波信号;B通道是最大值范围0~-5V,频率50Hz的正弦波信号;A通道和B通道输出信号相位相差180度。 6.2MSP430F249的A/D转换器 MSP430F249单片机内置了ADC12模块,ADC12是一个12位精度的A/D转换模块。 从图6.11ADC12结构图中可以看出,ADC12模块中是由以下部分组成: 输入的16路模拟开关,ADC内部电压参考源,ADC12内核,ADC时钟源部分,采集与保持/触发源部分,ADC数据输出部分,ADC控制寄存器等组成。 图6.11ADC12结构图 1)输入的16路模拟开关 16路模拟开关选择外部的8路模拟信号输入和内部4路参考电源输入。 外部8路从A0~A7输入,主要是外部测量时的模拟变量信号。 内部4路分别是: 1路Veref+,外部参考电源的正端;1路Vref-/Veref-,内部/外部参考电源负端;1路(AVCC-AVSS)/2电压源;1路内部温度传感器源。 片内温度传感器可以用于测量芯片上的温度,而其他电源参考源输入可以用作ADC12的校验之用,在设计时可作自身校准。 2)ADC内部电压参考源 ADC电压参考源是用于给ADC12内核作为一个基准信号之用的,这是ADC必不可少的一部分。 在ADC12模块中基准电压源可以通过软件来设置6种不同的组合。 VR+(有3种)AVCC,Vref+,Veref+;VR-(有2种)AVSS,Vref-/ Veref-。 3)ADC12内核 ADC12的模块内核是共用的,通过前端的模拟开关分别完成采集输入。 ADC12是一个精度为12位的ADC内核。 内核在转换时会用到两个参考基准电压,一个是最大值,当模拟开关输出的模拟变量大于或等于最大值时ADC内核的输出数字量为满量程,也就是0xfff;另一个则是最小值,当模拟开关输出的模拟变量小于或等于最小值时ADC内核的输出数字量为最低量程,也就是0x00。 而这两个参考电压是可以通过软件来编程设置的。 4)ADC时钟源部分 ADC12的时钟源分别有ADC12OSC,ACLK,MCLK,SMCLK。 通过编程可以选择其中之一的时钟源,同时还可以适当的分频。 5)采集与保持,触发源部分 ADC12模块中有着较好的采集与保持电路,采用不同的设置有着灵活的应用。 6)ADC数据输出部分 ADC内核在每次完成转换时都会将相应通道上的输出结果存贮到相应通道缓冲区单元中,共有16个通道缓冲单元。 同时16个通道的缓冲单元有着相对应的控制寄存器,以实现更灵活的控制。 ADC12模块采样与转换所需的时序控制: ADC12CLK转换时钟,SAMPCON采样及转换信号,SHT控制的采样周期,SHS控制的采样触发源,ADC12SSEL选择的内核时钟源,ADC12DIV选择的分频系数。 具体如何设置,见寄存器说明部分。 ADC12模块有4种转换模式: 单通道单次转换、序列通道单次转换、单通道多次转换和序列通道多次转换,它们由寄存器ADC12CTL1中的CONSEQx位进行选择。 (1)单通道单次转换模式 (2)序列通道单次转换模式 (3)单通道多次转换模式 (4)序列通道多次转换模式 ADC12模块的所有寄存器: 序号 地址 寄存器符号 寄存器名称 1 01A0H ADC12CTL0 转换控制寄存器0 2 01A2H ADC12CTL1 转换控制寄存器1 3 01A4H ADC12IFG 中断标志寄存器 4 01A6H ADC12IE 中断使能寄存器 5 01A8H ADC12IV 中断向量寄存器 6 … 21 0140H … 015EH ADC12MCTL0 … ADC12MCTL15 存储控制寄存器0 … 存储控制寄存器15 22 … 37 080H … 08FH ADC12MEM0 … ADC12MEM15 存储寄存器0 … 存储寄存器15 ADC12控制寄存器0,ADC12CTL0 15 14 13 12 11 10 9 8 SHT1x SHT0x 7 6 5 4 3 2 1 0 MSC REF2.5V REFON ADC12ON ADC12OVIE ADC12TVIE ENC ADC12SC SHT1x(x=0~3)定义ADC12MEM8~ADC12MEM15的采样保持时间 SHT0x(x=0~3)定义ADC12MEM0~ADC12MEM7的采样保持时间 SHT00 SHT03 ADC12CLK 的周期 宏定义 SHT00 SHT03 ADC12CLK 的周期 宏定义 0000 4 SHT0_0 1000 256 SHT0_8 0001 8 SHT0_1 1001 384 SHT0_9 0010 16 SHT0_2 1010 512 SHT0_10 0011 32 SHT0_3 1011 768 SHT0_11 0100 64 SHT0_4 1100 1024 SHT0_12 0101 96 SHT0_5 1101 1024 SHT0_13 0110 128 SHT0_6 1110 1024 SHT0_14 0111 192 SHT0_7 1111 1024 SHT0_15 注: SHT10~SHT13的宏定义为SHT1_0~SHT1_15,SHT1定义的ADC12CLK的周期同上表。 MSC多次采样转换位,序列通道或单通道多次转换模式有效。 0表示每次采样转换过程需要SHI信号的上升沿来触发;1表示SHI信号的第一个上升沿触发采样定时器,但随后的采样转换在上次转换完成后自动进行。 REF2.5V内部参考电压的电压值选择位: 0选择1.5V内部参考电压;1选择2.5V内部参考电压。 REFON参考电压控制: 0内部参考电压发生器关闭,1内部参考电压发生器打开。 ADC12ONADC12内核控制位: 0关闭ADC12内核,1打开ADC12内核。 ADC12OVIE溢出中断允许位: 0溢出中断允许,1溢出中断禁止。 当ADC12MEMx中原有的数据还没有被读出,而现在又有新的转换结果数据要写入时,则会发生溢出。 如果相应的中断允许,则会发生中断请求。 ADC12TVIE转换时间溢出中断允许位: 0没发生转换时间溢出,1发生转换时间溢出。 当前转换还没有完成时,又发生一次采样请求,则会发生转换时间溢出。 如果允许中断,则会发生中断请求。 ENC转换允许位: 0转换禁止;1转换允许。 只有在该位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSP430ADDA 转换器 应用