1、9.6 A/D和D/A转换一、一般测控系统组成控制对象微型计算机信号处理信号处理信号处理传感器1传感器2传感器n执行部件放大驱动A/D转换器D/A转换器多路开关采样保持放大驱动开关量1传感器传感器将物理量转换为电量将物理量转换为电量2信号处理环节信号处理环节信号调理,一般含放大、阻抗匹配、高低通滤波等信号调理,一般含放大、阻抗匹配、高低通滤波等3多路转换开关多路转换开关多路选择一路,常用的有:多路选择一路,常用的有:CD4051、AD7501 (八选择一)八选择一)4采样保持(采保)电路采样保持(采保)电路可工作于采样、保持二种状态。可工作于采样、保持二种状态。采样时,输出与输入相同;保持时在
2、一定时间保持不变,一采样时,输出与输入相同;保持时在一定时间保持不变,一般用在般用在A/D前端,保证在前端,保证在A/D转换期间输入电压不变,提高转换期间输入电压不变,提高A/D精度。常用的有:精度。常用的有:LF398(一) 转换原理1、权电阻式D/A转换器二、二、 D/A(数模)转换数模)转换I0 D0 2n-1RI1 D1 2n-2RI2 D2 2n-3RIn-1 Dn-1 2RRf(R/2)VREFV0_ A+ 权电阻权电阻D/A转换原理转换原理VO=-I Rf2T型电阻网络式D/A转换器(二)指标(二)指标1分辨率分辨率 分辨率是指最小输出电压(对应于输入数字量最低位增分辨率是指最小
3、输出电压(对应于输入数字量最低位增1所引起的输出电压增量)和最大输出电压(对应于输入数所引起的输出电压增量)和最大输出电压(对应于输入数字量所有有效位全为字量所有有效位全为1时的输出电压)之比,即表示时的输出电压)之比,即表示DAC所能分辨的最小模拟信号的能力。所能分辨的最小模拟信号的能力。2转换精度转换精度 绝对转换精度是指满刻度数字量输入时,模拟量输出接近绝对转换精度是指满刻度数字量输入时,模拟量输出接近理论值的程度理论值的程度 相对转换精度一般用绝对转换精度相对于满量程输出的相对转换精度一般用绝对转换精度相对于满量程输出的百分数来表示,有时也用数字量的最小有效值(百分数来表示,有时也用数
4、字量的最小有效值(LSB)的)的几分之一来表示几分之一来表示 3非线性误差非线性误差D/A转换器的非线性误差定义为实际转换特性曲线与理想转换器的非线性误差定义为实际转换特性曲线与理想特性曲线之间的最大偏差,并以该偏差相对于满量程的特性曲线之间的最大偏差,并以该偏差相对于满量程的百分数度量百分数度量4转换速率转换速率/建立时间建立时间转换速率实际是由建立时间来反映的转换速率实际是由建立时间来反映的建立时间是指数字量为满刻度值(各位全为建立时间是指数字量为满刻度值(各位全为1)时,)时,DAC的模拟输出电压达到某个规定值(比如的模拟输出电压达到某个规定值(比如90满量程)时满量程)时所需要的时间所
5、需要的时间三、三、A/D(模数)转换模数)转换 AD转换器是指通过一定的电路将模拟量转变为数转换器是指通过一定的电路将模拟量转变为数字量。字量。AD转换后,输出的数字信号有转换后,输出的数字信号有8位、位、l0位、位、12位位和和16位等。位等。 类型类型:双积分、逐次逼近、并行等。双积分、逐次逼近、并行等。VoVIND7 D1 D0逐次逼近式逐次逼近式A/D转换原理转换原理_+比较器逐次逼近寄存器(SAR)控制电路输出缓冲寄存器D/A转换器启动信号CLK时钟转换结束(一一)A/D转换原理转换原理(二)二)A/D转换器的主要性能参数转换器的主要性能参数 1. 分辨率分辨率 分辨率是指分辨率是指
6、AD转换器能分辨的最小模拟输入量。通转换器能分辨的最小模拟输入量。通常用能转换成的数字量的位数来表示,如常用能转换成的数字量的位数来表示,如8位、位、10位、位、12位、位、16位等。位等。 2. 转换时间转换时间 转换时间是转换时间是AD完成一次转换所需的时间。完成一次转换所需的时间。 3. 量程量程 量程是指所能转换的输入电压范围。量程是指所能转换的输入电压范围。 4. 精度精度 AD转换精度分为绝对精度和相对精度两种。转换精度分为绝对精度和相对精度两种。(1)绝对精度:是指对应于)绝对精度:是指对应于个给定量,个给定量,AD转转换器的误差,其误差大小由实际模拟量输入值与理换器的误差,其误
7、差大小由实际模拟量输入值与理论值之差来度量。论值之差来度量。(2)相对精度:由相对误差决定。相对误差是指绝)相对精度:由相对误差决定。相对误差是指绝对误差与满刻度值之比,对误差与满刻度值之比,般用百分数表示。例如,般用百分数表示。例如,对于对于个个8位位05V的的AD转换器,如果其绝对误差转换器,如果其绝对误差为:为: 1/256 5=19.5mV 则其相对误差为则其相对误差为0.39%。1、采样保持电路、采样保持电路 ( 1) 采样:把一个时间上连续变化的模拟量转换为一个脉冲串,脉冲的幅度取决于输入模拟量。 (2) 保持:是将采样得到的模拟量值保持下来,使之等于采样控制脉冲存在的最后瞬间的采
8、样值。 (3) 采样定理:理论和实践都证明,只要满足下列条件,采样保持得到的输出信号在经过信号处理后便可还原成原来的模拟输入信号:(三)(三)A/D转换的辅助电路转换的辅助电路 V0- Av+S(t)ViTVcCbS(t)I(t)SH(t)T1T2T3T4T5T6T7T8tttOOO(a)采样脉冲采样脉冲(b)输入电压输入电压(c)采样保持采样保持 2、 多路转换开关多路转换开关在实际应用时,要解决多个回路和在实际应用时,要解决多个回路和AD、D/A转换器之间的转换器之间的切换问题。一般采用两种方法:切换问题。一般采用两种方法: ( 1) 一种方法是用独立的多路转换模拟开关轮流切换各回一种方法
9、是用独立的多路转换模拟开关轮流切换各回路和路和AD、DA之间的通路,对于之间的通路,对于AD转换来说,要用到转换来说,要用到多路输入一路输出的模拟开关电路,对于多路输入一路输出的模拟开关电路,对于DA转换来说,要转换来说,要用到一路输入,多路输出的模拟开关电路。用到一路输入,多路输出的模拟开关电路。 (2)另一种方法是选择带有转换开关的)另一种方法是选择带有转换开关的AD、DA转换转换器。器。四、四、S3C2410A中的中的A/D模块模块(一)(一) 概述概述 具有具有 8 通道模拟输入的通道模拟输入的 10 位位 模数转换器(模数转换器(ADC)。)。 在在 2.5MHz 的的 A/D 转换
10、器时钟下,最大转化速率可转换器时钟下,最大转化速率可 达到达到 500KSPS。A/D 转换器支持片上采样和保持功能。转换器支持片上采样和保持功能。S3C2410A 的的 AIN7和和 AIN5可用于连接触摸屏的模拟信号输可用于连接触摸屏的模拟信号输入。入。 (二)(二) 特性特性 逐次逼近式逐次逼近式 分辩率:分辩率:10-位位 线性度误差:线性度误差: 2.0 LSB 最大转换速率:最大转换速率:500 KSPS 供电电压:供电电压:3.3V 输入模拟电压范围:输入模拟电压范围:0 3.3V 片上采样保持功能片上采样保持功能 查询和中断模式查询和中断模式(三)ADC 控制寄存器(ADCCO
11、N) 地址: 0 x58000000,可读写,复位值: 0 x3FC4 ECFLG(位15): AD转换结束标志(只读)。0 =A/D转换操作中,1 =A/D转换结束PRSCEN(位14):A/D转换器预分频器使能0 = 停止,1 = 使能 PRSCVL(位13:6):A/D 转换器预分频器数值, 数据值N范围:1 255,将PCLK进行(N+1)分频。 如PCLK=50MHZ, N=49,则A/D转换器频率= 50 MHz/(49+1) = 1 MHz转换时间= 1/1 MHz 5 = 5 us 注意:ADC频率应该设置成小于PLCK的5倍,即N应设置为大于4。SEL_MUX (位 5:3)
12、 :模拟输入通道选择。000 = AIN 0 001 = AIN 1010 = AIN 2 011 = AIN 3100 = AIN 4 101 = AIN 5110 = AIN 6111 = AIN 7STDBM(位2)0 = 普通模式1 = Standby模式,A/D停止转换, A/D数据寄存器保持原值READ_ START (位1):通过读取来启动A/D转换0 = 停止通过读取启动,1 = 使能通过读取启动ENABLE_ START(位0):通过设置该位来启动A/D操作。如果READ_START是使能的,此位无效。0无操作1 = A/D转换启动,启动后该位被清零。(四)(四)ADC 转换
13、数据寄存器(ADCDAT0)地址: 0 x5800000C ,可读写。位90为A/D转换的数字值。范围为:0 3FFH。思考:设计A/D驱动程序,使之能实现对多路模拟量的采集。#define DRIVER_NAME myDriverstatic int myDriver_Major = 0; /* Driver Major Number */static int AD_READ (void) int i,j;int val,aa;val=0; ADCCON |= 0 x2; /ADC转换通过读操作来启动aa = ADCDAT0 &0 x03ff; /启动ADC转换 for(i=0;i16;i+
14、) while(!(ADCCON&0 x8000); /判断ADC转换是否结束 val += (ADCDAT0 &0 x03ff); /取出ADC转换值 for(j=0;j500;j+); val=val/16; /计算ADC平均转换值 return val; /* Driver Operation Functions */static int myDriver_open(struct inode *inode, struct file *filp) MOD_INC_USE_COUNT; PRINTK(myDriver open called!n);/* 进行ADC模块设置,其中xn表示第n位
15、设置为x(若x超过一位,则向高位顺延) */ ADCCON = (0 0) | / ADC转换设置 未设置 (0 1) | / 读AD数据触发AD转换 未使用 (0 2) | / StandBy模式选择 为普通操作模式 (49 6) | / CLKDIV = Fpclk /(49+1) (1 7)|(ch0 ) ) PRINTK( not a valid parameter,parameter must betwween 0 and 8 n); return -1; ADCCON |= (ch 3);/ channel set PRINTK( ADC INIT OK n); return 0;
16、 /* Driver Operation structure */static struct file_operations myDriver_fops = owner: THIS_MODULE, open: myDriver_open,ioctl: myDriver_ioctl, read: myDriver_read, release: myDriver_release,;/* Module Init & Exit function */#ifdef CONFIG_DEVFS_FSdevfs_handle_t devfs_myDriver_raw;#endifstatic int _ini
17、t myModule_init(void) /* Module init code */PRINTK(myModule_initn);/* Driver register */myDriver_Major = register_chrdev(0, DRIVER_NAME, &myDriver_fops); if(myDriver_Major 0) #ifdef CONFIG_DEVFS_FS devfs_unregister(devfs_myDriver_raw);#endif unregister_chrdev(myDriver_Major, DRIVER_NAME); return;MODULE_AUTHOR(myname);MODULE_LICENSE(GPL);module_init(myModule_init);module_exit(myModule_exit);