51单片机——ADC讲解(A/D转换、D/A转换)

51单片机必学系列

51单片机学习——中断系统

51单片机学习——存储器详解(程序存储器、片内RAM、拓展RAM、EEPROM)

51单片机学习——定时器/计数器

51单片机——A/D转换

更新ing


51的单片机——A/D转换

  • 51单片机必学系列
  • 前言
  • A/D转换模块的结构
  • A/D转换模块的分类
    • 逐次比较型转换器
    • A/D转换模块的参考电压源
  • A/D转换模块的控制
    • A/D转换模块转换结果选择


前言

A/D转换模块是单片机的高功能模块,用于对模拟信号进行数字转换,本文以STC8H8K64U单片机为例(原理与其他51单片机并无差别),该单片机A/D模块为16通道12位。本文主要摘录STC丁向荣《单片机微机原理与接口技术》。

A/D转换模块的结构

STC8H的这个单片机A/D转换模块输入通道有16个(通道越多,同时可以接收的模拟量就越多),分别为ADC0——ADC15,其中ADC15用于测试内部1.19V基准电压,工作时,各个输入通道都工作在高阻状态

关于位数:12位是用于精度,位数越多,精度越高,以5v电压为例,当一位时,只能分成两份,2.5v以上是1,2.5v以下为0,当两位时,可以分成4份,也就是1.25v,2.5v,3.75v,5v为分界,提高了精度,以此类推。

该单片机A/D转换模块由多路选择开关、比较器、逐次比较寄存器、12位数字模拟转换器(D/A转换模块)、A/D转换结果寄存器、A/D转换模块控制寄存器以及A/D转换模块配置寄存器构成。

A/D转换模块的分类

按转化原理分类:逐次逼近型、双积分型、并行/串行比较型、压频转换型等
按转化速度分类:超高速<=1ns、高速<=20us、中速<=1ms、低速<=1s。
按转化位数分类:8、12、14、16。

目前主要有逐次比较型转换器(最常用的)和双积分型转换器,故接下来主要讲解逐次比较型转换器。

逐次比较型转换器

逐次比较型模拟数字转换器根据逐次比较的逻辑,从最高位(MSB)开始,逐次对每一个输入的电压模拟量与内部D/A转换器输出进行比较,多次比较之后,使得转换得到的数字量逼近输入模拟量对应值,直到A/D转换结束。

下图为逐次比较型转换器原理图
51单片机——ADC讲解(A/D转换、D/A转换)_第1张图片

A/D转换模块的参考电压源

该A/D转换模块的电源与单片机电源是同一个,但A/D模块有独立的参考电压源输入端。
当测量精度要求不高时,可以直接使用单片机的工作电压,高精度时使用精准的参考电压。

A/D转换模块的控制

A/D转换模块主要由ADC_CONTR、ADCCFG、ADC_RES、ADC_RESL和A/D转换模块时序控制寄存器ADCTIM以及控制A/D转换的有关中断的控制寄存器进行控制和管理。

由于寄存器标志位等过多,此处仅列举较为重要的个别寄存器。

/****************测量AD值*************************/
uint	Get_ADC12bitResult(uchar channel)	//channel = 0~15
{
	ADC_RES = 0;	//将转换结果寄存器清0
	ADC_RESL = 0;

	ADC_CONTR = (ADC_CONTR & 0xe0) | 0x40 | channel; 	//启动ADC
	_nop_();  	_nop_(); 	_nop_();	_nop_();//第一次开始的时候需要等待电路稳定

	while((ADC_CONTR & 0x20) == 0)	;	//等待ADC完成
	ADC_CONTR &= ~0x20;		//清除ADC结束标志
	return	(((uint)ADC_RES << 8) | ADC_RESL );
}

此代码中出现的寄存器有ADC_CONTR,ADC_RES,ADC_RESL。
其中ADC_RES和ADC_RESL共同作为存储结果寄存器,RES是高8位,RESL是低8位。

ADC_CONTER各位如下图:
51单片机——ADC讲解(A/D转换、D/A转换)_第2张图片
B7是A/D模块的电源控制位,1打开,0关闭。
B6是A/D转换启动控制位,1时启动转换,转换完成后自动清0,为0时无影响(当A/D转换模块启动之后,即使写0也无法停止)
B5是完成标志位,完成转换后置1,需要手动清0。

主要:启动A/D转换前一定保证A/D转换模块电源已打开,A/D转换结束后关闭A/D转换模块电源可以降低能耗。初次打开时需要适当延时,等内部电路稳定后再启动A/D转换。

A/D转换模块转换结果选择

A/D转换模块转换结束后,结果保存到ADC_RES和ADC_RESL中(因为是12位,一个寄存器8位,所以需要两个寄存器拼起来存储结果),但是有两种存储格式,由ADCFG中的RESFMT控制。
RESFMT=0时,结果左对齐,右边空余位自动为0。
RESFMT=1时,结果右对齐,左边空余位自动为0。

你可能感兴趣的:(单片机学习,单片机,51单片机,嵌入式硬件)