Методика подключения и настройки
Настройка должна производиться в порядке, заданном нумерацией разделов.
1. Проверка подключения
a. С помощью осциллографа убедитесь в наличии напряжения питания на выводах VDDA(63) = 5,0 В и VDDD(33) = 5,0 В, а также на выводах VDDIO(45) = 3,3 В, VDDIO2(25) = 3,3 В, VPP(35) = 3,3 В. При использовании генератора опорной частоты убедитесь в наличии напряжения питания на выводах VDDEXO1(5) = 5,0 В и/или VDDEXO2(4) = 5,0 В.
b. Убедитесь в наличии напряжения на выходах встроенных линейных регуляторов: VDDD1P8(36, 61) ≈ 1,8 В, VDDD_INT(31) ≈ 4,0 В, VDDA_INT(30) ≈ 4,0 В.
c. При тактировании с использованием кварцевого резонатора убедитесь в наличии тактовой частоты на выходе генератора TP_FQO(26). Убедитесь в наличии тактового сигнала на технологическом выводе DB(41) — по умолчанию на нём присутствует сигнал CLKMUX_OUT, поделённый на 8 (поле DB_mode регистра Mode_config = 000 после сброса). Если на выводе DB тактовый сигнал отсутствует — проверьте подключение служебных выводов TECH1(37) и TECH2(38).
d. Убедитесь, что служебные выводы подключены корректно: TECH1(37) подключён к GND, TECH2(38) подключён к VDDD_INT.
2. Настройка тактовой частоты микросхемы
a. При тактировании от кварцевого резонатора (подключённого к TP_QI(28), TP_QO(27), выход TP_FQO(26) подключён к CLK60(39)) — дополнительная настройка источника тактирования не требуется.
b. При тактировании от внешнего генератора (подключённого к CLK60(39)): вывод TP_QI(28) должен быть подключён к VDDD_INT, вывод TP_QO(27) — к GND.
c. Запишите в регистр PLL_config (адрес 80) рассчитанные значения PLL_N[6:0], PLL_Q[11:8]. Для ускорения выхода PLL на режим установите PLL_BOOST[7] = 1. Для контроля готовности PLL установите PLL_basecmp[15:14] ≠ 00. Если PLL не используется, запишите PLL_N = 0 — тактирование будет производиться напрямую от внешнего генератора на CLK60.
d. Запишите в регистр ADC_config (адрес 65) значения FINT_divisor[11:8] и DELAY_cycles[7:0]. Частота тактирования АЦП Fclk_adc = FINT / (FINT_divisor + 1) не должна превышать 20 МГц. Период работы преобразователя Tclk = 16 × Tclk_adc + DELAY_cycles × Tfint.
e. Убедитесь в готовности тактовой частоты: считайте регистр NOCLK_stat (адрес 72) — биты CLK_rdy[6] и CLKCOMP_rdy[7] должны быть равны 1. Также убедитесь, что AFE_config.OSC_DIS[15] = 0.
При некорректной настройке тактовой частоты может неправильно работать чтение регистров SPI. В этом случае произведите внешний сброс микросхемы (вывод NRESET), либо запишите корректные значения в регистры PLL_config, AFE_config (запись в эти регистры функционирует при отсутствующей или слишком большой тактовой частоте).
3. Настройка режима работы аналоговой части
a. Для использования встроенного источника опорного напряжения АЦП запишите AFE_config.VREF_en (адрес 70, бит 0) = 1. При этом на выводе VREF2P5(11) появится напряжение 2,5 В. Если используется внешний источник опорного напряжения, подайте его на вывод VREF2P5(11) и установите VREF_en = 0.
b. При использовании встроенного синусоидального генератора возбуждения запишите AFE_config.VREF_DAC_en (бит 1) = 1. При этом опорное напряжение ЦАП будет формироваться внутри микросхемы и подаваться на вывод REFDAC(64), который необходимо зашунтировать конденсатором 0,1 мкФ.
c. Запишите в поле Mode регистра AFE_config (адрес 70, биты [14:12]) требуемый режим:
- 000 — каналы преобразователя работают независимо
- 010 — каналы работают параллельно, подключены к входам IOSA1, IOCA1, EXI1, EXO1
- 011 — каналы работают параллельно, подключены к входам IOSA2, IOCA2, EXI2, EXO2
- 100 — режим сельсин (оба канала параллельно с преобразованием 3 фазы в 2)
d. При необходимости использования встроенных операционных усилителей на входах сигналов с датчиков запишите C1InputStngs.OPA_en (адрес 9, бит 8) = 1. При OPA_en = 0 сигналы подаются на АЦП непосредственно через выводы IOSA1, IOCA1.
e. Для модулированных сигналов датчика (СКВТ, сельсин, ЛРДТ): C1InputStngs.DC_carrier (бит 5) = 0, DC_correction (бит 4) = 1.
f. Убедитесь, что WR_lock (адрес 68) = 0. Если значение отлично от нуля, запишите 0 для разрешения записи в регистры.
4. Настройка сигнала возбуждения датчика (на примере канала 1)
a. При использовании внешнего сигнала возбуждения: C1ExoStngs.EXO_mode (адрес 6, биты [11:10]) = 00 (генератор выключен), C1InputStngs.Ex_source (адрес 9, биты [10:9]) = 1 (внешний сигнал с EXI1). На этом настройка возбуждения окончена, переходите к разделу 5.
b. При использовании встроенного генератора в режиме синусоидального сигнала: запишите C1ExoStngs.EXO_mode (адрес 6, биты [11:10]) = 10, Amp_code (биты [7:0]) — начальное значение амплитуды. Включите тактирование генератора: Mode_config.EXO1_en (адрес 71, бит 9) = 1.
c. Запишите в регистр C1EXInc (адрес 7) значение, соответствующее выбранной частоте возбуждения датчика (см. формулу (5) в разделе Программируемый генератор). Частота рассчитывается по формуле: f_ex = EXInc / 2^20 × f_clk.
d. Используя осциллограф, подключённый к выводу EXO1(6), убедитесь в наличии и параметрах сигнала (амплитуда, частота, отсутствие нелинейных искажений). Амплитуда сигнала должна быть ниже напряжения питания VDDEXO1 как минимум на 0,4 В. При необходимости скорректируйте Amp_code или C1EXInc.
e. Подключите датчик. Осциллографом убедитесь в параметрах сигнала возбуждения на входе датчика (амплитуда, искажения) и сигналов вторичных обмоток, подключённых к микросхеме. Убедитесь в отсутствии насыщения сердечника датчика. При необходимости скорректируйте схему усилителя-фильтра на плате.
5. Настройка входных каскадов (на примере канала 1)
a. Вращая/двигая датчик, оцените параметры сигнала на входах АЦП IOSA1(24), IOCA1(21). Максимальная амплитуда сигналов должна быть 2 В ±10 % (при VREF2P5 = 2,5 В). Средний уровень (синфазное напряжение) 1,25 В ±10 % (при VREF2P5 = 2,5 В). Убедитесь в отсутствии значительных нелинейных искажений.
b. При подключении датчиков типа ЛРДТ с последовательно соединёнными обмотками (Sensor_mode = 10) дополнительно убедитесь в совпадении фаз сигналов IOSA1, IOCA1. При необходимости скорректируйте сдвиг фаз с помощью RC-цепи в одном из каналов. Разность фаз между сигналами удобно измерять в режиме осциллографа XY — при одинаковых фазах овал сливается в линию.
c. При использовании внешнего источника напряжения возбуждения: подайте внешний сигнал на вход EXI1(50) через компаратор (см. рекомендуемую схему). Сигнал на входе EXI1 — цифровой с уровнями 0 и 1.
Убедитесь в совпадении фаз сигналов на входе EXI1 и входах IOSA1, IOCA1. Для этого установите СКВТ примерно на угол 45°, ЛРДТ — в крайнее положение. Осциллографом контролируйте соотношение фаз сигналов на входе IOSA1 и EXI1. При необходимости сдвиньте фазу сигнала на входе EXI1 с помощью RC-цепи.
- Если C1InputStngs.Ex_recovery_en = 0: необходимо точное совпадение фаз, т.к. сигнал со входа EXI1 используется для демодуляции. Сдвиг фазы в датчике зависит от температуры. Несовпадение фаз ведёт к росту шума и значительному падению точности. Данный режим не рекомендуется.
- Если Ex_recovery_en = 1: необходимо приблизительное совпадение фаз (в пределах ±45°). Сигнал EXI1 используется для определения квадранта, а демодуляция производится сигналом, выделенным из АЦП. Температурная зависимость отсутствует. Для датчиков типа ЛРДТ при Ex_recovery_en = 1 можно подтянуть вход EXI1 к уровню логического нуля или единицы.
c. При использовании встроенного генератора возбуждения на выводе EXI1(50) появляется сигнал Ex_ref, который используется внутри микросхемы для демодуляции (при Ex_recovery_en = 0) или определения квадранта (при Ex_recovery_en = 1).
Необходимо добиться совпадения фаз сигналов на выходе EXI1 и на входах IOSA1, IOCA1. Для этого установите СКВТ примерно на угол 45°, ЛРДТ — в крайнее положение. Осциллографом контролируйте соотношение фаз. С помощью регистра C1ExPhShft (адрес 5) сдвиньте фазу сигнала Ex_ref так, чтобы она совпадала с фазами IOSA1, IOCA1.
- При Ex_recovery_en = 0: необходимо точное совпадение фаз. Температурная зависимость присутствует. Режим не рекомендуется.
- При Ex_recovery_en = 1: необходимо приблизительное совпадение фаз (в пределах ±45°). Температурная зависимость отсутствует. Настройку C1ExPhShft необходимо производить и для датчиков типа ЛРДТ.
При неправильной настройке блока восстановления опорного сигнала преобразователь может давать ошибку 180°, при этом флаги ошибок будут сброшены.
5. Диагностика подключения (на примере канала 1)
a. Запишите C1Mask (адрес 12) = 0xFFFE. Запишите тип датчика в поле C1KonturStngs.Sensor_mode (адрес 13, биты [11:10]). При подключении сельсина установите AFE_config.Mode = 100. Включите АЦП и преобразователь: Mode_config.ADC_en (адрес 71, бит 14) = 1, CONV1_en (бит 10) = 1.
b. Запишите C1KonturStngs.LBW (биты [4:0]) = 14 (или по таблице полос пропускания). Запишите C1ResCntrl.Vel_resolution (биты [8:5]) = 7, Coord_resolution (биты [3:0]) = 2 (16-битная координата).
c. Двигая датчик, считывайте регистр C1Stat (адрес 30). В первую очередь убедитесь, что флаги CLIP_COS = 0, CLIP_SIN = 0, ADC_OVF = 0 всегда.
d. Флаги UIN_LOW, UIN_HIGH, CORR_OVF служат для диагностики сигналов после коррекции. При подключении СКВТ/сельсина и выполнении разделов 4 и 5 они должны быть равны 0. При изменении регистров C1KampC, C1KampS, C1ExPhShft, C1KbiasC, C1KbiasS, C1fbias убедитесь, что новые флаги ошибки не появились. Для датчиков типа ЛРДТ, чтобы снять ошибку UIN_HIGH, запишите в C1Amp_th.Amp_lth (адрес 8, биты [7:0]) новое значение (рекомендуемое 1000).
e. Вращая/двигая датчик, считывайте значения координаты C1Coord (адрес 16) и скорости C1Vel (адрес 24).
- Если координата изменяется случайным образом по всему диапазону при неподвижном датчике: выключите преобразователь (CONV1_en = 0), затем снова включите (CONV1_en = 1). Если не помогло — повторите все пункты сначала.
- Если угол отличается на 180° или ЛРДТ находится на упоре: проверьте сигнал EXI1 — вероятно, он инверсный. Либо повторите настройку раздела 5.
- В режиме сельсина при нелинейном изменении угла (например, поворот на 90° даёт изменение только на 60°): неправильно подключены обмотки сельсина.
- Для сдвига значения координаты относительно получаемой с датчика запишите значение в регистр C1Zero (адрес 11).
6. Калибровка усиления (на примере канала 1)
a. Если для схемы входных каскадов использованы компоненты с разбросом значений больше 0,01 %, создаётся заметная дополнительная ошибка преобразования. В этом случае рекомендуется калибровка разницы усиления по каналам платы. Для режима ЛРДТ с последовательно соединёнными обмотками (Sensor_mode = 10) калибровка не имеет смысла, т.к. сигналы несимметричные по своей природе.
b. Запишите C1InputStngs.Ex_recovery_en = 1, Ex_source = 1. Запишите C1KonturStngs.LBW = 16. Запишите C1ResCntrl.Coord_resolution = 2.
c. С генератора сигналов подайте на входы платы в канал синуса и косинуса абсолютно одинаковые сигналы (синусоидальные, можно попробовать меандр). Частота должна быть равной частоте сигнала возбуждения датчика. Выход синхронизации генератора подайте на вход EXI1.
d. Для режима СКВТ (Sensor_mode = 00): считайте значение угла — должно получиться примерно 45° или −45° (в зависимости от полярности на EXI1). С помощью регистров C1KampS (адрес 0), C1KampC (адрес 1) добейтесь получения кодов 8192 или 40960.
e. Для режима 5-ти проводной ЛРДТ (Sensor_mode = 01): считайте значение координаты — должно получиться примерно 0. С помощью регистров C1KampS, C1KampC добейтесь получения кода 0.
f. Верните изменённые регистры в исходное состояние.
7. Настройка флагов состояния (на примере канала 1)
a. После выбора параметров преобразователей настройте пороги флагов ошибок.
b. В регистре C1Amp_th (адрес 8) содержатся пороги Amp_hth[15:8] и Amp_lth[7:0] для флагов UIN_HIGH и UIN_LOW. Для режима СКВТ значения по умолчанию (Amp_hth = 187, Amp_lth = 62) подходят. Вместо расширения порогов предпочтительно скорректировать амплитуду сигнала на входе или в регистрах C1KampS, C1KampC.
c. В регистре C1Lock_th (адрес 10) содержится порог срабатывания для флага NLock. Существует 2 сценария использования:
- Диагностика: рекомендуется ставить C1Lock_th в большие значения.
- Переключение полосы пропускания при ускорении: подберите порог на срабатывание при минимальном ускорении, но при этом обеспечьте отсутствие срабатывания в положении покоя.
d. При включении преобразователя с малыми значениями C1Lock_th может наблюдаться повышенный шум координаты (модуляция частотой 2 × fex) и флаг NLock. Преобразователь убирает эти компоненты в процессе работы (до 30 с). Значение координаты и скорости при этом корректно. Возможные решения: а) поднять порог C1Lock_th (временно или постоянно); б) замаскировать бит NLock в C1Mask; в) установить C1InputStngs.DC_correction = 0.
e. Неиспользованные биты в регистре C1Stat должны быть замаскированы установкой 0 в соответствующий бит C1Mask (адрес 12).
f. При получении всех флагов в регистре C1Stat равными 0: Stat_main.nReady1 (адрес 75, бит 0) = 0.
g. Неиспользованные биты регистра Stat_main должны быть замаскированы в регистре Mask_Stat (адрес 66). При всех замаскированных флагах равными 0 — микросхема готова к работе.
h. Регистр Flags_delay (адрес 67) задаёт время обновления метрик и удержания флагов (единица времени 4/Fclk). Рекомендуется устанавливать значение больше периода сигнала возбуждения датчика.
8. Пример настройки для подключения СКВТ
Пример для кварцевого резонатора 10 МГц, FINT = 60 МГц, частота преобразования Fclk ≈ 500 кГц, частота возбуждения ≈ 10 кГц.
PLL_config (адрес 80) = 0x4086
- PLL_basecmp[15:14] = 01 — контроль готовности PLL
- CLK_delay[13:12] = 00 — задержка 8192 такта
- PLL_Q[11:8] = 0
- PLL_BOOST[7] = 1 — ускоренный запуск PLL
- PLL_N[6:0] = 6
ADC_config (адрес 65) = 0x0218
- FINT_divisor[11:8] = 2 → Fclk_adc = 60/3 = 20 МГц
- DELAY_cycles[7:0] = 24 → Tclk = (16+24) × 50 нс = 2000 нс, fclk = 500 кГц
INIT_conf (адрес 81) = 0x0003
- BOTP_clkdel[3:0] = 3 → Fclk_rom = 60/(3+3) = 10 МГц
AFE_config (адрес 70) = 0x0003
- Mode[14:12] = 000 — независимые каналы
- VREF_DAC_en[1] = 1 — ИОН ЦАП включен
- VREF_en[0] = 1 — ИОН АЦП включен
Mode_config (адрес 71) = 0xC6C0
- SPI_CRC_en[15] = 1 — контроль чётности SPI
- ADC_en[14] = 1 — АЦП включен
- CONV1_en[10] = 1 — преобразователь 1 включен
- EXO1_en[9] = 1 — генератор EXO1 тактируется
- Sample_src[7:6] = 11 — выборка по SPI
Mask_Stat (адрес 66) = 0x001D
- Маскируем nReady2 (преобразователь 2 не используется)
C1Mask (адрес 12) = 0xFFFE
C1ExoStngs (адрес 6) = 0x0850
C1EXInc (адрес 7) = 20972
- fex ≈ 20972 / 2^20 × 500000 ≈ 10 кГц
C1InputStngs (адрес 9) = 0x0810
- Ex_recovery_en[11] = 1 — восстановление опоры включено
- Ex_source[10:9] = 00 — от внутреннего генератора
- DC_correction[4] = 1 — коррекция синфазного напряжения
C1KonturStngs (адрес 13) = 0x000E
- Sensor_mode[11:10] = 00 — СКВТ
- LBW[4:0] = 14 — полоса пропускания
C1ResCntrl (адрес 14) = 0x00E2
- Vel_resolution[8:5] = 7 — 15-битная скорость
- Coord_resolution[3:0] = 2 — 16-битная координата
C1ExPhShft (адрес 5) — подбирается согласно методике (раздел 5).
C1Lock_th (адрес 10) = 1000 — используется для диагностики, порог повышен.
Рекомендуемая последовательность записи регистров:
- PLL_config = 0x4086
- INIT_conf = 0x0003
- Ожидание готовности тактовой частоты (NOCLK_stat.CLK_rdy = 1)
- AFE_config = 0x0003
- ADC_config = 0x0218
- Mask_Stat = 0x001D
- C1ExoStngs = 0x0850
- C1EXInc = 20972
- C1InputStngs = 0x0810
- C1KonturStngs = 0x000E
- C1ResCntrl = 0x00E2
- C1Lock_th = 1000
- C1Mask = 0xFFFE
- Mode_config = 0xC6C0 — включение последним
9. Пример настройки для подключения сельсин
Отличия от примера для СКВТ (раздел 8):
AFE_config (адрес 70) = 0x4003
- Mode[14:12] = 100 — режим сельсин
Mode_config (адрес 71) = 0xCEC0
- CONV2_en[11] = 1 — оба преобразователя включены
C2InputStngs (адрес 41) = 0x0810 — аналогично C1InputStngs
C2KonturStngs (адрес 45) = 0x000E — аналогично C1KonturStngs
C2ResCntrl (адрес 46) = 0x00E2 — аналогично C1ResCntrl
C2Mask (адрес 44) = 0xFFFE
Mask_Stat (адрес 66) = 0x001F
C1EXInc (адрес 7) — зависит от требуемой частоты возбуждения. Для сельсина с частотой возбуждения 50 Гц: EXInc = 50 × 2^20 / 1250000 ≈ 42.
Подключение обмоток: IOSA1 = sin(θ + 0°), IOCA1 = sin(θ + 120°), IOSA2 = sin(θ − 120°). Вывод IOCA2 не используется. Допускается подключение только одного сельсина.
Для сельсина с низкой частотой возбуждения (например, 50 Гц) необходимо установить большое значение LBW (узкая полоса пропускания), чтобы фильтр подавлял вторую гармонику до −100 дБ.
10. Пример настройки для подключения ЛРДТ
Отличия от примера для СКВТ (раздел 8):
ЛРДТ с подключением по 5-ти проводной схеме:
C1KonturStngs (адрес 13) = 0x040E
- Sensor_mode[11:10] = 01 — ЛРДТ 5-проводной
ЛРДТ с последовательным соединением обмоток:
C1KonturStngs (адрес 13) = 0x080E
- Sensor_mode[11:10] = 10 — ЛРДТ с последовательным соединением
Особенности настройки ЛРДТ:
- Для снятия ошибки UIN_HIGH увеличьте C1Amp_th.Amp_lth (рекомендуемое значение 1000).
- Выходная координата — знаковое значение в диапазоне от −1 до +1 (в отличие от угла 0…2π для СКВТ).
- Для ЛРДТ с последовательно соединёнными обмотками (Sensor_mode = 10) критично совпадение фаз сигналов IOSA1 и IOCA1 (см. раздел 5.b).
11. Блокировка записи и инициализация из ПЗУ
a. После завершения настройки всех регистров запишите ненулевое значение в регистр WR_lock (адрес 68). Это предотвратит случайное изменение конфигурации. При WR_lock ≠ 0 команды записи не исполняются, за исключением регистра BUS_addr (адрес 83). Для разблокировки запишите 0.
b. Для серийного производства конфигурация может быть сохранена в блок OTP-памяти (BOTP, 512×16 бит). При установке INIT_conf.OTP_init_on (бит 4) = 0 конфигурация из BOTP загружается автоматически при каждом сбросе микросхемы. Подробнее см. раздел ПЗУ.