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