Files
Balsam_167/Doc/PHASE_BREAK_ERROR_FLOW.md

12 KiB
Raw Blame History

@page phase_break_error_flow Детектирование и передача ошибки обрыва фаз

Детектирование и передача ошибки обрыва фаз

1. Назначение

Документ описывает полную связь от входов АЦП платы УМП до выставления признаков обрыва фаз в modbus_table_mpu_out[125] основного контроллера BALZAM_167.

В текущей реализации обрыв определяется как сильный перекос действующих значений фаз. Отдельных независимых флагов для физических фаз A, B и C нет. Передаётся общий флаг Wry с маской 0x0004.

2. Общая цепочка сигнала

Фазные напряжения
        |
        v
АЦП peripheral-платы
  CONV02 -> channel 0 -> измеряемая фаза A
  CONV03 -> channel 1 -> измеряемая фаза C
        |
        v
Current_count(0), Current_count(1)
        |
        +--> RMS A = lev_count[0]
        +--> RMS C = lev_count[1]
        +--> RMS B = lev_count[4], расчёт B = -(A + C)
        |
        v
Выбор Max = max(RMS A, RMS B, RMS C)
        |
        v
(Max - RMS проверяемой фазы) / Max > 0.30
AND Max > Curr_Edge
        |
        v
Счётчик выдержки er_anal()
        |
        v
error.bit.Wry = 1  (бит 2, маска 0x0004)
        |
        v
sens_error[0] / sens_error[1]
        |
        v
modbus[0] / modbus[1]
        |
        v
Быстрый CAN-цикл peripheral-платы
        |
        v
Unites[UMP1_CAN_DEVICE][0/1]
или Unites[UMP2_CAN_DEVICE][0/1]
        |
        v
BALZAM_167, update_abnormal.c
        |
        +--> mpu_out[125].bit6  — УМП1
        +--> mpu_out[125].bit10 — УМП2

3. Связь входов АЦП с фазами

Для режима УМП (Desk == dsk_LOAD) преобразования настроены в Source/Internal/ADC.c.

АЦП Физический вход Внутренний канал Назначение
CONV02 ADCINA5 0 измеряемое напряжение фазы A
CONV03 ADCINA4 1 измеряемое напряжение фазы C
CONV04 ADCINA7 2 ток первого канала
CONV05 ADCINA2 3 ток второго канала

В обработчике АЦП результаты ADCRESULT2...ADCRESULT5 записываются в adc_table_lem[0...3], после чего для каждого канала вызывается Current_count(i).

4. Расчёт действующих значений

Из отсчёта АЦП вычитается сохранённый нулевой уровень и применяется калибровочный коэффициент:

Current = (Numb - Zero_lev[chan]) * powK[chan];

Действующее значение измеряемой фазы рассчитывается через экспоненциальное усреднение квадрата:

lev_quadr[chan] +=
    ((Current * Current) - lev_quadr[chan]) / (1.0 * ADC_FREQ);

lev_count[chan] = sqrt(lev_quadr[chan]);

Третья фаза непосредственно не измеряется. Она восстанавливается из условия нулевой суммы фаз:

A + B + C = 0
B = -(A + C)

В коде:

Numb = -Current - aCurrent;
lev_quadr[thrd] +=
    (Numb * Numb - lev_quadr[thrd]) / (1.0 * ADC_FREQ);
lev_count[thrd] = sqrt(lev_quadr[thrd]);

Диагностические значения публикуются в следующих регистрах:

Регистр peripheral Значение
0x68 RMS фазы A
0x69 RMS фазы C
0x6A расчётный RMS фазы B
0x6B RMS первого токового канала
0x6C RMS второго токового канала
0x6D расчётный RMS третьего тока

5. Условие выставления Wry

Для каждой пары выбирается максимальный уровень:

Max = max(lev_count[chan], lev_count[pair], lev_count[thrd]);

Ошибка набирается при выполнении обоих условий:

(Max - PhaseRms) / Max > 0.30
Max > Curr_Edge

Для УМП устанавливается:

Curr_Edge = 300;

Следовательно, флаг формируется, когда:

  1. максимальная из трёх фаз больше 300;
  2. проверяемая фаза ниже максимальной более чем на 30%;
  3. счётчик er_anal() достиг выдержки.

Пример:

RMS A = 400
RMS B = 390
RMS C = 100

Max = 400
(400 - 100) / 400 = 0.75
0.75 > 0.30 -> условие обрыва/перекоса фазы C активно

Если все три уровня одновременно ниже Curr_Edge, Wry не выставляется. Полное пропадание напряжения должно определяться диагностикой низкого уровня Out, а не фазовым перекосом Wry.

6. Выдержка времени

Частота обработки:

#define ADC_FREQ 3750

Порог счётчика:

time_3sec = 3 * ADC_FREQ; /* 11250 */

Функция er_anal() увеличивает счётчик на каждом ошибочном отсчёте и уменьшает его на каждом нормальном отсчёте:

if (term) {
    if (*count >= edge)
        return 1;
    (*count)++;
    return 0;
}

if (*count == 0)
    return 0;

(*count)--;
return 0;

Для измеряемых фаз A и C номинальная выдержка составляет около 3 секунд. Расчётная фаза B проверяется при обработке обоих измеряемых каналов, поэтому её общий счётчик увеличивается дважды за цикл АЦП. Фактическая выдержка для B может составлять около 1,5 секунды.

После запуска УМП диагностика блокируется на время WAKE:

WAKE_TIME = 10L * ADC_FREQ;

То есть первые 10 секунд после запуска Wry не формируется.

7. Формирование регистра ошибки peripheral-платы

Структура регистра ошибки определена в Source/Internal/Include/measure.h:

Бит Маска Поле Назначение
0 0x0001 Tear крайнее значение АЦП/обрыв датчика
2 0x0004 Wry перекос или предполагаемый обрыв фазы
3 0x0008 Out низкий общий уровень
4 0x0010 Over превышение тока
5 0x0020 Hyper превышение напряжения
8 0x0100 Stop требование аварийного останова
9 0x0200 Ready готовность канала
14 0x4000 Ignor запрет локального останова
15 0x8000 Bypas полное исключение канала

После достижения выдержки выполняется:

error.bit.Wry = 1;

if (!ignor)
    error.bit.Stop = 1;

Поведение управляющих признаков:

Состояние Wry Stop Передача по CAN
обычный канал 1 1 да
Ignor = 1 1 0 да
Bypas = 1 0 0 передаётся регистр без ошибки
WAKE != 0 0 0 передаётся регистр без ошибки

Для УМП признаки напряжений находятся в регистрах ошибок:

Регистр Содержит Wry при проблеме
modbus[0] измеряемая фаза A или расчётная фаза B
modbus[1] измеряемая фаза C или расчётная фаза B

В основном контроллере регистры 0 и 1 объединяются логическим ИЛИ, поэтому для индикации достаточно наличия маски 0x0004 в любом из них.

8. Передача по CAN

Init_packMask() включает регистры ошибок УМП 0...3 в быстрый CAN-цикл. Главный цикл peripheral-платы вызывает:

CAN_send(0, modbus, address);

Один CAN-пакет содержит начальный адрес и три 16-битных регистра. Основной контроллер принимает пакет и записывает данные в массив:

Unites[номер устройства][адрес регистра]

Соответствие устройств:

Устройство CAN-индекс основного контроллера Регистры флага
УМП1 UMP1_CAN_DEVICE = 5 Unites[5][0], Unites[5][1]
УМП2 UMP2_CAN_DEVICE = 6 Unites[6][0], Unites[6][1]

9. Выставление mpu_out[125]

Основной контроллер выполняет проверку в BALZAM_167/Src/balzam_7/update_abnormal.c.

УМП1

modbus_table_mpu_out[125].bit.bit6 =
    (Unites[UMP1_CAN_DEVICE][0] & 0x4) ||
    (Unites[UMP1_CAN_DEVICE][1] & 0x4)
        ? 1 : 0;

УМП2

modbus_table_mpu_out[125].bit.bit10 =
    (Unites[UMP2_CAN_DEVICE][0] & 0x4) ||
    (Unites[UMP2_CAN_DEVICE][1] & 0x4)
        ? 1 : 0;

Оба признака разрешены только при следующем условии:

f.FittingScheme == 1

Если выбрана другая схема, основной контроллер принудительно записывает ноль в mpu_out[125].bit6 и mpu_out[125].bit10 независимо от данных УМП.

10. Итоговая таблица связей

Физическое событие Peripheral-регистр Передаваемая маска Приёмник Выход MPU
перекос/обрыв A на УМП1 modbus[0] 0x0004 Unites[5][0] mpu_out[125].bit6
расчётный перекос B на УМП1 modbus[0] или [1] 0x0004 Unites[5][0/1] mpu_out[125].bit6
перекос/обрыв C на УМП1 modbus[1] 0x0004 Unites[5][1] mpu_out[125].bit6
перекос/обрыв A на УМП2 modbus[0] 0x0004 Unites[6][0] mpu_out[125].bit10
расчётный перекос B на УМП2 modbus[0] или [1] 0x0004 Unites[6][0/1] mpu_out[125].bit10
перекос/обрыв C на УМП2 modbus[1] 0x0004 Unites[6][1] mpu_out[125].bit10

11. Ограничения алгоритма

  1. Wry означает как обрыв, так и сильный перекос более 30%; эти события не различаются.
  2. Фаза B не измеряется непосредственно. Если при физическом обрыве B фазы A и C остаются нормальными, расчётная B также может выглядеть нормальной и ошибка не будет обнаружена.
  3. Одновременное исчезновение всех фаз не создаёт Wry, потому что не выполняется условие Max > 300.
  4. Из-за двойной проверки расчётной фазы B её выдержка короче выдержки A и C.
  5. Выходные биты mpu_out[125].bit6 и bit10 не показывают конкретную фазу, а только общий факт фазового перекоса соответствующего УМП.