LI雨骤Moku:Go M1初步体验
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、Moku:Go初上手
- 二、Python API的使用
- 总结
前言
Moku:Go是Liquid Instruments公司为新理工科人才培养提供的完善工程实验教学解决方案,满足从强化基础教学到自主创新人才培养的课程体系。 Moku:Go集成8个仪器功能并提供选配可编程电源,取代笨重、繁琐的传统台式测量设备。学生可以将全套实验室装入书包,无论身在何处随时随地都可以学习。 Moku:Go可以通过自带Wi-Fi热点连接操控,集成了可靠,具有电气保护的信号接口,USB-C用作电源接口以及高速数据传输,以及6种可选颜色。Windows和Mac端的操作软件提供易用且直观的图形用户界面,还可以通过API与课程集成。 Moku:Go硬件以软件设计充分考虑了用户需求,确保学生获得完整、连贯的四年学习及课外实践体验。
本篇文章将从Moku:Go M1的基础使用入手,见识见识未来电子信息专业学生是如何进行实验的。
一、Moku:Go初上手
LI官网网址:http://www.li.market/,在“获取平台详情”选项中可以找到各类文档、Moku软件和各类API的使用方式。
将Moku:Go磁吸式电源插上电后,经过短暂的等待,黄灯变为绿灯,即代表它已经正式开启。然后就可以通过配套的数据线、或是用WIFI直接连接(硬件背后有该Moku:Go的编号和WIFI密码)的方式第一次连接Moku:Go。在设置界面可以修改设备名、修改密码,连接外界WIFI并手动分配IP地址等等,此后就可以通过寝室WIFI去访问它了,并且也有了远程控制(不需要去连设备本身的WIFI)的可能性。
时至今日,Moku:Go M1已经能够提供诸如示波器、频谱分析仪等11种仪器、功能以及自身具有的两通道可编程电源。不得不说的是它的界面相比于传统设备确实新颖了很多。
上图是PID控制器界面,支持两通道输入输出,对应Moku:Go M1的两通道模拟输入和输出。可同时进行两路PID调控,但由于仅支持两路输入,所以两路PID调控在这里的作用更多的是进行对比。(一般两路输入分别是当前量和目的量,通过PID控制让当前量趋于目的量,或是两者之差趋于零)
Moku:Go的界面简单易懂,并且输入输出口都是和常规的实验设备一样的,还是很好上手的。
二、Python API的使用
先来网址:https://apis.liquidinstruments.com/starting-python.html
大致就是说要求python3.5以上,pip install moku然后moku download就好了。
在当前你可能会下载版本2.4的API,而Moku:Go硬件可能只到2.2,所以某些函数可能会出现库里有,用不了。库里已经删了,你也用不了的情况出现。笔者当前没有试过去下旧版本的库,大部分还是能用的,小部分对照着官网文档和函数描述改一改就可以了。
大致使用方式:
$: python
>>> from moku.instruments import Oscilloscope
>>> osc = Oscilloscope('192.168.123.45')
>>> data = osc.get_data()
>>> print(data['ch1'], data['ch2'], data['time'])
通过get_data函数就获得了近时间内Moku:Go采集到的数据了,是包含两通道输出数值、对应时间的python字典形式。
调用get_data函数本身需要消耗不少时间,大概为0.3S左右。这与它数据读取的机制有关,当前不能确定的说法是:Python API读取Moku:Go数据是通过访问其开启的http服务实现的(因为某次不经意的报错告知http出现问题)。Moku:Go并没有建立更快速、持续的连接,所以目前不能通过Python API完成远程数据的实时读取。
通过这样的现象,笔者也猜测:Python API、Matlab API等方式,都只是对某一种方式的套壳,就比如是http的方式。只不过是调换了编程方式,本质过程没有改变,这也比较符合“接口”这一词。
对于设备的初始化函数:
osc = Oscilloscope('192.168.10.200',force_connect=False)
默认参数force_connect=False会让你在大部分情况下是连不上Moku:Go的(报错,当前API正有用户在使用),因为之前的用户没有接触占用(特别是使用Python API时),根据官方文档来说,要使用下面这句话,但大多时候似乎也是没用的。
osc.relinquish_ownership()
这里也就得提一嘴,Multi-Instruments功能还没有上线,说人话就是现在你还不能一边使用示波器、一边使用频谱分析仪。当你电脑软件在线时,你也不能通过Python API直接使用(不强制连接),否则会将电脑端踢下线。所以既要使用Python API,又要查看波形就得用Python相关的库去绘制。这里给出一个使用pyqtgraph绘图的小demo。
import pyqtgraph as pg
from moku.instruments import PIDController
import timename = "Input2"pid = PIDController('192.168.10.200', force_connect=True)# 获取pid数据的定时回调函数
def get_pid_data():time1 = time.time()info = pid.get_data()time2 = time.time()print("耗时:", time2 - time1)x = info['time']y = info['ch1']# print(x[int(len(x) / 2)])# print(y[int(len(x) / 2)])plot.setData(x, y, pen='g')if __name__ == '__main__':pid.set_monitor(1, name)pid.set_control_matrix(1, input_gain1=1, input_gain2=-1)pid.set_control_matrix(1, input_gain1=0, input_gain2=1)# pyqt's初始化# 创建窗口app = pg.mkQApp() # 建立appwin = pg.GraphicsWindow() # 建立窗口win.setWindowTitle(u'pyqtgraph 实时波形显示工具')win.resize(800, 500) # 小窗口大小# 创建图表historyLength = 100 # 横坐标长度p = win.addPlot() # 把图p加入到窗口中p.showGrid(x=True, y=True) # 把X和Y的表格打开p.setRange(yRange=[-5, 5], padding=0)p.setLabel(axis='left', text='电压') # 靠左p.setLabel(axis='bottom', text='时间')p.setTitle('PID') # 表格的名字plot = p.plot()timer = pg.QtCore.QTimer()timer.timeout.connect(get_pid_data) # 定时刷新数据显示timer.start(50) # 多少ms调用一次app.exec_()
或者使用python中matlab绘图库。下述代码是从官方PID控制器例程中改过来的,保留了部分注释。(笔者自己写是不会有注释的哈哈)
# moku example: PID Controller Plotting Example
#
# This script demonstrates how to configure both PID Controllers
# in the PID Controller instrument. Configuration on the Channel 1
# PID is done by specifying frequency response characteristics,
# while Channel 2 specifies the gain characteristics.
#
# The output response of each PID Controller channel is plotted
# in real-time.
#
# (c) 2021 Liquid Instruments Pty. Ltd.
#
import matplotlib.pyplot as plt
from moku.instruments import PIDController# Connect to your Moku by its ip address using PIDController('192.168.###.###')
# or by its serial number using PIDController(serial=123)
i = PIDController('192.168.10.200', force_connect=False)try:# Configures the control matrix:# Channel 1: input 1 gain = 1 dB, input 2 gain = 0 dB# Channel 2: input 2 gain = 0 dB, input 2 gain = 1 dBi.set_control_matrix(channel=1, input_gain1=1, input_gain2=0)i.set_control_matrix(channel=2, input_gain1=0, input_gain2=1)# Configure the Channel 1 PID Controller using frequency response# characteristics# P = -10dB# I Crossover = 100Hz# D Crossover = 10kHz# I Saturation = 10dB# D Saturation = 10dB# Double-I = OFF# Note that gains must be converted from dB firsti.set_by_frequency(channel=1, prop_gain=-10, int_crossover=1e2,diff_crossover=1e4, int_saturation=10,diff_saturation=10)# Configure the Channel 2 PID Controller using gain characteristics# Overall Gain = 6dB# I Gain = 20dBi.set_by_gain(channel=2, overall_gain=6.0, prop_gain=20)# Set the probes to monitor Output 1 and Output 2i.set_monitor(1, 'Output1')i.set_monitor(2, 'Output2')# Set the timebasei.set_timebase(-1e-3, 1e-3) # +- 1msec#i.set_trigger(type='Edge', source='Input1', level=0)# Enable the output channels of the PID controlleri.enable_output(1, True, True)i.enable_output(2, True, True)# Get initial data frame to set up plotting parameters. This can be done# once if we know that the axes aren't going to change (otherwise we'd do# this in the loop)data = i.get_data()# Set up the plotting parametersplt.ion()plt.show()plt.grid(b=True)plt.ylim([-1, 1])plt.xlim([data['time'][0], data['time'][-1]])line1, = plt.plot([])line2, = plt.plot([])# Configure labels for axesax = plt.gca()# This loops continuously updates the plot with new datawhile True:# Get new datadata = i.get_data()# Update the plotline1.set_ydata(data['ch1'])line2.set_ydata(data['ch2'])line1.set_xdata(data['time'])line2.set_xdata(data['time'])plt.pause(0.001)except Exception as e:print(f'Exception occurred: {e}')
finally:# Close the connection to the Moku device# This ensures network resources and released correctlyi.relinquish_ownership()
记得把IP地址改成你自己手动或是DHCP分配的就好了。在设置界面就能看到Moku:Go当前的IP。
总结
虽然Moku:Go当前不是非常的全面,特别是不能多仪器并行是非常大的一个槽点,但“片上仪器”这种思想还是非常值得肯定的。对于学生来讲,使用灵活好用的界面、编程控制仪器等等都是很不错的体验,就看未来它会如何继续发展了。
LI雨骤Moku:Go M1初步体验相关推荐
- mysql connector api_mysql connector c++ 1.1 API初步体验
mysql connector c++ 1.1 API初步体验 1,常用的头文件 #include #include #include #include #include #include 2,创建连 ...
- 初步体验数据驱动之美---TreeView
1.前言 继上一篇<WPF应用基础篇---TreeView>的发布之后,有部分朋问我关于里面一些基础应用的问题,可能是我写得不够详细,所以在这里,我想再次那文章中的案例来谈谈初步体验数据驱 ...
- Docker Compose 简介、安装、初步体验
[Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...
- 一枚程序猿的MacBook M1使用体验
前言 2020年11月11日双十一上午,苹果发布了M1芯片的新款Mac,其最大的变化就是将处理器从Intel换成了苹果自研的ARM芯片M1. 上一次苹果更换Mac芯片要追溯到2006年,14年前,苹果 ...
- 一枚程序猿的MacBook M1详细体验报告
前言 2020年11月11日双十一上午,苹果发布了M1芯片的新款Mac,其最大的变化就是将处理器从Intel换成了苹果自研的ARM芯片M1. 上一次苹果更换Mac芯片要追溯到2006年,14年前,苹果 ...
- 我的 MacBook M1 使用体验
点击上方"五分钟学算法",选择"星标"公众号 重磅干货,第一时间送达 前言 2020年11月11日双十一上午,苹果发布了M1芯片的新款Mac,其最大的变化就是将 ...
- 百度无线音乐盒刷打印服务器,百度 M-100 无线音乐盒 初步体验+简单拆解
百度 M-100 无线音乐盒 初步体验+简单拆解 2014-01-23 13:26:55 18点赞 26收藏 15评论 前段时间京东上面这个盒子做活动,虽然手头蓝牙音箱啥子的也有几个,不过受到这个盒子 ...
- 浅谈升级到 MacBook Air M1的体验
从定制顶配 MacBook Pro 15.4 升级到了丐中丐配置的 MacBook AIr M1,手边有这两台设备可以直观的对比,本文谈谈这次升级及实际体验和所发现的趣事. 升级前后的机型 在购买这台 ...
- ShardingSphere UI 初步体验
简介 在上两篇文章中,尝试了ShardingSphere JDBC和Proxy的相关功能,本篇进行探索ShardingSphere的UI组件部分 示例运行 这个应该是一个管理配置之类的东西,国际惯例, ...
最新文章
- 汇博工业机器人码垛机怎么写_一文带您理解码垛机器人,原来它这么简单!
- Kubernetes — MACVLAN CNI
- 【安全工具】浅谈编写Java代码审计工具
- SAP销售发票同步产生会计凭证的两种做法
- vmware克隆Centos6.4虚拟机网卡无法启动问题
- LeetCode 226. 翻转二叉树(DFS BFS)
- 综评:5个方面看刚刚发布的Kubernetes 1.12
- elementUI 下拉框隐藏时触发相关事件(下拉框下拉显示时不触发)
- 经典面试题之赋值操作
- 快捷笔记应用Side Notes Mac
- Oracle Alert sid log 位置问题
- 基于EEG信号的睡眠分期算法记录2-一种新的全自动随机森林睡眠分期算法(英)
- JAVA实现字体扩大代码_[Java教程]jQuery实现设置字体大小代码实例
- Linux 下安装交叉编译工具链
- Lambert漫反射模型
- 关于Mariadb数据库 配置
- HBU-NNDL 实验四 线性分类
- 腾讯云IM集成(so easy)
- binlog实时同步
- java接口方式调用海康大华摄像机预览。
热门文章
- 诸葛io的技术架构图_大数据平台的技术演化之路 诸葛io平台设计实例
- T48566 【zzy】yyy点餐
- 北海450值得入手吗?附带(越野萝莉)照片
- 普通人如何从0到1,成为百万粉自媒体大V?
- 5G赋能行业:丢掉“传统”外衣,向“智”造加速
- 基于贝叶斯生存分析的《冰与火之歌》人物死亡率分析
- 视频直播应用的竞争分析
- 设置电子围栏 高德地图_地理围栏-API文档-开发指南-Web服务 API | 高德地图API
- RISC-V 开源模拟器环境构建
- 最全最细的零知识 (ZK) 证明解读