12 KiB
@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;
Следовательно, флаг формируется, когда:
- максимальная из трёх фаз больше
300; - проверяемая фаза ниже максимальной более чем на 30%;
- счётчик
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. Ограничения алгоритма
Wryозначает как обрыв, так и сильный перекос более 30%; эти события не различаются.- Фаза B не измеряется непосредственно. Если при физическом обрыве B фазы A и C остаются нормальными, расчётная B также может выглядеть нормальной и ошибка не будет обнаружена.
- Одновременное исчезновение всех фаз не создаёт
Wry, потому что не выполняется условиеMax > 300. - Из-за двойной проверки расчётной фазы B её выдержка короче выдержки A и C.
- Выходные биты
mpu_out[125].bit6иbit10не показывают конкретную фазу, а только общий факт фазового перекоса соответствующего УМП.