Товары из Китая

Автономный логгер для мультиметра UNI-T UT61E


Автономный логгер для мультиметра UNI-T UT61E

Мультиметр UNI-T UT61E, как известно, имеет возможность подключения к ПК с помощью интерфейса RS-232, для вывода показаний на экран и записи логов измерений. Но для записи логов требуется держать включенными ПК или ноутбук, что не всегда удобно.

Возникла мысль сделать автономный логгер с питанием от повербанка и записью на SD карточку. Осторожно, может потребоваться 3Д-принтер, но это не точно.

Часть первая – конвертор.

Для передачи данных на компьютер используется связка между инфракрасным светодиодом на мультиметре и фотоприемником на интерфейсном кабеле. Сделано так для безопасности — гальваническая развязка.

Счастливые обладатели UT61E конечно помнят достаточно неудобный кабель RS-232 с ИК приемником из комплекта мультиметра. К нему еще требуется переходник для подключения к USB порту, хотя если у вас в ПК есть COM-порт, то можно и без него.

Автономный логгер для мультиметра UNI-T UT61EНа первом этапе избавимся от этого кабеля и перейдем на разъем Type-C. На Али была найдена недорогая плата UART-Type-C на контроллере CH340. Она так и ищется в поиске алиэкспресса «ttl CH340 type-c». Например https://aliexpress.ru/item/1005003068458160.html

Перерезаем дорожку к 3.3В, и ставим перемычку на 5В.

Автономный логгер для мультиметра UNI-T UT61EРазбираем ИК приемник методом расковыривания, он заклеен по периметру, но не сильно. Исходная схема ИК приемника имеет вид:

Автономный логгер для мультиметра UNI-T UT61EВместо конденсатора С202 ставим перемычку, резистор R204 меняем на 1.5кОм, еще надо добавить СМД транзистор типа BC847 (практически любой npn) и резистор 10кОм, чтобы получить схему:

Автономный логгер для мультиметра UNI-T UT61EПример моей платы:

Автономный логгер для мультиметра UNI-T UT61EВ принципе после переделки можно ИК приемник поставить в родной корпус, вывести хвост и закатать UART в термоусадку. У меня так оно и жило некоторое время.

В 3Д редакторе был нарисован новый корпус для двух платок. К ИК приемнику припаиваем 3 провода, выводим их на другую сторону и вставляем его с одной стороны.

Автономный логгер для мультиметра UNI-T UT61EПодключаем плату UART согласно схемы, устанавливаем. Я по периметру приклеил её суперклеем, и сверху приклеил крышку, чтобы Type-C кабель не выворачивал плату из корпуса. Крышку для ИК приемника клеить не надо, нормально держится сама.

Автономный логгер для мультиметра UNI-T UT61EИ да, черный 6-пиновый разъем на конверторе лучше перепаять так, чтобы он торчал за край платы на пару мм, заподлицо с корпусом, это нам пригодится в дальнейшем. На картинке справа видно, что я это не сделал и залил все клеем, не повторяйте моих ошибок.

Автономный логгер для мультиметра UNI-T UT61EВот мы и подошли к концу первой части, устройство собрано, вставлено в мультиметр,

Автономный логгер для мультиметра UNI-T UT61EИ передает данные на компьютер.

Автономный логгер для мультиметра UNI-T UT61E

Часть вторая – логгер.

Для логгера нам понадобится 2 платы: какая-нибудь ардуино про мини и адаптер для microSD Card.

Адаптер я купил локально, остальные детали у меня были и месяц ждать не хотелось.

Подобный https://aliexpress.ru/item/1005001309671718.html

Автономный логгер для мультиметра UNI-T UT61EНа волне подорожания ардуин я купил несколько плат LGT8F328P, их несколько разных видов, у меня самая мелкая LGT8F328P-SSOP20. https://aliexpress.ru/item/1005001274098707.html И да, они тоже подорожали, я брал их по 100 р.

Автономный логгер для мультиметра UNI-T UT61EВ общем нарисовал корпус для логгера – он состоит из двух склеиваемых частей, чтобы печатать без поддержек. Я печатаю PET-G и на нем поддержки убирать довольно тяжело, поэтому стараюсь их по возможности избегать.

Помните про черный 6-пиновый разъем, который я не перепаял, чтобы он торчал подальше? Из-за того, что он утопает в корпусе, ответная гребенка до него достает плохо и мне пришлось передвинуть пины в пластиковом держателе.

Автономный логгер для мультиметра UNI-T UT61EА вам придется их укоротить со стороны пайки до 2х мм, чтобы гребенка вошла на свое посадочное место.

Припаиваем к гребенке провода и вклеиваем её в первую часть корпуса, используя изготовленную ранее деталь как направляющую.

Автономный логгер для мультиметра UNI-T UT61EМежду ардуиной и модулем SD классическое соединение SPI:

SD_Card		Arduino

MOSI D11
MISO D12
SCK D13
CS D9 (можно использовать любой, поправив в коде)

Обратите внимание на упор, помеченный красной стрелкой. Моя LGT8F328P имеет длину около 31 мм, а классические китайские про мини около 33мм, для их установки данный упор надо выломать.

Автономный логгер для мультиметра UNI-T UT61EЗаливаем прошивку, проверяем, если всё в порядке – склеиваем.

Автономный логгер для мультиметра UNI-T UT61EСтоит, мигает.

Автономный логгер для мультиметра UNI-T UT61E

Часть 3 – программа.

Для работы нам потребуется microSD (или SD, если вы купили адаптер под неё) карта до 4ГБ, отформатированная в FAT16.

Имя файла генерируется автоматически при подаче питания, пока питание не снято, запись ведется в один и тот же файл

Пишутся только измерения напряжения или тока, в формате csv. Измерения частоты, сопротивления, ёмкости игнорируются, я не смог для себя придумать сценарий их логирования. В прошивке можно настроить разделитель целой и дробной части числа (точка или запятая).

Строка записи имеет вид:

00:01:23;1.2345;V

Первый столбец — время, затем измеренное значение и единицы измерения. Положительные и отрицательные значения отображаются соответствующим знаком, при измерении переменных напряжений и токов знака нет никакого.

Управление записью реализовано с помощью кнопок и переключателя мультиметра.

Чтобы начать запись на SD карточку нужно поставить и снять Hold (нажать 2 раза), так же Hold ставит запись на паузу, снятие с Hold продолжает запись на карту, при этом отсчёт времени начинается заново.

При паузе на Hold можно вытаскивать и возвращать карту.

Мультиметр передает показания с частотой примерно 2 раза в секунду (чуть чаще), при длительных измерениях создается много строк в файле. Для уменьшения объема данных была реализована возможность выбора периодичности записи на карту, для этого переключатель мультиметра ставим в положение -||- (ёмкость) и нажимая кнопку Range выбираем период согласно таблице.

Нажатие   Частота_Записи    На_Экране       

(примерно)
1 2 раза в сек auto
2 2 раза в сек manu 0.000nF
3 1 раз в сек manu 0.00nF
4 1 раз в 5 сек manu 0.0000uF
5 1 раз в 10 сек manu 0.000uF
6 1 раз в 30 сек manu 0.00uF
7 1 раз в мин manu 0.0000mF
8 1 раз в 3 мин manu 0.000mF
9 1 раз в 5 мин manu 0.00mF

Работу устройства можно оценить по миганию светодиода, который по умолчанию подключен к 13 пину на плате ардуино. Он загорается при обращении к SD карточке. При нормальной работе это короткие вспышки в момент записи. Если светодиод циклично загорается на 2 сек, то это значит адаптер не видит вставленную карту памяти, или она не вставлена.

Программа логгера работает и на ардуино про мини (на ней и велась отладка) и на LGT8F328P-SSOP20.

Программист я не настоящий, приветствуется тестирование и отлавливание багов.

Код программы
/*

Программа записи логов с мультиметра UNI-T UT61E
klimoff@gmail.com февраль 2023
SD карта до 4ГБ, форматировать в FAT16
=================================================================
== ЧТОБЫ НАЧАТЬ ЗАПИСЬ НА SD CARD нужно поставить и снять HOLD ==
=================================================================
HOLD ставит запись на паузу, снятие с HOLD продолжает запись на SD Card
При паузе на HOLD можно вытаскивать и возвращать карту
Имя файла генерируется автоматически при подаче питания, пока питание не снято, запись ведется в один и тот же файл
Настройка частоты записи: переключатель мультиметра ставим в положение Ёмкость
Нажатие Частота_Записи На_Экране
(примерно)
1 2 раза в сек auto
2 2 раза в сек manu 0.000nF
3 1 раз в сек manu 0.00nF
4 1 раз в 5 сек manu 0.0000uF
5 1 раз в 10 сек manu 0.000uF
6 1 раз в 30 сек manu 0.00uF
7 1 раз в мин manu 0.0000mF
8 1 раз в 3 мин manu 0.000mF
9 1 раз в 5 мин manu 0.00mF
т.к. мультиметр шлет ПРИМЕРНО 2 посылки в секунду (на самом деле чуть чаще), частота записи тоже не точная
просто при частоте, например "1 раз в мин", пишем на карту каждую 120-ю посылку
*/
#include <lgtx8p.h> // удалить при компиляции под ардуино
#include <arduino.h>
#include <SPI.h>
#include <SD.h>
#define digit_separator '.' // <---- НАСТРОЙКА РАЗДЕЛИТЕЛЯ ЦЕЛОЙ И ДРОБНОЙ ЧАСТИ ДЛЯ ЭКСЕЛЯ
#define PIN_CS 9 // SD Card SPI: MOSI D11, MISO D12,SCK D13, CS 9
#define _bs bit_is_set
byte b[14]; // буфер приема 14 байт
byte b_count = 0; // счетчик байт в посылке
byte f_count = 0; // счетчик в имени файлов
int cut = 0; // прореживание посылок
int c_count = 0; // счетчик прореживания посылок
int cutting[] = {0,1,10,20,60,120,360,600};
String file_name = ""; // имя файла
bool fl_start = false; // флаг разрешения записи
bool fl_init_card = false; // флаг инициализации карты после HOLD
unsigned long start_millis;

uint16_t b0() // возвращает кол-во разрядов до точки
{
if(b[6]==0xB)
{
if(b[0]==4) {return 100;}
else {return 10000/(pow(10,b[0])); }
}
else if(b[6]==0xD)
{
if(b[0]==0) {return 100;}
else {return 10;}
}
else if(b[6]==0xF)
{
if(b[0]==0) {return 1000;}
else {return 100;}
}
else if(b[6]==0x0) {return 1000;}
else {return 1;}
}
String b15() // возвращает измеренное число
{
String ret = "";
ret = b[1];
if(b0()==10000) {ret += digit_separator;}
ret += b[2];
if(b0()==1000) {ret += digit_separator;}
ret += b[3];
if(b0()==100) {ret += digit_separator;}
ret += b[4];
if(b0()==10) {ret += digit_separator;}
ret += b[5];
if(b[7]==0x1 || b[7]==0x5) {return "ovl.";}
else {return ret;}
}
String b6() // возвращает единицы измерения
{
if(b[6]==0xB) {if(b[0]==4){return "mV";} else {return "V";}}
else if(b[6]==0xD) {return "uA";}
else if(b[6]==0xF) {return "mA";}
else if(b[6]==0x0) {return "A";}
else {return " ";}
}
String b7() // возвращает для DC + или -, для AC пробел
{
if(!_bs(b[7],2) && _bs(b[10],3) && !_bs(b[10],0)) {return "+";} // флаг НЕ минус, флаг DC и нет флага Hz
else if(_bs(b[7],2) && _bs(b[10],3) && !_bs(b[10],0)) {return "-";} // флаг минус, флаг DC и нет флага Hz
else {return " ";}
}
void find_name() // ищем свободное имя файлу по порядку
{
file_name="log_";file_name+=f_count;file_name+=".csv"; // длина имени не больше 8 знаков!
while (SD.exists(file_name)) {
f_count++;
file_name="log_";file_name+=f_count;file_name+=".csv";
}
Serial.println("New file: " + file_name);
}
void sd_init() // инициализируем модуль
{
while(!SD.begin(PIN_CS)) {Serial.println("Card failed, or not present"); delay(1000);}
Serial.println("Card initialized.");
}
String disp_time() // время
{
String time_string = "";
unsigned long time_disp = (millis() - start_millis)/1000ul;
int h = time_disp/3600ul; // Время работы
time_string += h/10;
time_string += h%10;
time_string += ":";
int m = (time_disp%3600ul)/60ul;
time_string += m/10;
time_string += m%10;
time_string += ":";
int s = (time_disp%3600ul)%60ul;
time_string += s/10;
time_string += s%10;
return time_string;
}

void setup()
{
Serial.begin(19230, SERIAL_7N1);
pinMode(PIN_CS, OUTPUT);
Serial.println("Start");
sd_init();
find_name();
}
void loop()
{
if (_bs(b[11], 1)) {fl_start = true; fl_init_card = true;} // ставим флаги при нажатии HOLD
if (!_bs(b[11], 1) && fl_init_card) {sd_init(); start_millis = millis(); fl_init_card = false;} // реинициализируем карту при отпускании HOLD
while (Serial.available() > 0)
{
unsigned char in = Serial.read();
b[b_count] = in;
if (in != 'n' || in != 'r') {b[b_count] ^= 0x30;} // убираем 4 и 5 биты
b_count++;
if (in == 'n') // ловим конец пакета с данными
{
if(b[6]==0x6) {cut=c_count=cutting[b[0]]; fl_start = false;} // режим ёмкости, настройка частоты записи
if((b[6]>=0xB || b[6]==0x0) && !_bs(b[10],0) && !_bs(b[11],1)) // режимы ток, напряжение, не Hz, не HOLD
{
c_count++;
Serial.print(disp_time()+'t');Serial.print(b7());Serial.print(b15());Serial.print(b6()+'t');
//for (int i = 0; i < 12; ++i) {Serial.print(b[i], HEX);} // HEX принятого пакета

if(fl_start && c_count > cut)
{
File dataFile = SD.open(file_name, FILE_WRITE); // открываем файл на SD карте
if (dataFile) // записываем строку в файл log_X.csv
{
dataFile.println(disp_time()+";"+b7()+b15()+";"+b6()+";");
dataFile.close();
Serial.print("SD write "+file_name);
}
else {Serial.print("SD write ERRROR");}
c_count=0;
}
Serial.println();
}
b_count = 0;
}
}
}

В общем порядок действий: вставляем отформатированную в FAT16 карту размером не больше 4Гб. Подаем питание. При желании выбираем периодичность записи. Переводим переключатель в измеряемое положение, нажимаем два раза Hold и запись пошла — светодиод дает короткие вспышки.

Программа и STL-файлы выложены для общей пользы на Яндекс-диск

Бонус
Сообщение «mysku.club», переданное в формате обмена мультиметра.

Бит в сек: 19200, бит данных: 7, остальное по умолчанию

500мксек/деление

Автономный логгер для мультиметра UNI-T UT61E

Спасибо за внимание, надеюсь проделанная мной работа вам пригодится.


СМОТРИ ТАКЖЕ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *