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






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