Очередная запись о проекте измерителя ёмкости аккумуляторов, который уже перерос свою изначальную функцию. В текущей прошивке есть режимы для ручного заряда и разряда аккумуляторов, режим монитора и управление с компьютера по протоколу 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 выполняется только если сохранённое значение отличается от текущего.
Предыдущие записи, связанные с этим устройством:
Комментариев нет:
Отправить комментарий