Методика подключения и настройки
Настройка должна производиться в порядке, заданном нумерацией разделов.
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_QI(28), TP_QO(27), выход TP_FQO(26) подключён к CLK60(39)) убедитесь в наличии тактовой частоты на выходе генератора TP_FQO(26). Если частота на выходе TP_FQO отсутствует — проверьте наличие резистора 510 кОм, подключённого параллельно кварцевому резонатору (между выводами TP_QI(28) и TP_QO(27)). Отсутствие резистора может приводить к нестабильному запуску генератора или отсутствию генерации. Также проверьте подключение служебных выводов: TECH1(37) должен быть подключён к GND, TECH2(38) — к VDDD_INT(31).
-
При тактировании от внешнего активного генератора (подключённого к CLK60(39)): вывод TP_QI(28) должен быть подключён к VDDD_INT, вывод TP_QO(27) — к GND.
-
Убедитесь в наличии тактового сигнала на технологическом выводе DB(41) — по умолчанию на нём присутствует сигнал CLKMUX_OUT, поделённый на 8 (поле DB_mode регистра Mode_config = 000 после сброса). Если на выводе DB тактовый сигнал отсутствует — проверьте подключение служебных выводов TECH1(37) и TECH2(38).
2. Обнаружение микросхемы и проверка SPI
a. Убедитесь в работоспособности обмена по SPI: прочитайте регистры с известными значениями сброса и сравните с ожидаемыми:
| Адрес | Регистр | Ожидаемое значение (после сброса) |
|---|---|---|
| 0 | C1KampS | 0x0400 |
| 1 | C1KampC | 0x0400 |
| 8 | C1Amp_th | 0xBB3E |
| 9 | C1InputStngs | 0x0810 |
Если считанные значения совпадают с указанными — микросхема обнаружена, обмен по SPI функционирует корректно, переходите к разделу 3. Если значения не читаются или искажены — см. раздел 12.
Адресация нескольких микросхем на общей шине (регистры IC_addr, BUS_addr) и блокировка записи (WR_lock) — опции: адресация описана в разделе 12, блокировка записи — в разделе 14.
3. Настройка тактовой частоты микросхемы
Практическое значение частоты тактирования АЦП в существующей версии микросхемы несколько снижено по сравнению с номинальным. Пользователь должен обеспечить частоту тактирования АЦП не превышающую 2,5 МГц (Fclk_adc ≤ 2,5 МГц). Для корректной работы преобразователей HAND1 и HAND2, обрабатывающих сэмплы АЦП, частота FINT должна быть минимум в 2 раза больше частоты АЦП: FINT ≥ 2 × Fclk_adc.
Для АЦП требуется небольшая частота (Fclk_adc ≤ 2,5 МГц), а для максимизации производительности микровычислителей FINT должна составлять 50–60 МГц. Получить 2,5 МГц непосредственно из FINT 50–60 МГц нельзя — поле FINT_divisor 4-битное (максимальный коэффициент деления 16). Поэтому рекомендуется подать на вход CLK60 опорную частоту 10–30 МГц и использовать её двояко: для АЦП — поделить (бит SEL_muxclk = 1, делитель FINT_divisor работает непосредственно от CLK60), для микровычислителей — умножить до 50–60 МГц полем PLL_N. Подробно — см. Тактирование.
Пошаговая настройка (при использовании математики на CPU):
- Подайте на вход CLK60 частоту от внешнего активного генератора (не более 30 МГц) или от встроенного генератора на кварцевом резонаторе (до 20 МГц по его возможностям, см. Тактирование).
- Умножьте входную частоту до 50–60 МГц с помощью поля PLL_N. Минимальный коэффициент умножения PLL_N = 2. Следите, чтобы результат умножения не превышал 60 МГц (контроль частоты FINT — установите DB_mode =
011и измерьте частоту на выводе DB(41): она должна быть равна FINT/8). - Тактируйте АЦП от входа CLK60, а не от умноженной FINT: установите SEL_muxclk = 1. Тогда делитель работает от исходной (низкой) частоты CLK60, и поле FINT_divisor подбирается под неё: Fclk_adc = f_CLK60 / (FINT_divisor + 1) ≤ 2,5 МГц (например, FINT_divisor = 3 для 10 МГц, 7 для 20 МГц, 11 для 30 МГц). Делить саму FINT (50–60 МГц) до 2,5 МГц нельзя — для этого потребовался бы коэффициент 24, что превышает 4-битный диапазон поля FINT_divisor (максимум 16).
Блок ФАПЧ (PLL) в микросхеме разделён на две независимые части: сначала идёт умножитель частоты (коэффициент PLL_N), затем делитель (коэффициент PLL_Q + 1). Итоговая частота: FINT = f_CLK60 × PLL_N / (PLL_Q + 1). Если PLL не используется (PLL_N = 0), тактирование производится напрямую от входа CLK60.
:::
a. Запишите в регистр PLL_config (адрес 80) рассчитанные значения PLL_N[6:0], PLL_Q[11:8]. Чтобы записанные значения переопределили значения, загруженные из ПЗУ, установите бит OVERRIDE_UVAL = 1 в регистре UOTP_ctrl (адрес 82, бит 0). Для контроля готовности PLL установите PLL_basecmp[15:14] ≠ 00. Если PLL не используется, запишите PLL_N = 0 — тактирование будет производиться напрямую от входа CLK60.
b. Запишите в регистр ADC_config (адрес 65) значения FINT_divisor[11:8] и DELAY_cycles[7:0]. Частота тактирования АЦП Fclk_adc = f_adc_src / (FINT_divisor + 1) (где f_adc_src = FINT при SEL_muxclk=0 или f_CLK60 при SEL_muxclk=1) не должна превышать 2,5 МГц. Период работы преобразователя Tclk = (16 + DELAY_cycles) × Tclk_adc.
c. Убедитесь в готовности тактовой частоты: считайте регистр NOCLK_stat (адрес 72) — биты CLK_rdy[6] и CLKCOMP_rdy[7] должны быть равны 1. Также убедитесь, что AFE_config.OSC_DIS[15] = 0. Для проверки итоговой частоты FINT установите DB_mode = 011 (поле регистра Mode_config, биты [4:2]) и измерьте частоту на выводе DB(41) осциллографом — она должна быть равна FINT / 8.
При некорректной настройке тактовой частоты может неправильно работать чтение регистров SPI. В этом случае произведите внешний сброс микросхемы (вывод NRESET), либо запишите корректные значения в регистры PLL_config, AFE_config (запись в эти регистры функционирует при отсутствующей или слишком большой тактовой частоте).
4. Настройка опорных уровней аналоговой части
a. Выберите источник опорного напряжения АЦП (вывод VREF2P5(11)):
- Встроенный ИОН (2,5 В): запишите AFE_config.VREF_en (адрес 70, бит 0) = 1 — при этом на выводе VREF2P5 появится напряжение 2,5 В от встроенного источника.
- Внешний источник: подайте внешнее опорное напряжение на вывод VREF2P5, VREF_en должен быть равен 0.
b. При использовании встроенного синусоидального генератора возбуждения запишите AFE_config.VREF_DAC_en (бит 1) = 1. При этом внутренний буфер повторяет напряжение с вывода VREF2P5(11) и подаёт его на вывод REFDAC(64). Вывод REFDAC необходимо зашунтировать конденсатором 0,1 мкФ. Буфер REFDAC питается от вывода VDDEXO1(5) — без питания на VDDEXO1 напряжение на REFDAC(64) отсутствует. Осциллографом убедитесь в наличии напряжения: VREF2P5(11) ≈ 2,5 В и REFDAC(64) ≈ 2,5 В.
5. Настройка сигнала возбуждения датчика (на примере канала 1)
a. При использовании внешнего сигнала возбуждения: C1ExoStngs.EXO_mode (адрес 6, биты [11:10]) = 00 (генератор выключен), C1InputStngs.Ex_source (адрес 9, биты [10:9]) = 01 (внешний сигнал с EXI1). На этом настройка возбуждения окончена, переходите к разделу 6.
b. При использовании встроенного генератора в режиме синусоидального сигнала: запишите C1ExoStngs.EXO_mode (адрес 6, биты [11:10]) = 10, Amp_code (биты [7:0]) — начальное значение амплитуды. Включите тактирование генератора: Mode_config.EXO1_en (адрес 71, бит 9) = 1. Генератор возбуждения работает только при включённом АЦП — установите ADC_en (бит 14 регистра Mode_config) = 1: этот бит разрешает тактирование АЦП и ЦАП, без него формирование сигнала невозможно.
c. Запишите в регистр C1EXInc (адрес 7) значение, соответствующее выбранной частоте возбуждения датчика (см. формулу (5) в разделе Программируемый генератор). Частота рассчитывается по формуле: f_ex = EXInc / 2^20 × Fclk.
d. Используя осциллограф, подключённый к выводу EXO1(6), убедитесь в наличии и параметрах сигнала (амплитуда, частота, отсутствие нелинейных искажений). Амплитуда сигнала должна быть ниже напряжения питания VDDEXO1 как минимум на 0,4 В. При необходимости скорректируйте Amp_code или C1EXInc.
e. Подключите датчик. Осциллографом убедитесь в параметрах сигнала возбуждения на входе датчика (амплитуда, искажения) и сигналов вторичных обмоток, подключённых к микросхеме. Убедитесь в отсутствии насыщения сердечника датчика. При необходимости скорректируйте схему усилителя-фильтра на плате.
6. Настройка входных каскадов и проверка оцифровки сигналов АЦП (на примере канала 1)
В этом разделе настраивается аналоговый входной тракт (внешние или встроенные усилители, тип и уровни сигнала) и проверяется сам факт оцифровки — что сигналы датчика действительно преобразуются АЦП в цифровые отсчёты. Проверка выполняется прямым чтением отсчётов АЦП по SPI, без микровычислителей и без специального режима.
6.а Входные усилители: внешние или встроенные
a. Выберите способ подачи сигналов датчика на АЦП — через встроенные операционные усилители или напрямую/через внешний усилитель. За это отвечает бит C1InputStngs.OPA_en (адрес 9, бит 8):
- OPA_en = 1 — включены встроенные операционные усилители на входах сигналов датчика; сигнал на АЦП поступает с этих усилителей.
- OPA_en = 0 — встроенные усилители отключены; сигнал подаётся на АЦП непосредственно через выводы IOSA1(24), IOCA1(21) (например, при наличии внешнего усилителя-фильтра на плате).
b. Для модулированных сигналов датчика (СКВТ, сельсин, ЛРДТ) установите DC_carrier (бит 5) = 0, DC_correction (бит 4) = 1 — включена компенсация среднего уровня. Для немодулированных сигналов (DC_carrier = 1) установите DC_correction = 0.
6.б Параметры аналогового сигнала на входах АЦП
a. Вращая/двигая датчик, оцените параметры сигнала на входах АЦП IOSA1(24), IOCA1(21):
- максимальная амплитуда сигналов 2 В ±10 % (при VREF2P5 = 2,5 В);
- средний уровень (синфазное напряжение) 1,25 В ±10 % (при VREF2P5 = 2,5 В);
- отсутствие значительных нелинейных искажений.
b. При подключении датчиков типа ЛРДТ с последовательно соединёнными обмотками (Sensor_mode = 10) дополнительно убедитесь в совпадении фаз сигналов IOSA1, IOCA1; при необходимости скорректируйте сдвиг фаз RC-цепью в одном из каналов.
6.в Проверка оцифровки: чтение отсчётов АЦП по SPI
a. Запустите преобразование и убедитесь, что настроено тактирование АЦП (раздел 3). Необходимые биты:
Микровычислители для получения отсчётов не требуются.
b. Оцифрованные сигналы канала 1 считываются из регистров:
| Регистр | Адрес | Содержимое |
|---|---|---|
| C1AdcS | 18 | опорный сигнал (Ex_ref, Ex_shifted) и оцифрованный sin (Dadc_sin, ст. бит msb_arg_sin) |
| C1AdcC | 19 | оцифрованный cos (Dadc_cos, ст. бит msb_arg_cos; при включённом контроле — CRC4) |
| C2AdcS | 50 | то же, канал 2 |
| C2AdcC | 51 | то же, канал 2 |
Для получения пары (sin, cos), относящейся к одному моменту, считывайте подряд регистры 18 и 19 (для канала 2 — 50 и 51): при чтении регистра 18 происходит защёлка данных, и следующее чтение регистра 19 относится к тому же отсчёту.
c. Подтверждение факта оцифровки. Перемещая датчик, убедитесь, что значения Dadc_sin/Dadc_cos изменяются вслед за аналоговым сигналом. Дополнительно переключите OPA_en (1 ↔ 0) — цифровые отсчёты должны реагировать на это переключение, что подтверждает прохождение сигнала через выбранный входной каскад.
Для непрерывного наблюдения и захвата осциллограмм предусмотрены: буферизованный захват (запись блока отсчётов во внутреннюю память с последующим чтением по SPI) и параллельный вывод (непрерывная выдача потока отсчётов через четырёхбитную шину на выводах эмулятора энкодера ENC1_0/A/B, ENC2_0/A/B, тактируемая от SCLK).
d. Что проверять, если сигнала нет или он неверный:
- Сигнала нет вообще — проверьте включение АЦП и преобразователя (
ADC_en[14] = 1,CONV1_en[10] = 1), наличие возбуждения (раздел 5) и включение входных усилителей (OPA_en[8]). - Размах оцифрованного sin/cos меньше или больше ожидаемого — скорректируйте коэффициенты KampS/KampC (раздел 8).
- Сигнал есть, но координата нестабильна — проверьте фазу опорного сигнала (раздел 7) и DC_correction.
7. Выбор режима преобразования и настройка опорного сигнала
В этом разделе выбирается режим преобразования (СКВТ или сельсин), источник опорного сигнала возбуждения (внешний или внутренний) и выполняется фазирование опоры относительно оцифрованного сигнала; после этого подключается блок восстановления опорной частоты.
7.а Выбор режима преобразования (Mode)
Запишите в поле Mode регистра AFE_config (адрес 70, биты [14:12]) требуемый режим работы преобразователей:
- 000 — каналы преобразователя работают независимо;
- 010 — каналы работают параллельно, подключены к входам IOSA1, IOCA1, EXI1, EXO1;
- 011 — каналы работают параллельно, подключены к входам IOSA2, IOCA2, EXI2, EXO2;
- 100 — режим сельсин: оба канала параллельно с преобразованием 3 фаз в 2 (в декартову систему координат, аналогичную СКВТ).
Соответствие входов режиму — см. таблицу 5 в разделе Блок масштабирования.
7.б Источник опорного сигнала
Опорный сигнал Ex_ref, используемый для демодуляции, берётся из того же источника, что и возбуждение (раздел 5), и выбирается битами Ex_source регистра C1InputStngs (адрес 9, биты [10:9]):
- внутренний (Ex_source = 0, при встроенном генераторе возбуждения) — опорный сигнал формируется внутри микросхемы и выводится на EXI1;
- внешний (Ex_source = 01) — опора подаётся на вход EXI1(50) через компаратор (см. рекомендуемую схему); сигнал на EXI1 — цифровой с уровнями 0 и 1.
При выборе внутреннего источника (Ex_source ≠ 1) вывод EXI1 становится выходом опорного сигнала — это позволяет работать нескольким микросхемам от одной опоры.
7.в Фазирование опорного сигнала по цифровым отсчётам АЦП
a. Считывайте показания АЦП вместе с опорным сигналом. Регистр C1AdcS (адрес 18) в одном слове содержит и оцифрованный сигнал (Dadc_sin и его старший бит msb_arg_sin; в регистре C1AdcC — msb_arg_cos), и опорные сигналы Ex_ref (бит 0) и Ex_shifted (бит 14) — тем самым опора и выборка привязаны к одному моменту времени.
b. Регистром C1ExPhShft (адрес 5) сдвигайте опору так, чтобы сдвинутый опорный сигнал Ex_shifted стал почти синхронен со старшим битом сигнала АЦП — msb_arg_sin/msb_arg_cos: переходы Ex_shifted должны совпадать с переходами старшего бита (сменой знака) оцифрованного сигнала. Наблюдайте и совмещайте именно эти сигналы — Ex_shifted, msb_arg_sin, msb_arg_cos.
c. Требования к точности совпадения фаз опоры и сигнала зависят от режима демодуляции:
- При Ex_recovery_en = 1 (рекомендуется) достаточно приблизительного совпадения фаз (в пределах ±45°); температурная зависимость отсутствует, т.к. демодуляция производится сигналом, выделенным из АЦП. Для датчиков типа ЛРДТ при Ex_recovery_en = 1 вход EXI1 можно подтянуть к лог. 0 или 1.
- При Ex_recovery_en = 0 (не рекомендуется) требуется точное совпадение фаз; сдвиг фазы в датчике зависит от температуры, несовпадение ведёт к росту шума и падению точности.
7.г Блок восстановления опорной частоты и цифровая настройка фазы
a. После грубого совмещения фаз (7.в) — а можно и сразу, работе он не мешает — включите блок восстановления опорной частоты: C1InputStngs.Ex_recovery_en (бит 11) = 1. Блок сам привязывает опору к моментам перехода через нуль большего из входных сигналов (IOSA1/IOCA1) и формирует восстановленный сигнал (подробнее — Блок восстановления сигнала опорной частоты). До захвата фазы (в течение первого периода входного сигнала) в регистре C1Stat удерживается флаг RCV_NotRDY = 1, и следящий контур удерживается в сбросе.
b. Цифровая проверка фазы. Восстановленную опору и знак входного сигнала считывайте в одном цикле: бит Ex_recovered_vs (бит 14 регистра C1OutS, адрес 20) — рядом со знаком входного сигнала: старшим битом msb_arg_sin/msb_arg_cos регистра C1AdcS либо знаком arg_sin_kontur1. При правильном захвате переходы Ex_recovered_vs совпадают с переходами входного сигнала через нуль (сменой знака) — восстановленная опора синхронна со знаком сигнала АЦП.
c. Подстройка фазы регистром C1ExPhShft. Блок сравнивает исходную опору с восстановленным сигналом; если их фазы расходятся более чем на ±40°, в C1Stat выставляется флаг EX_PH_OUTRANGE. Подбирайте C1ExPhShft (адрес 5) так, чтобы EX_PH_OUTRANGE = 0 и RCV_NotRDY = 0 — это и есть цифровое подтверждение правильной фазы опоры. Если опорный сигнал отсутствует, выставляется флаг MISS_EXREF — проверьте источник опоры (раздел 7.б).
При неправильной настройке блока восстановления опорного сигнала (в частности, если EX_PH_OUTRANGE удерживается) преобразователь может давать ошибку 180°, при этом флаги ошибок будут сброшены.
8. Калибровка коэффициента усиления входных сигналов и смещения сигналов модели датчика
Точность следящего контура определяется тем, насколько входные сигналы (с АЦП) совпадают с виртуальными сигналами математической модели датчика. Калибровка выполняется в два этапа и строго в указанном порядке:
- Настройка амплитуды (размаха) — коэффициентами KampS/KampC размах входных сигналов приводится к размаху модели (4096, т.е. ±2048). На этом этапе смещение среднего игнорируется.
- Настройка смещения — коэффициентами KbiasS/KbiasC смещение сигналов модели подгоняется под смещение входных сигналов.
После обоих этапов входной и модельный сигналы должны практически совпадать: их нулевая (постоянная составляющая) и первая (основная) гармоники совпадают.
- Блок масштабирования и преобразования координат — раздел Блок масштабирования.
- Формулы расчёта виртуальных сигналов — раздел Блок модели датчика.
- Практическая настройка в графическом режиме GraphView — раздел Режим детектора.
8.а Контрольные сигналы
Все значения доступны по SPI без специального режима. Для канала 1 (для канала 2 адреса — в скобках):
| Сигнал | Регистр (адрес) | Биты | Назначение |
|---|---|---|---|
| arg_sin_kontur1 | C1OutS (20 / 52) | 13..1 | Входной SIN после коррекции усиления и смещения — входной аргумент контура |
| arg_cos_kontur1 | C1OutC (28 / 60) | 13..1 | Входной COS после коррекции — входной аргумент контура |
| VirtualSin12_1 | C1VirtualS (21 / 53) | 11..0 | Виртуальный SIN (сигнал модели) |
| VirtualCos12_1 | C1VirtualC (29 / 61) | 11..0 | Виртуальный COS (сигнал модели) |
| Ex_recovered90dgr_vs | C1OutS (20 / 52) | 0 | Восстановленная опора, сдвинутая на 90° — метка пика несущей |
Сигналы arg_* — 13-битные знаковые (диапазон ±4095), что оставляет запас под смещение при целевом размахе ±2048 без усечки. Сигналы модели Virtual* всегда имеют размах ±2048 (4096).
8.б Настройка амплитуды (размаха): KampS, KampC
a. Коэффициент усиления каждого канала равен значению регистра, делённому на 1024:
При значении по сбросу KampS = 0x0400 (1024) усиление k = 1,0. (См. также Блок масштабирования.)
b. Целевой размах входных сигналов — 4096 (±2048), т.е. размах модели. Это обеспечит совпадение первой гармоники входного сигнала и модели.
c. Для переменных (модулированных) сигналов (СКВТ, сельсин, ЛРДТ) размах определяется по огибающей за полный оборот/ход датчика. Найдите два положения вала, разнесённые на 180°, в которых огибающая максимальна: в одном сигнал достигает положительного максимума (+A), в противоположном — отрицательного (−A). Сумма этих двух амплитуд и есть размах: (эквивалентно за оборот). Такой способ измерения не зависит от смещения среднего, поэтому на этапе настройки амплитуды смещение не учитывается.
d. Измерьте размах и для каналов SIN и COS (по arg_sin_kontur1 и arg_cos_kontur1) при текущем значении коэффициентов. Если измеренный размах меньше 4096, пересчитайте коэффициенты так, чтобы после умножения сумма (размах) стала равна 4096:
При исходном значении по сбросу (1024): . Запишите новые значения в регистры KampS (адрес 0 / 32) и KampC (адрес 1 / 33).
e. Контроль результата умножения выполняйте по 13-битным значениям arg_sin_kontur1 / arg_cos_kontur1: после записи их размах должен составлять ≈ 4096 (±2048). Следите за флагами переполнения и пороговыми компараторами (см. описание регистров KampS/KampC).
f. Удобный способ снять отсчёт огибающей — выбрать момент фронта или спада сигнала Ex_recovered90dgr_vs (бит 0 регистра C1OutS). Если блок восстановления опорной частоты (Ex_recovery_en = 1) включён и синхронизирован, этот фронт совпадает с пиком несущей, где мгновенное значение модулированного сигнала максимально. Считывая arg_sin_kontur1/arg_cos_kontur1 в этот момент, вы получаете значение огибающей напрямую — это и есть значение +A (при одном положении вала) и −A (при положении, повёрнутом на 180°).
Метод по фронту Ex_recovered90dgr_vs корректен только при работающем блоке восстановления опорной частоты. Если блок выключен (Ex_recovery_en = 0), фронт не привязан к пику несущей — используйте непосредственное измерение размаха (max − min) за оборот. Подробнее — см. раздел Блок восстановления сигнала опорной частоты.
g. Графический аналог этой процедуры — Режим детектора в GraphView: там выборка входных и виртуальных сигналов уже привязана к фронту опорного сигнала, а амплитуда оценивается совмещением графиков.
Для сигналов без модуляции (DC_carrier = 1) огибающей несущей нет — размах измеряется непосредственно как разность максимума и минимума сигнала за ход датчика, метод по фронту Ex_recovered90dgr_vs не применяется.
8.в Настройка смещения сигналов модели: KbiasS, KbiasC
a. После согласования размаха (раздел 8.б) входные сигналы могут быть смещены относительно модели по постоянной составляющей: графики совпадают по амплитуде, но сдвинуты друг относительно друга по вертикали.
b. Сигналы модели (VirtualSin12_1 / VirtualCos12_1) всегда имеют размах 4096 (±2048). Коэффициенты KbiasS / KbiasC добавляют к модели смещение (см. формулы (9)–(10) в разделе Блок модели датчика), поднимая или опуская её так, чтобы постоянная составляющая модели совпала со смещением входных сигналов.
c. Для анализа считывайте одновременно входные сигналы (arg_sin_kontur1 / arg_cos_kontur1) и модельные (VirtualSin12_1 / VirtualCos12_1) и сравнивайте их средние уровни. Подбирайте KbiasS (адрес 2 / 34) и KbiasC (адрес 3 / 35) — это знаковые значения в дополнительном коде (±32767) — до совпадения постоянных составляющих.
d. Критерий окончания настройки: входной и модельный сигналы должны практически совпадать — совпадают нулевая (постоянная составляющая) и первая (основная) гармоники. Остаточная разница в высших гармониках отражает нелинейность самого датчика и аналогового тракта платы и данной калибровкой не устраняется.
8.г Порядок настройки
- Убедитесь, что АЦП выдаёт осмысленные отсчёты (раздел 6), а фаза опорного сигнала настроена (раздел 7).
- Амплитуда: измерьте размах , сигналов
arg_sin_kontur1/arg_cos_kontur1за полный оборот (методом двух положений, разнесённых на 180°, либо по фронтуEx_recovered90dgr_vs); рассчитайте и запишите KampS / KampC по формуле раздела 8.б так, чтобы размах стал ≈ 4096 (±2048). - Смещение: сравните средние уровни входных (
arg_*) и модельных (Virtual*) сигналов; подберите KbiasS / KbiasC до совпадения постоянных составляющих. - Проверьте совпадение сигналов по нулевой и первой гармоникам. При необходимости используйте Режим детектора для визуального контроля.
12. Почему микросхема не отвечает (проверка на уровне SPI)
Если микросхема не отвечает на команды SPI (значения регистров не читаются или искажены), выполните проверки физического уровня интерфейса SPI.
a. Осциллографом проверьте уровни на служебных выводах: nSEN должен быть подключён к GND (при работе с одной микросхемой на шине); вывод STNDBY должен находиться в лог. «0» (тактирование цифрового блока не выключено).
b. Проверьте кадровую структуру. При SSTR = 0 должны проходить 16 полных фронтов SCLK (каждый импульс имеет и передний, и задний фронт). Сигнал SSTR должен быть в 1 до первого фронта SCLK и снова подниматься в 1 после последнего фронта транзакции: переход SSTR 1→0 начинает транзакцию, 0→1 завершает её и сбрасывает счётчики.
c. Проверьте переключение выхода SDO. При опускании SSTR из 1 в 0 вывод SDO должен переходить из состояния высокого импеданса (Z) в активный логический уровень (0 или 1). Если SDO постоянно находится в 0, временно подтяните его к 1 через резистор 10 кОм: если после этого на SDO появится реальный сигнал — микросхема отвечает, причина была в отсутствии подтяжки/чтении; если SDO останется в 0 — микросхема не активирует выход (проверьте пункты a, b, e).
d. Убедитесь в правильности посылки на SDI. Командное слово (16 бит, передаётся младшим/старшим разрядом согласно Интерфейс SPI) имеет формат:
M₂, M₁, M₀, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, 0, P
где M₂M₁M₀ — код операции (110 — полнодуплексное чтение, 001 — полудуплексное чтение, 100 — запись), A10…A0 — адрес регистра, P — бит чётности. Микросхема защёлкивает SDI по переднему фронту SCLK и выдаёт SDO по заднем фронту SCLK.
Пример последовательности чтения регистра 8 (C1Amp_th, ожидается 0xBB3E):
- SSTR = 1.
- SSTR → 0 (начало транзакции).
- Передать на SDI командное слово: код
110+ адрес8(0b00000001000) +0+ бит чётности P, в течение кадра из 16 фронтов SCLK. - SSTR → 1 (конец транзакции, сброс счётчиков).
- Следующим кадром (SSTR 1→0, 16 фронтов SCLK) считать с SDO значение
0xBB3E.
Если бит чётности P ошибочен, микросхема игнорирует команду; на время отладки контроль чётности можно отключить (SPI_CRC_en = 0). Полное описание кодов операций и временных диаграмм — см. Интерфейс SPI.
e. Проверьте тактовую частоту. При её отсутствии или неправильной настройке чтение регистров может работать нестабильно — см. раздел 3 и примечание о сбросе/записи в PLL_config, AFE_config.
Адресация микросхем на общей шине (IC_addr)
Это опциональный механизм для работы нескольких микросхем на одной шине SPI; для одной микросхемы он не требуется.
Каждая микросхема имеет собственный адрес — регистр IC_addr (адрес 64, 8 бит). Адрес цели задаётся регистром BUS_addr (адрес 83, 8 бит). Контроллер SPI микросхемы реагирует на команды только в случаях:
- IC_addr = 0;
- IC_addr ≠ 0 и BUS_addr = IC_addr;
- IC_addr ≠ 0, BUS_addr = 0 и установлен флаг BUS0_mode.
В остальных случаях микросхема не реагирует (за исключением перезаписи BUS_addr).
Для определения IC_addr конкретной микросхемы переберите адреса от 1 до 255. Для каждого кандидата i:
- Запишите
iв регистр BUS_addr (адрес 83). - Прочитайте регистр BUS_addr (адрес 83).
- Если прочитанное значение равно
i— микросхема приняла запись, её IC_addr =i. - Если отлично от
i— адреса не совпали, переходите к следующему кандидату.
Если ни один адрес не дал совпадения — вернитесь к проверкам a–e данного раздела.
14. Блокировка записи и инициализация из ПЗУ
a. Перед настройкой убедитесь, что регистр WR_lock (адрес 68) = 0: при WR_lock ≠ 0 все команды записи блокируются (за исключением самого WR_lock и BUS_addr). После сброса WR_lock = 0; если конфигурация была ранее заблокирована — запишите 0 для разблокировки.
b. После завершения настройки всех регистров запишите ненулевое значение в регистр WR_lock (адрес 68). Это предотвратит случайное изменение конфигурации. Для разблокировки запишите 0.
c. Для серийного производства конфигурация может быть сохранена в блок OTP-памяти (BOTP, 512×16 бит). При установке INIT_conf.OTP_init_on (бит 4) = 1 инициализация из BOTP включена: конфигурация загружается автоматически при каждом сбросе микросхемы. Подробнее см. раздел ПЗУ.