|
本帖最后由 scoopydoo 于 2024-11-10 20:28 编辑
又到了周末看球时间,趁着球赛还没开始,调戏一下 AI 吧。
刚刚在隔壁帖子提到用两台源表测晶体管曲线,就用这个测试一下吧,俺给 AI 的指令如下:
写一个PySide6应用程序,用PyVisa库控制两台源表(SMU)测量晶体管I-V曲线,在一个matplotlib控件中画出曲线
CoPilot 的回答如下:
好的,我来帮你写一个简单的PySide6应用程序,使用PyVisa库控制两台源表(SMU)测量晶体管的I-V曲线,并在一个matplotlib控件中绘制曲线。以下是一个示例代码。
安装所需的库
首先,确保你已经安装了以下库:
- pip install PySide6 pyvisa matplotlib numpy
复制代码
主程序代码
- import sys
- import numpy as np
- import matplotlib.pyplot as plt
- from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton)
- from PySide6.QtCore import QTimer
- from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas
- import pyvisa
- class MplCanvas(FigureCanvas):
- def __init__(self, parent=None, width=5, height=4, dpi=100):
- fig, self.ax = plt.subplots(figsize=(width, height), dpi=dpi)
- super(MplCanvas, self).__init__(fig)
- class MainWindow(QMainWindow):
- def __init__(self):
- super().__init__()
- self.canvas = MplCanvas(self, width=5, height=4, dpi=100)
- self.button = QPushButton("Measure I-V Curve")
- self.button.clicked.connect(self.measure_iv_curve)
- layout = QVBoxLayout()
- layout.addWidget(self.canvas)
- layout.addWidget(self.button)
- central_widget = QWidget()
- central_widget.setLayout(layout)
- self.setCentralWidget(central_widget)
- self.rm = pyvisa.ResourceManager()
- self.smu1 = self.rm.open_resource("GPIB0::24::INSTR") # 替换为你的源表地址
- self.smu2 = self.rm.open_resource("GPIB0::25::INSTR") # 替换为你的源表地址
- def measure_iv_curve(self):
- vgs_values = np.linspace(0, 5, 100) # 样品电压值
- id_values = []
- for vgs in vgs_values:
- self.smu1.write(f"VOLT {vgs}")
- id_current = float(self.smu2.query("MEAS:CURR?"))
- id_values.append(id_current)
- self.canvas.ax.clear()
- self.canvas.ax.plot(vgs_values, id_values, label="I-V Curve")
- self.canvas.ax.set_xlabel("Vgs (V)")
- self.canvas.ax.set_ylabel("Id (A)")
- self.canvas.ax.legend()
- self.canvas.draw()
- app = QApplication(sys.argv)
- window = MainWindow()
- window.show()
- app.exec()
复制代码
代码说明
MplCanvas 类: 用于在PySide6应用程序中嵌入matplotlib图形。
MainWindow 类: 主窗口类,包含一个matplotlib画布和一个按钮。
measure_iv_curve 方法: 控制源表(SMU)测量I-V曲线并绘制到matplotlib图形中。
请确保替换代码中self.smu1和self.smu2的资源地址为你的源表的实际地址。如果你需要进一步的帮助或调整,请告诉我!
可以看出程序的框架没有什么问题,改一改就可以用了。于是俺又提出要求:
你给出的代码中的Vgs、Id等字样可以看出你这个程序是用来测量FET管的,改成测量BJT的吧
CoPilot 的回应如下:
明白了,我们将调整程序以测量双极性晶体管(BJT)的I-V特性。对于BJT,我们通常测量集电极电流 Ic 与集电极-发射极电压 Vce 和基极电流 Ib 的关系。
这里是更新后的代码:
- import sys
- import numpy as np
- import matplotlib.pyplot as plt
- from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton)
- from PySide6.QtCore import QTimer
- from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas
- import pyvisa
- class MplCanvas(FigureCanvas):
- def __init__(self, parent=None, width=5, height=4, dpi=100):
- fig, self.ax = plt.subplots(figsize=(width, height), dpi=dpi)
- super(MplCanvas, self).__init__(fig)
- class MainWindow(QMainWindow):
- def __init__(self):
- super().__init__()
- self.canvas = MplCanvas(self, width=5, height=4, dpi=100)
- self.button = QPushButton("Measure I-V Curve")
- self.button.clicked.connect(self.measure_iv_curve)
- layout = QVBoxLayout()
- layout.addWidget(self.canvas)
- layout.addWidget(self.button)
- central_widget = QWidget()
- central_widget.setLayout(layout)
- self.setCentralWidget(central_widget)
- self.rm = pyvisa.ResourceManager()
- self.smu_vce = self.rm.open_resource("GPIB0::24::INSTR") # 替换为你的集电极源表地址
- self.smu_ib = self.rm.open_resource("GPIB0::25::INSTR") # 替换为你的基极源表地址
- def measure_iv_curve(self):
- vce_values = np.linspace(0, 10, 100) # 样品 VCE 值
- ib_values = [0.1e-3, 0.2e-3, 0.3e-3] # 样品 IB 值 (基极电流)
- self.canvas.ax.clear()
- for ib in ib_values:
- ic_values = []
- self.smu_ib.write(f"CURR {ib}")
- for vce in vce_values:
- self.smu_vce.write(f"VOLT {vce}")
- ic_current = float(self.smu_vce.query("MEAS:CURR?"))
- ic_values.append(ic_current)
- self.canvas.ax.plot(vce_values, ic_values, label=f"Ib = {ib*1e3} mA")
- self.canvas.ax.set_xlabel("Vce (V)")
- self.canvas.ax.set_ylabel("Ic (A)")
- self.canvas.ax.legend()
- self.canvas.ax.set_title("BJT I-V Characteristics")
- self.canvas.draw()
- app = QApplication(sys.argv)
- window = MainWindow()
- window.show()
- app.exec()
复制代码
代码说明:
vce_values: 这是集电极-发射极电压 Vce 的一系列值。
ib_values: 这是基极电流 Ib 的一系列值(这里选择了三个不同的基极电流)。
measure_iv_curve 方法: 控制两个源表(一个用于设置基极电流,另一个用于测量集电极电流)测量并绘制I-V曲线。
请确保替换代码中self.smu_vce和self.smu_ib的资源地址为你的源表的实际地址。如果需要进一步调整或有其他问题,随时告诉我!
整个过程 AI 反应非常迅速,可以说是毫不犹豫、不假思索、水银泻地、势如破竹、举重若轻、一气呵成 ...... |
评分
-
2
查看全部评分
-
|