Возникла потребность в испытании модуля DC CDI в условиях, приближенных к реальным. Для этого нужно менять частоту вращения коленвала, а модуль подключить к нагрузке. Отслеживать реакцию (величину угла опережения) при изменениях оборотов в продолжительном времени.
На первый взгляд подумалось, что можно управлять генераторм сигналов UNI-T UTG962E через компьютер. Был скачан пакет NI-VISA. Установлен Python 3.13 , далее по инструкции по программированию генератора установлены необходимые библиотеки. В консоли убедился, что генератор реагирует на команды. Написал примитивный код:
import pyvisa
import time
rm = pyvisa.ResourceManager()
my_instrument = rm.open_resource('USB0::0x6656::0x0834::2788532920::INSTR')
print(my_instrument.query('*IDN?'))
fr=20 # Установка начальной частоты
print("fr = " , fr)
# Подготовка каналов с предустановленными значениями
my_instrument.write(':CHANnel1:MODe CONTinue')
my_instrument.write(':CHANnel1:BASE:WAVe SQUare')
my_instrument.write(":CHANnel1:BASE:FREQuency 20")
my_instrument.write(':CHANnel1:BASE:AMPLitude 4.5')
my_instrument.write(':CHANnel1:BASE:OFFSet 0')
my_instrument.write(':CHANnel1:BASE:PHAse 0')
my_instrument.write(':CHANnel1:BASE:DUTY 1.97')
my_instrument.write(":CHANnel1:OUTPut ON")
my_instrument.write(':CHANnel2:MODe CONTinue')
my_instrument.write(':CHANnel2:BASE:WAVe SQUare')
my_instrument.write(':CHANnel2:BASE:FREQuency 20')
my_instrument.write(':CHANnel2:BASE:AMPLitude 4.5')
my_instrument.write(':CHANnel2:BASE:OFFSet 0')
my_instrument.write(':CHANnel2:BASE:PHAse -21.3')
my_instrument.write(':CHANnel2:BASE:DUTY 14.08')
my_instrument.write(':CHANnel2:OUTPut ON')
time.sleep(1)
# Для подстановки переменного значения частоты в строку обращения к инструменту пришлось использовать .format
# Идем вверх до 150 Гц:
while fr<150:
fr=fr+5
message1_template = """:CHANnel1:BASE:FREQuency {fr1}"""
message1 = message1_template.format(fr1=fr)
message2_template = """:CHANnel2:BASE:FREQuency {fr1}"""
message2 = message2_template.format(fr1=fr)
my_instrument.write(message2)
my_instrument.write(message1)
time.sleep(1)
print("fr = " , fr)
time.sleep(3)
# Идем вниз до 20 Гц:
while fr>20:
fr=fr-5
message1_template = """:CHANnel1:BASE:FREQuency {fr1}"""
message1 = message1_template.format(fr1=fr)
message2_template = """:CHANnel2:BASE:FREQuency {fr1}"""
message2 = message2_template.format(fr1=fr)
my_instrument.write(message2)
my_instrument.write(message1)
time.sleep(1)
print("fr = " , fr)
print("The end")
В принципе, это рабочий вариант, но все равно имеется некоторая задержка между переключениями частоты на одном и втором канале, что вызывает кратковременное прерывание искры. Метод был отвергнут ввиду нахождения второго, более простого варианта. Второй вариант подразумевает использование встроенной в генератор функции частотной модуляции. Выбрана частота девиации 20 mHz , глубина 70 Гц, основная частота каналов — 90 Гц. Остальные параметры каналов не изменялись.
Спасибо за внимание!