PIC 笔记之模数转换 ADC


模数转换(ADC)是将模拟信号转换为二进制数字的表现形式,档位开关应该是比较常见的模数转换应用,通过改变电阻的大小来改变模拟引脚的电压,A/D 通过逐次逼近法产生电压的模拟量存储在 (ADRESH:ADRESL)寄存器中,通过判断模拟量值就能知道哪个档位被选择。

计算模拟电压值

PIC 是如何计算模拟引脚电压值的呢,比如,具有 10 位分辨率的 A/D ,它的取值范围为 1—2¹º(0 — 1023),设置 A/D 的参考电压为电源电压 sv,那么它就会将电源电压 sv 分成 1024 份,每份 sv/1024,而 ADRESH:ADRESL 的中的值(假如为500)即为模拟引脚电压所占的比例,(sv/1024)*500 进行相乘,便得到了模拟引脚的电压值。

计算电源电压值

通过电源电压可以得到模拟引脚电压值,反过来,如果给予模拟引脚固定电压值,就可以获取电源电压值,应用于电压不足提醒的场合。首先,要配置固定参考电压 FVR 模块并启动,设置 A/D 端口配置通道选择为 FVR 缓冲区输出,即相当于给了模拟引脚一个固定电压值 nv(可设置为 1.024v、2.048v、4.096v,但不可超过电源电压),根据上面 ADRESH:ADRESL 的值假如为500,即可计算电源电压值 sv = (nv/500)*1024。

档位开关原理

当改变开关档位时,模拟引脚的电压值会改变,寄存器 ADRESH:ADRESL 的值也就不一样,即使电源电压有所变化,模拟引脚电压也会变化,但是,模拟引脚电压所占电源电压的比例不会改变,即 ADRESH:ADRESL 基本保持一致,所以,通过判断 ADRESH:ADRESL 的值可以确定哪个档位被选中。

A/D 配置

1、端口配置

  • 禁止引脚输出驱动器(TRISx = 1)
  • 将引脚配置为输入模拟功能(ANSx = 1)
  • 配置 ADCON0 的 CHS<4:0> 通道选择位
  • 选择引脚以外的通道则不需要设置引脚为模拟功能

2、配置参考电压

  • ADCON1 的 ADPREF<1:0> 为正参考电压配置位

3、A/D 转换时钟选择位

  • ADCON1 的 ADCS<2:0>,根据所设频率选择

4、A/D 结果格式选择位 ADFM

  • ADFM = 1 时,可直接取值 value = ADRES(两个字节)
  • ADFM = 0 时,value = ADRESH;  value = (value<<8) | ADRESL;  value = value>>6;

5、使能 ADC ,ADON = 1;

6、启动模数转换,GO 或 GO_nDONE  = 1;

7、转换完成后

  • 自动清零 GO/DONE 位
  • 将中断标志位 ADIF 置 1
  • 如果设置了中断允许(ADIE = 1),需清零中断标志位