从Arduino Mega实验板到定制产品板的过程

了解将硬件和固件从基于 Arduino Mega 的原型转换为可批量生产的完全定制 PCB 所需的步骤。

Arduino-Mega-2560

对于具有许多外围设备或重 GPIO 要求的大型项目,Arduino Mega 是电子设备的热门选择也就不足为奇了。

由于它是首屈一指的 Arduino 平台开发板之一,并且与更普遍的 UNO 来自同一微控制器系列,因此从其他 Arduino 项目过渡到它是轻而易举的事。

学习如何使用 Mega 与使用较小的 Arduino 板没有什么不同。

然而,与所有开发板原型一样,有时需要将面包板项目转化为可扩展、可制造的产品。

Arduino 超级硬件

从硬件开始,Arduino Mega 基于 Atmega2560 微控制器。在 Mega 板上的迭代中,微控制器采用标准 TQFP 100 引脚封装。

有 54 个标准 GPIO 和各种外设,包括专用 PWM 通道、SPI 和 UART 等典型串行接口等。

它是一个像 Uno 一样的 5V 微控制器,因此在将此芯片转换为定制 PCB 时,您的第一步应该是确保您的电路板提供 5V 电源为电路板供电。

请注意,微控制器在上述封装的引脚 98 上提供了一个 AREF 引脚。由于微控制器可以提供自己的参考,因此可以将其悬空或与接地电容短路。

但如果您的应用对模拟性能有特别严格的要求,建议使用专用的电压基准芯片。

这是一款旨在提供非常稳定、无噪声的直流电压源的 IC,不需要提供太多电流。

即使电压相同,该参考可以而且应该与主电源分开。如果您的 ADC 要求不是很严格,您可以忽略这一点,只需将引脚连接到电容器即可。

文本描述自动生成

当涉及到原理图的其余部分时,通常没有理由不参考官方 Arduino 开发板的原理图。

USB

第一次看原理图时,最引人注目的是似乎有两个微控制器,一个较大的在左侧,一个较小的在右侧。

图 1- Atmega2560 核心微控制器电路原理图

当然,更大的微控制器是 Mega。

较小的 Atmega8U2-MU 起到 USB 转串口的作用,因为 Atmega2560 没有内置 USB 功能,只有 UART。

图 2 – Atmega8U2-MU USB-to-UART 电路原理图

这将我们带到了硬件设计过程中的关键决策点;是否在新的可制造设计上保留 USB 功能。

反对这样做的主要论点是,如果您没有将 USB 功能用于对您的应用程序至关重要的事情(例如,您的设备不需要连接到 PC),那么包括内置 USB 连接是不必要的。

它为额外的微控制器及其所有必需的外部组件增加了额外成本。

它还要求板边缘的一部分必须对 USB 端口本身保持清晰,这在尺寸关键型应用中可能是一个问题。

编程接口(USB 与 ICSP)

如果您刚从开发板 Arduino 编程开始,您现在可能想知道如果没有 USB 端口,如何对开发板进行编程。

毕竟,使用开发板,您只需将计算机插入 USB 端口并以这种方式上传代码。

但是,还有另一种方法可以将代码上传到 Arduino 板,形式为开发板上标记为“ICSP”的 6 针接头,原理图中具有相同的名称。

ICSP 或在线串行编程是一种 SPI 样式的接口,需要外部程序员将代码上传到微控制器。与 USB 相比,这是一种将代码上传到 AVR 微控制器的低级方式。

通过获取像这样的外部编程器来使用 ICSP ,并在 Arduino IDE 中的 Tools→Programmer 下指示您正在使用什么。对于此程序员,您将选择 AVR ISP。

只要编程器一端连接到您的 PC,另一端连接到 Arduino ICSP 接头,您就可以从那里像往常一样编写和上传 Arduino 代码到开发板。

ICSP 是将代码上传到 Atmega2560 的“官方”方式,那么 USB 是如何工作的呢?

这是通过引导加载程序或控制固件启动行为的小程序来完成的。

当使用 ICSP 将此引导加载程序“烧录”到新的 Atmega2560 微控制器时,它基本上也能够通过另一个接口监视和接受代码上传。

在 Mega 开发板的情况下,此接口是带有中间 USB 到 UART 转换器的串行 UART,以允许通过 USB 启动和执行代码上传。

无论通过 USB 刷新什么代码,引导加载程序都被设计为保持不变。通过在 Arduino IDE 中选择 Tools→Burn Bootloader 选项,可以使用 ICSP 编程器轻松烧录它。

完成此操作后,可以像往常一样通过串行方式上传代码。

对于带有 Atmega2560 的新定制 PCB,至少第一次代码上传必须由 ICSP 编程器完成,因为出厂时芯片不会带有引导加载程序。

后续上传也可以使用 ICSP 编程器完成,Arduino IDE 完全支持该编程器。

过渡到批量生产时,没有明确需要保留 USB 端口

如果您希望继续使用 USB 端口进行代码上传(本质上是“香草”Arduino 体验),只需使用 ICSP 编程器烧录一次引导加载程序,然后继续通过 USB 进行代码上传。

USB 到串行通信不需要使用单独的 Arduino 微控制器完成,因为它出现在 Mega 原理图中。

市面上有多种专用 IC,其中最著名的是 FTDI,它们执行 UART 到 USB 的转换。

只要您的设计使用与 Mega 开发板相同的 TX/RX 串行引脚(PE0 和 PE0),您的实现应该在很大程度上是相同的。

附加电路

当涉及到原理图的其余部分时,您当然可以逐项复制电路和 IC。

但是,对于真正的产品,您肯定会想要去掉一些部分,最值得注意的是所有 GPIO 的排针分接头。

只需将未使用的悬空,仅出于调试/紧急目的而中断少量。

另请注意,此原理图中的 AREF 引脚悬空,但如上所述,这可以连接到一个稳定的电压基准以实现精密模拟目的。

最后,Mega 原理图在左上角描绘了一个电压调节块,如果您已经实施了足够的电源解决方案,它在定制板中可能是多余的。

您绝对必须从 Mega 原理图中获取的主要组件是直接连接的电容器和时钟,以及复位引脚电路。

其他所有内容都是可选的,或者可能由您的团队单独实施。

请记住,Vcc 和 GND 引脚的最大额定电流为 200mA,每个 I/O 引脚的最大直流电流为 40.0mA。

根据您的设计的暴露程度或关键程度,您可能希望在电路板上加入一些过流和/或过压保护,以确保微控制器的安全。

集成外部功能

另一个在定制 PCB 过渡中经常被忽视的项目是传感器等外部组件的集成。

其中许多可能以前已作为分线板集成到您的项目中,并且这些板可能包含提供逻辑电平转换、保护等的额外电路。

尽可能查看这些分线板的原理图。

您还可以查阅裸芯片的数据表,以确保在过渡到定制板时不会破坏与微控制器的兼容性。

将注意力集中在处理器上是可以理解的,但是缺少一组晶体管可能会影响 I2C 连接是否正常,因为传感器的逻辑电平与 Arduino 不同。

或者更糟糕的是,传感器或微控制器由于不正确的逻辑电平电压而损坏。

Arduino 固件迁移

所以现在假设您已经构建了一个安装了 Arduino Mega 的定制板,并且您已经使用上述选项之一将代码上传到设备。

现在上传原型固件时会发生什么变化,以适应新板?

在一个完美的世界中,您的电气规格与开发板和原型设置完全匹配,可能不需要进行任何更改。

但通常,当切换到定制设计时,可能会出现需要固件调整来补偿的问题。

ICSP 编程

如果 USB 端口不再用于上传代码以支持 ICSP 编程器,则需要进行最明显的更改。

在这种情况下,自由使用对 Serial_println() 调用的代码库将需要调整,因为“默认”串行端口(用于编程的相同 UART→USB 管道)不再可用。

这个问题也可以在硬件中解决,并且有一些解决方案:

1. 断开 UART 接口到头针,并在测试代码时使用像这样的外部 FTDI 适配器读回这些打印语句。

如果您使用连接到现有 Mega 上的 USB 端口的相同 UART 接口,则不需要任何固件更改。

2. 打印到单独的 UART 接口。这需要进行相对较小的固件更改,只需调整串行打印库用于写入的端口即可。

启动时间问题

另一个更通用的变化可以应用于任何移植到定制板的微控制器:启动时序。

开发板上可能会遗漏的一个常见情况是不同的电容值和不同的 PCB 布局可能会导致启动事件的时序发生变化。

例如,如果您的自定义电源实现与 Mega 开发板相比具有相当大的电容,或者您​​的 PCB 从微控制器 GPIO 引脚上走线很长。

这可能会导致微控制器需要更长时间才能启动或 GPIO 信号需要更长时间才能稳定。

简而言之,永远不要假设在切换到定制板时信号会保持其速度和完整性,尤其是在启动时正确运行的测试代码,以确保它仍然正常运行。

这方面的一个例子是一个微控制器,它读取两个 GPIO 引脚的状态,这些引脚在启动时被拉到 5V(认为是硬件 ID)。

如果电源电容太大,微控制器可能能够在 GPIO 信号稳定之前启动并开始执行代码。

这可能会导致引脚读数错误,因此您可能需要添加启动延迟来补偿这个额外的稳定时间。

这只是许多细微的硬件更改可能需要在固件中采取步骤来纠正的示例之一。

外部组件的隐藏功能

可能需要的另一个软件更改与上面的外部组件讨论有关。

在之前刚刚使用分线板的情况下将零件放入原理图中时,您可能会注意到有一些接口可用于芯片,而这些接口未在您的原型中使用。

这方面的常见示例可能是具有专用重置按钮的音频模块,该按钮在分线板上短路。

但是现在您可以选择将其连接到您的微控制器 GPIO,然后通过软件发出复位。

另一个例子可能是一个故障引脚,现在可以在开发板上无法访问的电机驱动芯片上使用。

定制 PCB 的灵活性带来了与外围设备接口的新机会,这需要对软件和硬件进行更改或考虑。

最终建议

从 Arduino Mega 切换到定制 PCB 时有很多选择。

但是,通过坚持参考原理图并仔细考虑外部组件,可以在对固件进行很少更改的情况下进行过渡。

使用与您的 Arduino 相同的微控制器始终是过渡到定制 PCB 的最简单方法。

但是,它可能不是最具成本效益的选择。

如果您打算将产品推向市场,则在将自己锁定在特定的微控制器之前,您应该查看与替代微控制器相比的成本。

在大多数情况下,将会有更便宜的微控制器,它们具有同等或更好的性能和特性。

但是,从硬件和固件开发的角度来看,您向定制 PCB 的过渡会变得更加复杂。