无线四通道24位数据采集系统研发记(一)

无线四通道24位数据采集系统研发记

前言

很早就有个想法做一套能够记录和分析模拟信号数据的设备,但之前正处于想法超过实际能力的阶段,因此也就只能想想作罢,但最近由于其它项目的需要,设计研发这套设备已经是迫在眉睫。通过很长时间的磨练虽然算不上炉火纯青,但目前的能力对于这个需求的实施还是绰绰有余。

想法和条件都成熟接下来就是规划分析和设计制作了,从哪里开始呢?万事开头难,才初做研发的朋友我相信也有这样的经历。这里简单聊下我自己的一些经验,我对新项目的研发不管软件还是硬件都有一套自己的习惯和步骤,这些“套路”都是一路学习、磨练所积累的一些心得和经验,这些“套路”的不断完善使得我所研发的项目可以用最小的代价顺利完成并且达到预期,通过不断的对这些“套路”进行总结和整理迭代形成了我自己的研发规则,希望这些规则对初学者起到一些启发和帮助。

研发流程规范

一个项目从需求者的角度来看是因为有解决问题的需求所以在项目需求者眼里项目本身并不是关键,解决问题才是他们关心的重点,这样一来在解决问题前必须要弄清楚需求方所碰到的问题是什么?他们所需要的是什么?而作为研发方我们又能做什么?怎么能够帮助需求方解决问题?这些一系列的逻辑关联分析就是需求分析。

很多做研发的一来就关心技术层面的需求,这虽然没有错,但这并非根本需求,所以我们需要深刻的帮助需求方回溯到需求的本质点上寻找需求的根本——问题所在。只有从最底层的问题出发一起和需求方共同沟通探讨所制定出来的需求才能根本符合需求方要求,通常这些工作都由项目经理或系统构架师一起与客户沟通完成,掌握这种需求分析的思路可以让你快速的从普通研发工程师的队伍中脱颖而出,因为此时你已经和客户视角一致,你已经能够设身处地的通过自身技术手段为他解决他所碰到的问题。

接下来在你已经深刻了解到问题的本质所在,并且提出了围绕解决这些问题的需求,有了这些需求你就能初步在脑海里构建出该项目的大致轮廓,这些轮廓主要包括:我该使用哪些技术手段完成这些需求,从使用者角度看需要哪些主要的功能,在不超过预算的情况下选择哪些解决方案来完成设计,以及研发时间周期的考虑等等,这就是架构设计,在架构设计前我喜欢为项目设立一个项目代号一般这个代号都为英文缩写,比如就当前这个项目“无线四通道24位数据采集器”英文为“Wireless Four-channel 24-bit Data Acquisition Systems”,所以我把这个项目命名为:W424DAQ,当然这不是强制性的根据个人习惯而定。

当我们初步完成整个项目的架构后,就需要考虑下一个问题,对于初步的架构设计我们能按设想完成么,对于包含硬件研发的项目不确定的因素要比纯软件研发项目大很多,因为硬件的设计是有实物性的部件属于实际范畴但我们的设计是建立在理论和经验的理想范畴,硬件设计能保证在有限期内从设计到生产一次成功的基本不可能,硬件设计和软件设计最大的一个差别就在于硬件研发的验证时间和成本代价要远远大于做软件研发的验证,因此在准备开始具体规划设计前必须寻找出关键的验证点,并且对重点不确定的地方进行验证检验或者预先确定。比如需求中某项技术指标使用预设计架构中的方法能否满足?架构中所使用到的某项解决方案长期供货是否正常这些都需要去具体验证,这就是关键验证。如果在验证中发现某些设计不可实现或者实现起来代价过大那么就需要从新返回前面的需求分析进行判断需求是否合理?是否能在不影响解决问题的前提条件下更改需求或者在架构设计过程寻找其它解决方案或变更技术实现方法从新进行设计。

关键验证步骤完成标志着我们的项目架构已经确定,我们需要从新整理之前的设计并且以文档的方式把构架确定下来。

构架确定后下一步就是为具体的设计研发做资源分配和规划,在这一过程中将确定开发该项目需要的人力资源、研发物料资源以及如何分配研发任务到具体研发人上,并且编写项目进度规划表等工作。

到此真正的研发才刚刚开始,对于硬件和软件的两方面研发重点是如何衔接和整合,所以在研发开始前必须要让硬件研发和软件研发有个公共通道对接,并且能够做到互不相干也就是低耦合性,因此就需要制定出一套规则和协议来实现这一目的,比如采用什么硬件接口对接设备和控制端,采用什么协议使之能够相互通信,这一过程其实部分已经在前面的架构设计中已经确定,到这里只是明确和细化具体实施方案,这就是制定接口协议

从硬件研发分支看下一步就是硬件开发环境的搭建和固件的具体开发了,然后软件研发分支就到软件架构确定和具体设计过程,这里就不再细述。

当软硬件两个分支完成开发测试后就需要对开发完的原型进行硬件整合设计、制作、测试,这部分相信大部分工程师都已经轻车熟路无需多提。

最后就是整个系统的文档撰写整理,以提供给需求方指导教学和使用,同时也可以为以后的项目维护、升级以及扩展提供参考。

无线四通道24位数据采集系统研发记(一)

整个项目的研发流程如上图所示,严格按照这个流程走可以让你的项目更具有规范性和可维护性,以及减少翻车的可能性。

回到我们研发W424DAQ的正题上,因为需求方也是我自己所以自然很明白自己需要解决的问题是什么具体需求是什么,所以需求很明确。

我的需求场景是对至少三路的电压信号进行至少6小时的连续采集保存并且可以对保存的数据进行回放分析,设备必须支持室外使用(无外部供电),采集信号幅度范围≤±2V,精度0.1%最小分辨率0.5mV,每通道采样率≥5sps,支持WIFI数据传输,可以通过网页配置设备参数,体积尽量小方便携带。

需求分析

根据以上原始需求我们整理为如下:

  • 设备定位:便携式无线数据采集存储器

  • 技术需求:
    采集通道:≥3通道
    采样率:≥5sps/每通道
    采样精度:≤±0.05%
    最小分辨率:≤0.01mVDC
    输入范围:≤±2VDC
    连续工作时长:≥360分钟(低功耗内置电池供电)
    1.支持WiFi无线网络,支持Web网页配置,支持SD卡数据存储
    2.支持通过PC端软件对采样数据后期回放分析

  • 外观需求:小体积便携

  • 成本预算:≤ 800元

  • 研发周期:≤ 60天

架构设计

根据前面需求分析初步设计项目整体架构。首先该项目最为核心和重要的部件就是ADC所以我们先确定ADC选型,根据通道数要求≥3通道因此ADC的选型必须在3通道以上为了留有余地我们必须选择4通道以上的ADC,同时根据采样率
5sps、采样精度0.05%、最小分辨率0.01mV
我们计算理论所需的ADC参数指标。需要的ADC分辨率位数计算:
无线四通道24位数据采集系统研发记(一)

以上计算是理想状态,实际我们选型考虑采用4通道以上24bit的ADC,所以初步选定性价比极高的ADS1256做为核心模数转换器件,通过查看官方提供的Datasheet得知和精度有关的参数如下:

  • ±0.0010% Nonlinearity (max)

  • Gain error ±0.03% at PGA=64

  • Integral nonlinearity ±0.0007 %FSR at PGA=64

我们取误差最大的参数Gain error ±0.03%
小于我们的需求±0.05%,并且该ADC是8通道单端或4通道差分输入,正好合适项目需求,因此ADC选型可以确定为ADS1256。

采集核心有了接下来准备确定控制核心也就是我们的主控部分,之前考虑过使用STM32系列的MCU对其进行控制然后通过WIFI模块再把数据转发出去,但后来发现ESP32系列的Soc芯片ESP-WROOM-32在支持150MbpsWIFI和蓝牙4.2的前提下还可以支持二次开发,同时内部配备了可调节频率的双核频率高达80M~240M,520K的SRAM和4M的SPI
flash,这么强劲的配置如果不好好利用简直是资源浪费,更让我确定选择它的理由是它的价格低廉,一个模块售价不到20元,比起使用STM32成本要降低很多,而且官方开发库在不断更新完善开发环境也算友好。因此系统架构基本选定:ESP-WROOM-32 + ADS1256 +聚合物锂电

系统总体运行逻辑是通过WIFI连接到W424DAQ设备进行采集参数配置,需要采集数据的时候通过W424DAQ面板开关进行控制采集或者停止。然后ESP-WROOM-32通过SPI接口对ADS1256模数转换器进行控制采集数据并且保存到SD卡存储器上,如果采集时有外设WIFI连接那么则把采集的数据异步同步到外设。

无线四通道24位数据采集系统研发记(一)

关键点验证

在总体架构初步设计完成后需要对架构所使用到的硬件、软件以及涉及到的相关技术进行反复思考,找出不确定的因素或无历史经验的部分进行验证,以明确整个架构的可用性和预估后续研发风险。

该项目对于我来说最不确定的部分在ESP-WROOM-32,因为对ESP32接触时间短很多调用API都从零开始学习,因此开发的大部分时间应该会消耗在这部分。经过分析整理大致列出了以下不确定因素待后面验证。

  1. WIFI无线网络数据传输率是否满足需求?

  2. 移植以前STM32的SPI控制函数ADS1256是否工作正常?

  3. 在ESP32下SD存储卡模块如何进行操作?

  4. 在ESP32提供配置页面的WebServer如何进行?

  5. 整机功耗在不同情况下具体是多少?

大概就罗列了这五点不确定性,下面我们逐一进行验证。

ESP-WROOM-32 WiFi性能测试

**测试环境:**使用ESP-WROOM-32模组的Goouuu-ESP32模块开发板

**开发平台:**WIN10+VSCODE+ESP-IDFv4.3rc

**ESP端:**使用esp-idf\examples\wifi\iperf下的测试例子进行测试

**PC端:**iPerf 2.0.9 64位 (https://iperf.fr/iperf-download.php)

测试步骤:

  1. 编译配置sdkconfig,直接复制 sdkconfig.defaults里的所有内容覆盖到 sdkconfig
    保存并编译。

  2. 编译后使用串口连接ESP32开发板进入命令行。

  3. 再命令行输入命令ap W424DAQ 12345678,创建一个WIFI的AP节点。

  4. 在PC端使用WIFI连接名称为W424DAQ的WIFI节点,密码为12345678,连接上后可以使用ping命令测试是否连接上ESP32开发板。
    无线四通道24位数据采集系统研发记(一)

  5. 回到VSCODE开发环境的命令行再次输入:iperf -s -i 1 创建一个TCP测试服务器端口默认为5001。
    无线四通道24位数据采集系统研发记(一)

  6. 在PC端打开CMD控制台输入命令:iperf -c 192.168.4.1 -i 1 -t 30

  7. PC端的CMD控制台和VSCODE开发环境的串口控制台应该可以同时观察到实时WIFI数据传输率。

  8. 以下是实测结果:CPU主频240M,速率 >40Mbits/s。CPU主频80M,速率>20Mbits/s。
    无线四通道24位数据采集系统研发记(一)
    无线四通道24位数据采集系统研发记(一)

结论:对于以上测试结果很满意,根据需求计算4通道同时采集情况下最大数据传输率为:
32_bit×4_ch×5_sps=640bps/sec
也就是4通道全开采集每秒占用带宽也就640bps,如果提高采样率到ADC最大采样率30ksps那么最大数据传输率为:
32_bit×30000_sps≈938kbps/sec
就算全速采样对于20Mbps的WiFi带宽来说不足1/20的带宽,已经远远满足4通道ADC数据实时采集的传输要求。因此ESP-WROOM-32的WiFi网络传输率的不确定性得到确认。

测试移植STM32下ADS1256库函数到ESP32

待续…

在ESP32下测试SD存储卡模块读写操作

待续…

在ESP32下配置WebServer服务

待续…

测量ESP32在不同情况下的运行功耗

上一篇:SQL优化大全心得


下一篇:win10环境下esp32开发环境搭建