AD模数转换_PIC16F877A

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

从打开A/D通道或选择新的A/D通道到A/D转换器的内部保持电容充电至与输入的模拟电压相同的时间就是A/D采集时间,通常为20us左右,然后才能启动A/D转换。

在执行程序连续交替进行两路模拟输入信号的A/D转换时,GO位被置1后启动一次A/D 转换,只要等待一个T AD的时间,之后就可以修改CHS2:CHS0选择另外的输入信号通道而不会影响当前A/D转换的结果。

10位的A/D转换时间共需要12个T AD,T AD为一位的转换时间,对于887A来说,T AD最小为1.6us。

A/D转换过程如下:
1、有关的I/O口设置为输入(TRISA或TRISE)
2、对模拟引脚/基准电压/数字I/O进行设置,选择A/D结果格式(ADCON1)
3、选择A/D通道,选择A/D时钟,A/D模块使能
4、延时约20us,使得输入电压对保持电容充电达到稳定
5、开始A/D转换(ADGO=1)
6、A/D转换结束,ADGO自动清零,软件对PIR1的ADIF清零
7、读A/D转换结果(ADRESH、ADRESL)
如下程序:
//A/D转换,对指定通道k进行A/D转换,结果以16位整数返回
//只进行AD通道等设置,ADCON1不在此设置
unsigned int_AD_SUB( char k)
{
char i;
unsigned int x;
ADCON0=0b 0100 0001; // T AD=8Tosc
ADCON0 |=(k<<3); // 设置A/D转换通道,打开通道
for (i=1;i<5;i++) NOP( ); // 打开AD通道后延时20us左右
ADGO=1; // 开始A/D转换
while(ADGO= =1); // 等待A/D转换结束
ADIF=0; // 清A/D转换结束标志
x=0;
x=ADRESH<<8;
x|=ADRESL;
return( x);
}
PIC16F877A对模拟输入电压和参考电压的要求:(10/12位的AD转换)
一个完整的A/D转换可以按如下步骤实现:
1、设定ADCON1和TRISx寄存器,配置引脚的工作模式
2、若需要中断响应,则要设定相关的中断控制寄存器
3、设置ADCON0寄存器,选择A/D转换的时钟,选择模拟信号的输入通道,打开A/D模
块,注意此时GO/DONE位不要置1
4、等待足够长的采样延时
5、将ADCON0中的GO/DONE控制位置1,启动一次A/D转换过程
6、查询A/D转换结束标志:GO/DONE位在A/D转换结束时会自动清0,ADIF标志位在
A/D转换结束后会自动置1,这两个位都可以作为软件查询A/D转换是否结束的标志,使用ADIF标志时记得要用软件将其清除
7、若使用中断来响应A/D转换的结束,则6将不再适用,A/D转换结束时ADIF的置位将
使单片机进入中断服务程序,在处理中断时记得将ADIF标志位清0
8、A/D转换结束,直接从ADRES寄存器中读取8位转换结果,存入其缓冲单元或直接进
行运算处理
9、修改ADCON0寄存器的CHS2:CHS0,选择其他通道输入的模拟信号进行A/D转换,
程序重复4—9的循环
输入电压信号:
为了防止电压输入而造成芯片损坏或出现硬件死锁的问题,一般要在输入信号电路中串接一个限流电阻后在接到单片机引脚上。

如下图所示:(A/D输入引脚的限流保护)
输入电压信号的内阻:
通常输入信号都有一定的内阻,分析时,可以将输入信号等效为有一定内阻Ri的电压源V,如图所示:(IL为输入漏电流)
根据相关数据手册参数表得知:
PIC单片机A/D输入信号引脚的输入漏电流IL最大为±500nA,它也同时推荐了被测输入信号源内阻最大不要超过10kΩ。

基于这两个参数,可知损耗在信号源内阻上的电压最不能超过5mV(A/D基准电压为2.5V时的1/2个LSB)这样才能保证A/D转换结果的正确。

常见的用热敏电阻测温电路。

如图下所示:
让电源电压VDD通过热敏电阻Rx和参考电阻Rf串联电路进行分压,得到分压点电压Vx 后直接送入单片机的引脚进行A/D转换。

电路分析得:
只要保证Rf不超过10kΩ,无论Rx时多大。

上图中的源内阻Ri也就不会超过10kΩ,满足了A/D模块对输入信号源内阻的要求。

输入信号的抗混叠滤波:
根据奈奎斯特采样定理:当以频率f对输入信号进行采样时,能够正确还原的信号最高频率为f/2。

当信号含有频率超过f/2时,对信号进行时域离散抽样后会造成的其频域混叠。

要消除这种
混叠现象出现的唯一方法:只有在信号输入到A/D模块前,先对其进行抗混叠滤波(实际为低通滤波),保证输入的信号最高频率分量不超过f/2。

常见的用热敏电阻测温电路中实现低通滤波的方法:(简单RC低通滤波)
注意:简单的RC滤波电路会增加信号源的内阻
抗混叠滤波是所有A/D转换电路必须具备的一个组成部分。

AD转换时钟的选择:
A/D转换时钟可以是单片机的主振荡器的振荡频率,此时可选主振荡频率的2、8或32分频。

也可以使用A/D模块内部自带的独立RC振荡器,其一个振荡周期典型值一般是4us左右。

整个离散变化的范围在2~6us之间(RC振荡有离散性)。

假设芯片主振荡频率为8MHz,A/D转换时钟选自此主振荡频率,则理论上必须对其进行至
(1/8=0.125us,1.6/0.125=12.8,0.125×32=4us)少12.8分频才能得到周期为1.6us的时钟信号。

这时只有一种选择ADSC1:ADSC0=10,选择32分频得到T AD为4us。

T AD必须大于1.6us,但也不是越大越好。

从采样开关断开到获取8位的转换结果,需要9个T AD周期,一般不要超过50us。

如图:
当单片机主振荡频率很低时,如32768Hz时,A/D转换时钟最好选择其自带的RC振荡,以避免转换时间过长所造成结果偏差。

单片机休眠时进行A/D转换,时钟必须使用独立的RC 振荡。

10/12位的AD转换,其采样时间在22us以上。

实际设计时可取25us或更多一些。

8位的AD转换,其采样时间取15us或更多一些。

参考电压的考虑:
8位AD模块,其参考电压只有上限一路,下限固定为芯片的地电平Vss。

10/12位的AD模块其基准电压有上限(VREF+)和下限(VREF-)。

此时,(VREF+)对应于引脚AN3,(VREF-)对应于引脚AN2。

也可以使用芯片自身的工作电压,即(VREF+)=VDD,(VREF-)=Vss。

合理地调整(VREF+)和(VREF-)的幅值,在一定程度上可以提高A/D转换的灵敏度和动态范围。

如(VREF+)=3.6V,(VREF-)=0V,3.6/1024=3.5mV,当(VREF-)=1V,则2.6/1024=2.5mV与原先相比提高了约1mV的灵敏度。

AD转换结果的格式:
10/12位的AD转换结果存放于ADRESH和ADRESL两个字节中。

8位的AD转换结果存放于ADRES寄存器中,ADRESH寄存器的物理地址与8位A/D模块的ADRES寄存器完全一样,故左对齐格式可以使10/12位A/D模块与8位A/D模块完全兼容。

ADCON0寄存器:(设置ADC模块工作方式)
位7:6 ADCS1:ADCS0:A/D转换时钟选择
00= fosc/2,即时钟源自于芯片主振荡的2分频
01= fosc/8,即时钟源自于芯片主振荡的8分频
10= fosc/32,即时钟源自于芯片主振荡的32分频
11= f RC,即时钟源自于AD模块内自带的RC振荡频率
位5:3 CHS2:CHS0:A/D转换输入模拟信号通道选择
000=通道0,AN0
001=通道1,AN1
010=通道2,AN2
011=通道3,AN3
100=通道4,AN4
101=通道5,AN5
110=通道6,AN6
111=通道7,AN7
位2 GO/DONE:A/D转换启动控制位和转换状态标志位
这一位既是A/D转换控制位,通过软件将其置1后开始一个A/D转换过程;同
时又是一个标志位
1=A/D转换正在进行中
0=A/D转换过程结束
位1 未定义:程序中记得该位要始终保持为0
位0 ADON:A/D模块启动控制位
1=A/D转换模块开始工作
0=A/D转换模块被禁止,该部分电路没有任何耗电
ADCON1寄存器:(设置ADC模块端口和数据格式)
位7 ADFM:A / D转换结果格式选择位(AD Result Format Select Bit)0=结果左对齐,ADRESL 寄存器的低6位读作0
1=结果右对齐,ADRESH寄存器的高6位读作0
位6 ADCS2:A / D转换时钟频率选择位(ADCON1位在阴影区域,并以粗体字)
位5:4 未定义:读取这些位将得到0
位3:0 PCFG3:PCFG0:A / D模块引脚功能配置位
这4个位决定了功能复用的引脚哪些作为普通数字I/O,哪些作为A/D转换时的
电压信号输入。

如下表所示:。

相关文档
最新文档