Режим детектора
Режим детектора в GraphView предназначен для настройки амплитуды и смещения входных сигналов датчика относительно опорных сигналов математической модели контура. При включении режим загружает в CPU1 специальную программу, которая обеспечивает доступ к сигналам SIN/COS — как входным (с АЦП), так и виртуальным (с модели) — через разделяемую RAM.
Включение и выключение
При нажатии кнопки Detector On:
- Отключаются CPU1 и CPU2 (регистр Mode_config, адрес 71).
- Настраивается разделяемая RAM (AFE_config, адрес 70).
- В память CPU1 (адреса 512–1023) загружается программа
detector_asm/cpu1_data.hex. - CPU1 включается.
- Адреса каналов GraphView автоматически переключаются на предустановки детектора (SIN/COS входные и виртуальные сигналы).
При нажатии кнопки Detector Off:
- CPU1 отключается (регистр Mode_config).
- Адреса каналов и настройки восстанавливаются из ранее сохранённых значений — GraphView возвращается к тем регистрам, которые были заданы до включения детектора.
При выключении детектора микросхема остаётся с отключённым CPU. Для восстановления штатной работы перезагрузите микросхему или загрузите рабочие программы CPU.
Предустановки адресов
При включении детектора каналы автоматически настраиваются на следующие адреса (13-битные знаковые данные):
Канал H1
| Канал | Легенда | Адрес (LA) | SA | Назначение |
|---|---|---|---|---|
| 0 | SIN1_IN | 640 | 641 | Входной SIN с АЦП контура 1 |
| 1 | SIN1_VIRT | 648 | 649 | Виртуальный SIN (модель контура 1) |
| 2 | COS1_IN | 642 | 643 | Входной COS с АЦП контура 1 |
| 3 | COS2_VIRT | 650 | 651 | Виртуальный COS (модель контура 1) |
Канал H2
| Канал | Легенда | Адрес (LA) | SA | Назначение |
|---|---|---|---|---|
| 0 | SIN2_IN | 644 | 645 | Входной SIN с АЦП контура 2 |
| 1 | SIN2_VIRT | 652 | 653 | Виртуальный SIN (модель контура 2) |
| 2 | COS2_IN | 646 | 647 | Входной COS с АЦП контура 2 |
| 3 | COS2_VIRT | 654 | 655 | Виртуальный 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). Эти коэффициенты поднимают или опускают сигналы математической модели, делая их постоянную составляющую равной смещению входных сигналов. Корректная настройка смещения устраняет статическую ошибку и обеспечивает симметричную работу контура отслеживания.
Порядок настройки
- Включите режим Detector On, выберите канал H1 или H2.
- Нажмите Loading... — наблюдайте входные сигналы и сигналы модели.
- Подберите KampS и KampC — увеличивайте или уменьшайте до совпадения амплитуд входных сигналов с моделью (±2047).
- Подберите KbiasS и KbiasC — скорректируйте смещение так, чтобы средние значения входных сигналов и модели совпадали.
- Нажмите 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:
ASR 1— убирает младший бит (служебный флаг), после чего в младших 13 битах остаётся входной сигнал (с АЦП, после масштабирования KampS/KampC).ASR 14— сдвигает ещё на 14 бит, оставляя в младших 13 битах сигнал модели (виртуальный).
Результат записывается в разделяемую RAM через STORE32 (как пара 14-битных слов), откуда GraphView считывает данные по адресам 640–655.
Карта выходных данных в разделяемой RAM
| CPU1 addr | IC addr | Метка | Назначение |
|---|---|---|---|
| 128–129 | 640–641 | DET1_SIN | Входной SIN контура 1 |
| 130–131 | 642–643 | DET1_COS | Входной COS контура 1 |
| 132–133 | 644–645 | DET2_SIN | Входной SIN контура 2 |
| 134–135 | 646–647 | DET2_COS | Входной COS контура 2 |
| 136–137 | 648–649 | DET1_VSIN | Виртуальный SIN контура 1 |
| 138–139 | 650–651 | DET1_VCOS | Виртуальный COS контура 1 |
| 140–141 | 652–653 | DET2_VSIN | Виртуальный SIN контура 2 |
| 142–143 | 654–655 | DET2_VCOS | Виртуальный COS контура 2 |
Значения обновляются один раз за период сигнала возбуждения — строго в момент отрицательного фронта EX_REF.
Условие корректной работы: синхронизация EX_REF
Детектор корректно измеряет амплитуду только при условии, что опорный сигнал EX_REF синхронизирован с реальным сигналом возбуждения датчика. В противном случае показания будут искажены и не будут отражать реальную амплитуду входных сигналов.
Программа CPU1 захватывает данные строго в момент отрицательного фронта EX_REF. Это означает, что точка выборки на синусоиде возбуждения определяется именно фазой EX_REF. Если EX_REF не соответствует реальной фазе возбуждения:
- Выборка происходит в «неправильный» момент периода возбуждения
- Измеренная амплитуда будет меньше реальной (выборка не на пике)
- Или сигнал окажется смещённым (выборка на склоне, а не на экстремуме)
Для обеспечения корректной синхронизации EX_REF:
-
Блок восстановления опорной частоты включён — микросхема сама формирует EX_REF из входного сигнала, обеспечивая правильную фазу (подробнее в разделе Восстановление возбуждения). Это рекомендуемый режим для работы с детектором.
-
Блок восстановления выключен — EX_REF подаётся извне. В этом случае пользователь должен самостоятельно обеспечить точное фазирование внешнего опорного сигнала относительно реального возбуждения датчика. Неточное фазирование приведёт к ошибкам измерения амплитуды и смещения.