风筝
发表于: 2018-4-16 11:12:10 | 显示全部楼层

本篇文章主要从硬件角度介绍Arduino开发板是如何工作的。


大多数文章都介绍的是Arduino的软件。但是,深入了解其硬件设计有助于您在Arduino旅程中迈出坚实的一步。掌握Arduino硬件的电子设计将帮助您学习如何将Arduino嵌入到最终产品的设计中,包括应该从原始设计中保留以及省略哪些部分。


组件概述

Arduino UNO开发板的PCB设计全部采用使用SMD(表面贴装器件)组件。几年前,当我学习Arduino PCB设计时,我开始了解SMD组件,而我当时正在重新DIY设计一款Arduino UNO的克隆版


集成电路使用标准化的封装,并且采用了各种封装形式。

许多SMD电阻、电容和LED的尺寸是通过以下的封装代码表示:

Yahya_1.jpg

电阻、电容和电感等分立元件的SMD封装代码。


大多数的封装是通用的,可用于具有不同功能的不同部分。例如,SOT-223封装可以是一个晶体管或一个稳压器。

Arduino_Parts_diag.jpg


下表列出了Arduino UNO采用的部分元件以及各自对应的封装:

元件
封装
NCP1117ST50T3G 5V稳压器SOT223
LP2985-33DBVR 3.3V稳压器 SOT753 / SOT23-5
M7二极管 SMB
LMV358IDGKR双通道放大器 MSOP08
FDN340P P沟道MOSFET晶体管 SOT23
ATmega16U2-MU MLF32

Arduino UNO系统概述

在我们了解UNO的硬件之前,我们必须首先对系统进行总体概述。


使用Arduino IDE编译代码后,应通过USB连接将其上传到Arduino UNO的主微控制器。由于主微控制器没有USB收发器,因此需要一个桥接器来转换微控制器的串行接口(UART)与主机USB信号之间的信号。

最新版本中的桥接器是ATmega16U2,它有一个USB收发器和一个串行接口(UART)。


为了给你的Arduino开发板供电,你可以使用USB供电。另一种方式是使用DC插孔。您可能会问,“如果我同时连接了直流适配器和USB,哪个会是电源?”答案将在本文的“电源部分”一节中讨论。


要复位您的开发板,您应该使用开发板上的按钮。每次从Arduino IDE打开串行监视器时,都应该产生另一个复位源。


我将原始的Arduino UNO原理图重新进行分配,使其更加易读,如下所示。

Arduino_schematic.png

原始Arduino原理图的重新分配版本


微控制器

需要重视的一点是Arduino开发板包含一个微控制器,并且该微控制器是执行程序中的指令的。如果你知道这一点,你将不会再说类似“Arduino是一个微控制器”的话了。


Arduino UNO R3中使用ATmega328微控制器作为主控制器。 ATmega328是AVR系列的一个MCU;它是一个8位器件,这意味着其数据总线架构和内部寄存器被设计为处理8个并行数据信号。


ATmega328有三种类型的内存:

●    Flash闪存:32KB非易失性存储器。这用于存储应用程序,这就解释了为什么每次从电源拔下arduino时都不需要上传应用程序。

●    SRAM存储器:2KB易失存储器。这用于存储应用程序在运行时使用的变量。

●    EEPROM存储器:1KB非易失性存储器。这可用于存储即使在电路板断电然后再次通电后也必须可用的数据。


让我们简单回顾一下这个MCU的规格:


封装

该MCU采用的是DIP-28封装,这意味着它具有双列直插式封装中的28个引脚。这些引脚包括电源和I / O引脚。大多数引脚是多功能的,这意味着可以根据您在软件中配置的方式,使用相同引脚的不同模式。这减少了必要的引脚数,因为微控制器不需要为每个功能单独设置引脚。它还可以使您的设计更加灵活,因为一个I / O连接可以提供多种类型的功能。

ATmega328也有其他封装,如TQFP-32 SMD封装(表面贴装器件)。

DIP28_QFP.jpg

Atmega328两个不同的封装


电源

MCU支持1.8至5.5 V的电源电压。但是,对工作频率有限制;例如,如果要使用最大时钟频率(20 MHz),则需要至少4.5 V的电源电压。


数字I / O

该MCU有三个端口:PORTB、PORTC和PORTD。这些端口的所有引脚都可用于通用数字I / O或用于下面引脚分配中指示的复用功能。例如,PORTC引脚0到引脚5可以是ADC输入,而不是数字I / O。

还有一些引脚可以配置为PWM输出。这些引脚在Arduino板上标有“〜”。


注意:ATmega168与ATmega328几乎相同,并且它们是引脚兼容的。不同之处在于,与ATmega168的16KB闪存,512字节EEPROM和1KB RAM相比,ATmega328具有更多内存(32KB闪存,1KB EEPROM和2KB RAM)。

Atmega328_Arduino_Pinout.png

采用Arduino标签的ATmega168引脚排列;ATmega168和ATmega328引脚兼容。

Arduino_UNO_R3_Pinout.jpg

Arduino UNO R3引脚排列。


ADC输入

该MCU具有6个通道 - PORTC0至PORTC5 - 具有10位分辨率的A / D转换器。这些引脚连接到Arduino板上的模拟插头。

一个常见的错误是将模拟输入视为专用于A / D功能的输入,因为电路板中的插头显示为“模拟”。事实是,您可以将它们用作数字I / O或A / D。

Atmega328_ADC.jpg

ATmega328框图。

如上图所示(通过红色迹线),与A / D单元相关的引脚为:

AVCC:A / D单元的电源引脚。

AREF:如果您想为ADC使用外部参考电压而不是内部Vref,则可选择使用输入引脚。您可以使用内部寄存器进行配置。

Atmega328_Vref.jpg

用于选择Vref源的内部寄存器设置。


UART外设

UART(通用异步接收器/发送器)是一个串行接口。 ATmega328只有一个UART模块。

UART的引脚(RX、TX)连接至USB至UART转换器电路,并连接至数字插头中的引脚0和引脚1。如果您已经使用UART通过USB发送/接收数据,则必须避免使用UART。


SPI外设

SPI(串行外设接口)是另一种串行接口。 ATmega328只有一个SPI模块。

除了将其用作串行接口外,还可以使用独立编程器对MCU进行编程。您可以从Arduino UNO开发板中的MCU旁边的插头或数字插头访问SPI的引脚,如下所示:

11 < - > MOSI

12 < - > MISO

13 < - > SCK


TWI

I2C或TWI接口包含两条线,串行数据SDA和串行时钟SCL。

您可以通过数字插头的最后两个引脚或者模拟插头的引脚4和引脚5来访问这些引脚。


其他功能

MCU中包含其他功能,例如定时器/计数器模块提供的功能。您可能不知道您在代码中未使用的功能。您可以参考数据表以获取更多信息。

Arduino_MCU_Part.jpg

Arduino UNO R3 MCU部分。


回到电子设计,微控制器部分具有以下内容:

●    ATmega328-PU:我们刚才谈到的MCU。

●    IOL和IOH(数字)插头:除GND、AREF、SDA和SCL外,这些插头还是针脚0至13的数字插头。请注意,来自USB桥的RX和TX连接到引脚0和引脚1。

●    AD插头:模拟引脚的插头。

●    16 MHz陶瓷谐振器(CSTCE16M0V53-R0):与MCU的XTAL2和XTAL1连接。

●    复位引脚:通过一个10K电阻上拉,有助于防止在嘈杂的环境中发生虚假复位;该引脚具有一个内部上拉电阻,但根据AVR硬件设计考虑事项应用指南(AVR042),“如果环境噪声太大,可能会导致不必要的复位,并且偶尔会发生复位。”如果用户按下复位按钮或者USB桥发出一个复位信号,就会产生复位。你也可以看到一个D2二极管。这个二极管的作用在同一应用笔记中有描述:“如果不使用高电压编程,建议从RESET到Vcc增加一个ESD保护二极管,因为由于高电压编程而内部未提供该二极管。”

●    C4和C6电容(100nF):添加这些器件用于滤除电源噪声。电容的阻抗随频率下降:

XC=12πfC

电容给高频噪声信号提供了一条低阻抗接地路径。 100nF是最常见的值。

●    PIN13:连接到MCU的SCK引脚,也连接到LED。 Arduino开发板使用一个缓冲器(LMV358)驱动LED。

●    ICSP插头(在线串行编程):用于使用外部编程器编程ATmega328。它连接到在系统编程(ISP)接口(使用SPI引脚)。通常情况下,您不需要使用这种编程方式,因为引导加载程序通过使用桥接器连接到USB的UART接口来处理MCU的编程。只有在生产中第一次向MCU编程一个引导加载程序时才会使用此头文件。

跳转到指定楼层
风筝
发表于: 2018-4-17 08:44:23 | 显示全部楼层

USB转UART桥接器

Arduino_USBBridge_Part.png

Arduino USB桥接器部分。


正如我们在“Arduino UNO系统概述”一节中讨论的那样,USB转UART桥接器部分的作用是使用带内部USB收发器的ATmega16U2 ,将USB接口的信号转换为ATmega328可以识别的UART接口。这是通过使用上传到ATmega16U2的特殊固件完成的。


从电子设计角度来看,本节与微控制器部分相似。该MCU带有ICSP插头、带有负载电容(CL)的外部晶振和Vcc滤波电容。


请注意,D +和D- USB线中有串联电阻。这些为USB信号提供正确的终端阻抗。这里是关于这些电阻,请进一步阅读:

1.    为什么USB数据需要串联电阻?

2.    USB开发人员常见问题


Z1和Z2是压敏电阻(VDR)。它们用于保护USB线免受ESD瞬态脉冲影响。


与复位线串联的100nF电容允许Atmega16U2向Atmega328发送复位脉冲。你可以查看这个链接阅读更多关于这个电容。


电源

对于电源,您可以选择使用USB或DC插孔。现在是时候回答以下问题:“如果我同时连接DC适配器和USB,哪个将成为电源?”


5V稳压器采用的是NCP1117ST50T3G,该稳压器的Vin通过一个M7二极管(IN4007二极管的SMD版本)连接到DC插座输入端。该二极管提供反向保护。

5V稳压器的输出连接到电路中5V网络的其余部分,也连接到3.3V稳压器LP2985-33DBVR的输入。您可以直接从电源插座5V引脚连接5V。


5V的另一个来源是USBVCC,它连接到FDN340P的漏极,一个P沟道MOSFET,源极连接到5V网络。晶体管的栅极连接到用作比较器的LMV358运算放大器的输出端。比较介于3V3和Vin / 2之间。当Vin / 2较大时,这将产生比较器的高输出,并且P沟道MOSFET关闭。如果没有施加Vin,则比较器的V +被拉低至GND并且Vout为低,使得晶体管导通并且USBVCC连接至5V。

Arduino_Power_Switch.jpg

电源切换机制。


LP2985-33DBVR是一个3V3稳压器。 3V3和5V稳压器都是LDO(低压差),这意味着即使输入电压接近输出电压,它们也可以调节电压。这是对老式线性稳压器的改进,如7805。


最后,我将谈论的是在Arduino UNO中提供的电源保护。

如上所述,通过在输入端使用串联的M7二极管,可防止来自DC插孔的VIN受到反向保护。请注意,电源插头中的VIN引脚未受到保护。这是因为它连接在M7二极管之后。就个人而言,我不知道他们为什么决定在二极管之前连接它以提供相同的保护。

Arduino_VIN.jpg

电源插头的VIN引脚。


当您使用USB作为电源并为您的USB端口提供保护时,有一个与USBVCC串联的PTC(正温度系数)保险丝(MF-MSMF050-2)。这提供了过电流保护,500mA。当达到过电流极限时,PTC电阻增大。过电流消除后电阻下降。

阅读Rugged Circuits发布关于Arduino保护的内容非常有用。


您现在应该更熟悉Arduino UNO的电子设计,并更好地了解其硬件。我希望这可以帮助您在未来的设计项目!


本文翻译自Understanding Arduino UNO Hardware Design,感谢 Yahya Tawil 做出的贡献。如有错漏,敬请指正。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 09:53 , Processed in 0.070371 second(s), 11 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表