ATmega16开发板教程(8)——ADC

发布者:Tapir最新更新时间:2022-01-05 来源: eefocus关键字:ATmega16  开发板教程  ADC 手机看文章 扫描二维码
随时随地手机看文章

9、ADC

在将ADC之前,先聊聊其前因后果——由于计算机在自动控制、检测以及其他领域广泛应用数字电子技术,而大自然的信号全是模拟信号,如果通过计算机保存自然信号呢?那么就需要ADC(模数转换器Analog-Digital Converter)来讲模拟信号转换为数字信号,这样才能存储到计算机中。


那么ADC是如何转换的呢?


l首先对选定一个瞬间对模拟信号进行采样;


l然后将值转换为数字量;


l最后按照一定编码格式转换。

—>


一个模拟信号肯定是不能采样一个点的,而是许多点集合而成。当长方形又窄又长时几乎接近竖线时,就可以很好的还原之前的波形了。


用官方的话说:抽样定理——若原图的最大频率是fmax,那么采样频率要比原图的最大频率2倍还要大,这样才能准备无误的还原原来的波形。

如图,0-1V是连续的电压量,而0-0.125V被当做0△,那么就会存在最小误差△;接着通过一定的编码方式转换,如二进制、八进制、十六进制等。


至于ADC的转换过程如何,可以通过网上的介绍来深入了解。现在我们来看看AVR的ADC特点以及如何操作。


ATmega16单片机内部自带ADC,不需要外部ADC芯片来转换。其主要特点是:


l10位精度的逐次逼近型ADC,±2LSB的绝对精度


l65-260us的转换时间


l最高分辨率时采样率高达15kSPS


l8路复用的单端输入通道


l0-AVcc的ADC输入电压范围,包括内部2.56V参考电压


l支持连续转换或单词转换模式


l可触发ADC中断


再来看看ADC时序图——连续转换

可以发现前面13个时钟周期是没有采集的,主要是为了初始化模拟电路。ADC的转换结果为——ADC=Vin*1024/Vref,Vin是ADC通道的输入电压,Vref是参考电压。


下面开始介绍ADC的主要寄存器


ADMUX(多工选择寄存器):

6-7位:用来设置参考电压是内部、外部还是都要,具体如下图

第5位:ADC转换结果左对齐,主要影响ADC值在寄存器中存放形式;


0-4位:用来选择ADC通道

本案例使用的是外部AVcc参考电压,以及通道0,右对齐,所以ADMUX = 0x00。


ADCSRA(控制和状态寄存器):

7位:ADC使能位;


6位:ADC开始转换位;


5位:ADC自动触发使能,启动自动触发,触发信号的上升沿驱动转换;


4位:ADC中断标志,在ADC转换结束后,ADIF置位,需要软件清零;


0-2位:ADC预分频器选择。

最后还有一个老朋友——SFIOR寄存器(设置过IO是否上拉)

5-7位:这3位的设置是当ADCSRA中的ADATE位置1才有效,被选中的中断在上升沿时触发ADC转换(本案例例程不做该功能,了解一下)。

现开始代码讲解:

初始化ADC,选择通道,分频128,并使能即可。

采集ADC值,开启转换,等待转换完毕,清零标志位,得到ADC值。


最后将采集的值通过公式转换为电压即可。


仿真视频


/**

******************************************************************************

*   @file      main.c

*   @author    Alex——小白

*   @version   V1.0

*   @date      2021.1.20

*   @brief     头文件调用,类型重定义

*   @store     Proteus仿真店子——公众号

*   @Link      https://shop484534014.taobao.com/

*   @Email     844545015@qq.com

******************************************************************************

*   @attention  All Rights Reserved  

**/

#include

/*

Touch Pad的步进值为0.5V,即10档

这里将电压放大100倍,便于数据处理

*/

void main(void)

{  

    uint16_t adcValue = 0;

    uint16_t vol = 0;

    uint8_t cnt = 0;

    DDRB_DDB3 = 1;    

    AD.ADC_Init(0);                     //ADC通道0

    LCD.LCD1602_Init();    

    LCD.LCD1602_WriteStr(0,2,"ADC:");  

    LCD.LCD1602_WriteStr(1,2,"Vol:");

    Delay.Delay_ms(1000);

    while(1)

    { 

        adcValue = AD.ADC_GetValue();   //ADC数据采集

        vol = (uint16_t)(adcValue * 5.0 * 100 / 1024);  //放大100倍        

        LCD.LCD1602_WriteChar(0,8,adcValue/1000 + '0');

        LCD.LCD1602_WriteChar(0,9,adcValue%1000/100 + '0');

        LCD.LCD1602_WriteChar(0,10,adcValue%1000%100/10 + '0');

        LCD.LCD1602_WriteChar(0,11,adcValue%1000%100%10 + '0');

        LCD.LCD1602_WriteChar(1,8,vol/100 + '0');

        LCD.LCD1602_WriteChar(1,9,'.');

        LCD.LCD1602_WriteChar(1,10,vol%100/10 + '0');

        LCD.LCD1602_WriteChar(1,11,vol%100%10 + '0'); 

        

        if(vol > 250)        //实际电压值>2.5V时,蜂鸣器报警

        {

            for(cnt = 0;cnt < 80;cnt++)

            {

                PORTB_PORTB3 = 0;

                Delay.Delay_us(2);

                PORTB_PORTB3 = 1;

                Delay.Delay_us(2);

            }

        }

    }

}

/********************************************************

  End Of File

********************************************************/

关键字:ATmega16  开发板教程  ADC 引用地址:ATmega16开发板教程(8)——ADC

上一篇:ATmega16开发板教程(9)——KeyPad
下一篇:ATmega16开发板教程(7)——LCD1602

推荐阅读最新更新时间:2024-11-11 22:46

AVR ATmega16访问16 位寄存器
TCNT1、OCR1A/B与ICR1是AVR CPU 通过8位数据总线可以访问的16位寄存器。读写16位寄存器需要两次操作。 每个16位计时器都有一个8位临时寄存器用来存放其高8位数据。每个16 位定时器所属的16 位寄存器共用相同的临时寄存器。访问低字节会触发16位读或写操作。当CPU 写入数据到16 位寄存器的低字节时,写入的8 位数据与存放在临时寄存器中的高8 位数据组成一个16 位数据,同步写入到16 位寄存器中。当CPU 读取16 位寄存器的低字节时,高字节内容在读低字节操作的同时被放置于临时辅助寄存器中。 并非所有的16 位访问都涉及临时寄存器。 对OCR1A/B 寄存器的读操作就不涉及临时寄存器。 写16 位寄存
[单片机]
基于ADC车载检测电路设计
  该系统可放置在汽车仪表盘位置,当司机发动汽车时,探测控制仪启动,此时发动机处于被锁状态,汽车无法启动。酒精传感器加热后,探测控制仪对酒精传感器探测的气体信号进行检测。由于酒精含量与酒精传感器检测后产生的电压信号成特定的比例关系,因而可根据电压信号进行酒精含量的判断。    酒精检测电路设计   酒精检测电路由高精度酒精传感器、信号调理放大电路、滤波电路和单片机内置12位ADC等组成,如图所示。主要功能是检测酒精含量,判断其是否超标。      图2 系统主控电路示意图   酒精传感器采用旁热型半导体式酒精气敏元件MQ3,它对乙醇蒸汽具有很高的灵敏度和良好的选择性,快速的响应恢复,长期的寿命和可靠的稳定性,探测范围为10~10
[电源管理]
基于<font color='red'>ADC</font>车载检测电路设计
咱们的ADC0809电压表
第一次和同学合作的学校课题:ADC0809电压表,以实物失败,仿真成功告终。相信以后回头看,会发现许多地方非常的不专业,特发此博文,以后当笑话看。不过因为是第一次接触AD相关知识,也学到了挺多。 系统软件设计要求: (1) 键盘管理程序(包括键扫描、键处理程序)。 (2) LED动态显示程序,包括: (3) 各通道轮流显示,共显示2个通道,每通道显示1s; (4) 单通道显示,仅显示指定通道电压,并保持到其他功能键按下。 先上原理图: 原理图连线比较乱,主要是为了满足尽量少外围元件的要求,有一个明显奇怪的地方就是38译码器输出口没用完,但是单片机口接得满满的,因为当时想用38译码器的其中三个输出口来控制ADC080
[单片机]
STM8 模拟/数字转换器(ADC) 转换模式
STM8模拟/数字转换器(ADC)转换模式 ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式。 单次模式 在STM8的ADC单次转换模式中,ADC仅在由ADC_CSR寄存器的CH 选定的通道上完成一次转换。该模式是在当CONT位为0时通过置位ADC_CR1寄存器的ADON位来启动的。 一旦转换完成,转换后的数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置位,如果EOCIE被置位将产生一个中断。 连续和带缓存的连续模式 续转ADC在完成一次转换后就立刻开始下一次的转换。当CONT位被置位时即在连换模式中,将ADC设为连续模式,该模式是通过置位ADC_CR1寄存器的ADON
[单片机]
理解ADC误差对系统性能的影响(一)
摘要:许多工程师会在设计中遇到一些很微妙的问题:ADC的规格常常低于系统要求的指标。本文介绍了如何根据系统需求合理选择ADC,列举了ADC测量中可能遇到的各种误差源。 采用12位分辨率的模数转换器(ADC)未必意味着你的系统将具有12位的精度。很多时候,令工程师们吃惊和不解的是:数据采集系统所表现出的性能往往远低于期望值。如果这个问题直到样机运行时才被发现,只好慌慌张张地改用更高性能的ADC,大量的时间被花费在重新更改设计上,同时,试投产的日程在迅速临近。问题出在哪里? 最初的分析中有那些因素发生了改变? 对于ADC的性能指标有一个深入的了解,将有助于发现一些经常导致性能指标不尽人意的细节所在。对于ADC指标的理解还有助于为你的
[模拟电子]
理解<font color='red'>ADC</font>误差对系统性能的影响(一)
STM32F030 ADC1的DMA采样问题
搞了1天一直ADC没有出来,发现采处理的值一直是固定值.. 去21IC求助贴. STM32F030 ADC1采样问题请教 等了好久都没有人回复,但有人提醒我说需要等待DMA的数据完成. 后面对比了别人的代码, /* ADC DMA request in circular mode */ ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular); 别人有这句代码,于是我加上这个话,则能够正常采样到数据了, 所以,必须得添加,否则无法获取到采样值. 接着又发现DMA传输到指定的数组数据顺序错乱了..... 类似别人的求助贴: STM32F030 多通道ADC DMA读取问题
[单片机]
开关电源(DC/DC转换器)会降低ADC的性能吗
  工程师一般认为开关电源会降低ADC的性能,因此通常愿意选用低压差(LDO)线性稳压器,而不使用开关稳压器,但这种认识并非完全正确。LDO具有较低的纹波和噪声指标,但最近的研究表明,高效的开关稳压器也可用于一些转换器设计中,前提是设计师对电路拓扑有很好的理解,运用一些实用技巧,同时采取一些必要的防范措施。   首先是选择转换器,然后选择正确的开关稳压器,并不是任何开关稳压器都可以使用。从数据手册上查阅开关稳压器的噪声和纹波指标,以及开关频率。典型的开关稳压器在100kHz带宽范围内大概有10μVrms的噪声。假设它们都是白噪声,那么有关频带内的噪声密度相当于31.6nVrms/rt-Hz。   其次,要查阅转换器的电源抑制(PS
[电源管理]
ATmega16 上电复位
上电复位(POR) 脉冲由片内检测电路产生。检测电平请参见 Table 15。 无论何时VCC 低于检测电平POR 即发生。POR 电路可以用来触发启动复位,或者用来检测电源故障。 POR电路保证器件在上电时复位。VCC 达到上电门限电压后触发延迟计数器。在计数器溢出之前器件一直保持为复位状态。当VCC 下降时,只要低于检测门限,RESET 信号立即生效。
[单片机]
<font color='red'>ATmega16</font> 上电复位
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved