发作品签到
专业版

一种分布式无线测控平台

工程标签

1.7k
0
0
1

简介

一种通过WLAN实现的无线测控系统,应用于对K型热电偶和4-20mA电流信号的采集,以及DC24V两线制驱动器件的控制。

简介:一种通过WLAN实现的无线测控系统,应用于对K型热电偶和4-20mA电流信号的采集,以及DC24V两线制驱动器件的控制。
星火计划2023

开源协议

Public Domain

创建时间:2023-03-15 08:33:25更新时间:2023-12-11 03:40:15

描述

        如简介所言,这是一个应用于工程实验的无线测控平台。

        **2023/12/01发布无线测量v2.1,地址为https://oshwhub.com/starsky2019/micro_measure.在这个项目的基础上做出了一些改进,提高了集成度。

        **演示视频地址:https://www.bilibili.com/video/BV1ru4y1G7Xt/

1. 什么是无线测控?

        实验离不开数据,各种物理量的数值靠传感器采集。简单来说,这个过程就是测量。实验中,我们需要不断调节阀门、激光和电机等器件。这个过程就是控制。所谓测控,就是测量和控制的一体化过程。而无线测控是在传统测控技术的基础上发展而来的一种更便捷、更灵活的方法。它使用射频传输信号,摆脱了传统测控系统中大量的接线,方便安装,具有良好的扩展性。但缺点也很明显:信号覆盖范围有限,且易受干扰,可能存在数据安全隐患。

 

2. 这个项目做了什么?

        本项目始于为高超声速实验室定制的热电偶信号采集板。后来,经过对PCB的重新设计,硬件适用性大为提高。最终,作者完善了软件支持,将项目开源到oshwhub,旨在为广大朋友提供稳定、高效的无线测控方案。

        项目所述的无线测控包含两个部分:无线测量系统和无线控制系统。二者独立工作,不相干扰。

 

(1) 无线测量

● 采集-6mV~54mV电压信号,或4-20mA电流信号

● 使用AD7327芯片作为模数转换器,达到12位精度

● 每一块测量PCB支持八路通道异步采集

● 支持数据在网页上实时显示

● 日志和数据均在服务器端备份

● 实验现场的单片机连有SD卡,断网数据不丢失

 

(2) 无线控制

● 远程控制某通道直流电压的导通与切断,可用于驱动阀门等

● 最大连续负载电流达5A

● 每一块PCB支持八路通道

● 支持时序控制和手动控制,时序精度达到1ms,同步延迟小于0.3ms

● 设置有急停装置

● 日志在服务器端备份

        在测控通道数目较多,又不方便接线的实验环境中,无线测控系统具有很高的应用价值。

 

3.系统的设计思路

        整个系统包含两个服务器(分别使用WebSocket和HTTP协议)和若干节点,其结构如下图:

        其中,节点分布在实验现场,分为测量和控制节点,分别负责测量传感器信号和发出控制电压。服务器负责将用户和节点连接起来,使用户可以观测到节点数据,并改变控制通道的状态。

        WebSocket服务器最多支持与98个节点建立连接,它们的地址分别为001-098。WebSocket网络中的099地址挂有一个辅助窗口程序(下称“辅助程序”),用来检查服务器状态、管理服务器的重启关机动作等。因为099地址同样通过WLAN与服务器相连,所以它和服务器可以不在同一台计算机上运行。

        注:节点地址分别加有前缀‘s’和‘m’来区分控制服务器和测量服务器。即在控制服务器中,节点地址为s001-s099;在测量服务器中,节点地址位m001-m099。

        HTTP服务器广播两个网页,分管无线测量和无线控制:测量网页支持实时查看节点数据;控制网页支持手动改变某个通道的状态。HTTP服务器依靠Apache2.4建立。在所提供的软件包中,安装服务器的同时会安装Apache2.4和PHP8,并自动修改网页根目录。

        下面三节,将具体说明服务器和测量、控制节点的原理和功能。第7节将介绍如何使用系统进行无线测控。

 

4. 服务器及辅助程序

        服务器和辅助程序的发布版安装包已上传至蓝奏云,下载地址https://wwer.lanzoue.com/iNjXz1hd9weh

 

4.1 服务器的安装

(1) 下载压缩包并解压,打开Server文件夹

(2) 双击setup.exe,选择安装路径

※安装路径不能有中文

※安装路径不能有空格和特殊符号

※安装路径尽量不要选在C盘,否则可能出现文件访问被拒

(3) 等待服务器安装完成

(4) 回到桌面,双击DoubleClickMe.lnk

(5) 等待程序运行结束,按任意键退出

        此时,桌面上DoubleClickMe.lnk自动删除,剩下两个快捷方式:ApacheMonitor和WS_Server。前者为Apache2.4的入口,后者为WebSocket服务器的起动快捷方式。

        注:若想重新编译服务器,安装路径中提供了cpp源文件。请到github自行安装适用于C++的WebSocketpp和boost库。

 

4.2 服务器的启动

(1) 转到桌面, 双击WS_Server, 依次跳出以下提示词:

① 是否获取本机IP信息?

        若选择Y将在程序中执行ipconfig, 显示服务器的IP;若选择N则跳过此步骤。

        作者建议选择Y查看ip并将其记住,这个ip在辅助程序连接和节点配网的过程中均需要用到。

② 测量节点的链接数:

        预期有多少个测量节点将加入网络,辅助程序也算作一个节点。输入一个整数,如:2

③ 控制节点的链接数:

        同上

④ 测量节点的采样频率(sps)为:

        输入一个整数,表示测量节点在一秒内采样多少次。

        这个数值仅改变网页中数据刷新的时间坐标,必须要与测量节点中单片机的采样频率一致。单片机的采样频率默认为1000sps,其修改方法将在下文介绍。

⑤ 是否启动服务器?

        输入Y,启动。

        经过(1),计算机已经在WLAN中建立了两个WebSocket服务器,其中无线控制服务器的地址为ws://localhost:9002, 无线测量服务器的地址位ws://localhost:8002。若服务器启动失败,请检查是否存在端口占用。

(2) 转到桌面, 双击ApacheMonitor, 启动Apache2.4

           此时,计算机已经开始向局域网广播网页。通过浏览器访问localhost/user_measure来查看测量网页,访问localhost/user_control来查看控制网页。非服务器外的其他用户请将localhost替换为服务器的ip,然后访问网页。

 

4.3 服务器功能说明

(1) 测量网页

        界面如下图所示:

        界面中,上方灰绿色背景的方块显示了所有的在线通道名称,下方为绘图区。点击选中某一通道,其背景将由灰变绿,并在下方显示对应的图表。再次点击可取消选中该通道,同时对应的图表和历史数据将消失。最下方的横幅,在单击后可淡出界面。右上方的数字表示每一行显示的图表数量,可通过点击“+”和“-”进行调整。

        注:同时绘制较多图表时,可能造成CPU占用率高。

        注:单片机可通过修改数据尾缀来区分不同的物理量,网页解析这些物理量后会自动分配单位。不同物理量的区分方式将在第5节中介绍。

(2) 控制网页

        为防止指令冲突,控制网页只允许一位用户在线操作。因此需要进行身份验证。

        初次打开控制页面时,浏览器会提示身份信息过期,点击“确定”将自动跳转到登录页面。输入用户名和密码,登录成功后会重新定向到控制页面,并允许通过网页操作各节点通道的状态。

        若已经有用户正在操作控制页面,则后续的所有登录过程都将被阻塞。服务器更新在线状态大约需要3-6s。上一位用户关闭网页后,请等待一段时间再登录。

        在登录页面中,还可以选择“注册账号”或“修改密码”。其中,“注册账号”的初始验证码是“ABCDEFG”。网站管理员可在"安装目录\Apache24\htdocs\user_control\config.txt"中修改。config.txt保存了一个json格式字符串,与验证码对应的项为vfCode。

        控制网页的主界面如下图所示。点击“+”并输入通道名称,可新建一个控制通道。点击“ON/OFF”可改变该通道的开启/关闭状态。点击“X”可关闭当前通道。最下方的横幅同样可以通过单击关闭。

        注:控制网页支持手动改变某个通道的状态,但它与服务器仍然通过WebSocket连接。请确保操作辅助程序和操作网页不要同时进行,否则二者可能发生冲突。

        注:有时由于服务器非正常关闭,控制登录页面会误显示正在操作的用户。请确认所有用户均已下线,然后进入"安装目录\Apache24\htdocs\user_control\config.txt"中修改"numofcon"对应的值为0,完成后刷新页面。

 

4.4 辅助程序的安装

(1) 下载压缩包并解压,打开Client文件夹

(2) 双击setup.exe,选择安装路径,开始安装

※安装路径不能有中文

※安装路径不能有空格和特殊符号

※安装路径尽量不要选在C盘,否则可能出现文件访问被拒

(3) 等待辅助程序安装完成

        全部完成后,桌面上将出现MS_User的快捷方式,这是辅助程序的入口。

 

4.5 辅助程序功能说明

        双击打开MS_User,可以看到一共有6个选项卡,分别为“欢迎”,“控制节点管理”,“测量节点管理”,“时序编辑”,“时序查看”和“时序起动”。

        程序打开后,默认处于离线状态,功能全部是失效的。请在“欢迎”界面输入服务器地址,并点击“确定”来连接服务器。若如此做,一个新的命令行窗口将被启动,其中记录了WebSocket的调试信息。

        打开“控制节点管理”选项卡,界面如下图。其中,最右侧为服务器的来往消息,左上部分有众多按钮,左下为一个滚动区域。

当有控制节点入网后,点击“更新”可查看在线链接的数量;

点击“检查ping”可获取各节点与服务器的延迟,延迟的毫秒数将在滚动区域显示;

点击“开始注入”可将保存在服务器的时序文件(下文会有说明)分发给对应节点,并检查这些节点是否成功接收;

点击“执行准备”将使各控制节点进入“等待触发状态”,这是启动控制时序的必要条件;

点击“服务器重启”或“服务器关机”,可使ws://localhost:9002对应的服务器执行重启或关机。

        打开“测量节点管理”选项卡,界面如下图。在这个选项卡中,“执行准备”的功能有所不同:节点入网后,默认处于待命状态。此时点击“执行准备”可使所有节点开始采集数据,并不断上传至服务器。若再次点击“执行准备”,节点将停止采集和上传,并恢复待命状态。其他功能与“控制节点管理”选项卡类似,此处不再赘述。

        打开“时序编辑”选项卡,界面如下图。

        时序控制是一种常见的控制方式,用于按照预定的时间顺序自动执行一系列操作。在这个选项卡中,我们可以选择特定的通道,并指定它们的开启和关闭时刻,然后将其做成一个时序文件。点击“浏览”可选择保存时序文件的路径。点击“添加节点”可在当前节点下方新建一个节点;点击“删除节点”可删除当前节点;点击“清空”可将已输入的开启和关闭时间全部清空。点击“+”可为当前节点添加一个控制通道;点击“x”可删除当前节点最后一个控制通道。“开启时间”和“关闭时间”以毫秒计,输入若干个整数,两数之间以英文分号”;”分隔。时序编辑完成后,点击“保存”,可在目标文件夹下产生一个“server_seq.SEQ”文件

        打开“时序查看”选项卡,界面如下图。打开保存的时序文件(*.SEQ),下方将自动显示时序图形。检查无误后,点击“发送至服务器”,可将文件转移至服务器本地。

        打开“时序起动”选项卡,界面如下图。输入正确的起动密钥,点击“起动”,程序将进入5秒倒计时。随后向同步器发出起动指令,再由同步器产生触发信号,使与其连接的各控制节点同时开始执行时序。

        同步器的功能及其与各控制节点的接线将在下文介绍。

        注:时序成功起动必须满足以下条件:

① 同步器和各控制节点均与服务器保持无线连接

② 辅助程序中的密钥与同步器中输入的密钥一致

③ 各控制节点触发端均与同步器连接,并处于“等待触发状态”

 

5. 测量节点的设计与功能

 

5.1 PCB板

        测量节点主要包含三块PCB板:电源板、用于测量K型热电偶信号的板A、用于测量4-20mA电流信号的板B。

(1) 电源板

        电源板的功能是为两种测量板提供5V的稳定电压, 并提供电池状态和充电状态指示的接口。对于测量节点,电源板使用的PCB名称为“UPS2”。如下图:

        电源板使用两节3.7V锂电池串联,通过AMS1117-5.0稳压后得到5V。

        图中,BAT1和BAT2是两个PH2.0插座,用于连接电池(!连接前请确认电池正负极是否与丝印一致!)。丝印“SW”所指的两个圆形、带通孔的焊盘是开关连接位置,二者被短接时电池才有输出。

        PCB中预留了两个AMS1117焊接位置,它们是并联的。如果负载对电流的需求小于1A,可以只焊接任意一个AMS1117。

        PCB右下角预留了一个锂电池的安装位置。作者使用的是603450电池(某宝),两块叠放并用胶水固定。电池如下图。当然,如果空间允许,也可以更换容量更大、体积更大的电池。不过本项目提供的3D外壳可能放不下,请重新设计。

        PCB的最左侧留有六个XH2.54插座,它们分为三组:“VIN”、“VBAT”和“5V”。每一组都是互相短接的,并提供了正、反两种焊接位置,正负极均与丝印一致。

        电源板使用PL7501C为两节锂电池充电,使用PL7022B对两节锂电池进行保护。充电时,请为“VIN”中的一个XH2.54插座连接5V电压。默认最大充电电流为1A,请确保电源适配器的输出电流足够。

        本项目还提供了一个Type-C接口转5V的小型电路板,PCB的名称为“TypeC-5V”,为其焊接XH2.54端子线后可以直接插到电源PCB的插座上。

        “VBAT”插座与其中一个电池的正负极连接,输出这个电池目前的电压,用于测量板的电量监测。

        “5V”输出稳定的5V电压,为两种测量板供电。当正在充电时,该电压直接由VIN输出;当使用电池放电时,该电压由AMS1117输出。切换过程不会影响测量板工作。

        注:电源还有另一种方案:对单节锂电池的3.7V进行升压得到5V,对应的PCB名称为“UPS”。该PCB左侧有一个空槽,需要在边缘的焊盘上大量堆锡,以与电源模块(某宝)(如下图所示)连接。PCB建议打样厚度为1.2mm。

ZT5AMu8KdUzPhkgaKzNiK8O9RhAmFB2GWlNPyKMG.png     

        注:上述升压方案不建议使用在测量板中。该方案有较大纹波,会为测量数据带来相当大的噪声。

        注:尽量不要在充电时进行测量。某些电源适配器的输出电压质量较差,这同样会干扰测量结果。

(2) K型热电偶的测量板

        K型热电偶的测量板为um_op。PCB的背面安装有八个接线端子,直接与K型热电偶连接。它使用OP07组成差分放大器,放大热电偶的信号,并将放大后的信号输入模数转换器AD7327。AD7327与ESP32单片机连接,被设置为从机,通过SPI传输数据。单片机还挂载了MAX6675和SD卡,分别负责热电偶的冷端补偿和数据备份。

        PCB上安装有一个SGM3204,用于产生负电压。这使得即使热电偶的热端比冷端温度低,测量板仍可以正常采集。

        PCB的顶面和底面如下图。

qcIDTyCWF55GJKcyC16JlHY0EiHBRQnZM1ipXQ75.png      

        顶面安装有三个XH2.54插座,分别为“5V”、“VBAT”和“VIN”,其与电源板中三个插座对应。“5V”是供电插座;“VBAT”是电池电量监控的插座,连接后可在电池电量低时亮起指示灯,若不连接也可以正常工作;“VIN”是充电状态指示的插座,连接后可在充电时亮起指示灯,同样地,不连接也可以正常工作。顶面左下方,由丝印“LED”指示的插座是一个XH2.54-1x5P插座。它连接一个四位数码管,用于显示节点编号。如下图(某宝)

        底面有三个LED,丝印“Running”表示测量板已通电,“charging”表示正在充电,“LOW_POW”表示电池电量低。底面下方有两个按钮:丝印“RST”表示重启单片机,“BLE”表示打开蓝牙(蓝牙的功能将在下文说明)。

(3) 4-20mA电流信号的测量板

        4-20mA电流信号的测量板为um_420。它使用150Ω的精确采样电阻直接采集4-20mA的电流,最大将造成3V压降。在我的测试环境中,电流环最大允许12V压降。若采样电阻太大,可减小采样电阻并增加一级运放,应确保20mA对应的运放输出电压为3V。

        um_420的PCB与um_op基本一致, 顶面和底面如下图:

Tznf7pZNOwussoIq0BVWbP6lD13L58ECmiziA4GR.png      

        um_420的PCB没有负电源,且多了两个接线端子。这是因为4-20mA的信号一般需要额外电源(多为24V), 如果使用锂电池供电将造成很高的能耗。丝印“外部电源”所示的两个接线端子是短接的。其中一个连接电源,另一个可以连接到别的测量板上,实现级联。

5.2 单片机

        程序使用ArduinoIDE编译。由于程序对内存的占用较大,测量板单片机选用ESP32-WroverB模组(某宝),直接插在两排2*19P平行贴片排母的外侧列。

        注:作者建议开启PSRAM,并将单片机的分区修改为“HugeAPP”。

        单片机相关程序见于附件。其中,um为挂载SD卡的测量程序,SD卡未插入时程序将无法正常运行。若SD卡损坏或无需挂载SD卡,请烧录um_noSD:除SD卡外,功能与um一致。K型热电偶测量板和4-20mA测量板均使用上述单片机程序。

        单片机的程序需要导入外部Websocket库,库文件见于附件“arduinoWebsockets-master”。

        下面对程序做出几点说明:

(1) 蓝牙模式说明

        每个节点拥有自己独立的编号和测量模式,每一台服务器也有特定的无线局域网和ip地址,这些信息常常发生变化。若每次改变均需重新烧录,这将会是一项繁琐的工作,系统的适用性随之大打折扣。

        因此,单片机使用蓝牙+EEPROM的方式存储这些关键信息。如果它们需要修改,用户可以使用蓝牙设备直接访问单片机,无需经由串口。这样的优点是信息方便编辑且掉电不丢失,无需反复配置;缺点是需要单独配置蓝牙,程序体积显著增大。

① 如何进入蓝牙模式?

        若单片机可以连接到WLAN,可在其正常工作时单击“BLE”按键以打开蓝牙;

        若单片机无法连接到WLAN,请首先确保单片机已正确上电,然后按住“BLE”按键的同时,单击“RST”按键。“RST”释放后3秒左右,再释放“BLE”。这样做可使蓝牙先于WLAN打开。

② 如何连接到单片机?

        请在手机(或其他蓝牙设备上)下载“蓝牙串口调试助手”(或其他功能类似的应用),打开设备的蓝牙开关,找到单片机对应名称的蓝牙(默认为”ESP-BLE002”,可修改)。最后点击“连接”,即可与单片机建立蓝牙链接。

③ 如何修改EEPROM中保存的信息?

        对于测量板,可以按照如下格式向单片机发送消息,来修改某些参数:

● “number:XXX”:将该单片机的地址设置为XXX。XXX为三位整数,例如001

● “kind:X”:将该单片机的测量模式设置为X。X是一个字符,可以为’k’,’p’或’v’。分别表示测量热电偶、测量4-20mA电流和直接测量ADC通道的电压。

● “ipv4:XXX.XXX.XXX.XXX”:将服务器在WLAN中的ip地址设置为XXX.XXX.XXX.XXX。例如:“ipv4:192.168.0.13”。

● “ssid:XXXXX”:设置要连接WiFi的ssid,例如“ssid:MYSSID”。

● “psw:XXXXX”:设置要连接WiFi的密码,例如“psw:123456”

        这些信息可以修改其中的一个或几个。在全部发送完成后,发送“end”可退出蓝牙模式,同时,单片机会将这些修改保存至EEPROM。修改完成后,请立即重启单片机以使之生效。

④ 如何修改单片机的蓝牙名称?

        打开um程序(或um_noSD),找到预定义“this_BLE_no”,修改其值即可。

(2) 修改采样频率

        打开um程序(或um_noSD),在setup函数中,找到”timerAlarmWrite(timer1, 1000, true);”。这段代码表明每1000us采样一次,采样频率为1ksps。

        然后找到预定义“#define M_Size 500”。这行代码表明每采集500个数据上传一次。在1ksps的采样频率下,每秒发送两次数据。

        假设要修改采样频率为2ksps,首先修改计时器为:timerAlarmWrite(timer1, 500, true); 设置500us采样一次。然后修改预定义#define M_Size 1000,使之仍然每0.5秒发送一次数据。

        注:作者不推荐修改采样频率,因为这可能引起一系列问题,包括:数据发送迟滞,丢包率增加;单片机内存占用加大;采样质量下降等。一般来说,1ksps能够满足多数实验需求。对于较低的采样频率要求,请通过数值处理的方法获得有效数据;对于较高的采样频率要求,请联系作者定制新的单片机和服务器程序:rm-f@qq.com

(3) 自定义数据处理函数

        单片机并不会获得精确的物理量取值,而是向服务器上传采集到电压的原始数据。对数据的处理和转换依靠测量网页的javascript完成。

        单片机的每个数据包包含了一个通道在过去0.5s内所有的采样数据,其最后五位被用于区分数据类型。这些数据将发送到WebSocket服务器。WebSocket服务器对其简单处理后,将一份特定格式的数据发送给HTTP服务器,再由HTTP服务器将它们呈现在网页上。

        网页的javascript程序默认将K型热电偶数据按照分度表映射到-260℃至1300℃的范围内,将4-20mA电流信号按照线性映射到0-100MPa的范围内,将-5~5V的电压信号按照原数值输出绘图。

        若要修改这些映射关系,或重新定义数据处理函数,请打开“安装目录\Apache24\htdocs\user_measure\script.js”,找到”sendRequest()”函数, 找到” for (var i = 0; i < new_data.length; i++) {…}”循环。其中,new_data为一个二维数组,new_data[i]为目前正在处理的数组。

        new_data的结构如下表:

“m001A”

1023

1029

36.25

“m001B”

2083

2085

“P”

“m001H”

3096

3044

“V”

 

        new_data[i]的第一个元素为地址位,最后一个元素为模式识别位,中间为有效数据。若该数组的最后一位为“P”,则代表单片机正在测量4-20mA的电流信号;若为“V”,则代表单片机正在测量-5~5V的电压;若为一个浮点数,代表单片机正在测量K型热电偶,该浮点数表示冷端的温度。

        有效数据中,-4095~4096表示-5~5V的电压。请按照自定义规则对这些数据逐个处理。对于记录K型热电偶的数组,在处理完成后应将最后一个元素修改为“T”。

        第192行的unit对象保存了不同测量模式下,绘图时显示的单位,可根据需求自行修改。

var unit = { //单位  
         P: 'MPa',
         T: '°C',
         V: 'V' 
        }      

 

5.3 测量节点外壳

        测量节点的外壳包含两部分:底壳和顶盖。其3D模型见于工程附件中的“um外壳”。

        注:底壳的模型方案适用于电源“UPS2”。

(1) 底壳

        底壳的侧视图如下:

①:底壳上方的四个带通孔的平台,用于安装测量板。这些通孔直径2.5mm,与PCB板上的四个通孔位置对应。请用攻丝扳手打出M3螺纹,再用螺栓将PCB固定于其上。

②:TypeC接口位置。请将“TypeC-5V”的PCB(见5.1-(1))焊接好,将正负极焊盘与XH2.54端子线焊接,然后将端子线的公头插入电源板“UPS2”的“VIN”插座上(注意正负极方向)。typeC插座通过底壳内侧插入②所示的方孔中,用胶水固定。

③:天线接口预留位置。由于测量板采集的信号非常微小,它们可能受到周围强大的电磁场干扰。因此,外壳上预留了这样一个孔,用于将单片机的天线引出。

        如果需要这么做,请先将ipex1代的天线座焊接于ESP32-WROVERB模组的预留位置上,并更改附近0Ω电阻的焊接位置,使之与天线座连接(百度).然后使用ipex转SMA座的转接线,ipex端连接天线座,SMA座端通过③所示的孔从底壳内侧引出,并用胶水固定。再根据SMA的接口类型选择合适的天线,安装到SMA座上。安装后效果如下:

        最后, 对顶壳和底壳全部裸露的表面贴上锡纸, 以屏蔽电磁干扰。

④:电源板预留位置。其大小基本与“UPS”或“UPS2”的PCB大小一致。电源板焊接完成后,可安装到这个位置。对于“UPS2”,PCB板和底壳上均开有两个直径3.5的通孔,可用M3螺栓固定。

⑤:四个机脚座。使用M3的螺栓与底壳固定,可以参考如下规格(某宝):

⑥:船型开关安装口。船型开关选用14*9的单刀单掷规格,从外侧压入⑥所示的安装空,然后将两脚焊接导线,连接到电源PCB对应的焊盘上(见5.1-(1))。

⑦:四位数码管安装口。将四位数码管从内侧安装,并用胶水固定,引脚使用转接线连接到测量板的XH2.54-1x5P座上。PCB上各个焊盘对应的引脚如下图,焊接时请注意数码管引脚和XH2.54座的对应关系。

⑧:18650嵌入式电池盒安装位置。在新的电源设计中(“UPS2”), 18650电池已经不再使用,这个位置请留空。如果使用名为“UPS”的PCB电源方案,请在此从外侧安装如下图的电池盒(某宝),并用胶水固定。

(2) 顶盖

        顶盖的侧视图如下:

        顶盖安装于底壳上。顶盖上表面有两个矩形的镂空,测量板PCB的接线端子与外界的连线可以由此引入。

 

6. 控制节点的设计与功能

 

6.1 PCB板

        控制节点一共包含两块PCB板:电源和控制板。此外,控制节点的正常工作还需要同步器和急停电路,它们各有一块PCB板。

(1) 电源

        电源方案与测量节点相同,此处不再赘述。由于控制节点对电源质量的要求不高,所以“UPS”和“UPS2”两块PCB板均可使用。作者更推荐使用名为“UPS”的PCB板,因为它支持18650锂电池,方便更换。

(2) 控制板

        控制板的PCB名称为”USER_CTRL”。它有一个外接电源,通过单片机发出控制信号来改变八路固态继电器的状态,进而改变八个接线端子与电源的导通与切断。PCB的顶面与底面2D图如下:

fFo0q3uc52GxoPfWRrHNU0XuZ3mxfkrtDidUKqCi.png      

        在PCB顶面,最下方为八个固态继电器的安装位置。该继电器使用的是插针式PM5D6132(某宝),如下图:

        顶面的各个插座的功能与测量节点完全相同。

        在PCB底面,左侧有“DC_in”丝印标记的是外部电源输入端子,直接与直流电源相连;右上侧有“Trig”标记的是触发信号输入端子,与同步器的输出通道连接。

        在PCB底面,两侧安装有八个接线端子。当某通道被打开时,相应的接线端子之间会呈现电压,大小约为外部输入的电压,方向与丝印一致;当该通道关闭时,接线端子之间呈现高阻态。

        底面中的“RST”和“BLE”按钮的功能与测量节点一致。

        PCB底面上,安装有六个LED指示灯,其功能如下:

① Ready:亮起表示已经接收到服务器的时序指令,触发信号到来时可立即执行时序(触发信号会在下文说明); 未亮起表示还没有接收到服务器的时序指令,触发信号到来时不会执行时序。

② BLE:亮起表示处于蓝牙模式;未亮起表示已退出蓝牙模式。

③ Low_Power:亮起表示电池电量低

④ Running:控制板上电即亮起,掉电后熄灭。

⑤ Charging:亮起表示正在充电。

⑥ Connect:闪烁表示正在尝试连接WiFi,常亮表示已经连接到WiFi

(3) 同步器

        一台实验可能需要同时用到两个或更多个控制节点,它们应同时开始执行时序。无线网络的延迟动辄几十毫秒,我们不能简单地通过收发指令来使这些节点同时启动,这有时会带来相当大的偏差甚至引起实验失败。

        由此,作者设计了同步器,它与所有控制板的触发端通过导线连接。同步器中的单片机中会事先保存一个密钥;当开始实验时,服务器会向同步器发送一个含有密钥的启动口令(见4.5)。若两个密钥匹配,同步器会在所有的触发导线上同时引起一个上升沿,以此作为各个控制板的启动信号。经测试,这种启动方式下,各个控制板的同步性偏差不超过0.3ms。

        同步器的PCB名称为“TRIG2”,其顶面和底面如下图:

VHo40zTeXOeA7UjLSJy9tOXymHOg3jHLs04qb9aP.png

        在顶面,上方有“BAT”丝印的焊盘是单节锂电池接口。锂电池引出导线后直接焊接到PCB相应位置上。其下方有四个矩形焊盘的元器件是5VDCDC升压板(某宝), 如下图所示:

        在底面,两侧各有八个触发信号的发射端子,它们彼此并联,正负极如丝印所示。在使用时需将其与控制板的触发接收端子连接。

        底面上,指示灯和按钮的功能均与控制板相同,此处不再赘述。

(4) 急停板

        实验出现紧急情况时, 人们可以通过快速按下急停按钮来达到保护的措施。对于控制板,在紧急状态下,某些通道需要闭合,其余的需要保持开路。

        急停板的PCB名称为“EMER”,其示意图如下。

        为使急停发挥作用,请预先区分好各控制板需要在急停状态下闭合和开路的通道。然后对各控制板的电源和上述需要开路的通道进行以下操作:

a. 将直流电源的两端分别焊接到+24V和GND的连接位置。

b. 从GND引出线,作为各控制板外部电源的负极;从②所示焊盘引出导线,作为各控制板外部电源的正极。

c. 选择一个急停开关的两个常开引脚,将其一端焊接到+24V的焊盘上,另一端焊接到①所示的焊盘上。

d. 急停板周围环绕着七个绿色的接线端子。对于急停状态下需要闭合的通道,请将该通道的负极直接连接于负载,将其正极连接于急停板上绿色端子的正极,再从急停板上绿色端子的负极引出线,接于负载。从顶面向下看,按照顺时针方向,每个绿色端子的两个接线口分别为正极和负极。具体的接线图示见6.1-(5)。

e. 在紧急状态下按下急停开关,即可实现所有控制板的外部电压全部断开,未连接到急停板的通道呈现高阻态,连接到急停板的通道输出电源电压。

        注:选择导线,尤其是电源导线时,请留意导线上负载电流的大小,并根据允许的温升选择合适的线径。

        注:一个急停板最多支持七个需要开路的通道。如果需要更多的急停板协调工作,请将它们连接于同一个电源和急停开关中。

        注:急停板的焊盘较为紧凑,请留意避免导线接触引起短路。

(5) 控制板、急停板、触发器、电源、急停开关和负载的连接方式

        如下图(单片机及其供电已被省略):

        图中,负载1、3为紧急状态下需要上电的,负载2、4为紧急状态下需要关机的。

        由于作者调试时使用了24V直流电源,所以部分引脚有“24V”相关的网络名称。实际上,外部电源的输入范围为5-30VDC,依负载而定。

 

6.2 单片机

        控制板和同步器均使用ESP-WROOM32单片机,如下图(某宝)。

        二者程序均由ArduinoIDE编译。Websocket库文件见于附件“arduinoWebsockets-master”。

6.2.1 控制板单片机程序

        控制板的单片机程序为USER_CONTROL.ino。由于程序中调用了蓝牙和WiFi库,需要较大内存占用,请将分区模式调整为Huge_APP。

        下面对单片机的程序做出以下说明:

(1) 时序触发机制

        如6.1-(3)所言。控制板若想启动时序,首先要通过服务器向单片机发送消息,使之转为“等待触发状态”(见4.5,此时“Ready”指示灯亮起)。然后操作同步器产生特定的电平信号(触发信号),并使之传递到控制板的触发端。

        触发端与单片机中的某一引脚相连。单片机为触发信号设置了中断。触发信号到来后,单片机马上开始执行已经解析好的时序,直到时序全部执行完成。随后,Ready指示灯熄灭,单片机等待1s后状态复原,可以重新编辑和向其发送时序。

        4.3-(2)所示的手动改变某一通道的状态的功能,在单片机除时序执行之外的任何时间内均有效。也就是说,通过网页的手动控制无需确保单片机处于“等待触发状态”,但是时序起动则需要。

(2) 蓝牙功能

        控制板单片机的蓝牙功能与测量板的基本一致,支持以下的格式消息:

● “number:XXX”

● “ipv4:XXX.XXX.XXX.XXX”

● “ssid:XXXX”

● "psw:XXXXXXXX”

        详细内容见5.2-(1)。

6.2.2 同步器单片机的程序

        同步器的单片机程序为TRIG2.ino。由于程序中调用了蓝牙和WiFi库,需要较大内存占用,请将分区模式调整为Huge_APP。

        下面对单片机的程序做出以下说明:

(1) 蓝牙功能

        除6.2.1-(2)所述的功能外,同步器的单片机还支持保存并修改启动密钥,其具体的消息格式为:

sce:XXXXXXXX

        注:启动密钥必须为八位可见字符。若蓝牙输入的密钥长度大于8,则会截取前八位作为密钥保存;若小于8会报错并舍弃这个密钥。

(2) 参与网络

        同步器与控制板类似,都通过EEPROM中的number参数对应值设置自身的地址,并加入WebSocket网络。

        作者建议将同步器的地址设置在080-089,将控制板的地址设置在001-079来进行区分。

 

6.3 3D外壳

6.3.1 控制板的外壳

        控制板的外壳侧视图如下:

        外壳的大部分设计与5.3-(1)测量节点的底壳类似,此处只做简述:

① 四个直径2.5mm通孔,请攻丝M3,用于安装控制板PCB

② 机脚座通孔,直径3.5mm

③ 船型开关安装口,14*9mm

④ 嵌入式电池盒安装口,从外侧安装,用胶水粘结

⑤ LED四位数码管安装口,从内侧安装,用胶水粘结

⑥ 电源板安装位置。“UPS”或“UPS2”电源板均可让单片机正常工作。若使用“UPS2”的PCB,则④所示电池盒可以不安装。

⑦ TypeC接口安装位置,从内侧安装,用胶水粘结。

        由于控制板中的信号多为数字信号,抗干扰能力较强,一般情况下无需对空气中的电磁波做特殊防护

6.3.2 同步器外壳

        同步器外壳的侧视图如下:

        其大部分设计与5.3-(1)测量节点的底壳设计类似,此处只做简述:

① 四个,直径2.5mm通孔,用于安装同步器PCB。请攻丝M3用螺栓将PCB固定。

② 机脚座通孔,直径3.5mm

③ 船型开关安装口,14*9mm

④ 嵌入式电池盒安装口,从外侧安装,用胶水粘结

        同步器四周开有一些矩形孔,其作用是方便安装PCB和单片机。安装时请先完成除开关外的所有焊接,从外壳的顶面外侧安装PCB,从外壳的内部插入单片机,然后再安装电池盒。最后,从开关孔引出线,在外壳外面焊接到开关的引脚中,并安装开关。

        注:同步器不支持充电。若18650电池乏电请取下后充电。

6.3.3 急停板外壳

        由于急停板接线较多,且使用情况复杂,暂时没有设计3D外壳。后续会更新工程对此补充。

 

7. 如何使用这套系统?

 

(1) 准备工作:

● 为实验区域创造可靠的WiFi信号;

● 阅读项目说明,打样并焊接所有的PCB板

● 3D打印附件中的外壳,购买无聊,组装好测量节点、控制节点和同步器

● 参照PCB文件中单片机座的“3.3V”引脚,选择合理的方向插入单片机

 

(2) 开始测量:

为所有需要用到的测量节点上电,并连接好传感器,然后通过蓝牙配置节点和网络信息(若已配置请忽略)(见5.2-(1))。

按照需求修改数据处理函数(见5.2-(3)),然后启动服务器。

打开辅助程序,连接到服务器。

在辅助程序的“测量节点管理”选项卡,检查在线链接数量和它们的网络延迟。

确认所有节点全部在线后,点击“执行准备”开始测量。

浏览器打开localhost/user_measure查看实时数据。对于WLAN中非服务器的其他用户,请将localhost替换为服务器在WLAN中的地址,例如:192.168.43.5/user_measure

实验结束后,再次点击“执行准备”停止测量。

进入“安装目录\dataget\RCV”文件夹,找到对应的log文件(由时间命名,服务器每次启动会重新生成),其中包含了采集到的所有原始数据。

找到附件中的“work_dir”文件夹,编译其中的“data_deal.cpp”,获得“data_deal.exe”。将⑧中的log文件复制到“work_dir”文件夹,然后双击“data_deal.exe”,一段时间后自动生成一个与log同名的csv文件。

打开csv文件,其中保存了从实验开始到实验结束全部的采集数据,并已自动转换为物理量的值。

        注:work_dir为一个数据处理程序,使用C++编写,需要引用nlohmann/json.hpp(见附件“json_develop”,添加“single_include”文件夹到引用目录)。程序中对K型热电偶、4-20mA电流和电压信号的处理函数分别是del_T、del_P和del_V。这些函数传入的参数是采集的原始电压数据(-4095~4096, 映射到-5~5V),返回值是经处理后物理量的值。对于K型热电偶的处理函数,程序中带有一个温度-电压分度表,其插值结果基本是精确的,作者不建议修改。

若实验进行时单片机的信号丢失,请拔出测量板的SD卡,将其插入电脑读卡器。SD卡中的“dataRCV”目录保存了所有的历史测量数据,其文件名称为“mXXX.txt”,编号较大者采集时间较晚。

        注:历史文件堆积过多时可能会出现命名错误。作者建议每次实验结束后将SD卡中的数据备份,然后清空“dataRCV”文件夹,并修改file_no.txt的内容为“0”(没有引号, 没有换行, 只有一个数字0)。

 

(3) 开始控制:

① 为所有需要用到的控制节点和同步器上电,按照6.1-(5)所示接线并连接好负载.然后通过蓝牙配置控制节点和同步器的网络信息(若已配置请忽略),通过同步器的蓝牙配置本次实验的起动密钥(见6.2)。

② 若使用时序控制

a. 打开辅助程序,连接到服务器

b. 进入“时序编辑”选项卡配置各通道时序,并把文件保存到本地。

c. 进入“时序查看”选项卡打开时序文件,检查时序图形,将其发送至服务器(见4.5)。

d. 进入“控制节点管理”选项卡,检查在线链接数量和它们的网络延迟。点击“开始注入”将时序文件发送至各节点。

e. 点击“执行准备”,令各节点进入等待触发状态。

f. 进入“时序启动”选项卡,输入起动密钥,点击“起动”。5秒后开始执行时序。

g. 若遇到紧急状态,请立即按下急停按钮,与急停板连接的通道将瞬间打开,其余通道瞬间关闭。

③ 若使用手动控制

a. 通过浏览器进入“localhost/user_control”,注册账号并登录.

b. 添加所需的控制通道名称。该名称的格式为“[s0XX]N”,例如[s009]A。(见4.3-(2))

c. 通过点击“ON/OFF”来控制该通道的开闭。

 

8. 现存的问题

(1) 电源测试尚不充分,可能后期会修改电源设计方案。

(2) 控制服务器会锁定用户登录状态,可能出现退出登录后无法再次登录的问题。该问题难以复现。尽量避免通过杀进程的方式关闭网页可以减少该问题的出现。

(3) 测量板可能出现SD卡文件名称错误。该问题难以复现。请及时清理SD卡文件。

 

9. 结语

电设小白一枚,很多设计有待优化。

如果有任何问题,请联系:rm-f@qq.com

开源项目会不定期更新,作者将在评论区发布更新日志,欢迎关注。

 

============END============

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
单片机程序.zip
23
2
单片机依赖库.zip
23
3
3D模型.zip
14
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航