0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样用AVR微控制器集成的ADC从周围环境中获取模拟读数

454398 来源:工程师吴畏 2019-07-31 16:55 次阅读

原理图

怎样用AVR微控制器集成的ADC从周围环境中获取模拟读数

ADC的快速回顾

大多数人认为模拟领域已经落后于他们,但事实是模拟领域从未如此强大!随着物联网的兴起和传感器的生产,全球每秒都在进行数十亿的模拟读数。这只是微控制器生产商将ADC外设直接集成到其器件中的众多原因之一。

ADC将模拟信号转换为数字信号

通常测量ADC

由于ADC是数字的,模拟信号被量化为离散的步骤

这意味着ADC只能准确无误地实现它们的位宽(即10位ADC)测量特定电压电平

最大数字值等于ADC 正参考电压(通常为VCC)

最小数字值等于ADC 负参考(通常为GND)

ADC需要时间来转换信号

在ATmega168中,ADC具有以下特性:

10位分辨率(+ Vref和-Vref之间的1024个离散电压电平)

精度为2LSB(高8位精度保证)

高达15,000个样本/秒

6个多路复用输入源

1.1V 带隙参考

配置ADC

我们可以使用之前ADC,需要配置用于ADC测量的外设和I/O引脚。

左对齐还是右对齐?

当ADC完成转换操作后,结果存储在一对中8位寄存器(10位结果不适合单个8位寄存器)。由于ATmega是原生的8位器件,因此使用8位ADC不如10位结果更有意义,但这会降低结果的分辨率。但是,必须正确读取10位数的8位结果,否则结果将不正确。为此,我们需要读取前8位(位9-2),而不是后8位。使用ADLAR位很容易实现,当设置为1时,将使ADC结果保持正确。这意味着我们不需要读取结果寄存器(ADCH和ADCL)并进行一些操作,而是直接读取ADCH并忘记ADCL。

配置I/O端口

现在我们可以直接读取ADCH以获得8位结果,而不必担心位操作(在分辨率的成本),我们现在需要配置我们的模拟引脚。默认情况下,ATmega168上的I/O引脚配置为数字引脚,这意味着它们只能处理1和0。因此,要将输入配置为模拟引脚,我们使用DIDR0寄存器,它代表数字输入禁用寄存器。不幸的是,并非每个引脚都具有模拟输入的能力,因此请务必注意带有标签ADCx的引脚。例如,引脚23至28是ATmega168上的模拟输入引脚。

配置ADC模块

配置ADC的最后阶段包括打开ADC,设置预缩放器时间以及确定ADC的参考值。

通过将ADCSRA寄存器中的ADEN位置1来打开ADC模块。

在大多数情况下,预缩放器不是太重要了,为了简单起见,我们将预缩放器设置为其最大值(设置ADCSRA寄存器中的所有ADPSx位)。

ATmega168上的ADC可以介于0V和某个参考电压之间,通常设置为VCC。由于大多数电路都是这种情况,我们需要将Aref引脚连接到也接地的电容,我们还需要将REFSx位设置为使用AVCC作为参考。

使用ADC

使用ADC非常简单。选择将从中取出模拟读数的通道,然后,为了开始转换,ADSC位(在ADCSRA中找到)将打开。转换完成后,ADC硬件会自动清零ADSC位。

通过设置ADMUX寄存器中的相应多路复用器位MUX3-MUX0来选择要读取的模拟引脚。

软件示例

此示例从ADC0(PC0,引脚23)读取模拟值并进行比较他们到一个特定的价值。如果模拟读数超出指定值(定义为TRIGPOINT),LED(连接到PD0,引脚2)将打开。一旦ADC读数低于指定值,LED就会关闭!

/*

* AVR IO.c

*

* Created: 03/01/2018 11:25:21

* Author : RobinLaptop

*/

#define F_CPU 1000000UL

#define TRIGPOINT 128

#include

#include

int main(void)

{

// Configure PORT D bit 0 to an output

DDRD = 0b00000001;

// Configure PORT C bit 0 to an input

DDRC = 0b00000000;

// Configure ADC to be left justified, use AVCC as reference, and select ADC0 as ADC input

ADMUX = 0b01100000;

// Enable the ADC and set the prescaler to max value (128)

ADCSRA = 0b10000111;

// Main program loop

while (1)

{

// Start an ADC conversion by setting ADSC bit (bit 6)

ADCSRA = ADCSRA | (1 《《 ADSC);

// Wait until the ADSC bit has been cleared

while(ADCSRA & (1 《《 ADSC));

if(ADCH 》 TRIGPOINT)

{

// Turn LED on

PORTD = PORTD | (1 《《 PD0);

}

else

{

// Turn LED off

PORTD = PORTD & ~(1 《《 PD0);

}

}

}

结论

本文仅介绍ADC背后的基础知识,但我们已经开始从现实世界中进行模拟测量。当然,您可以阅读数据表并了解其他更高级的功能,包括触发和其他电压参考。但就目前而言,这应该为您提供足够的知识,开始制作需要读取模拟值的AVR项目!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AVR
    AVR
    +关注

    关注

    11

    文章

    1122

    浏览量

    78566
  • adc
    adc
    +关注

    关注

    98

    文章

    6419

    浏览量

    543940
收藏 人收藏

    评论

    相关推荐

    嵌入式系统微控制器与微处理的区别

    它们在现代电子设备的核心作用,并探讨它们如何持续推动技术创新的未来。什么是嵌入式微控制器?嵌入式微控制器是设计用于在电子系统执行特定任务的紧凑型
    的头像 发表于 10-14 11:02 291次阅读
    嵌入式系统<b class='flag-5'>中</b><b class='flag-5'>微控制器</b>与微处理<b class='flag-5'>器</b>的区别

    什么是微控制器/它的关键组成部分有哪些?

    微控制器
    芯广场
    发布于 :2024年09月18日 15:02:33

    针对Stellaris®系列微控制器ADC过采样技术

    电子发烧友网站提供《针对Stellaris®系列微控制器ADC过采样技术.pdf》资料免费下载
    发表于 08-29 14:46 0次下载
    针对Stellaris®系列<b class='flag-5'>微控制器</b>的<b class='flag-5'>ADC</b>过采样技术

    微控制器的结构和应用

    微控制器(Microcontroller Unit,简称MCU)作为嵌入式系统的核心部件,其原理和应用在现代科技发展占据了举足轻重的地位。本文将从微控制器的原理、基本结构、工作原理、性能特点以及广泛的应用领域等方面进行详细阐述
    的头像 发表于 08-22 10:40 798次阅读

    可以为XMC 1400系列微控制器使用哪种集成开发环境

    我们可以为 XMC 1400 系列微控制器使用哪种集成开发环境
    发表于 07-22 07:41

    微控制器的定义和工作原理

    微控制器,作为现代电子技术的核心部件,其发展历程与电子技术的进步息息相关。自20世纪70年代中期诞生以来,微控制器凭借其高度集成化、低成本、高性能等优势,已广泛应用于电机
    的头像 发表于 05-24 17:17 1472次阅读

    嵌入式微控制器的自动代码生成

    然而,在工作,电气工程师经常被分配对嵌入式微控制器进行编程的任务,这是有充分理由的:他们在如何控制电力电子电路方面拥有经验,并且了解整个系统的要求。此外,他们对微控制器的片上外设(例
    发表于 05-03 17:33 403次阅读
    嵌入式<b class='flag-5'>微控制器</b>的自动代码生成

    电力电容器的使用对周围环境有哪些要求

    电力电容器,在电力系统扮演着重要的角色。它不仅能够提高电力质量,还能提高电力传输的效率。然而,在使用电力电容器的过程,我们需要注意一些环境要求,以确保其正常运行,同时减少对周围环境
    的头像 发表于 03-15 14:35 763次阅读

    针对 C2000™ 微控制器集成微控制器 (MCU) 电源解决方案数据表

    电子发烧友网站提供《针对 C2000™ 微控制器集成微控制器 (MCU) 电源解决方案数据表.pdf》资料免费下载
    发表于 03-04 14:12 0次下载
    针对 C2000™ <b class='flag-5'>微控制器</b>的<b class='flag-5'>集成</b><b class='flag-5'>微控制器</b> (MCU) 电源解决方案数据表

    CW32L083系列微控制器ADC和DAC模块要如何使用?怎么配置?

    如何配置和使用CW32L083系列微控制器ADC和DAC模块?
    发表于 01-17 06:08

    智能集成:整合模拟元件和ARM微控制器内核,解决棘手嵌入式系统问题

    智能集成:整合模拟元件和ARM微控制器内核,解决棘手嵌入式系统问题
    的头像 发表于 01-05 18:18 659次阅读
    智能<b class='flag-5'>集成</b>:整合<b class='flag-5'>模拟</b>元件和ARM<b class='flag-5'>微控制器</b>内核,解决棘手嵌入式系统问题

    继电器光耦在微控制器的应用

    继电器是电子系统的重要组件,用作使用低功率信号控制高功率电路的开关。继电器与微控制器集成在各种应用变得越来越普遍。该领域的一个重大进步
    的头像 发表于 01-05 16:09 408次阅读
    继电器光耦在<b class='flag-5'>微控制器</b><b class='flag-5'>中</b>的应用

    Microchip AVR DD系列微控制器产品特性

    的功能集,包括多电压输入/输出(MVIO),非常·适合复杂应用,或在具有多个功率域的复杂设计作为配套微控制器(MCU)使用。
    的头像 发表于 12-28 09:38 647次阅读

    微控制器基础】——历史切入,了解微控制器的五个要素(上)

    微控制器基础】——历史切入,了解微控制器的五个要素(上)
    的头像 发表于 12-07 10:55 534次阅读
    【<b class='flag-5'>微控制器</b>基础】——<b class='flag-5'>从</b>历史切入,了解<b class='flag-5'>微控制器</b>的五个要素(上)

    微控制器基础】—— 历史切入,了解微控制器的五个要素(下)

    微控制器基础】—— 历史切入,了解微控制器的五个要素(下)
    的头像 发表于 12-06 17:23 525次阅读
    【<b class='flag-5'>微控制器</b>基础】—— <b class='flag-5'>从</b>历史切入,了解<b class='flag-5'>微控制器</b>的五个要素(下)