AD模数转换_PIC16F877A
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。
如图: