Microchip PIC系列8位单片机入门教程(六)ADC

Microchip PIC系列8位单片机入门教程(六)ADC

第一节 知识点

  1. 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 转换时应该遵循以下步骤:

  1. 配置A/D 模块:
    • 配置模拟引脚、参考电压和数字I/O (通过
    ADCON1 寄存器)
    • 选择A/D 输入通道(通过ADCON0 寄存器)
    • 选择A/D 采集时间(通过ADCON2 寄存器)
    • 选择A/D 转换时钟(通过ADCON2 寄存器)
    • 使能A/D 模块(通过ADCON0 寄存器)

  2. 需要时,配置A/D 中断:
    • 清零ADIF 位
    • 将ADIE 位置1
    • 将GIE 位置1

  3. 如果需要,等待所需的采集时间。

  4. 启动转换:
    • 将GO/DONE 位置1 (ADCON0 寄存器)

  5. 等待A/D 转换完成,通过以下两种方法之一判断
    转换是否完成:
    • 查询GO/DONE 位是否被清零

    • 等待A/D 中断

  6. 读取A/D 结果寄存器(ADRESH:ADRESL),需
    要时将ADIF 位清零。

  7. 如需再次进行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) 采样时间计算:
    在这里插入图片描述
    在这里插入图片描述

  1. ADC的原理框图:
    在这里插入图片描述
  2. 与ADC相关的寄存器:
    在这里插入图片描述
    在这里插入图片描述
    我们设置VCFG1=0,采用BSS作为参考电压VREF-;
    设置VCFG0=0,采用VDD作为VREF+的参考电压。
    配置PCFG3:PCFG0 进行采集模拟量的端口配置。
    在这里插入图片描述
    配置ADFM,ADC转化结构的格式是左对齐还是右对齐,这是应为ADC转化结果是10位的需要两个8位寄存器存储。
    ACQT2:ACQT0: A/D 采集时间选择位;
    ADCS2:ADCS0: A/D 转换时钟选择位。
    在这里插入图片描述
  3. 比如我们在实际中要采集电压,典型的电路图如下:
    在这里插入图片描述

代码设计

我们新建两个文件:
(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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值