24小时联系电话:18217114652、13661815404
中文
技术专题
自动化硬件在环测试的低成本解决方案
自动化硬件在环测试的低成本解决方案
在当今快节奏的世界中,电子产品的迭代以闪电般的速度旋转,我们经常忘记开发中最关键的方面之一:测试。总是很容易忽略测试,因为它是阻止我们发布产品的最后阶段。在产品开发中,我们不断发现自己处于“足够好”与“经过详尽测试”的阵营中。这种情况通常会发生,因为我们没有时间进行测试、重新测试,然后再进行更多测试。
手动测试与自动测试
在行业中,拥有自动化测试设置(主要用于生产级测试)是很常见的。然而,对于产品开发来说,这并不常见。如上所述,设置复杂的自动化测试设备的成本和开发时间需要高水平的努力。这种类型的成本和努力仅适用于具有非常复杂测试配置的大批量或小批量生产(例如,要进行多次环境测试的小批量航天器系统)。对于世界其他地方,我们求助于基本的、乏味的手动测试。这种测试可以包括ADC/DAC验证、协议检查、功耗测试等。不管测试类型如何,希望只需要做一两次,然后就可以翻墙了到测试组。
意外后果和自动化
现实情况是,在我们的开发过程中,无论是在硬件设计/重新设计阶段,还是在嵌入式软件开发阶段,我们都会无意中造成一些问题。一些示例可能是跨焊盘的焊桥或驱动程序代码渗入其他驱动程序代码可能导致某些内容损坏。不管结果如何,很明显,测试不会只发生一次或两次。问题出现了,在船上进行第十次返工后,详尽的测试通常会太累而无法执行。这个问题的显而易见的答案是让自动化系统执行详尽的回归测试。但是对于没有钱和时间来开发详尽的自动化测试系统的嵌入式工程师来说,有什么解决方案呢?
廉价的解决方案
对于嵌入式系统,有一个低成本但非常可扩展和实用的自动化测试解决方案。虽然它并不完美,但它将为设计工程师提供最高的投资回报。这个概念是使用一个简单的设备来驱动模拟信号、读取模拟信号、生成各种协议串行流和分析波形。
运行示例
让我们考虑一个可以在此存储库中找到的真实示例。为简单起见,我们的嵌入式目标将是Arduino Du o。以下是我们完整的测试设置:
图 1:测试硬件配置
图 2:Analog Discovery 2 和 Arduino Duo 一起使用
这里的想法是为了证明:
主机命令 Analog Discovery 2 驱动模拟信号到 Arduino
Arduino 读取并存储 ADC 值
主机通过 UART (USB) 接收 ADC 值
主机验证通过 Analog Discovery 2 发送的内容与 Arduino 发送的遥测数据相匹配
为什么我们要自动化这样的事情?假设我们在 ADC 附近返工了一块电路板,或者有人更改了与 ADC 接口的驱动程序。我们是否 100% 确信在电源上打开几个旋钮的简单手动 ADC 读数足以测试我们的硬件/软件?如果没有,为什么不让自动化覆盖每一个排列和每一个角落情况,这样我们就不必这样做了?只是为了更好的衡量,为什么不将同一件事运行 100 次……仅仅因为我们可以!这可能会变得更加复杂和复杂(例如,协议测试、ADC 过滤测试等),但本文将只介绍基础知识。
该测试纸条t是非常基本的。假设您的 Arduino(即被测嵌入式设备)已加载了正确的编程文件并且一切都已正确连接,您将在您的计算机上运行测试脚本,如下所示:
python -m pytest test_arduino_hil.py
这将触发 Analog Discovery 2 扫描 Arduino ADC 的电压范围,并验证输入电压是否与从 ADC 读取的输出电压相匹配。该脚本不是使用台式电源手动清扫,而是通过一个命令为您完成。对于这样一个简单的例子,似乎没有必要,但是当以类似回归的方式组合测试时,这个过程会带来好处。
将其与我们的 CI/CD 系统相结合,我们可以看到以下阶段正在运行和通过:
图 3:Gitlab 中的 CI/CD 阶段
上图的阶段是:
docker_build:搭建环境。在这种情况下,我们在 Linux PC 和基于 ARM 的设备(例如 Raspberry Pis)上使用 docker 映像
arduino_load_test:编译并加载了Arduino的代码和验证一切工作。
arduino_hil_test:在物理 Arduino 上运行硬件循环测试。
如果我们仔细查看测试部分,我们可以看到这些测试是由 Gitlab 捕获和解析的:
图 4:Gitlab 中的 CI/CD 测试
图 5:Gitlab 中的硬件在环测试结果
我们现在有一个软件设置,允许我们在本地和远程(使用我们的 CI/CD 系统)测试我们的设计。这使设计工程师能够继续专注于设计而不是测试和调试。
在本文中,我们回顾了使用自动化测试同时和事后验证设计的概念。无论是小的返工还是重大的设计更改,在排除意外后果(即修复一件事,破坏另一件事)时,进行自动化回归测试都会带来好处。鼓励的过程是在设计开发过程(类似于测试驱动开发)的同时编写这些测试脚本。将这些自动化测试与 CI/CD 系统相结合增加了额外的好处,以证明我们的电路板正在远程目标上工作,并且可以由任何人随时随地进行测试。