第8章 模拟数字转换模块
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.2.5 编程方法
3. 如果使用定时器配合控制采样率,则需要配置 定时器
(1)设置定时器时钟源为内部系统时钟。 (2)根据采样率计算两次采样之间的间隔设置定时 器的初值和预分频器的分频比。
4. 如果需要使用 A/D 转换完成中断,则需配置中 断使能位
(1)清零 ADC 模块中断标识 ADIF 。 (2)置位 ADC 模块中断使能位 ADIE 。 (3)置位外设模块中断使能位 PEIE 。 (4)置位全局中断使能位。
第八章 模拟/数字转换模块
第八章 模拟/数字转换模块
8.1 模拟/数字转换器综述 8.2 PIC单片机内嵌ADC模块的使用方 法和编程技术 8.3 ADC模块基本功能实验 8.4 简易数字显示温度计实验
8.1 模拟/数字转换器综述
8.1.1 A/D转换器的基本概念 A/D转换过程是在一系列选定的瞬间将输入的 模拟电压转换为一系列数字量的过程。
8.2.3 ADC模块的工作过程
1. 输入信号的采样
从采样、保持电路的工作过程可知,保持电容CHOLD 所 保持的电压在多大程度上反映了输入信号VAIN的大小,将 直接决定整个 ADC 模块转换精度。而决定CHOLD上保持 的电压是否准确的因素主要有两个:第一,采样时间是 否足够电压源VAIN通过 RS、RIC 以及 RSS 给采样保持电 容充电。或者说采样时间是否足够这个 RC 充电电路建 立足够的精度;第二,漏电流ILK 在信号源内阻 RS上产 生的压降是否大到影响 ADC 模块的转换结果。 由于漏电流ILK非常小,这两个影响精度的因素中可以暂 时不考虑第二个因素的影响。 采样时间有如下计算公式
A/D转换有两个基本问题:
在时间轴上的哪些点进行转换 怎么将模拟电压转换为数字量
8.1.1 A/D转换器的基本概念
1. 采样定理 根据奈奎斯特采样定理,为了能够使单片机获 知模拟信号中v1中的所有信息,采样率fs满足
fs≥2fimax
采样率为fs的数字信号只能描述fs/2频率范围内 的信号。 如果出现混叠现象,需要采用模拟低通滤波器 限制采用无法照顾的频带(即大于fs/2 频带)内 的信号能量。
随着采样(充电)时间的增加,保持电容上的电压 越来越接近输入电压。当然,保持电容上的电压只 可能无限接近输入电压,而不可能和输入电压相等。 但是 ADC 模块的量化过程也存在量化误差,只要 保持电容上的电压和输入电压之间的误差 △V 小 于 ADC 模块的量化误差即可认为采样过程对 ADC 模块的转换精度没有造成影响。
8.2.5 编程方法
5. 等待由信号源内阻计算得到的采样时间 6. 将控制位 GO/DONE 置位,启动 A/D 转换 7. 如果下次采样的模拟输入通道不同于当前这次采 样的输入通道,则需要在这里切换模拟输入通道 8. 等待 A/D 转换完成
(1)如果没有使用 A/D 转换完成中断,则软件查询 GO /DONE 是否被清零,也可以查询中断标志位 ADIF 是否 被置位。 (2)如果使用了 ADC 模块中断,则可以执行其他程序, 同时等待 A/D 转换完成中断。
2.设置 ADC 模块
(1)通过 TRISA 及 TRISE 将计划用作模拟输入 的引脚设置为输入引脚。 (2)设置控制寄存器 ADCON1 ,包括将计划用 作模拟输入的引脚配置为模拟输入通道,选择基准 电压接入方式,设置转换结果存放方式。 (3)设置控制寄存器 ADCON0 ,包括根据单片 机工作频率选择合适的 ADC 模块时钟信号,选择 首先要进行转换的模拟输入通道,使能 ADC 模块。
2. 输入信号源内阻的限制
为了保证它在信号源内阻 RS上的压降不影响 ADC 模块的转换精度,同样要求这个压降低 于 ADC 模块的量化误差。由于ILK是一个包含 正值和负值的范围,为了保证在ILK的整个可能 范围内变化时小于ADC 模块的量化误差
3. A/D转换时钟的选择
转换的过程受到转换时钟信号的控制,转换时钟信号 CP 的周期记为TAD 。 ADC 模块TAD的大小一方面受到 ADCS2~ADCS0(控制寄存器 ADCON0 <7:6> )的控 制,另一方面, PIC16F877A 的制作工艺决定了TAD不 能小于 1.6 us。可以通过对 ADCS1~ADCS0 的设置来 选择主振荡器频率fOSC 的 2、8 和 32 分频作为 ADC 模 块的时钟信号,也可以使用 ADC 模块自带的独立 RC 振荡器作为 ADC 模块的时钟源。不论选择何种时钟源 都应该保证TAD不小于 1.6 us ,如果低于这个时间限制, ADC 模块将无法正常工作。
用 RA0/AN0作为 A/D 转换的输入通道;参考电压选用电源 VDD和 VSS 充当; A/D 转换时钟源选用内部 RC 振荡器;使 用中断监测 A/D 转换是否完成。
A/D转换器编程举例 【11-1】请编写适用于F877A的A/D测试程序, 实现如下功能: (1)应用RA0/AN0作为此A/D转换输入信道; (2)参考电压源VREF选择内部VDD和VSS; (3)A/D转换时钟源选用4MHz振荡器; (4)八位数据精度,并将AD结果写入C口。
8.2.5 编程方法
9. 读取 A/D 转换结果寄存器 ADRESH 和 ADRESL 10. 如果使能了 A/D 转换完成中断,则需要对 ADIF 进行手动清零 11. 如果使用了定时器,则在此处等待定时器溢 出标志或定时中断发生,然后重新设置定时器 初值。返回第 6 步再次进行 A/D 转换。如果采 用软件延时控制采样率则在此处进行适当的软 件延时后返回第 6 步再次进行 A/D 转换。
11.2 A/D转换器的主要技术指标和 PIC16F877片内ADC模块简介
2. ADC控制寄存器ADCON1
11.2 A/D转换器的主要技术指标和 PIC16F877片内ADC模块简介
Biblioteka Baidu
4.2 A/D转换器的主要技术指标和 PIC16F877片内ADC模块简介
使用中需要注意的问题
1.可以配置为模拟输入的八个引脚 AN0~AN7 并不能被配置成任意功能的组合。 2. 复位后 PCFG3~PCFG0 的缺省值是 0000 , 也就是说如果不对 ADCON1 进行任何设置, 与 ADC 模块相关的 8 个引脚将全部被配置为 模拟输入引脚。在系统中即使不使用 ADC 模 块,复位后也必须对 ADCON1 进行配置,否 则这些引脚将不响应对 PORTA 或 PORTE 的 写入操作。
8.2.5 编程方法
1. 对输入信号进行调整 (1)通过模拟低通滤波器,将输入信号的带 宽限制在 ADC 模块允许的范围内。 (2)将输入模拟信号的幅度调整到一定范围 内,根据信号幅度范围和精度要求选择参考电 源和大小。 (3)将输入信号的内阻降低到 2.5 kΩ以下。
8.2.5 编程方法
参考程序清单如下: list p=16f877A INCLUDE "P16F877A.INC" ORG 0x000 NOP BANKSEL ADCON1 ;选择RAM数据存储器体1 MOVLW B‘00000000’ ;选定AN0~AN7为模拟输入,结果格 式为左对齐 MOVWF ADCON1 ;参考电压源VREF选择内部VDD和VSS CLRF TRISC ;设C口为输出 BANKSEL ADCON0 ;选择RAM数据存储器体0 MOVLW B‘01100001’;设置时钟源8Tosc,使能ADC, RA0/AN0 信道被选中 MOVWF ADCON0
8.1.1 A/D转换器的基本概念
8.1.3 逐次逼近时A/D转换器的原理
8.1.4 多路数据采集系统的结构
8.2.2 ADC模块的相关寄存器
PIC16F877A内部嵌入的ADC模块是10位数字量精度,共 有8个模拟信道。与ADC模块有关的寄存器比较多,共有 11个。 1.ADC控制寄存器ADCON0
CLRF PORTC; 对C口清0 AtoD CALL DELAY_20ms ;为了保证采样时间,通 ;常,应该插入20ms以上的时间延迟或者安排 ;一段有相当长度的应用程序。 BSF ADCON0,GO ;GO位置1,开始A/D转换 ADWAIT: BTFSC ADCON0,GO;在A/D转换完成后,GO位 将被清0 GOTO ADWAIT ;如果没有转换完毕,则返回继续 检测 MOVF ADRESH,W;如果转换完毕,把A/D结果读 入W中 MOVWF PORTC;将AD结果写入C口 GOTO AtoD;循环进行A/D转换 END
另外,如果事先无法确定单片机的工作频率,可 以使用 ADC 模块提供的 RC 振荡器作为时钟源 ( ADCS2~ ADCS0 = x11)。 RC 振荡器的优势 在于无论单片机的工作频率为多少都可以使用, 保证了软件的最大兼容性,而缺点在于 RC 振荡 器在制造上具有离散性,且随温度变化较明显, 因此使用 RC 振荡器作为 ADC 模块的时钟源时, 无法预测 A/D 转换所需的时间。ADC 模块的 RC 振荡器所产生的TAD在 2us~6us之间,典型值为 4us。
8.1.1 A/D转换器的基本概念
2. 模拟电压的量化
是A/D转换器将输入的模拟电压转化为一个和这 个模拟电压量最接近的数字量的过程。 任何数字量的大小都只能表示某个最小数量单位 的整数倍。而模拟电压是连续的,它不一定能够 被这个最小的数量单位整除,在这种情况下,输 出的数字量只能是与输入最接近的整数倍最小单 位电压。 最小单位电压越小,得到的数字量就越能够准确 的反映输入的模拟电压大小。
4 . A/D 转换过程和转换时钟的对应关系
ADC 模块可以理解为受到转换时钟 CP(周期为 TAD)同步的时序逻辑数字电路, ADC 模块的行 为可以随着转换时钟来描述。
A / D 转换通过软件置位 ADCON1寄存器的 GO/DONE 位来启动,由于驱动软件执行的单片机指令周期信号 fCY 和 ADC 模块的转换时钟信号 CP 不一定同步, ADC 模 块将等到转换时钟的下一个上升沿开始执行 A / D 转换, 而从 GO被软件置位到真正开始执行转换的时间长度将 是一个介于指令周期和TAD 之间的值。转换开始后 ADC 模块将用11个转换脉冲(即 11个TAD的时间)完成逐次 逼近的比较工作,并在第 11个TAD结束后将结果装载到 结果寄存器,产生标志位并将采样保持电容重新连接到 模拟输入通道上。 一次完整的 A/D 转换需要 11~12 个时钟周期加上采样 时间TACQ 。综合上面得到的TACQ的范围,可以计算得到 PIC16F877A 的 ADC 模块的最短转换时间在 30us左右。