第9章 模数转换器与数模转换器
任课教师:刘忠国 山东大学课程中心网站: http://course.sdu.edu.cn/G2S/stcmcu.cc 宏晶官方网站:http://www.stcmcu.com STC单片机编译(汇编)/编程(烧录)/仿真工具说 明书; stc15系列单片机器件手册等 keil μvision软件下载及指导手册(Help→μvision Help) http://www.keil.com/ Keil Software –Cx51 编译器用户手册: Cx51编译 器--对传统和扩展的8051微处理器的优化的C 编译器和库参考
第9章 模数转换器与数模转换器 本章学习目标 了解模数转换器的工作原理及性能指标 掌握模数转换器的应用 了解数模转换器的工作原理及性能指标 掌握数模转换器的应用
第9章 模数转换器与数模转换器 9.1 模数转换器的工作原理及性能指标 9.1.1 模数转换器的工作原理 9.1.2 模数转换器的性能指标 9.2 模数转换器的应用 9.2.1 12位并行A/D转换器ADS7852及其应用 9.2.2 STC15F2K60S2集成的A/D模块的结构及其使用 9.3 数模转换器及其应用 9.3.1 数模转换器的工作原理及性能指标 9.3.2 12位D/A转换器TLV5616及其接口技术
第9章 模数转换器与数模转换器 随着数字电子技术及计算机技术的广泛普及与应用, 数字信号的传输与处理日趋普遍。 自然形态下的物理量多以模拟量形式存在,如温度、 湿度、压力、流量、速度等,实际生产、生活和科学 实验中还会遇到化学量、生物量(包括医学)等。 从信号工程的角度来看,要进行信号的计算机处理, 上述所有的物理量、化学量和生物量等都需要使用相 应的传感器,将其转换成电信号(模拟量)。 将模拟量转换为计算机能够识别处理的数字量,而后 再进行信号的传输、处理、存储、显示和控制。
第9章 模数转换器与数模转换器 同样,计算机控制外部设备时,如电动调节阀、调 速系统等,需要将计算机输出的数字信号变换成外 设能够接受的模拟信号。 将模拟量转换成数字量的器件称为模数转换器 (Analog to Digital Converter,ADC),也称为 A/D转换器或者ADC器件; 将数字量转换成模拟量的器件称为数模转换器 (Digital to Analog Converter,DAC),也称为 D/A转换器。
第9章 模数转换器与数模转换器 以单片机为核心,具有模拟量输入和输出的应用 系统结构如图所示。 图9-1 具有模拟量输入输出的单片机系统
§9.1模数转换器的工作原理及性能指标 9.1.1 模数转换器的工作原理 9.1.1 模数转换器的工作原理 根据转换的工作原理不同,模数转换器可以分为 计数-比较式、逐次逼近式和双斜率积分式。 计数-比较式模数转换器结构简单,价格便宜,转 换速度慢,较少采用。 下面主要介绍逐次逼近式和双斜率积分式模数转 换器的工作原理。
Vx >Vc?输出为逻辑1?(或0) No Yes 1→0 保留1 1、逐次逼近式模数转换器的工作原理 逐次逼近式模数转换器主要由逐次逼近寄存器SAR, 数 字/电压转换器, 比较器, 时序及控制逻辑等部分组成。 Vx >Vc?输出为逻辑1?(或0) 3.48V No Yes 1→0 保留1 1 0 0 0 0 0 0 0 1 1 C2H (Successive Approximation Register) SAR 图9-2 逐次逼近式模数转换器的工作原理
2、双积分式模数转换器的工作原理 双积分模数转换器的组成框图如图所示。 ①S闭合放电后再打开 S ②K向上闭合 ③电容充电 正 K 负 + ⑥电容放电 ⑦又从0计数到N ⑧ ⑧计数停止 ④从0计数到2n溢出 图9-3 双积分式模数转换器的组成框图
2、双积分式模数转换器的工作原理 双积分模数转换器的组成框图如图所示。 ①S闭合放电后再打开 S ②K向上闭合 充电电流: ③电容充电 正 R K 负 + ⑤K向下闭合 + ⑥电容放电 ⑦又从0计数到N 定斜率 ⑧ ⑧计数停止 固定时间: ④从0计数到2n溢出 放电电流: 图9-3 双积分式模数转换器的组成框图
9.1.1 模数转换器的工作原理 2、双积分式模数转换器的工作原理 双积分式模数转换器转换方法的抗干扰能力比逐次 逼近式模数转换器强。 9.1.1 模数转换器的工作原理 2、双积分式模数转换器的工作原理 双积分式模数转换器转换方法的抗干扰能力比逐次 逼近式模数转换器强。 该方法的基础是测量两个时间: 一个是模拟输入电压向电容充电的固定时间, 另一个是在已知参考电压下放电所需的时间, 模拟输入电压与参考电压的比值就等于上述两个 时间值之比。
2、双积分式模数转换器的工作原理 双积分式模数转换器优点是精度高、抗干扰能力强, 在实际工程中得到了使用, 缺点是转换速度慢。 双积分式模数转换器优点是精度高、抗干扰能力强, 在实际工程中得到了使用, 缺点是转换速度慢。 由于逐次逼近式模数转换器能很好的兼顾速度和精度, 故在16位以下的模数转换器中得到了广泛应用。 还有并联比较型ADC采用各量级同时并行比较, 各位 输出码同时并行产生, 转换速度快是它的突出优点。 并联比较型ADC的缺点是成本高、功耗大。 因为n位输出的ADC, 需要2n个电阻, (2n-1) 个比较 器和D触发器, 以及复杂的编码网络, 其元件数量随位 数的增加, 以几何级数上升。所以这种ADC适用于要 求高速、低分辩率的场合。
9.1.2模数转换器的性能指标 A/D转换器是实现单片机数据采集的常用外围器件。 A/D转换器的品种繁多, 性能各异, 设计数据采集系统 时, 需选择合适的A/D转换器以满足系统设计要求。 选择A/D转换器需要综合考虑系统技术指标、成本、 功耗、安装等因素。 1、分辨率 分辨率是A/D转换器能分辨最小信号的能力, 表示数 字量变化一个相邻数码所需输入模拟电压的变化量。 分辨率越高,转换时对输入模拟信号变化的反应就 越灵敏。
1、分辨率 例如,8位A/D转换器能够分辨出满刻度的1/256, 若满刻度输入电压为5V,则该8位A/D转换器能够 分辨出输入电压变化的最小值为19.5mV。 分辨率常用A/D转换器输出的二进制位数表示。常 见的A/D转换器有8位、10位、12位、14位和16位 等。 一般称8位以下的ADC器件为低分辨率ADC器件; 9~12位的ADC器件称为中分辨率ADC器件; 13位以上的ADC器件称为高分辨率ADC器件。
如何选择ADC器件的分辨率 10位以下ADC器件误差较大,11位以上对减小误差 并无太大贡献,但对ADC器件的要求却提得过高。 因此,取10位或11位是合适的。 由于模拟信号先经过测量装置,再经A/D转换器转 换后才进行处理,因此,总的误差是由测量误差和 量化误差共同构成的。 A/D转换器的精度应与测量装置的精度相匹配。 一方面要求量化误差在总误差中所占的比重要小, 使它不显著地扩大测量误差; 另一方面必须根据目前测量装置的精度水平,对 A/D转换器的位数提出恰当的要求。
9.1.2模数转换器的性能指标 2、通道 3、基准电压 有的单芯片内部含有多个ADC模块,可同时实现 多路信号的转换; 常见的多路ADC器件只有一个公共的ADC模块, 由一个多路转换开关实现分时转换。 3、基准电压 基准电压有内、外基准和单、双基准之分。
9.1.2模数转换器的性能指标 4、转换速率 转换时间:A/D转换器从启动转换到转换结束,输出 稳定的数字量,需要的一定的转换时间。 转换速率:转换时间的倒数即每秒钟完成的转换次数。 A/D转换器的型号不同,转换时间不同。逐次逼近式 单片A/D转换器转换时间的典型值为1.0~200μs。 ADS7852: 12位逐次逼近式A/D转换器转换速率 500kHz ICL7109: 12位双积分式A/D转换器转换速率30次/s 应根据输入信号的最高频率来确定ADC转换速度, 保证转换器的转换速率要高于系统要求的采样频率。
9.1.2模数转换器的性能指标 确定A/D转换器的转换速率时,应考虑系统的采样 速率。 例如,如果用转换时间为100μs的A/D转换器,则其 转换速率为10KHz。 根据采样定理和实际需要,一个周期的波形需采10 个样点,那么这样的A/D转换器最高也只能处理频 率为1KHz的模拟信号。 对一般单片机而言,在如此高的采样频率下,要在 采样时间内完成A/D转换以外的工作,如读取数据、 再启动、保存数据、循环计数等已经比较困难了。
9.1.2模数转换器的性能指标 5、采样/保持器 采样/保持也称为跟踪/保持(Track/Hold缩写T/H)。 原则上采集直流和变化非常缓慢的模拟信号时可 不用采样保持器。 对于其他模拟信号一般都要加采样保持器。如果 信号频率不高,A/D转换器的转换时间短,即使用 高速A/D转换器时,也可不用采样/保持器。
9.1.2模数转换器的性能指标 6、量程 7、满刻度误差 8、线性度 量程即所能转换的电压范围,如2.5V、5V和10V。 满度输出时对应的输入信号与理想输入信号值之差 称为满刻度误差。 8、线性度 实际转换器的转移函数与理想直线的最大偏移称为 线性度。
9.1.2模数转换器的性能指标 9、数字接口方式 根据转换的数据输出接口方式,A/D转换器可以分为 并行接口和串行接口两种方式。 并行方式在转换后可直接接收, 但芯片引脚比较多; 串行方式所用芯片引脚少,封装小,但需要软件处 理才能得到所需要的数据。 单片机I/O引脚不多时, 用串行器件可节省I/O资源。 但是并行器件具有明显的转换速度优势。在转换速 度要求较高的情况下应选用并行器件。
9.1.2模数转换器的性能指标 10、模拟信号类型 11、电源电压 通常ADC器件的模拟输入信号都是电压信号。同 时根据信号是否过零,还分成单极性(Unipolar) 信号和双极性(Bipolar)信号。 11、电源电压 电源电压有单电源,双电源和不同电压范围之分, 早期的ADC器件要有+15V/-15V,如果选用单+5V 电源的芯片则可以使用单片机系统电源。
9.1.2模数转换器的性能指标 12、功耗 一般CMOS工艺的芯片功耗较低, 对于电池供电的手持 系统对功耗要求比较高的场合一定要注意功耗指标。 13、封装 常见的封装有双列直插封装(Dual In-line Package, DIP) 和表贴型(Surface Mount Devices, SMD)封装。
§9.2模数转换器的应用 9.2.1 12位并行A/D转换器ADS7852及其应用 本节先介绍德州仪器公司(TI)生产的A/D转换器 ADS7852的应用方法,然后介绍STC15F2K60S2单片 机片内集成的ADC模块的使用。 9.2.1 12位并行A/D转换器ADS7852及其应用 1、ADS7852简介 ADS7852是德州仪器公司(Texas Instruments, TI) 生产的一款高速逐次逼近式A/D转换器。
9.2.1 12位并行A/D转换器及其应用 ADS7852具有以下主要特点: 带有采样保持器(T/H) 具有8路模拟量输入、并行12位输出 内部带有2.5V的参考电压源,输入的采样电压可以从 0V到2倍的参考电压值 500kHz的采样频率,转换时间最大只需1.75μs 单极性5V工作电压 低功耗:13mW 封装形式为TQFP (thin quad flat packag) 工作温度为-40℃到+80℃
ADS7852引脚 各引脚功能介绍: AIN0~AIN7: 8路模拟量 输入引脚。 DB0~DB11: 12位数字量 输出,其中DB0为最低位, DB11为最高位。 A0~A2: 8路模拟输入的 地址选择。 Vss: 电源电压, 接+5V。 图9-4 ADS7852的引脚图
ADS7852各引脚的功能介绍: VREF:外接参考电压。若不用外接参考电压,可 在此引脚和电源地之间接2.2μF和0.1μF去耦电容各 一个。 AGND和DGND:分别为模拟地和数字地。 CLK:外部时钟输入(200KHz~8MHz),时钟的选 择取决于采样速度fCLK=16*fSAMPLE。 :输出忙信号, 低电平指示正在转换。转换 期间保持低电平,转换结束后变为高电平。
ADS7852各引脚的功能介绍: :片选信号,输入,低电平有效。/CS和 /WR变低时,开始一次新的转换。 :写信号,输入,低电平有效。/WR与/CS 同时有效时开始一次新的转换,也用来选择模拟 量输入通道。 :读信号,输入,低电平有效。/RD和/CS 一起有效时用来读取转换后的数据。也用来设置 使芯片工作于省电模式。
2、ADS7852的内部结构 内部结构如图所示。 (Successive Approximation Register) SAR 逐次逼近寄存器 Capacitive DAC 图9-5 ADS7852的内部结构图
2、ADS7852的内部结构 转换结果通过三态并行数据总线输出。 ADS7852是逐次逼近型A/D转换器 一个8通道模拟开关 通信双向存取控制器Capacitive DAC(CDAC) 比较器(Comparator) 逐次比较逻辑寄存器(SAR) 内部基准电压源 参考电压缓冲器 输出锁存和三态驱动器等。 转换结果通过三态并行数据总线输出。 (Successive Approximation Register)
ADS7852的工作过程 首先置低/CS引脚,然后通过设置A2、A1和A0的值 来选择输入通道(000~111分别对应0~7通道), 置低 /WR引脚开始启动A/D转换。 A/D转换期间, /BUSY引脚输出低电平并保持到转换 结束。转换完成后, /BUSY引脚输出变为高电平, 在 DB11~DB0上输出12位有效数据, 等待处理器读取, 一次转换完成。 /BUSY引脚的上升沿可锁存12位转换数据。 注意: A/D转换后, 当/RD和/CS变高电平时, A1和A0 脚应保持低电平, 否则ADS7852将进入掉电模式。
3、通道选择 ADS7852有8路输入,通过设置A0、A1、A2来选择哪 一路输入,具体的选择控制字如表所示。 A2 A1 A0 通道号 通道0 1 通道1 通道2 通道3 通道4 通道5 通道6 通道7 表9-1 ADS7852的通道选择控制字
【例9-1】ADS78752 与STC15F2K60S2 单片机的接口电路 如图所示。 低8位数据可直接读入单片机, 高4位数据通过74LS573由/RD上升沿锁存到P1.0~ P1.3 。 P3.5时钟输出频率250KHz A/D转换结束后, BUSY通知单片机及时读取数据。 上升沿可锁存12位转换数据
74HC573锁存器逻辑图 4、ADS78752的接口应用 /OE: 3-state output enable input (active LOW) LE: latch enable input (active HIGH) D[0:7]: data input Q[0:7]: 3-state latch output GND: ground (0 V); VCC: supply voltage (CMOS电平2~6V)
#include "stc15.h" //包含STC15F2K60S2寄存器定义文件 【例9-1】ADS78752接口 示例程序代码如下: #include "stc15.h" //包含STC15F2K60S2寄存器定义文件 //P2.7 为片选信号; P3.5/T0CLK0为提供AD转换时钟 sbit busy=P3^2; //P3.2 为AD转换状态检测位 sbit A0=P1^5; //P1.5,P1.6,P1.7为通道选择位 sbit A1=P1^6; sbit A2=P1^7; void main(void) { int ADdata; //ADdata存储12位AD转换数据 char highdata, lowdata; //分别存12位转换数据高低字节 char xdata *ADS7852; ADS7852=0x7fff; //AD7852的口地址(P2.7 为片选信号) TMOD=0x02; //T0工作在方式2, 8位自动重装 TH0=254; //12/12/2/2=0.25MHZ, T0输出时钟频率 INT_CLKO=INT_CLKO|0x1; //P3.5引脚, T0输出时钟 设系统时钟频率为12MHz, 默认12分频 // ADS7852是A/D转换器口地址指针
【例9-1】ADS78752接口 示例程序代码如下: (续)INT_CLKO=INT_CLKO|0x1; //P3.5引脚, T0输出时钟 TR0=1; //启动T0 A0=0; A1=0; A2=0 ; //P1.5,P1.6,P1.7选择通道0 *ADS7852=0x00; //写操作, /WR与/CS启动AD开始转换 while(1) { if(busy==1) //判断是否转换完毕, 若busy=0, 正在转换 { lowdata=*ADS7852; //读操作, /RD与/CS读AD数据 highdata=P1<<4&0x0F; //P1.0~P1.3 是AD转换高4位数据 ADdata= (highdata<<8) +lowdata; //数据处理 *ADS7852=0x00; //开始下一次AD转换 } 最后ADdata存储12位AD转换数据
9.2.2 STC15F2K60S2集成A/D模块的结构及其使用 STC15F2K60S2单片机集成有8路10位高速电压输入 型模数转换器(ADC), 速度可达300KHz(30万次/秒), 可做温度检测、压力检测、电池电压检测、按键扫 描、频谱检测等。 1、模数转换器的结构及相关寄存器 8通道10位模数转换器(ADC) 。 ADC输入通道与P1口复用,上电复位后P1口为弱上 拉型I/O口,用户可通过软件设置将8路中的任何一 路设置为ADC功能,不作为ADC使用的口可继续作 为I/O口使用。
(1)模数转换器的结构 STC15F2K60S2的ADC组成 多路选择开关 比较器 逐次比较寄存器SAR 10位DAC 转换结果寄存器(ADC_RES和ADC_RESL) ADC控制寄存器ADC_CONTR
(3)与ADC有关的特殊功能寄存器 1)P1口模拟功能控制寄存器P1ASF P1ASF (地址为9DH, 复位值为00H)各位定义如下: P1 Analog Special Function Configure register 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 P17ASF P16ASF P15ASF P14ASF P13ASF P12ASF P11ASF P10ASF 若要用相应口的模拟功能,需将P1ASF特殊功能寄存 器中的相应位置为1。 如, 若要用P1.6的模拟量功能, 则需将P16ASF置为1。 注意: P1ASF寄存器不能位寻址, 可用汇编语言指令 ORL P1ASF, #40H, 也可用C语言语句P1ASF |= 0x40;
(3)与ADC有关的特殊功能寄存器 2)ADC控制寄存器ADC_CONTR ADC_CONTR(地址为BCH,复位值为00H)各位定义: 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 ADC_ POWER SPEED1 SPEED0 FLAG START CHS2 CHS1 CHS0 ①ADC_POWER:ADC电源控制位。 0:关闭ADC电源。 1:打开ADC电源。
2)ADC控制寄存器ADC_CONTR ②SPEED1, SPEED0:ADC转换速度控制位。 表9-2 ADC转换速度控制 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 ADC_ POWER SPEED1 SPEED0 FLAG START CHS2 CHS1 CHS0 ②SPEED1, SPEED0:ADC转换速度控制位。 表9-2 ADC转换速度控制 SPEED1 SPEED0 A/D转换所需时间 1 90个时钟周期转换一次, CPU工作频率217M Hz时, A/D转换速度约300KHz, 9位精度 180个时钟周期转换一次,可达到10位精度 360个时钟周期转换一次,可达到10位精度 540个时钟周期转换一次,可达到10位精度 27MHz/90=300KHz
STC12C5A60S2.pdf说明书有此叙述, STC15系列无 2)ADC控制寄存器ADC_CONTR STC15F2K60S2单片机A/D转换模块的时钟 使用外部晶体时钟或内部R/C振荡器所产生的系统 主时钟,不使用时钟分频寄存器CLK_DIV对系统 时钟分频后所产生的供给CPU工作所使用的时钟 (系统时钟)。 优点:不仅可以让ADC用较高的频率工作,提高 A/D的转换速度;而且可以让CPU用较低的频率工 作,降低系统的功耗。 STC12C5A60S2.pdf说明书有此叙述, STC15系列无 STC15F2K60S2单片机A/D转换模块的时钟就是CPU工作所使用的时钟(系统时钟)。
2)ADC控制寄存器ADC_CONTR ③ADC_FLAG:A/D转换结束标志位。 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 ADC_ POWER SPEED1 SPEED0 FLAG START CHS2 CHS1 CHS0 ③ADC_FLAG:A/D转换结束标志位。 A/D转换完成后,ADC_FLAG = 1,要由软件清零。 不管A/D转换完成后由该位申请产生中断, 还是由软 件查询该标志位判断A/D转换是否结束, 当A/D转换 完成后, ADC_FLAG = 1, 取数据后, 一定要软件清0。 用MOV 语句对ADC_CONTR寄存器进行赋值。
2)ADC控制寄存器ADC_CONTR ④ADC_START: ADC转换启动控制位, 设置为“1”时, 开始转换,转换结束后为0。 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 ADC_ POWER SPEED1 SPEED0 FLAG START CHS2 CHS1 CHS0 ④ADC_START: ADC转换启动控制位, 设置为“1”时, 开始转换,转换结束后为0。 用MOV 语句对ADC_CONTR寄存器进行赋值。 ⑤ CHS2、CHS1、CHS0:模拟输入通道选择, 具体选择情况见表9-3 。
⑤ CHS2、CHS1、CHS0:模拟输入通道选择,见下表。 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 ADC_ POWER SPEED1 SPEED0 FLAG START CHS2 CHS1 CHS0 表9-3 模拟输入通道选择 CHS2 CHS1 CHS0 模拟输入通道选择 选择P1.0作为A/D输入来用 1 选择P1.1作为A/D输入来用 选择P1.2作为A/D输入来用 选择P1.3作为A/D输入来用 选择P1.4作为A/D输入来用 选择P1.5作为A/D输入来用 选择P1.6作为A/D输入来用 选择P1.7作为A/D输入来用
2)ADC控制寄存器ADC_CONTR 需要注意 设置ADC_CONTR控制寄存器的语句执行后,要经 过4个CPU时钟的延时,其值才能够保证被设置进 ADC_CONTR控制寄存器。 典型代码如下: MOV ADC_CONTR, #DATA ; #DATA是设置值 NOP MOV A, ADC_CONTR ;经4个时钟延时,才能正确读ADC_CONTR控制寄存器值
3)A/D转换结果存储格式控制及A/D转换结果寄存器 ADC_RES、ADC_RESL ADC_RES(地址:BDH, 复位值: 00H)和ADC_RESL(地 址:BEH,复位值:00H)用于保存A/D转换结果。 特殊功能寄存器CLK_DIV中的ADRJ位用于设置A/D 转换结果的存储格式。 ADRJ位在时钟分频寄存器CLK_DIV (也称PCON2, 地址: 97H, 复位值: 0000 x000B)中, 其各位的定义如下: 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 MCKO_S1 MCKO_S0 ADRJ Tx_Rx - CLKS2 CLKS1 CLKS0 ADRJ: ADC转换结果调整寄存器位 the adjustment bit of ADC result
3)A/D转换结果存储格式控制及A/D转换结果寄存器 ADRJ=0时, ADC_RES[7:0]存放高8位ADC结果, ADC_RESL[1:0]存放低2位ADC结果; 位名称 寄存器 D7 D6 D5 D4 D3 D2 D1 D0 ADC_ RES RES9 RES8 RES7 RES6 RES5 RES4 RES3 RES2 RESL RES1 RES0 CLK_ DIV ADRJ =0 ADRJ=1时,ADC_RES[1:0]存放高2位ADC结果, ADC_RESL[7:0]存放低8位ADC结果。
3)A/D转换结果存储格式控制及A/D转换结果寄存器 ADRJ=1时,ADC_RES[1:0]存放高2位ADC结果, ADC_RESL[7:0]存放低8位ADC结果。 位名称 寄存器 D7 D6 D5 D4 D3 D2 D1 D0 ADC_ RES ADC_RES9 ADC_RES8 RESL ADC_RES7 ADC_RES6 ADC_RES5 ADC_RES4 ADC_RES3 ADC_RES2 ADC_RES1 ADC_RES0 CLK_ DIV ADRJ=1
3)A/D转换结果存储格式控制及A/D转换结果寄存器 如果STC15F2K60S2单片机的10位A/D转换结果的高8 位存放在ADC_RES中,低2位存放在ADC_RESL的 低2位中,模/数转换结果计算公式如下: 取10位结果 : (ADC_RES[7:0], ADC_RESL[1:0]) = 1024×Vin/Vcc 取8位结果: ADC_RES[7:0] = 256×Vin / Vcc Vin为模拟输入通道输入电压,Vcc为单片机实际工 作电压,用单片机工作电压作为模拟参考电压。
4)与A/D转换中断有关的寄存器 在中断服务程序中, 要用软件将A/D中断标志位 ADC_FLAG (也是A/D转换结束标志位)清0。 中断允许控制寄存器IE中的EADC位 (D5位) 用于开放 ADC中断; EA位 (D7位) 用于开放CPU中断。 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 EA ELVD EADC ES ET1 EX1 ET0 EX0 中断优先级寄存器IP中的PADC位(D5位)用于设置A/D 中断的优先级 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 PPCA PLVD PADC PS PT1 PX1 PT0 PX0 在中断服务程序中, 要用软件将A/D中断标志位 ADC_FLAG (也是A/D转换结束标志位)清0。
9.2.2 STC15F2K60S2集成A/D模块的结构及其使用 2、STC15F2K60S2单片机ADC模块的使用 编程要点 打开ADC电源,第一次使用时要打开内部模拟 电源 (设置ADC_CONTR . ADC_POWER =1)。 适当延时,等内部模拟电源稳定。一般延时1ms 以内即可。 设置P1口中的相应口线作为A/D转换通道 (设置 P1ASF寄存器)。(也可在打开ADC电源前设置) 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 ADC_ POWER SPEED1 SPEED0 FLAG START CHS2 CHS1 CHS0
2、STC15F2K60S2单片机ADC模块的使用 选择ADC通道(设置ADC_CONTR中CHS2~CHS0 位)。 延时(20μs~200μs), 根据需要设置转换结果存储格式 (设置CLK_DIV中的ADRJ位)。 ⑤′启动ADC转换(ADC_CONTR中的ADC_START位置 1)。 (ADC_CONTR的各位设置可一次完成) ⑥查询A/D转换结束标志ADC_FLAG,判断A/D转换是 否完成,若完成,则读出结果(结果保存在ADC_RES 和ADC_RESL寄存器中),并进行数据处理。
2、STC15F2K60S2单片机ADC模块的使用 ⑦若采用中断方式,还需进行中断设置 (EADC置1,EA置1)。 ⑧在中断服务程序中读取ADC转换结果,并 将ADC中断请求标志ADC_FLAG清零。
单片机ADC模块的使用——举例 【例9-2】 编程实现利用STC15F2K60S2单片机ADC通 道2采集外部模拟电压信号,8位精度,采用查询方式 循环进行转换,并将转换结果保存于30H单元中。假 设时钟频率为18.432MHz。 解: 按ADC编程要点, 打开ADC电源,延时, 设置通道 (P1ASF, ADC_CONTR中CHS2~ CHS0 位) ,延时; 8位精度时, 若ADRJ=0, 则可直接使用ADC_RES的值。 因复位后, ADRJ=0, 因此, 按ADC编程要点进行初始化, 启动后, 直接查询判断ADC_FLAG标志是否为1; 若ADC_FLAG为1, 则读出ADC_RES寄存器的值, 并存 入30H即可; 若为0, 则继续等待。
【例9-2】 ADC通道2采集电压, 8位精度,结果存30H。 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 ADC_ POWER SPEED1 SPEED0 FLAG START CHS2 CHS1 CHS0 【例9-2】 ADC通道2采集电压, 8位精度,结果存30H。 汇编语言程序代码如下: $INCLUDE (STC15.INC) ;包含STC15单片机寄存器定义文件 ADC_DAT EQU 30H ; (30H)存储单元内存A/D转换结果 ORG 0000H LJMP MAIN ORG 0050H MAIN: MOV SP, #70H ;设置堆栈 ORL ADC_CONTR, #80H ;开A/D转换电源 MOV A, #20H LCALL DELAY ;开电源后加适当延时, 1ms以内即可 MOV P1ASF,#04H ;设置P1.2的模拟量功能 MOV ADC_CONTR,#11100010B ;选择P1.2为A/D转换通道 MOV A, #05H LCALL DELAY ;如果切换A/D转换通道, 则需要加延时 DELAY延时时间≈ 10.83 ms*A值 转换周期: 90个时钟 DELAY延时时间≈ 10.83 ms*A值
【例9-2】 ADC通道2采集电压, 8位精度,结果存30H WAIT_AD: ORL ADC_CONTR, #00001000B ;启动A/D转换 MOV A, #00010000B ;判断A/D转换是否完成 ANL A, ADC_CONTR JZ WAIT_AD ;A/D转换尚未完成, 继续等待 ANL ADC_CONTR, #11100111B ;将ADC_FLAG清0 MOV A, ADC_RES ;读取A/D转换结果 MOV ADC_DAT, A ;保存A/D转换结果到30H单元 LJMP WAIT_AD ;等待下一次转换完成 用查询(ADC_FLAG)方式 查询方式也需清0 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 ADC_ POWER SPEED1 SPEED0 FLAG START CHS2 CHS1 CHS0
【例9-2】 ADC通道2采集电压, 8位精度,结果存30H DELAY: ;延时子程序 PUSH 02 ;将寄存器组0的R2入栈 ,不能PUSH R2, 因寄存器寻址 PUSH 03 ;将寄存器组0 的 R3 入栈 PUSH 04 ;将寄存器组0 的 R4 入栈 MOV R4, A DELAY_LOOP0: MOV R3, #200 ;2个时钟周期 Delay_LOOP1: MOV R2, #249 ;2个时钟周期 DELAY_LOOP: DJNZ R2, DELAY_LOOP ;4个时钟周期 DJNZ R3, DELAY_LOOP1 ;4个时钟周期 DJNZ R4, DELAY_LOOP0 ;4个时钟周期 POP 04 POP 03 POP 02 RET END 【例9-2】 ADC通道2采集电压, 8位精度,结果存30H 延时时间大约为: ((249*4+2)*200+2)*A值/18.432MHz≈ 10.83 ms*A值
单片机ADC模块的使用——举例 【例9-3】 编程实现利用STC15F2K60S2单片机ADC 通道2采集外部模拟电压信号, 10位精度, 采用中断方 式进行转换,并将转换结果保存于30H和31H单元中。 假设时钟频率为18.432MHz。 解:ADRJ=0时,ADC结果的高8位在ADC_RES中, 低2位在ADC_RESL的低2位。 因此, 可在中断服务程序中读出ADC_RESL寄存器的 值, 屏蔽高6位后存入30H单元,读出ADC_RES寄存 器的值,存入31H单元。
[例9-3] ADC通道2采集电压, 10位精度, 结果存30H, 31H 汇编语言程序代码如下: $INCLUDE (STC15.INC) ;包含STC15F寄存器定义文件 ADC_HI EQU 31H ;A/D转换结果高2位 ADC_LOW EQU 30H ;A/D转换结果低8位 ORG 0000H LJMP MAIN ORG 002BH ;ADC中断入口地址 LJMP ADC_ISR ;ADC中断服务程序入口 ORG 0050H MAIN: MOV SP, #70H ;设置堆栈 ORL ADC_CONTR, #80H ;开A/D转换电源 MOV A, #20H LCALL DELAY ;开电源后要适当延时, 1ms以内即可 DELAY延时时间≈ 10.83 ms*A值
[例9-3] ADC通道2采集电压, 10位精度, 结果存30H, 31H MOV P1ASF, #04H ;设置P1.2的模拟量功能 MOV ADC_CONTR, #11100010B ;P1.2为A/D转换通道 MOV A, #05H LCALL DELAY ;若切换A/D转换通道,则需加延时 ;ORL CLK_DIV, #20H ; 设置ADC结果存储格式(ADRJ=1) ;这里采用默认ARDJ=0, 不用设置ADC结果存储式 ORL ADC_CONTR, #00001000B ;启动A/D转换 SETB EADC ;EADC=1, 开放ADC的中断控制位 SETB EA ;开放CPU总中断 SJMP $ ;循环等待中断 转换周期: 90个时钟 DELAY延时时间≈ 10.83 ms*A值
[例9-3] ADC通道2采集电压, 10位精度, 结果存30H, 31H ADC_ISR: ;ADC中断服务程序入口 ANL ADC_CONTR, #11100111B ;将ADC_FLAG清0 MOV A, ADC_RES ;读取A/D转换结果高8位 MOV ADC_HI, A ;保存A/D转换结果高8位到31H内存 MOV A, ADC_RESL ;读取A/D转换结果低8位 ANL A, #03H ;屏蔽高6位 MOV ADC_LOW, A ;保存A/D转换结果低2位到30H内存 ORL ADC_CONTR, #00001000B ;重新启动A/D转换 RETI ADC_START=1
【例9-2】 ADC通道2采集电压, 8位精度,结果存30H DELAY: ;延时子程序 PUSH 02 ;将寄存器组0的R2入栈 ,不能PUSH R2, 因寄存器寻址 PUSH 03 ;将寄存器组0 的 R3 入栈 PUSH 04 ;将寄存器组0 的 R4 入栈 MOV R4, A DELAY_LOOP0: MOV R3, #200 ;2个时钟周期 Delay_LOOP1: MOV R2, #249 ;2个时钟周期 DELAY_LOOP: DJNZ R2, DELAY_LOOP ;4个时钟周期 DJNZ R3, DELAY_LOOP1 ;4个时钟周期 DJNZ R4, DELAY_LOOP0 ;4个时钟周期 POP 04 POP 03 POP 02 RET END 【例9-2】 ADC通道2采集电压, 8位精度,结果存30H 延时时间大约为: ((249*4+2)*200+2)*A值/18.432MHz≈ 10.83 ms*A值
§9.3 数模转换器的应用 单片机处理后的数字信号要转换成模拟信号 才能控制相关对象。 实现数字量转换成模拟量的器件称为数模转 换器(DAC),简称为D/A转换器 。 本节主要介绍D/A转换的原理及性能指标、 数模转换器TLV5616与单片机的接口及编程 方法。
ECL (Emitter Coupled Logic发射极耦合逻辑电路) 9.3.1 数模转换器的工作原理及性能指标 1、数模转换器的分类 根据解码网络结构不同,D/A转换器可分为T型、倒T 型、权电阻和权电流等类型。 根据模拟电子开关种类不同, D/A转换器可分为CMOS 型和双极型。双极型又分为电流开关型和ECL电流开 关型。 ECL (Emitter Coupled Logic发射极耦合逻辑电路) D/A转换器选择 转换速度要求不高时, 可选CMOS开关型D/A转换器; 若对速度要求较高, 则应选双极型电流开关D/A转换 器或转换速度更高的ECL电流开关型D/A转换器。
2、D/A转换器的工作原理 根据分类不同,D/A转换器的工作原理也不 尽相同。下面只介绍权电阻型数模转换器的 工作原理,其余类型数模转换器的工作原理 请读者自行查阅资料学习。 权电阻型数/模转换:就是将某一数字量的二 进制代码各位按它的“权”的数值转换成相 应的电流,然后再把代表各位数值的电流加 起来。
8位权电阻D/A转换器的原理框图如图所示。 Di=0时, Si向上合,接地; Di=1时, Si向下合,接VB电源。 ( i=0, 1, …,7 ) S7 8位 权 电 阻 D/A 转 换 器 的 原 理 图 S6 S5 S4 S3 S2 S1 图9-8 权电阻型D/A转换器 S0
权电阻D/A转换器的简化电路 ai=Di 当R=2Rf时, D7•VB Di=0时, Si接地。Di=1时, Si接VB电源 (i=0, 1,…,7), 或用Vi=D(7-i)•VB表示: D6•VB V0=a7•VB, V1=a6•VB, V2=a5•VB, V3=a4•VB, V4=a3•VB, V5=a2•VB, V6=a1•VB, V7=a0•VB, a0, a1 ,…, a7=0或1。 D5•VB D4•VB D3•VB 当R=2Rf时, D2•VB D1•VB D0•VB 图9-9 权电阻D/A转换器简化电路 VB是电源电压
3、D/A转换器的性能指标 (1)分辨率 (2)稳定时间 (3)转换精度 转换精度是转换后所得的实际值对于理想值的接近程度。
3、D/A转换器的性能指标 (4)输出电平 (5)输入编码 不同型号的D/A转换器的输出电平相差较大,一般为 5~10V,也有一些高压输出型的为24~30V。还有一些 电流输出型,低的为20mA,高的可达3A。 (5)输入编码 如二进制、BCD码、双极性时的符号-数值码、补码、 偏移二进制码等。必要时可在D/A转换前用计算机进行 代码转换。
9.3.2 12位D/A转换器TLV5616及其接口技术 1、TLV5616简介 TLV5616是一个带有灵活的4线串行接口的12位电压 输出数/模转换器(DAC)。 4线串行接口可以与SPI、QSPI和Microwire串行口接 口。TLV5616可以用一个包括4个控制位和12个数据 位的16位串行字符串来编程 TLV5616采用CMOS工艺, 设计成2.7V至5.5V单电源 工作。 D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 X SPD PWR DAC新值
1、TLV5616简介 器件8引脚封装, 工业级芯片的工作温度范围从-40℃ 至85℃。 输出电压 (由外部基准决定满度电压) 由下式给出: 其中REF是基准电压, 而CODE是数字输入值, 范围 从0x000至0xFFF。 上电复位将内部锁存为一个规定的初始状态(所有 各位为零)。
1、TLV5616简介 各引脚功能介绍如下: VDD: 正电源 OUT: DAC模拟电压输出 REFIN: 基准模拟电压输入 AGND: 模拟地 DIN:串行数字数据输入 SCLK:串行数字时钟输入 :芯片选择,低有效 FS:帧同步, 数字输入, 用于4线串行接口。 图9-10 TLV5616引脚图
2、TLV5616 内部结构 如图所示。 SPD: 速度控制位 ; PWR: 功率控制位 ; 掉电方式时, 所有放大器被禁止
16位已传送后或当FS升高时, 移位寄存器中内容被移到DAC锁存器, 它将输出电压更新为新的电平。 3、数据传输时序图 图9-12 TLC5616的数据传输时序图 16位已传送后或当FS升高时, 移位寄存器中内容被移到DAC锁存器, 它将输出电压更新为新的电平。 在SCLK下降沿, 数据一位接一位传入移位寄存器。 首先器件必须使能 /CS。 然后在FS的下降沿启动数据的移位,
4、数据格式 TLV5616的16位数据字包括两部分: 控制位: D15-D12 DAC新值: D11-D0 D15 D14 D13 D12 X SPD PWR DAC新值 X: 任意值 SPD: 速度控制位 ; 1→快速方式 , 0→慢速方式 PWR: 功率电源控制位 ; 1→掉电方式 , 0→正常工作 注: 在掉电方式时, TLV5616中所有放大器都被禁止。
9.3.2 12位D/A转换器TLV5616及其接口技术 5、TLV5616与单片机的接口电路及应用编程 TLV5616与单片机的接口连接相对简单, 注意应在VDD 和AGND之间应当连接一个0.1μF的陶瓷旁路电容,且应 当用短引线安装在尽可能靠近器件的地。 使用缺铁氧体磁环(ferrite beads)可以进一步隔离系 统模拟电源与数字电源。 抑制电磁干扰 铁氧体磁环 去掉塑料线皮 USB接口线末端 夹子型式铁氧体磁环
5、TLV5616与单片机的接口电路及应用编程 【例9-4】用STC15F2K60S2控制TLV5616输出正弦波。 P3.0/ P3.1/ T0/ T1/ 图9-13 TLV5616与单片机的接口电路图
[例9-4]用STC15F2K60S2控制TLV5616输出正弦波 串行的DAC输入数据和外部控制信号由单片机的P3口 完成:串行数据由RxD引脚送出,串行时钟由TxD引 脚送出。P3.4和P3.5分别向TLV5616提供片选和帧同 步信号。 单片机使用定时器以固定的频率产生中断。在中断服 务子程序中提取和写入下一个数据样本(两个字节)到 DAC中。 数据样本(32个样本, 64个字节)储存在常数表格中, 表 格中数据描述了一个正弦波的全周期。
[例9-4]用STC15F2K60S2控制TLV5616输出正弦波 单片机的串行口工作于方式0,在RxD脚发送8位数 据,同时TxD脚上送出同步时钟。 需要连续两次写入(两个字节)才能写一个完整的字到 TLV5616。 输出到DAC的数据是正弦波数据(表格中), 一个周期 的32个正弦波数据(双字节数) 保存在SINEVALS为 首地址的单元中(共64个字节) 。
[例9-4]用STC15F2K60S2控制TLV5616输出正弦波 汇编语言程序代码如下: ROLL_PTR EQU 30H ;定义循环计数器单元30H ORG 0000H LJMP START ORG 000BH LJMP INT_T0 ORG 0100H START: MOV SP, #0F0H MOV DPTR, # SINEVALS ;设置数据常数表格首地址 CLR A MOV SCON, A ;设置串口1工作模式0(同步移位器输出) MOV TMOD, #02H ;设置定时器0工作方式2 ROLL_PTR记录输出到DAC的一个正弦波波形数据(32字, 64字节)的字节偏移地址。
[例9-4]用STC15F2K60S2控制TLV5616输出正弦波 MOV TH0, #0C8H SETB T1 ;置FS=1, P3.5 SETB T0 ;置/CS=1, P3.4 SETB ET0 ;允许定时器0中断 SETB EA ;允许CPU中断 MOV ROLL_PTR, A ;循环计数器清“0” SETB TR0 ;启动定时器0 SJMP $ ;等待中断发生 头文件有定义: P3 DATA 0B0H ;P3口寄存器 T1 BIT 0B5H ;计数器1外输入端P3.5 T0 BIT 0B4H ;计数器0外输入端P3.4 ROLL_PTR记录着输出到DAC的一个正弦波波形数据(32字, 64字节)的字节偏移地址。
[例9-4]用STC15F2K60S2控制TLV5616输出正弦波 ROLL_PTR存着正弦波数据的偏移地址或本次中断时输出到DAC的一个正弦波数据(字)的偏移地址(上次中断结束时更新)。 ;定时器0中断服务程序 INT_T0: PUSH PSW PUSH ACC CLR T0 ;将/CS置为低电平 CLR T1 ;将FS置为低电平 MOV A, ROLL_PTR ;将循环计数值装入累加器A MOVC A, @A+DPTR ;从数据表格中读高位字节 ORL A, #00H ;设置数据控制位(这里选择慢速正常非掉电方 式) MOV SBUF, A ;送出高位字节 MOV A, ROLL_PTR ;将循环计数值装入累加器A INC A ;拟指向正弦波数据(字)的低位字节地址 MOVC A, @A+DPTR ;读取低位字节 启动数据传输过程 若设置高速ORL A, #40H
[例9-4]用STC15F2K60S2控制TLV5616输出正弦波 MSB_TX: JNB TI, MSB_TX ;等待高位传输结束 CLR TI MOV SBUF, A ;送出低位字节 LSB_TX: JNB TI, LSB_TX ;等待低位传输结束 CLR TI SETB T1 ;置FS=1,将输出电压更新为新的电平 MOV A, ROLL_PTR ;获取当前数据样本地址 INC A ;修正计数, 以得到下一个数据样本 INC A ; 一个数据样本有2个字节 ANL A, #03FH ;若超出64字节范围, 则重新赋值为0 MOV ROLL_PTR, A SETB T0 ;置/CS=1, 停止输出DAC POP ACC POP PSW RETI ; 中断返回到主程序等待 03EH+2=40H 0100 0000B 0011 1111B 0000 0000B
[例9-4]用STC15F2K60S2控制TLV5616输出正弦波 ;正弦常数表格 SINEVALS: DW 01000H DW 0903EH DW 05097H DW 0305CH DW 0B086H DW 070CAH DW 0F0E0H DW 0F06EH DW 0F039H DW 05097H DW 0903EH DW 01000H DW 06021H DW 0A0E8H DW 0C063H DW 040F9H DW 080B5H DW 0009FH DW 00051H DW 00026H DW 080B5H DW 040F9H DW 0C063H DW 0A0E8H DW 06021H END