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

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

3天内不再提示

如何在设计中使用Arduino的模拟功能

电子设计 来源:郭婷 作者:电子设计 2019-03-08 08:47 次阅读

模拟而生

Arduino 秉承让数字技术轻松地运用到现实应用中这一理念,推出 Arduino 硬件平台,以实现将大多数模拟功能植入 Atmel 多功能 ATmega 8 位 MCU 系列。 在 Arduino 平台上使用的所有 ATmega 变体均有一个片载多通道模数转换器ADC)。 该 ADC 具有 10 位分辨率,能以 0 到 1023 的整数方式实现高达每秒 15,000 次的采样速率。 大多数 AVR MCU 支持 6 个模拟输入通道,而一些变体则可支持 8 和 16 个输入。 尽管模拟引脚的主要功能是读取模拟输入,但也可配置成数字式通用输入/输出 (GPIO) 引脚。 可根据需要为模拟引脚配备可选择上拉电阻器,且采用与 MCU 数字引脚相同的上拉配置方法。

虽然一些 AVR MCU 采用了数模转换器DAC),但在现有的这一代 Arduino 板上的 MCU 系列均能通过快速转换其数字 I/O 引脚来产生脉宽调制 (PWM) 信号,以提供模拟输出。 每个 PWM 输出的 490 Hz(大约)方波的占空比经过编程后,能提供一个大小为 0 至 5 V、周期为 256 毫秒、增量为 2 毫秒的等效 RMS 电压(图 1)。 Arduino 的输出功能尽管在某种程度上受到一定限制,但可执行如驱动 LED 或控制电机等许多任务。

如何在设计中使用Arduino的模拟功能

图 1:利用脉宽调制 (PWM) 技术, Arduino 的数字 GPIO 引脚可用作模拟输出(感谢 Arduino.cc 提供数据)。

通过板边缘的母头引脚连接器,大多数 Arduino 板能轻松连接 MCU 的模拟(和数字)I/O 信号。 模拟通道数及其物理引脚分配会随正在使用的特定 MCU 以及板的外形发生变化,但许多变体还是遵循常见的“官方”设计所采用的引脚布局惯例,如 Uno(图 2)、Mega 和 Nano。

图 2:Arduino Uno 板(第 3 版)的模拟输入 (A0-A5) 和模拟 PWM 输出(数字式:3、5、6、9、10 和 11)) 可通过板边缘的标准针座引脚进行物理连接(感谢 Arduino.cc 提供数据)。

因为 Arduino IDE 支持的编程语言中含有一组原生模拟 I/O 命令,因此采用模拟 I/O 功能开发代码也易于进行。 通过这些指令可读取模拟输入、生成模拟 (PWM) 输出以及配置 A/D 转换器的基准电压。

读取模拟输入

我们能轻而易举地将 Arduino 的模拟输入与实际应用连接,但需要为 AVR 的 A/D 转换器选择合适的基准电压源。 此时,可以用默认 (DEFAULT)、内部 (INTERNAL) 或者外部 (EXTERNAL) 基准电压来确定输入电压上限。 默认模式下,MCU 采用板载电源稳压器的输出作为基准电压。 根据所使用的特定 Arduino 板,基准电压可以是 5 V 或者 3.3 V。

在内部模式下,采用 AVR 的片载精密基准电压源。 器件不同,基准源电压也不同,但通常为 1.1 V(适用于 ATmega168 或 ATmega328)或者 2.56 V(在 ATmega8 和 Mega 系列中)。 在外部模式下,您可用一个 5K 电阻器将一个外部基准电压连接至 AREF 引脚。 AREF 引脚内置一个 32K 保护电阻器,与 5K 外部电阻器一起作为分压器。 所以,如果通过该外部电阻器施加 2.5 V 电压,就会在 AREF 引脚上产生一个约为 2.2 V 的电压,具体计算为 2.5 * 32 / (32 + 5) = 2.2 V。

利用 Aegunio 编程语言读取模拟电压时,需用 analogReference(type) 命令选择基准电压源,然后引用一个 analogRead(pin) 读数命令,其中,(pin) 表示您希望采样的针座引脚编号。 基准电压一旦选定,基准类型便不再改变,除非进行另外编程。 虽然 AVR MCU 能支持高达每秒 15k 次采样的转换率,但 Arduino 的软硬件环境通常将其限制在每秒 10k 次采样左右。

构建 PWM 模拟输出

在某一个 Arduino PWM 引脚上生成模拟电压的具体做法是,用 pinMode(pin, mode) 命令将该引脚配置成输出引脚,然后引用一个 analogWrite(pin, value) 命令,其中,(pin) 表示您希望用于输出的针座引脚,(value) 表示将要产生的基准电压的一部分(增量为 1/255)。 配置完成后,该引脚将连续产生一个具有规定占空比的 490 Hz 稳定方波,直至收到下一个 analogWrite() 请求(或者针对该引脚发出的一个 digitalRead() 或 digitalWrite() 请求)。

这些 I/O 引脚支持高达 40 mA 驱动电流,因此可直接驱动中型 LED 阵列。 对于功率较高的照明或者直流电机,模拟输出可用于驱动功率晶体管或桥式电路。 对于要求更苛刻的应用,这种输出可通过简单的 R/C 网络滤波,且可用作放大器或者电流源的控制电压。

更多的模拟技巧

一些 AVR MCU(包括 MEGA8 和 MEGA168)内置了比较器,能将一个输入电压与另一个外部输入进行比较,如与某个 PWM 输出产生的电压或者基准器件的内部基准电压比较。 比较器的电压可以被轮询或者用于触发一个中断。 尽管涉及了更多的软件, 但中断驱动式排列能让处理器直接检测欠压和过压条件,无需再对模拟通道进行重复采样。 对于从可调阈值的运动探测器、冲击传感器到生物医学监视的每一种应用,这都是一项非常方便的功能。

对于 MCU 无内置比较器的 Arduino 板,可相对容易地在一些 Arduino 板上的 “Kluge” 区域添加一个外部器件,如 LM741、LM339N 或 TLC3704。 如您的板子上没有用户电路安装空间,则可通过一块价格低廉的原型设计扩展卡添加用户电路(图 3)。

图 3:利用原型设计扩展卡,您能方便地将自己的模拟或者数字 I/O 添加到几乎任何一块标准的 Arduino 板上。

总结

Arduino 器件凭借自身的低成本、多功能优势,在商业硬件开发人员中培养了一批忠实拥趸。 Arduino 硬件平台旨在将大多数模拟能力植入 Atmel 的 ATmega 8 位 MCU 系列中。 这些 MCU 的所有变体均有一个片载多通道模数转换器 (ADC)。 本文旨在介绍 Arduino 模拟功能的基本软硬件资源组成,为能够用这些功能完成未来设计的工程师们提供一个新起点。 为此,我们讨论了如何读取模拟输入、构建 PWAM 模拟输出和添加外部模拟 I/O。

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

    关注

    96

    文章

    12629

    浏览量

    133121
  • adc
    adc
    +关注

    关注

    95

    文章

    5651

    浏览量

    539447
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184828
收藏 人收藏

    评论

    相关推荐

    何在Arduino中使用KY-037声音检测传感器

    这个项目将教你如何在 Arduino 中使用 KY-037 声音检测传感器,并且测量环境中声音强度的变化。
    发表于 08-02 15:41 3921次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>Arduino</b><b class='flag-5'>中使</b>用KY-037声音检测传感器

    何在Linux中使用htop命令

    本文介绍如何在 Linux 中使用 htop 命令。
    的头像 发表于 12-04 14:45 550次阅读
    如<b class='flag-5'>何在</b>Linux<b class='flag-5'>中使</b>用htop命令

    何在STVD ST-TOOLSET中使模拟

    何在STVD(ST-TOOLSET)中使模拟器以上来自于谷歌翻译以下为原文 How can I use the simulator within STVD(ST-TOOLSET)
    发表于 04-30 06:58

    何在Arduino IDE中使用ESP-100进行开发?

    上没有任何规范或驱动程序(请参阅 )。此外,搜索 ESP-100 并没有让我了解如何在 Arduino IDE 中使用这个东西进行开发的重要事实。 到目前为止,我已经使用 Arduino
    发表于 05-12 08:06

    Arduino模拟功能:如何在您的下一个设计中使用这些模拟功能

    在嵌入式设计方面无论您是专家还是新手,您都会充分体会到 Arduino 开放式硬件平台的模拟输入和输出通道是如何让您的项目与“现实世界”轻松相连的。
    发表于 07-12 14:56 4次下载
    <b class='flag-5'>Arduino</b> 的<b class='flag-5'>模拟</b><b class='flag-5'>功能</b>:如<b class='flag-5'>何在</b>您的下一个设计<b class='flag-5'>中使</b>用这些<b class='flag-5'>模拟</b><b class='flag-5'>功能</b>

    何在Arduino中使用流行的GT511C3指纹传感器

    在本教程中,我们将学习如何在Arduino 中使用流行的 GT511C3 指纹传感器 (FPS)。有许多可用的 FPS,我们已经学会了如何使用它们来构建考勤系统、投票机、安全
    发表于 09-05 15:48 1027次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>Arduino</b><b class='flag-5'>中使</b>用流行的GT511C3指纹传感器

    何在Arduino中使用NRF24L01模块

    电子发烧友网站提供《如何在Arduino中使用NRF24L01模块.zip》资料免费下载
    发表于 10-19 09:16 13次下载
    如<b class='flag-5'>何在</b><b class='flag-5'>Arduino</b><b class='flag-5'>中使</b>用NRF24L01模块

    何在Arduino中使用伺服电机

    电子发烧友网站提供《如何在Arduino中使用伺服电机.zip》资料免费下载
    发表于 10-24 09:46 3次下载
    如<b class='flag-5'>何在</b><b class='flag-5'>Arduino</b><b class='flag-5'>中使</b>用伺服电机

    何在arduino中使用I2c LCD模块

    电子发烧友网站提供《如何在arduino中使用I2c LCD模块.zip》资料免费下载
    发表于 10-26 14:29 1次下载
    如<b class='flag-5'>何在</b><b class='flag-5'>arduino</b><b class='flag-5'>中使</b>用I2c LCD模块

    何在Arduino中使用LDR

    电子发烧友网站提供《如何在Arduino中使用LDR.zip》资料免费下载
    发表于 10-31 09:50 0次下载
    如<b class='flag-5'>何在</b><b class='flag-5'>Arduino</b><b class='flag-5'>中使</b>用LDR

    何在Arduino中使用Modbus

    电子发烧友网站提供《如何在Arduino中使用Modbus.zip》资料免费下载
    发表于 11-22 11:21 11次下载
    如<b class='flag-5'>何在</b><b class='flag-5'>Arduino</b><b class='flag-5'>中使</b>用Modbus

    何在Arduino中使用微型伺服

    电子发烧友网站提供《如何在Arduino中使用微型伺服.zip》资料免费下载
    发表于 11-28 09:50 0次下载
    如<b class='flag-5'>何在</b><b class='flag-5'>Arduino</b><b class='flag-5'>中使</b>用微型伺服

    何在Python中使用MQTT

    本文主要介绍如何在 Python 项目中使用 paho-mqtt 客户端库 ,实现客户端与 MQTT 服务器的连接、订阅、取消订阅、收发消息等功能
    的头像 发表于 12-22 10:41 6398次阅读
    如<b class='flag-5'>何在</b>Python<b class='flag-5'>中使</b>用MQTT

    何在Arduino中使用20x4 I2C字符LCD显示器

    电子发烧友网站提供《如何在Arduino中使用20x4 I2C字符LCD显示器.zip》资料免费下载
    发表于 06-28 15:57 0次下载
    如<b class='flag-5'>何在</b><b class='flag-5'>Arduino</b><b class='flag-5'>中使</b>用20x4 I2C字符LCD显示器

    何在Arduino中使用APDS9960手势传感器

    电子发烧友网站提供《如何在Arduino中使用APDS9960手势传感器.zip》资料免费下载
    发表于 06-28 16:01 0次下载
    如<b class='flag-5'>何在</b><b class='flag-5'>Arduino</b><b class='flag-5'>中使</b>用APDS9960手势传感器