基于树莓派的数据采集方案MCC 118上手体验

数据采集(DAQ)在工业领域使用广泛,主要用于测量电压、电流、温度、压力或声音等物理现象。一直以来,数据采集系统是结合基于计算机或者其他专用测试平台的测量软硬件产品来实现的。近日,树莓派实验室小编得到了一块基于树莓派的数据采集扩展板——MCC 118 HAT。这款扩展板是专业数据采集方案提供商 Measurement Computing 为树莓派量身打造的产品。

开箱

先看看扩展板外观,一睹为快。

拆箱物件如图,MCC 118 HAT 一块,附带了固定螺丝、带长针的排座和一张简单的使用说明卡片。

可以看到模块上面密密麻麻布满了各种元件和转换芯片,配有CH0~CH7输入端子,也就是8通道的模拟电压输入。

这个排针可以确保将树莓派的 GPIO 引出,这样可以级联多块 MCC 118 HAT,也可以用来接其他的扩展板用。安装效果如下图:

最后看看板子背面,非常干净。

产品官方介绍

官方介绍如下:MCC 118数据采集模块(HAT)提供8通道模拟电压输入,基于树莓派的数据采集/数据记录系统。每张MCC 118最大采样率为100kS/s,可以进行单电压点和电压波形采集。最多可在单块树莓派上叠加8个MCC 118模块——提供64通道的数据采集,最大总采样率可达320kS/s。

适用于 40Pin GPIO 的树莓派。

测量量程、精度和环境等参数也是在实际使用时需要关心的。

模拟DC电压:
范围: ±10 V
增益误差 (读取值% ): 最大 0.098
偏移误差: 最大 11 mV
满量程绝对精度: 20.8 mV
增益温度系数(% 读数/°C): 0.016
偏移温度 系数(mV/°C): 0.87

噪音表现:
对于峰峰值噪声分布,输入通道连接至AGND,并以最大吞吐量获取12,000个样本。
范围: ±10 V
计数: 5
LSBrms: 0.76

使用环境:
工作温度: 0 °C to 55 °C
储存温度: -40 ˚C to 85 °C
相对湿度: 0% to 90% 非冷凝

部署软件环境

一开始小编还以为这个专业设备的软件环境搭建起来可能会比较复杂,比较意外的是通过产品附带的一张卡片上面的网址,找到了一套完整的软件部署教程。亲测兼容性良好,主要步骤如下。

测试环境:
树莓派 3B+
16G microSD 卡
5V / 2500mA 电源适配器
Raspbain stretch 2018-06-27 操作系统
Python 2.7 环境

准备好树莓派,如何给树莓派安装操作系统可以参考这里

首先在给树莓派上电之前,安插好 DAQ HAT 扩展板,然后上电开机。在终端输入下面的操作指令来部署软件环境,笔者使用的是 SSH 方式登陆到树莓派进行操作的。

更新软件包列表:

sudo apt-get update

安装 Git(如果没有安装过的话):

sudo apt-get install git

下载 daqhats 库到用户根目录:

cd ~

git clone https://github.com/mccdaq/daqhats.git

安装共享库、工具等。安装向导会确认是否要安装 Python 2 和 Python 3 的支持。

cd ~/daqhats

sudo ./install.sh


现在你就可以运行 ~/daqhats/examples 目录下的程序范例了。

daqhats 库是基于 C/C++ 和 Python 开发的,下面以一段基础的 Python 范例代码来展示如何读取 MCC 118 的输入电压并现实通道数值。


#!/usr/bin/env python

#

# MCC 118 example program

# Read and display analog input values

#

import sys

import daqhats as hats



# 获取 MCC HAT 扩展板列表

list = hats.hat_list(filter_by_id = hats.HatIDs.ANY)

if not list:

    print("No boards found")

    sys.exit()



# 读取并现实所有的采样通道

for entry in list: 

if entry.id == hats.HatIDs.MCC_118:

    print("Board {}: MCC 118".format(entry.address))

    board = hats.mcc118(entry.address)

    for channel in range(board.info().NUM_AI_CHANNELS):

        value = board.a_in_read(channel)

        print("Ch {0}: {1:.3f}".format(channel, value)) 

使用范例快速用起来

在环境部署文档之后,我们看到了基于 C 和 Python 的 SDK 以及几种典型数据采集应用范例的源代码。可见,MCC 所提供的并不仅仅是一款树莓派的数据采集模块,而是从软件到硬件的数据采集方案。

下面我们以 Python 的 SDK 和范例为例,来介绍如何快速体验和应用这款基于树莓派的数据采集模块。

首先我们结合 MCC 118 的结构框图,对照 MCC 118 外观来确定如何为模块输入需要采集的信号源。

很明显,只需要将外部传感器的信号源通过 CH0~CH7 中的任何端子接入到 MCC 118,MCC 的 GND 与外部传感器的 GND 共地即可。

软件方面,我们依次来介绍并测试 SDK 中预先准备的范例。

范例功能介绍

single_value_read: 循环读取并显示每一个被选中的采样通道的单个数据值。

finite_scan: 从指定的通道采集模拟输入输入数据块,显示每个通道的最后一个采样数据。

finite_scan_with_trigger: 等待一个外部触发信号,然后采集用户指定通道的模拟输入数据块。显示每个通道的最后一个采样数据。

continuous_scan: 从指定通道联系采集模拟输入数据块,直到扫描停止。显示每个通道的最后一个采样数据。当每个通道采集到指定数量的数据样本之后,或按下回车键时停止采集。

multi_hat_synchronous_scan: 通过外部时钟和外部触发信号从最多 8 块 MCC 118 HAT 上同步采集数据。其中的一个 MCC 118 HAT(主设备)用于调整同步采集。

Python Web 服务范例介绍

在范例目录下的 web_server 目录中,包含一个 名为 web_server.py 的 Python 程序。其功能是启动一个 Web 服务用语显示从 MCC 118 HAT 实时采集到的数据。我们可以通过在浏览器中访问这个 Web 页面来观察数据图形。

由于这个服务有一些组建依赖,因此在部署的时候需要用下面的命令安装依赖项。

pip install -Iv dash==0.30.0 dash-renderer==0.15.0 dash-html-components==0.13.2 dash-core-components==0.38.0

启动服务:


cd ~/daqhats/examples/python/mcc118/web_server

./web_server.py

接下来就可以在浏览器中打开 http://:8080 访问了。将其中的 替换成树莓派的 IP 地址或主机名。

要想停止 Web 服务,可以回到命令行界面按下 Ctrl+C 中止。

为了初步测试功能,我们打算用它来测试一下音频模拟信号采样。拿树莓派 HiFi DAC 扩展板的模拟输出端作为 MCC 118 HAT 的数据采集源。

音频模拟信号接到 MCC 118 HAT 的通道 1 上。

运行 single_value_read.py 程序可以看到实时的采样数据。

运行 finite_scan.py 等程序范例类似。

下面启动 web_server 下的范例,然后浏览器打开 http://:8080 访问 WEBUI。可以看到在没有信号输入的时候,波形图如下:

而接入信号源之后,再启动采样,波形会变得更平稳:

当开始播放音乐时,波形会随着音乐而动态改变:

测试效果视频(发布时直接插入到正文):

总的来说,基本的范例已经包括了比较丰富的应用场景,在此基础之上开发出符合自身需求的 DAQ 系统很容易上手。

更多详细信息参考官方说明:
https://www.mccdaq.com/PDFs/Manuals/DAQ-HAT/overview.html
有关 DAQ HAT Python 库的详细用法可以参考开发文档:
https://www.mccdaq.com/PDFs/Manuals/DAQ-HAT/python.html

评价综述

从测试来看,由于具备了简单明了的安装步骤,这个方案上手应该说是很容易的,真正做到了低门槛搭建专业数据采集系统。

性能方面,在 Python 库的测试中,单一通道采集的样本数量可以达到将近每秒10000个样本。足以应对各类场景的数据采集需求。相信使用 C 库来实现的话,将能获得更高效率的采样需求。

对于扩展更多路数的信号源,MCC 118 在设计上给予了高延展性的设计实现。巧妙的设计了可多层叠加的硬件接口,配合 EEPROM 固化 HAT 的叠加配置,实现了多大 8 倍(即最多64通道)的数据采集能力,最大总采样率可达320kS/s。

笔者同时做了一番搜寻,基于树莓派来实现工业测量的产品方案,目前仅 MCC 118 这一套。对于有兴趣在工业测量领域使用树莓派的朋友来说,这是一个不错的选择。

相关视频:

基于树莓派的电压采集模块MCC 118网络服务器范例

https://url.cn/utoHpkH2?sf=uri

基于树莓派的电压采集模块MCC 118数据记录仪例程

https://url.cn/VxXgwhEx?sf=uri

目前 MCC 118 扩展板可通过 Measurement Computing 公司官网购买获得 http://china.mccdaq.com

有关本产品的相关问题和支持可以在 https://talk.quwj.com/topic/916 讨论,可获得 MCC 工程师专业的解答和技术支持。

这是一篇发布于 6年 前的文章,其中的信息可能已经有所发展或是发生改变,请了解。


12 评论

    • 可以通过配置 EEPROM 中的参数,SDK 会在启动的时候根据 EEPROM 配置来初始化每个板子的地址。这样可以通过地址来访问不同的采集卡。

  1. 您好,现在出现了两个问题。
    第一个就是在树莓派输入( cd ~/daqhats/examples/python/mcc118/web_server./web_server.py)时显示没有找到文件或目录。
    第二个就是利用开发的webserver时,在浏览器中打不开加了host 的网络界面。

  2. install -Iv dash==0.30.0 dash-renderer==0.15.0 dash-html-components==0.13.2 dash-core-components==0.38.0
    后,运行Server.py一直提示错误,信息如下:
    Successfully installed Flask-1.1.4 Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 brotli-1.0.9 click-7.1.2 dash-0.30.0 dash-core-components-0.38.0 dash-html-components-0.13.2 dash-renderer-0.15.0 flask-compress-1.10.1 itsdangerous-1.1.0 plotly-4.14.3 retrying-1.3.3 six-1.16.0
    Cleaning up…
    Removed build tracker ‘/tmp/pip-req-tracker-P16zp6’
    pi@raspberrypi:~ $ cd ~/daqhats/examples/python/mcc118/web_server
    pi@raspberrypi:~/daqhats/examples/python/mcc118/web_server $ ./web_server.py
    Traceback (most recent call last):
    File “./web_server.py”, line 145, in
    value=[0]
    File “/home/pi/.local/lib/python2.7/site-packages/dash/development/base_component.py”, line 88, in wrapper
    return func(*args, kwargs) File “/home/pi/.local/lib/python2.7/site-packages/dash_core_components/Checklist.py”, line 46, in init
    super(Checklist, self).init(args)
    File “/home/pi/.local/lib/python2.7/site-packages/dash/development/base_component.py”, line 133, in init
    ‘, ‘.join(sorted(self._prop_names))
    TypeError: Unexpected keyword argument value
    Allowed arguments: className, id, inputClassName, inputStyle, labelClassName, labelStyle, options, style, values

    还望各位大神给解读一下问题出在哪?如何解决,谢谢!

发表评论

你的邮件地址不会公开


*