本文主要是介绍Microchip PIC系列8位单片机入门教程(六)ADC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Microchip PIC系列8位单片机入门教程(六)ADC
第一节 知识点
-
ADC
(1)10 位模数转换器(A/D)模块:28 引脚器件的模数(Analog-to-Digital,A/D)转换器具有10 路输入,而40/44 引脚器件的模数转换器则具有13 路输入。A/D 模块能将一个模拟输入信号转换成相应的10 位数字信号。(2)此模块有五个寄存器:
• A/D 转换结果高位寄存器(ADRESH)
• A/D 转换结果低位寄存器(ADRESL)
• A/D 转换控制寄存器0 (ADCON0):A/D 模块的工作方式由ADCON0
寄存器控制。
• A/D 转换控制寄存器1 (ADCON1):端口引脚的功能由
ADCON1 寄存器配置。
• A/D 转换控制寄存器2 (ADCON2):由ADCON2 寄存器配置A/D 时钟源,编程采集时间和对齐方式。(3)执行A/D 转换时应该遵循以下步骤:
-
配置A/D 模块:
• 配置模拟引脚、参考电压和数字I/O (通过
ADCON1 寄存器)
• 选择A/D 输入通道(通过ADCON0 寄存器)
• 选择A/D 采集时间(通过ADCON2 寄存器)
• 选择A/D 转换时钟(通过ADCON2 寄存器)
• 使能A/D 模块(通过ADCON0 寄存器) -
需要时,配置A/D 中断:
• 清零ADIF 位
• 将ADIE 位置1
• 将GIE 位置1 -
如果需要,等待所需的采集时间。
-
启动转换:
• 将GO/DONE 位置1 (ADCON0 寄存器) -
等待A/D 转换完成,通过以下两种方法之一判断
转换是否完成:
• 查询GO/DONE 位是否被清零
或
• 等待A/D 中断 -
读取A/D 结果寄存器(ADRESH:ADRESL),需
要时将ADIF 位清零。 -
如需再次进行A/D 转换,返回步骤1 或步骤2。
将每位的A/D 转换时间定义为TAD,在下一次采
集开始前至少需要等待2 个TAD。(4)A/D 采集要求
为了使A/D 转换器达到规定精度,必须使充电保持电容(CHOLD)充满至输入通道的电平。图19-3 给出了模拟输入的电路模型。电源阻抗(RS)和内部采样开关阻抗(RSS)直接影响电容CHOLD 充电的时间。采样开关(RSS)阻抗值随器件电压(VDD)不同而改变。电源阻抗将影响模拟输入的偏移电压(由于引脚泄漏电流的原因)。模拟信号源的最大阻抗推荐值为2.5 kΩ。在选择(改变)了模拟输入通道之后,必须对通道进行采样才能启动转换,采样时间必须大于最小采集时间。(5) 采样时间计算:
- ADC的原理框图:
- 与ADC相关的寄存器:
我们设置VCFG1=0,采用BSS作为参考电压VREF-;
设置VCFG0=0,采用VDD作为VREF+的参考电压。
配置PCFG3:PCFG0 进行采集模拟量的端口配置。
配置ADFM,ADC转化结构的格式是左对齐还是右对齐,这是应为ADC转化结果是10位的需要两个8位寄存器存储。
ACQT2:ACQT0: A/D 采集时间选择位;
ADCS2:ADCS0: A/D 转换时钟选择位。
- 比如我们在实际中要采集电压,典型的电路图如下:
代码设计
我们新建两个文件:
(1) adc_sample.h
/* Microchip Technology Inc. and its subsidiaries. You may use this software * and any derivatives exclusively with Microchip products. * File: adc_sample.h* Author: Greg* Comments:* Revision history: 2018-06-21*/// This is a guard condition so that contents of this file are not included
// more than once.
#ifndef _ADC_SAMPLE_H_
#define _ADC_SAMPLE_H_#include <xc.h> // include processor files - each processor file is guarded. #define Channel_0_ON 0b0000
#define Channel_1_ON 0b0001
#define Channel_2_ON 0b0010
#define Channel_3_ON 0b0011
#define Channel_4_ON 0b0100
#define Channel_5_ON 0b0101
#define Channel_6_ON 0b0110
#define Channel_7_ON 0b0111
#define ADC_Channel_select ADCON0bits.CHS
#define ADC_ENABLE ADCON0bits.ADON=1
这篇关于Microchip PIC系列8位单片机入门教程(六)ADC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!