【技术专辑】了解Arduino UNO硬件设计

本文从电子设计的角度解释了Arduino的工作原理。

 

大多数文章都解释了Arduinos的软件。但是,了解硬件设计有助于您在Arduino之旅中迈出下一步。掌握Arduino硬件的电子设计将有助于您了解如何在最终产品的设计中嵌入Arduino,包括保留什么以及从原始设计中省略什么。

 

组件概述

 

Arduino UNO的PCB设计使用SMD(表面贴装器件)元件。几年前,当我挖掘Arduino PCB设计时,我进入了SMD世界,而我是一个为Arduino UNO 重新设计DIY克隆的团队的一员。

 

集成电路使用标准化封装,并且有封装系列。

 

许多SMD电阻,电容和LED的尺寸由封装代码表示,如下所示:

 

【技术专辑】了解Arduino UNO硬件设计

 

用于分立元件的SMD封装代码,如电阻,电容和电感。图片由维基媒体提供。

 

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

 

【技术专辑】了解Arduino UNO硬件设计

 

在下表中,您可以看到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原理图,以便在下面更具可读性。我建议您在阅读本文时下载并使用Eagle CAD打开PCB和原理图。

 

【技术专辑】了解Arduino UNO硬件设计

原始Arduino原理图的重新分发版本。点击放大。

 

微控制器

 

重要的是要了解Arduino板包含一个微控制器,这个微控制器执行程序中的指令。如果你知道这一点,你将不再使用常见的废话短语“Arduino是一个微控制器”。

 

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

 

ATmega328有三种类型的内存:

 

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

 

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

 

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

 

让我们简要介绍一下这个MCU的规格:

 

包:

 

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

 

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

 

【技术专辑】了解Arduino UNO硬件设计

ATmega328的两个不同包。图片由Sparkfun和维基媒体提供。

 

功率:

 

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

 

数字I / O:

 

该MCU有三个端口:PORTC,PORTB和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。

 

【技术专辑】了解Arduino UNO硬件设计

采用Arduino标签的ATmega168引出线; ATmega168和ATmega328引脚兼容。图片由Arduino提供。

 

【技术专辑】了解Arduino UNO硬件设计

Arduino UNO R3引脚排列。图片由GitHub提供。

 

ADC输入:

 

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

 

一个常见的错误是将模拟输入视为仅用于A / D功能的专用输入,因为电路板中的标题表示“模拟”。实际情况是,您可以将它们用作数字I / O或A / D.

 

【技术专辑】了解Arduino UNO硬件设计

ATmega328框图。

 

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

 

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

 

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

 

【技术专辑】了解Arduino UNO硬件设计

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

 

UART外设:

 

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

 

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

 

SPI外设:

 

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

 

除了将其用作串行接口之外,它还可以用于使用独立编程器对MCU进行编程。您可以从Arduino UNO板上MCU旁边的接头或者数字接头连接到SPI的引脚,如下所示:

 

11 < - > MOSI 

 

12 < - > MISO 

 

13 < - > SCK

 

TWI:

 

I 2 C或双线接口是仅包含两条线,串行数据和串行时钟的接口:SDA,SCL。

 

您可以从数字接头中的最后两个引脚或模拟接头中的引脚4和引脚5到达这些引脚。

 

其他功能:

 

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

 

【技术专辑】了解Arduino UNO硬件设计

Arduino UNO R3 MCU部分。

 

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

 

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

 

•IOL和IOH(数字)接头:除GND,AREF,SDA和SCL外,这些接头是引脚0至13的数字接头。请注意,USB桥接器的RX和TX与pin0和pin1连接。

 

•AD标头:  模拟引脚标头。

 

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

 

•复位引脚:使用10K电阻上拉,以防止在嘈杂环境中进行虚假复位; 该引脚具有内部上拉电阻,但根据AVR硬件设计注意事项应用笔记(AVR042),“如果环境有噪声,则可能不足,可能偶尔会发生复位。”如果用户按下复位,则会发生复位按钮或从USB桥接器发出复位。您还可以看到D2二极管。这个二极管的作用在同一个应用笔记中描述:“如果不使用高压编程,建议在RESET中添加一个ESD保护二极管到Vcc,因为高压编程不会在内部提供”。

 

•C4和C6 100nF电容器:这些电容器用于滤除电源噪声。 电容器的阻抗随频率降低:

 

【技术专辑】了解Arduino UNO硬件设计

 

电容器为高频噪声信号提供低阻抗接地路径。 100nF是最常见的值。 阅读AAC教科书中有关电容器的更多信息。

 

•PIN13:  它连接到MCU的SCK引脚,并连接到LED。Arduino板使用缓冲器(LMV358)来驱动LED。

 

•ICSP(在线串行编程)标头:  用于使用外部编程器对ATmega328进行编程。它连接到系统内编程(ISP)接口(使用SPI引脚)。通常,您不需要使用这种编程方式,因为引导加载程序通过UART接口处理MCU的编程,UART接口使用桥接器连接到USB。当您需要刷新MCU时使用此标头,例如,首次使用引导加载程序进行生产。

 

USB-to-UART桥接器

 

【技术专辑】了解Arduino UNO硬件设计

Arduino USB桥接部分。点击放大。

 

正如我们在“Arduino UNO系统概述”部分中所讨论的那样,USB-to-UART桥接器部分的作用是将ATmega328理解的USB接口信号转换为UART接口,使用带内置USB收发器的ATmega16U2 。这是使用上传到ATmega16U2的特殊固件完成的。  

 

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

 

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

 

1.为何选择USB数据串联电阻

 

2.USB开发者FAQ

 

Z1和Z2是电压相关电阻(VDR),也称为变阻器。它们用于保护USB线路免受ESD瞬变的影响。

 

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

 

电源

 

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

 

5V稳压器是NCP1117ST50T3G,该稳压器的Vin通过直流插孔输入通过M7二极管连接,M7二极管是着名的1N4007二极管的SMD版本 (PDF)。该二极管提供反极性保护。

 

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 UNO硬件设计

电源切换机制。点击放大。

 

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

 

我要谈的最后一件事是Arduino UNO提供的电源保护。

 

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

 

【技术专辑】了解Arduino UNO硬件设计

电源接头的VIN引脚。点击放大。

 

当您使用USB作为电源并为USB端口提供保护时,PTC(正温度系数)保险丝(MF-MSMF050-2)与USBVCC串联。这提供了500mA的过流保护。当达到过流限制时,PTC电阻会增加很多。去除过电流后电阻降低。

 

阅读Rugged Circuits关于Arduino保护的帖子非常有用。

 

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

  • 【技术专辑】了解Arduino UNO硬件设计已关闭评论
    A+
发布日期:2019年03月04日  所属分类:参考设计