Перейти к основному содержимому

Режим детектора

Режим детектора в GraphView предназначен для настройки амплитуды и смещения входных сигналов датчика относительно опорных сигналов математической модели контура. При включении режим загружает в CPU1 специальную программу, которая обеспечивает доступ к сигналам SIN/COS — как входным (с АЦП), так и виртуальным (с модели) — через разделяемую RAM.

Включение и выключение

При нажатии кнопки Detector On:

  1. Отключаются CPU1 и CPU2 (регистр Mode_config, адрес 71).
  2. Настраивается разделяемая RAM (AFE_config, адрес 70).
  3. В память CPU1 (адреса 512–1023) загружается программа detector_asm/cpu1_data.hex.
  4. CPU1 включается.
  5. Адреса каналов GraphView автоматически переключаются на предустановки детектора (SIN/COS входные и виртуальные сигналы).

При нажатии кнопки Detector Off:

  1. CPU1 отключается (регистр Mode_config).
  2. Адреса каналов и настройки восстанавливаются из ранее сохранённых значений — GraphView возвращается к тем регистрам, которые были заданы до включения детектора.
предупреждение

При выключении детектора микросхема остаётся с отключённым CPU. Для восстановления штатной работы перезагрузите микросхему или загрузите рабочие программы CPU.

Предустановки адресов

При включении детектора каналы автоматически настраиваются на следующие адреса (13-битные знаковые данные):

Канал H1

КаналЛегендаАдрес (LA)SAНазначение
0SIN1_IN640641Входной SIN с АЦП контура 1
1SIN1_VIRT648649Виртуальный SIN (модель контура 1)
2COS1_IN642643Входной COS с АЦП контура 1
3COS2_VIRT650651Виртуальный COS (модель контура 1)

Канал H2

КаналЛегендаАдрес (LA)SAНазначение
0SIN2_IN644645Входной SIN с АЦП контура 2
1SIN2_VIRT652653Виртуальный SIN (модель контура 2)
2COS2_IN646647Входной COS с АЦП контура 2
3COS2_VIRT654655Виртуальный COS (модель контура 2)

Переключатель H1/H2 позволяет выбрать контур для анализа.

Настройка амплитуды

До настройки

Детектор: до настройки

На рисунке видны входные сигналы с АЦП (SIN_IN, COS_IN) и сигналы математической модели (SIN_VIRT, COS_VIRT). Амплитуда входных сигналов составляет approximately ±600 отсчётов — значительно меньше размаха модели ±2047. Это означает, что коэффициенты преобразования контура ещё не настроены: чувствительность датчика и параметры аналогового тракта не согласованы с масштабом цифровой модели. Несовпадение амплитуд приводит к ошибкам слежения контура — отставанию или опережению фазы, повышенным пульсациям на выходе координаты.

Подбор коэффициентов усиления

Амплитуда входных сигналов приводится к размаху модели коэффициентами KampS и KampC (регистры 0 и 1 контура 1, регистры 32 и 33 контура 2). Коэффициент определяет множитель, на который умножается оцифрованное значение АЦП перед подачей в контур.

В данном случае для согласования амплитуды были записаны значения:

  • KampS = 3072 (коэффициент ≈ 3.0)
  • KampC = 3072 (коэффициент ≈ 3.0)

После настройки

Детектор: после настройки

После записи коэффициентов KampS = KampC = 3072 входные сигналы по амплитуде практически совпали с размахом модели (±2047). На данном этапе подбирается именно размах сигналов — 13-битный формат данных (знаковый, диапазон ±4095) позволяет наблюдать как амплитуду, так и смещение среднего значения без усечки, что важно для следующего этапа настройки.

Настройка смещения

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

Это смещение корректируется коэффициентами KbiasS и KbiasC (регистры 2 и 3 контура 1, регистры 34 и 35 контура 2). Эти коэффициенты поднимают или опускают сигналы математической модели, делая их постоянную составляющую равной смещению входных сигналов. Корректная настройка смещения устраняет статическую ошибку и обеспечивает симметричную работу контура отслеживания.

Порядок настройки

  1. Включите режим Detector On, выберите канал H1 или H2.
  2. Нажмите Loading... — наблюдайте входные сигналы и сигналы модели.
  3. Подберите KampS и KampC — увеличивайте или уменьшайте до совпадения амплитуд входных сигналов с моделью (±2047).
  4. Подберите KbiasS и KbiasC — скорректируйте смещение так, чтобы средние значения входных сигналов и модели совпадали.
  5. Нажмите Detector Off — адреса каналов восстановятся, микросхема вернётся к штатному режиму (требуется перезагрузка для восстановления CPU).

Программа CPU1 режима детектора

При включении режима детектора в программную память CPU1 загружается программа из файла detector_asm/cpu1_data.hex. Исходный текст — cpu1_com.asm.

Принцип работы

Программа работает в бесконечном цикле и выполняет синхронную выборку данных конвертеров HAND1 и HAND2. Ключевая особенность: значения записываются в выходные ячейки разделяемой RAM только в момент отрицательного фронта сигнала EX_REF (опорный сигнал возбуждения). Это обеспечивает привязку отсчётов к одной и той же фазе сигнала возбуждения, что критично для корректного измерения амплитуды.

Алгоритм программы

MAIN_LOOP:
SET_A_HAND 2 // Выбираем блок SIN (OutVirtSin)

// --- Ожидание отрицательного фронта EX_REF ---
CONST 1 R0 // Маска бита 0 (EX_REF)
WAIT_NEG_LOOP:
LOAD32 HAND1_L R1 // Читаем данные HAND1
ANL R0 R1 // Выделяем бит EX_REF
LOAD PREV_EX_REF R2 // Предыдущее значение
STORE PREV_EX_REF R1 // Сохраняем текущее
SUB R2 R1 // R1 = prev − current
EQUAL EXIT_WAIT_NEG R0 R1 // Если prev=1, current=0 → фронт обнаружен
JUMP WAIT_NEG_LOOP

EXIT_WAIT_NEG:
// --- Чтение блока SIN (SET_A_HAND 2) ---
SET_A_HAND 2
LOAD32 HAND1_L R1 // HAND1: VirtualS[12:0], ex, ArgSin[12:0], ex
ASR 1 R1 // Убираем бит 0, сдвигаем
STORE32 DET1_SIN_L R1 // → IC 640/641: входной SIN контура 1
ASR 14 R1 // Сдвигаем ещё на 14
STORE32 DET1_VSIN_L R1 // → IC 648/649: виртуальный SIN контура 1

LOAD32 HAND2_L R1 // HAND2: аналогично для контура 2
ASR 1 R1
STORE32 DET2_SIN_L R1 // → IC 644/645: входной SIN контура 2
ASR 14 R1
STORE32 DET2_VSIN_L R1 // → IC 652/653: виртуальный SIN контура 2

// --- Чтение блока COS (SET_A_HAND 6) ---
SET_A_HAND 6
LOAD32 HAND1_L R1 // HAND1: VirtualC[12:0], ex, ArgCos[12:0], ex
ASR 1 R1
STORE32 DET1_COS_L R1 // → IC 642/643: входной COS контура 1
ASR 14 R1
STORE32 DET1_VCOS_L R1 // → IC 650/651: виртуальный COS контура 1

LOAD32 HAND2_L R1
ASR 1 R1
STORE32 DET2_COS_L R1 // → IC 646/647: входной COS контура 2
ASR 14 R1
STORE32 DET2_VCOS_L R1 // → IC 654/655: виртуальный COS контура 2

JUMP MAIN_LOOP // Повторяем цикл

Как работает распаковка данных

Конвертер HAND упаковывает два 13-битных значения в одно 28-битное слово:

  • Блок SIN (SET_A_HAND 2): биты 27:15 — входной SIN (VirtualS), биты 13:1 — виртуальный SIN (ArgSinKontur1)
  • Блок COS (SET_A_HAND 6): биты 27:15 — входной COS (VirtualC), биты 13:1 — виртуальный COS (ArgCosKontur1)

Программа распаковывает эти данные двумя операциями ASR:

  1. ASR 1 — убирает младший бит (служебный флаг), после чего в младших 13 битах остаётся входной сигнал (с АЦП, после масштабирования KampS/KampC).
  2. ASR 14 — сдвигает ещё на 14 бит, оставляя в младших 13 битах сигнал модели (виртуальный).

Результат записывается в разделяемую RAM через STORE32 (как пара 14-битных слов), откуда GraphView считывает данные по адресам 640–655.

Карта выходных данных в разделяемой RAM

CPU1 addrIC addrМеткаНазначение
128–129640–641DET1_SINВходной SIN контура 1
130–131642–643DET1_COSВходной COS контура 1
132–133644–645DET2_SINВходной SIN контура 2
134–135646–647DET2_COSВходной COS контура 2
136–137648–649DET1_VSINВиртуальный SIN контура 1
138–139650–651DET1_VCOSВиртуальный COS контура 1
140–141652–653DET2_VSINВиртуальный SIN контура 2
142–143654–655DET2_VCOSВиртуальный COS контура 2

Значения обновляются один раз за период сигнала возбуждения — строго в момент отрицательного фронта EX_REF.

Условие корректной работы: синхронизация EX_REF

warning

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

Программа CPU1 захватывает данные строго в момент отрицательного фронта EX_REF. Это означает, что точка выборки на синусоиде возбуждения определяется именно фазой EX_REF. Если EX_REF не соответствует реальной фазе возбуждения:

  • Выборка происходит в «неправильный» момент периода возбуждения
  • Измеренная амплитуда будет меньше реальной (выборка не на пике)
  • Или сигнал окажется смещённым (выборка на склоне, а не на экстремуме)

Для обеспечения корректной синхронизации EX_REF:

  1. Блок восстановления опорной частоты включён — микросхема сама формирует EX_REF из входного сигнала, обеспечивая правильную фазу (подробнее в разделе Восстановление возбуждения). Это рекомендуемый режим для работы с детектором.

  2. Блок восстановления выключен — EX_REF подаётся извне. В этом случае пользователь должен самостоятельно обеспечить точное фазирование внешнего опорного сигнала относительно реального возбуждения датчика. Неточное фазирование приведёт к ошибкам измерения амплитуды и смещения.