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

本文深入探讨了51单片机中的A/D转换,包括其结构、逐次比较型转换器的工作原理、参考电压源的选择以及转换控制。通过实例代码展示了如何使用STC8H8K64U单片机的A/D转换模块,并强调了转换精度和电源管理的重要性。
摘要由CSDN通过智能技术生成

单片机必学系列

单片机学习——中断系统

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

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

单片机学习——A/D转换

更新ing


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

  • 单片机必学系列
  • 前言
  • 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转换结束。

下图为逐次比较型转换器原理图
请添加图片描述

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各位如下图:
请添加图片描述
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。

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知何人

万分感谢诸位观看

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值