Очередная запись о проекте измерителя ёмкости аккумуляторов, который уже перерос свою изначальную функцию. В текущей прошивке есть режимы для ручного заряда и разряда аккумуляторов, режим монитора и управление с компьютера по протоколу SCPI (Standard Commands for Programmable Instruments).
После включения устройство переходит в режим главного меню
В режиме разряда аккумулятора требуется внешняя нагрузка. Это может быть как сопротивление достаточной мощности или лампа накаливания, но я использую электронную нагрузку для поддержания постоянного тока.
В режиме заряда аккумуляторов требуется лабораторный блок питания с ограничением тока и напряжения. Я использую самодельный ЛБП на 30 В и 3 А. На ЛБП настраивается напряжение окончания заряда аккумулятора (4,2 В или 4,3 В согласно документации производителя аккумулятора) и максимальный ток заряда.
В настройках выбирается ток окончания заряда (обычно 0,05C) и ЛБП будет отключён от аккумулятора когда ток заряда снизится ниже выставленного лимита.
В режиме монитора отображается напряжение, ток, мощность и есть управление режимом измерения напряжения (двухпроводное или четырёхпроводное) и включение/отключение выхода.
Этот режим я использую как дополнительный мультиметр с возможностью одновременно измерять ток и напряжение. В моём настольном мультиметре Agilent U3402A тоже есть возможность одновременно измерять ток и напряжение, но он в таком режиме постоянно щёлкает реле и это изрядно раздражает.
Для управления с компьютера реализован минимальный набор команд протокола SCPI
- *IDN?
- MEAS:VOLT?
- MEAS:CURR?
- MEAS:MODE?
- MEAS:MODE [2wire|4wire]
- SYST:OUT?
- SYST:OUT [on|off]
Я впервые работаю с протоколом SCPI и не уверен что правильно определил семантику команд - возможно вместо MEAS:MODE должна быть CONF:MODE.
Написал простую программу на Python которая использует библиотеку PyVISA для измерения напряжения и тока
#!/usr/bin/env python3
import pyvisa
import sys
import time
rm = pyvisa.ResourceManager()
def discoverDevice():
device = None
for resource in rm.list_resources():
try:
print(f"Checking {resource}")
inst = rm.open_resource(resource)
time.sleep(2)
if "Power Monitor" in inst.query("*IDN?"):
device = inst
break
else:
inst.close()
except:
pass
return device
def main():
inst = discoverDevice()
if inst is None:
print("Unable to detect device")
sys.exit(1)
try:
while True:
time.sleep(1)
voltage = inst.query_ascii_values('MEAS:VOLT?')[0]
current = inst.query_ascii_values('MEAS:CURR?')[0]
print(f"{voltage}, {current}")
except KeyboardInterrupt:
pass
finally:
inst.close()
if __name__ == "__main__":
main()
С помощью этой программы измерил вольт-амперную характеристику стабилитрона BZV85-C3V6 с номинальным напряжением стабилизации 3,6 В. Пришлось отдельно записывать прямую и обратные характеристики, т.к. INA226 не может измерять отрицательное напряжение.
Видно что в положительной области стабилитрон ведёт себя как обычный диод, а после 0,8 В ток начинает резко расти. В отрицательной области ток практически нулевой до 2,9 В а затем начинает расти. Важно что напряжение стабилизации у этого стабилитрона сильно зависит от тока.
Последний пункт меню посвящён настройкам.
Пока тут только настраивается режим измерения напряжения по-умолчанию и есть сброс настроек в EEPROM к "заводским". При изменении настроек запись в EEPROM выполняется только если сохранённое значение отличается от текущего.
Предыдущие записи, связанные с этим устройством:






Комментариев нет:
Отправить комментарий